--[[

isaacscript-common 82.0.1

This is the "isaacscript-common" library, which was created with the IsaacScript tool.

This library contains helper functions and features that abstract away much of the complexity in
working with the Isaac API. For more information on how to use this library, see the manual:
https://isaacscript.github.io/main/isaacscript-in-lua

DO NOT EDIT THIS FILE DIRECTLY!

The Lua code in this file is not actually the source code for the program. Rather, it was
automatically generated from higher-level TypeScript code, and might be hard to read. If you want to
understand how the code in this library works, you should read the actual TypeScript source code
directly, which is located at:
https://github.com/IsaacScript/isaacscript/tree/main/packages/isaacscript-common

Please open bug reports and pull requests on GitHub. You can also ask questions in the Discord
server: https://discord.gg/KapmKQ2gUD

Note that if you are writing your mod in TypeScript, using this file is unnecessary, as every
"isaacscript-common" feature will be automatically bundled with your mod as needed. For more
information about using TypeScript, see the website: https://isaacscript.github.io/main/features

--]]

---@diagnostic disable
-- cspell:disable


local ____modules = {}
local ____moduleCache = {}
local ____originalRequire = require
local function require(file, ...)
    if ____moduleCache[file] then
        return ____moduleCache[file].value
    end
    if ____modules[file] then
        local module = ____modules[file]
        ____moduleCache[file] = { value = (select("#", ...) > 0) and module(...) or module(file) }
        return ____moduleCache[file].value
    else
        if ____originalRequire then
            return ____originalRequire(file)
        else
            error("module '" .. file .. "' not found")
        end
    end
end
____modules = {
["lualib_bundle"] = function(...) 
local function __TS__ArrayAt(self, relativeIndex)
    local absoluteIndex = relativeIndex < 0 and #self + relativeIndex or relativeIndex
    if absoluteIndex >= 0 and absoluteIndex < #self then
        return self[absoluteIndex + 1]
    end
    return nil
end

local function __TS__ArrayIsArray(value)
    return type(value) == "table" and (value[1] ~= nil or next(value) == nil)
end

local function __TS__ArrayConcat(self, ...)
    local items = {...}
    local result = {}
    local len = 0
    for i = 1, #self do
        len = len + 1
        result[len] = self[i]
    end
    for i = 1, #items do
        local item = items[i]
        if __TS__ArrayIsArray(item) then
            for j = 1, #item do
                len = len + 1
                result[len] = item[j]
            end
        else
            len = len + 1
            result[len] = item
        end
    end
    return result
end

local __TS__Symbol, Symbol
do
    local symbolMetatable = {__tostring = function(self)
        return ("Symbol(" .. (self.description or "")) .. ")"
    end}
    function __TS__Symbol(description)
        return setmetatable({description = description}, symbolMetatable)
    end
    Symbol = {
        asyncDispose = __TS__Symbol("Symbol.asyncDispose"),
        dispose = __TS__Symbol("Symbol.dispose"),
        iterator = __TS__Symbol("Symbol.iterator"),
        hasInstance = __TS__Symbol("Symbol.hasInstance"),
        species = __TS__Symbol("Symbol.species"),
        toStringTag = __TS__Symbol("Symbol.toStringTag")
    }
end

local function __TS__ArrayEntries(array)
    local key = 0
    return {
        [Symbol.iterator] = function(self)
            return self
        end,
        next = function(self)
            local result = {done = array[key + 1] == nil, value = {key, array[key + 1]}}
            key = key + 1
            return result
        end
    }
end

local function __TS__ArrayEvery(self, callbackfn, thisArg)
    for i = 1, #self do
        if not callbackfn(thisArg, self[i], i - 1, self) then
            return false
        end
    end
    return true
end

local function __TS__ArrayFill(self, value, start, ____end)
    local relativeStart = start or 0
    local relativeEnd = ____end or #self
    if relativeStart < 0 then
        relativeStart = relativeStart + #self
    end
    if relativeEnd < 0 then
        relativeEnd = relativeEnd + #self
    end
    do
        local i = relativeStart
        while i < relativeEnd do
            self[i + 1] = value
            i = i + 1
        end
    end
    return self
end

local function __TS__ArrayFilter(self, callbackfn, thisArg)
    local result = {}
    local len = 0
    for i = 1, #self do
        if callbackfn(thisArg, self[i], i - 1, self) then
            len = len + 1
            result[len] = self[i]
        end
    end
    return result
end

local function __TS__ArrayForEach(self, callbackFn, thisArg)
    for i = 1, #self do
        callbackFn(thisArg, self[i], i - 1, self)
    end
end

local function __TS__ArrayFind(self, predicate, thisArg)
    for i = 1, #self do
        local elem = self[i]
        if predicate(thisArg, elem, i - 1, self) then
            return elem
        end
    end
    return nil
end

local function __TS__ArrayFindIndex(self, callbackFn, thisArg)
    for i = 1, #self do
        if callbackFn(thisArg, self[i], i - 1, self) then
            return i - 1
        end
    end
    return -1
end

local __TS__Iterator
do
    local function iteratorGeneratorStep(self)
        local co = self.____coroutine
        local status, value = coroutine.resume(co)
        if not status then
            error(value, 0)
        end
        if coroutine.status(co) == "dead" then
            return
        end
        return true, value
    end
    local function iteratorIteratorStep(self)
        local result = self:next()
        if result.done then
            return
        end
        return true, result.value
    end
    local function iteratorStringStep(self, index)
        index = index + 1
        if index > #self then
            return
        end
        return index, string.sub(self, index, index)
    end
    function __TS__Iterator(iterable)
        if type(iterable) == "string" then
            return iteratorStringStep, iterable, 0
        elseif iterable.____coroutine ~= nil then
            return iteratorGeneratorStep, iterable
        elseif iterable[Symbol.iterator] then
            local iterator = iterable[Symbol.iterator](iterable)
            return iteratorIteratorStep, iterator
        else
            return ipairs(iterable)
        end
    end
end

local __TS__ArrayFrom
do
    local function arrayLikeStep(self, index)
        index = index + 1
        if index > self.length then
            return
        end
        return index, self[index]
    end
    local function arrayLikeIterator(arr)
        if type(arr.length) == "number" then
            return arrayLikeStep, arr, 0
        end
        return __TS__Iterator(arr)
    end
    function __TS__ArrayFrom(arrayLike, mapFn, thisArg)
        local result = {}
        if mapFn == nil then
            for ____, v in arrayLikeIterator(arrayLike) do
                result[#result + 1] = v
            end
        else
            for i, v in arrayLikeIterator(arrayLike) do
                result[#result + 1] = mapFn(thisArg, v, i - 1)
            end
        end
        return result
    end
end

local function __TS__ArrayIncludes(self, searchElement, fromIndex)
    if fromIndex == nil then
        fromIndex = 0
    end
    local len = #self
    local k = fromIndex
    if fromIndex < 0 then
        k = len + fromIndex
    end
    if k < 0 then
        k = 0
    end
    for i = k + 1, len do
        if self[i] == searchElement then
            return true
        end
    end
    return false
end

local function __TS__ArrayIndexOf(self, searchElement, fromIndex)
    if fromIndex == nil then
        fromIndex = 0
    end
    local len = #self
    if len == 0 then
        return -1
    end
    if fromIndex >= len then
        return -1
    end
    if fromIndex < 0 then
        fromIndex = len + fromIndex
        if fromIndex < 0 then
            fromIndex = 0
        end
    end
    for i = fromIndex + 1, len do
        if self[i] == searchElement then
            return i - 1
        end
    end
    return -1
end

local function __TS__ArrayJoin(self, separator)
    if separator == nil then
        separator = ","
    end
    local parts = {}
    for i = 1, #self do
        parts[i] = tostring(self[i])
    end
    return table.concat(parts, separator)
end

local function __TS__ArrayMap(self, callbackfn, thisArg)
    local result = {}
    for i = 1, #self do
        result[i] = callbackfn(thisArg, self[i], i - 1, self)
    end
    return result
end

local function __TS__ArrayPush(self, ...)
    local items = {...}
    local len = #self
    for i = 1, #items do
        len = len + 1
        self[len] = items[i]
    end
    return len
end

local function __TS__ArrayPushArray(self, items)
    local len = #self
    for i = 1, #items do
        len = len + 1
        self[len] = items[i]
    end
    return len
end

local function __TS__CountVarargs(...)
    return select("#", ...)
end

local function __TS__ArrayReduce(self, callbackFn, ...)
    local len = #self
    local k = 0
    local accumulator = nil
    if __TS__CountVarargs(...) ~= 0 then
        accumulator = ...
    elseif len > 0 then
        accumulator = self[1]
        k = 1
    else
        error("Reduce of empty array with no initial value", 0)
    end
    for i = k + 1, len do
        accumulator = callbackFn(
            nil,
            accumulator,
            self[i],
            i - 1,
            self
        )
    end
    return accumulator
end

local function __TS__ArrayReduceRight(self, callbackFn, ...)
    local len = #self
    local k = len - 1
    local accumulator = nil
    if __TS__CountVarargs(...) ~= 0 then
        accumulator = ...
    elseif len > 0 then
        accumulator = self[k + 1]
        k = k - 1
    else
        error("Reduce of empty array with no initial value", 0)
    end
    for i = k + 1, 1, -1 do
        accumulator = callbackFn(
            nil,
            accumulator,
            self[i],
            i - 1,
            self
        )
    end
    return accumulator
end

local function __TS__ArrayReverse(self)
    local i = 1
    local j = #self
    while i < j do
        local temp = self[j]
        self[j] = self[i]
        self[i] = temp
        i = i + 1
        j = j - 1
    end
    return self
end

local function __TS__ArrayUnshift(self, ...)
    local items = {...}
    local numItemsToInsert = #items
    if numItemsToInsert == 0 then
        return #self
    end
    for i = #self, 1, -1 do
        self[i + numItemsToInsert] = self[i]
    end
    for i = 1, numItemsToInsert do
        self[i] = items[i]
    end
    return #self
end

local function __TS__ArraySort(self, compareFn)
    if compareFn ~= nil then
        table.sort(
            self,
            function(a, b) return compareFn(nil, a, b) < 0 end
        )
    else
        table.sort(self)
    end
    return self
end

local function __TS__ArraySlice(self, first, last)
    local len = #self
    first = first or 0
    if first < 0 then
        first = len + first
        if first < 0 then
            first = 0
        end
    else
        if first > len then
            first = len
        end
    end
    last = last or len
    if last < 0 then
        last = len + last
        if last < 0 then
            last = 0
        end
    else
        if last > len then
            last = len
        end
    end
    local out = {}
    first = first + 1
    last = last + 1
    local n = 1
    while first < last do
        out[n] = self[first]
        first = first + 1
        n = n + 1
    end
    return out
end

local function __TS__ArraySome(self, callbackfn, thisArg)
    for i = 1, #self do
        if callbackfn(thisArg, self[i], i - 1, self) then
            return true
        end
    end
    return false
end

local function __TS__ArraySplice(self, ...)
    local args = {...}
    local len = #self
    local actualArgumentCount = __TS__CountVarargs(...)
    local start = args[1]
    local deleteCount = args[2]
    if start < 0 then
        start = len + start
        if start < 0 then
            start = 0
        end
    elseif start > len then
        start = len
    end
    local itemCount = actualArgumentCount - 2
    if itemCount < 0 then
        itemCount = 0
    end
    local actualDeleteCount
    if actualArgumentCount == 0 then
        actualDeleteCount = 0
    elseif actualArgumentCount == 1 then
        actualDeleteCount = len - start
    else
        actualDeleteCount = deleteCount or 0
        if actualDeleteCount < 0 then
            actualDeleteCount = 0
        end
        if actualDeleteCount > len - start then
            actualDeleteCount = len - start
        end
    end
    local out = {}
    for k = 1, actualDeleteCount do
        local from = start + k
        if self[from] ~= nil then
            out[k] = self[from]
        end
    end
    if itemCount < actualDeleteCount then
        for k = start + 1, len - actualDeleteCount do
            local from = k + actualDeleteCount
            local to = k + itemCount
            if self[from] then
                self[to] = self[from]
            else
                self[to] = nil
            end
        end
        for k = len - actualDeleteCount + itemCount + 1, len do
            self[k] = nil
        end
    elseif itemCount > actualDeleteCount then
        for k = len - actualDeleteCount, start + 1, -1 do
            local from = k + actualDeleteCount
            local to = k + itemCount
            if self[from] then
                self[to] = self[from]
            else
                self[to] = nil
            end
        end
    end
    local j = start + 1
    for i = 3, actualArgumentCount do
        self[j] = args[i]
        j = j + 1
    end
    for k = #self, len - actualDeleteCount + itemCount + 1, -1 do
        self[k] = nil
    end
    return out
end

local function __TS__ArrayToObject(self)
    local object = {}
    for i = 1, #self do
        object[i - 1] = self[i]
    end
    return object
end

local function __TS__ArrayFlat(self, depth)
    if depth == nil then
        depth = 1
    end
    local result = {}
    local len = 0
    for i = 1, #self do
        local value = self[i]
        if depth > 0 and __TS__ArrayIsArray(value) then
            local toAdd
            if depth == 1 then
                toAdd = value
            else
                toAdd = __TS__ArrayFlat(value, depth - 1)
            end
            for j = 1, #toAdd do
                local val = toAdd[j]
                len = len + 1
                result[len] = val
            end
        else
            len = len + 1
            result[len] = value
        end
    end
    return result
end

local function __TS__ArrayFlatMap(self, callback, thisArg)
    local result = {}
    local len = 0
    for i = 1, #self do
        local value = callback(thisArg, self[i], i - 1, self)
        if __TS__ArrayIsArray(value) then
            for j = 1, #value do
                len = len + 1
                result[len] = value[j]
            end
        else
            len = len + 1
            result[len] = value
        end
    end
    return result
end

local function __TS__ArraySetLength(self, length)
    if length < 0 or length ~= length or length == math.huge or math.floor(length) ~= length then
        error(
            "invalid array length: " .. tostring(length),
            0
        )
    end
    for i = length + 1, #self do
        self[i] = nil
    end
    return length
end

local __TS__Unpack = table.unpack or unpack

local function __TS__ArrayToReversed(self)
    local copy = {__TS__Unpack(self)}
    __TS__ArrayReverse(copy)
    return copy
end

local function __TS__ArrayToSorted(self, compareFn)
    local copy = {__TS__Unpack(self)}
    __TS__ArraySort(copy, compareFn)
    return copy
end

local function __TS__ArrayToSpliced(self, start, deleteCount, ...)
    local copy = {__TS__Unpack(self)}
    __TS__ArraySplice(copy, start, deleteCount, ...)
    return copy
end

local function __TS__ArrayWith(self, index, value)
    local copy = {__TS__Unpack(self)}
    copy[index + 1] = value
    return copy
end

local function __TS__InstanceOf(obj, classTbl)
    if type(classTbl) ~= "table" then
        error("Right-hand side of 'instanceof' is not an object", 0)
    end
    if classTbl[Symbol.hasInstance] ~= nil then
        return not not classTbl[Symbol.hasInstance](classTbl, obj)
    end
    if type(obj) == "table" then
        local luaClass = obj.constructor
        while luaClass ~= nil do
            if luaClass == classTbl then
                return true
            end
            luaClass = luaClass.____super
        end
    end
    return false
end

local function __TS__New(target, ...)
    local instance = setmetatable({}, target.prototype)
    instance:____constructor(...)
    return instance
end

local function __TS__Class(self)
    local c = {prototype = {}}
    c.prototype.__index = c.prototype
    c.prototype.constructor = c
    return c
end

local function __TS__FunctionBind(fn, ...)
    local boundArgs = {...}
    return function(____, ...)
        local args = {...}
        __TS__ArrayUnshift(
            args,
            __TS__Unpack(boundArgs)
        )
        return fn(__TS__Unpack(args))
    end
end

local __TS__Promise
do
    local function promiseDeferred(self)
        local resolve
        local reject
        local promise = __TS__New(
            __TS__Promise,
            function(____, res, rej)
                resolve = res
                reject = rej
            end
        )
        return {promise = promise, resolve = resolve, reject = reject}
    end
    local function isPromiseLike(self, thing)
        return __TS__InstanceOf(thing, __TS__Promise)
    end
    __TS__Promise = __TS__Class()
    __TS__Promise.name = "__TS__Promise"
    function __TS__Promise.prototype.____constructor(self, executor)
        self.state = 0
        self.fulfilledCallbacks = {}
        self.rejectedCallbacks = {}
        self.finallyCallbacks = {}
        do
            local function ____catch(e)
                self:reject(e)
            end
            local ____try, ____hasReturned = pcall(function()
                executor(
                    nil,
                    __TS__FunctionBind(self.resolve, self),
                    __TS__FunctionBind(self.reject, self)
                )
            end)
            if not ____try then
                ____catch(____hasReturned)
            end
        end
    end
    function __TS__Promise.resolve(data)
        local promise = __TS__New(
            __TS__Promise,
            function()
            end
        )
        promise.state = 1
        promise.value = data
        return promise
    end
    function __TS__Promise.reject(reason)
        local promise = __TS__New(
            __TS__Promise,
            function()
            end
        )
        promise.state = 2
        promise.rejectionReason = reason
        return promise
    end
    __TS__Promise.prototype["then"] = function(self, onFulfilled, onRejected)
        local ____promiseDeferred_result_0 = promiseDeferred(nil)
        local promise = ____promiseDeferred_result_0.promise
        local resolve = ____promiseDeferred_result_0.resolve
        local reject = ____promiseDeferred_result_0.reject
        local isFulfilled = self.state == 1
        local isRejected = self.state == 2
        if onFulfilled then
            local internalCallback = self:createPromiseResolvingCallback(onFulfilled, resolve, reject)
            local ____self_fulfilledCallbacks_1 = self.fulfilledCallbacks
            ____self_fulfilledCallbacks_1[#____self_fulfilledCallbacks_1 + 1] = internalCallback
            if isFulfilled then
                internalCallback(nil, self.value)
            end
        else
            local ____self_fulfilledCallbacks_2 = self.fulfilledCallbacks
            ____self_fulfilledCallbacks_2[#____self_fulfilledCallbacks_2 + 1] = function(____, v) return resolve(nil, v) end
        end
        if onRejected then
            local internalCallback = self:createPromiseResolvingCallback(onRejected, resolve, reject)
            local ____self_rejectedCallbacks_3 = self.rejectedCallbacks
            ____self_rejectedCallbacks_3[#____self_rejectedCallbacks_3 + 1] = internalCallback
            if isRejected then
                internalCallback(nil, self.rejectionReason)
            end
        else
            local ____self_rejectedCallbacks_4 = self.rejectedCallbacks
            ____self_rejectedCallbacks_4[#____self_rejectedCallbacks_4 + 1] = function(____, err) return reject(nil, err) end
        end
        if isFulfilled then
            resolve(nil, self.value)
        end
        if isRejected then
            reject(nil, self.rejectionReason)
        end
        return promise
    end
    function __TS__Promise.prototype.catch(self, onRejected)
        return self["then"](self, nil, onRejected)
    end
    function __TS__Promise.prototype.finally(self, onFinally)
        if onFinally then
            local ____self_finallyCallbacks_5 = self.finallyCallbacks
            ____self_finallyCallbacks_5[#____self_finallyCallbacks_5 + 1] = onFinally
            if self.state ~= 0 then
                onFinally(nil)
            end
        end
        return self
    end
    function __TS__Promise.prototype.resolve(self, data)
        if __TS__InstanceOf(data, __TS__Promise) then
            data["then"](
                data,
                function(____, v) return self:resolve(v) end,
                function(____, err) return self:reject(err) end
            )
            return
        end
        if self.state == 0 then
            self.state = 1
            self.value = data
            for ____, callback in ipairs(self.fulfilledCallbacks) do
                callback(nil, data)
            end
            for ____, callback in ipairs(self.finallyCallbacks) do
                callback(nil)
            end
        end
    end
    function __TS__Promise.prototype.reject(self, reason)
        if self.state == 0 then
            self.state = 2
            self.rejectionReason = reason
            for ____, callback in ipairs(self.rejectedCallbacks) do
                callback(nil, reason)
            end
            for ____, callback in ipairs(self.finallyCallbacks) do
                callback(nil)
            end
        end
    end
    function __TS__Promise.prototype.createPromiseResolvingCallback(self, f, resolve, reject)
        return function(____, value)
            do
                local function ____catch(e)
                    reject(nil, e)
                end
                local ____try, ____hasReturned = pcall(function()
                    self:handleCallbackData(
                        f(nil, value),
                        resolve,
                        reject
                    )
                end)
                if not ____try then
                    ____catch(____hasReturned)
                end
            end
        end
    end
    function __TS__Promise.prototype.handleCallbackData(self, data, resolve, reject)
        if isPromiseLike(nil, data) then
            local nextpromise = data
            if nextpromise.state == 1 then
                resolve(nil, nextpromise.value)
            elseif nextpromise.state == 2 then
                reject(nil, nextpromise.rejectionReason)
            else
                data["then"](data, resolve, reject)
            end
        else
            resolve(nil, data)
        end
    end
end

local function __TS__AsyncAwaiter(generator)
    return __TS__New(
        __TS__Promise,
        function(____, resolve, reject)
            local adopt, fulfilled, step, resolved, asyncCoroutine
            function adopt(self, value)
                return __TS__InstanceOf(value, __TS__Promise) and value or __TS__Promise.resolve(value)
            end
            function fulfilled(self, value)
                local success, resultOrError = coroutine.resume(asyncCoroutine, value)
                if success then
                    step(nil, resultOrError)
                else
                    reject(nil, resultOrError)
                end
            end
            function step(self, result)
                if resolved then
                    return
                end
                if coroutine.status(asyncCoroutine) == "dead" then
                    resolve(nil, result)
                else
                    local ____self_0 = adopt(nil, result)
                    ____self_0["then"](____self_0, fulfilled, reject)
                end
            end
            resolved = false
            asyncCoroutine = coroutine.create(generator)
            local success, resultOrError = coroutine.resume(
                asyncCoroutine,
                function(____, v)
                    resolved = true
                    local ____self_1 = adopt(nil, v)
                    ____self_1["then"](____self_1, resolve, reject)
                end
            )
            if success then
                step(nil, resultOrError)
            else
                reject(nil, resultOrError)
            end
        end
    )
end
local function __TS__Await(thing)
    return coroutine.yield(thing)
end

local function __TS__ClassExtends(target, base)
    target.____super = base
    local staticMetatable = setmetatable({__index = base}, base)
    setmetatable(target, staticMetatable)
    local baseMetatable = getmetatable(base)
    if baseMetatable then
        if type(baseMetatable.__index) == "function" then
            staticMetatable.__index = baseMetatable.__index
        end
        if type(baseMetatable.__newindex) == "function" then
            staticMetatable.__newindex = baseMetatable.__newindex
        end
    end
    setmetatable(target.prototype, base.prototype)
    if type(base.prototype.__index) == "function" then
        target.prototype.__index = base.prototype.__index
    end
    if type(base.prototype.__newindex) == "function" then
        target.prototype.__newindex = base.prototype.__newindex
    end
    if type(base.prototype.__tostring) == "function" then
        target.prototype.__tostring = base.prototype.__tostring
    end
end

local function __TS__CloneDescriptor(____bindingPattern0)
    local value
    local writable
    local set
    local get
    local configurable
    local enumerable
    enumerable = ____bindingPattern0.enumerable
    configurable = ____bindingPattern0.configurable
    get = ____bindingPattern0.get
    set = ____bindingPattern0.set
    writable = ____bindingPattern0.writable
    value = ____bindingPattern0.value
    local descriptor = {enumerable = enumerable == true, configurable = configurable == true}
    local hasGetterOrSetter = get ~= nil or set ~= nil
    local hasValueOrWritableAttribute = writable ~= nil or value ~= nil
    if hasGetterOrSetter and hasValueOrWritableAttribute then
        error("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute.", 0)
    end
    if get or set then
        descriptor.get = get
        descriptor.set = set
    else
        descriptor.value = value
        descriptor.writable = writable == true
    end
    return descriptor
end

local function __TS__Decorate(self, originalValue, decorators, context)
    local result = originalValue
    do
        local i = #decorators
        while i >= 0 do
            local decorator = decorators[i + 1]
            if decorator ~= nil then
                local ____decorator_result_0 = decorator(self, result, context)
                if ____decorator_result_0 == nil then
                    ____decorator_result_0 = result
                end
                result = ____decorator_result_0
            end
            i = i - 1
        end
    end
    return result
end

local function __TS__ObjectAssign(target, ...)
    local sources = {...}
    for i = 1, #sources do
        local source = sources[i]
        for key in pairs(source) do
            target[key] = source[key]
        end
    end
    return target
end

local function __TS__ObjectGetOwnPropertyDescriptor(object, key)
    local metatable = getmetatable(object)
    if not metatable then
        return
    end
    if not rawget(metatable, "_descriptors") then
        return
    end
    return rawget(metatable, "_descriptors")[key]
end

local __TS__SetDescriptor
do
    local function descriptorIndex(self, key)
        local value = rawget(self, key)
        if value ~= nil then
            return value
        end
        local metatable = getmetatable(self)
        while metatable do
            local rawResult = rawget(metatable, key)
            if rawResult ~= nil then
                return rawResult
            end
            local descriptors = rawget(metatable, "_descriptors")
            if descriptors then
                local descriptor = descriptors[key]
                if descriptor ~= nil then
                    if descriptor.get then
                        return descriptor.get(self)
                    end
                    return descriptor.value
                end
            end
            metatable = getmetatable(metatable)
        end
    end
    local function descriptorNewIndex(self, key, value)
        local metatable = getmetatable(self)
        while metatable do
            local descriptors = rawget(metatable, "_descriptors")
            if descriptors then
                local descriptor = descriptors[key]
                if descriptor ~= nil then
                    if descriptor.set then
                        descriptor.set(self, value)
                    else
                        if descriptor.writable == false then
                            error(
                                ((("Cannot assign to read only property '" .. key) .. "' of object '") .. tostring(self)) .. "'",
                                0
                            )
                        end
                        descriptor.value = value
                    end
                    return
                end
            end
            metatable = getmetatable(metatable)
        end
        rawset(self, key, value)
    end
    function __TS__SetDescriptor(target, key, desc, isPrototype)
        if isPrototype == nil then
            isPrototype = false
        end
        local ____isPrototype_0
        if isPrototype then
            ____isPrototype_0 = target
        else
            ____isPrototype_0 = getmetatable(target)
        end
        local metatable = ____isPrototype_0
        if not metatable then
            metatable = {}
            setmetatable(target, metatable)
        end
        local value = rawget(target, key)
        if value ~= nil then
            rawset(target, key, nil)
        end
        if not rawget(metatable, "_descriptors") then
            metatable._descriptors = {}
        end
        metatable._descriptors[key] = __TS__CloneDescriptor(desc)
        metatable.__index = descriptorIndex
        metatable.__newindex = descriptorNewIndex
    end
end

local function __TS__DecorateLegacy(decorators, target, key, desc)
    local result = target
    do
        local i = #decorators
        while i >= 0 do
            local decorator = decorators[i + 1]
            if decorator ~= nil then
                local oldResult = result
                if key == nil then
                    result = decorator(nil, result)
                elseif desc == true then
                    local value = rawget(target, key)
                    local descriptor = __TS__ObjectGetOwnPropertyDescriptor(target, key) or ({configurable = true, writable = true, value = value})
                    local desc = decorator(nil, target, key, descriptor) or descriptor
                    local isSimpleValue = desc.configurable == true and desc.writable == true and not desc.get and not desc.set
                    if isSimpleValue then
                        rawset(target, key, desc.value)
                    else
                        __TS__SetDescriptor(
                            target,
                            key,
                            __TS__ObjectAssign({}, descriptor, desc)
                        )
                    end
                elseif desc == false then
                    result = decorator(nil, target, key, desc)
                else
                    result = decorator(nil, target, key)
                end
                result = result or oldResult
            end
            i = i - 1
        end
    end
    return result
end

local function __TS__DecorateParam(paramIndex, decorator)
    return function(____, target, key) return decorator(nil, target, key, paramIndex) end
end

local function __TS__StringIncludes(self, searchString, position)
    if not position then
        position = 1
    else
        position = position + 1
    end
    local index = string.find(self, searchString, position, true)
    return index ~= nil
end

local Error, RangeError, ReferenceError, SyntaxError, TypeError, URIError
do
    local function getErrorStack(self, constructor)
        if debug == nil then
            return nil
        end
        local level = 1
        while true do
            local info = debug.getinfo(level, "f")
            level = level + 1
            if not info then
                level = 1
                break
            elseif info.func == constructor then
                break
            end
        end
        if __TS__StringIncludes(_VERSION, "Lua 5.0") then
            return debug.traceback(("[Level " .. tostring(level)) .. "]")
        else
            return debug.traceback(nil, level)
        end
    end
    local function wrapErrorToString(self, getDescription)
        return function(self)
            local description = getDescription(self)
            local caller = debug.getinfo(3, "f")
            local isClassicLua = __TS__StringIncludes(_VERSION, "Lua 5.0") or _VERSION == "Lua 5.1"
            if isClassicLua or caller and caller.func ~= error then
                return description
            else
                return (description .. "\n") .. tostring(self.stack)
            end
        end
    end
    local function initErrorClass(self, Type, name)
        Type.name = name
        return setmetatable(
            Type,
            {__call = function(____, _self, message) return __TS__New(Type, message) end}
        )
    end
    local ____initErrorClass_1 = initErrorClass
    local ____class_0 = __TS__Class()
    ____class_0.name = ""
    function ____class_0.prototype.____constructor(self, message)
        if message == nil then
            message = ""
        end
        self.message = message
        self.name = "Error"
        self.stack = getErrorStack(nil, self.constructor.new)
        local metatable = getmetatable(self)
        if metatable and not metatable.__errorToStringPatched then
            metatable.__errorToStringPatched = true
            metatable.__tostring = wrapErrorToString(nil, metatable.__tostring)
        end
    end
    function ____class_0.prototype.__tostring(self)
        return self.message ~= "" and (self.name .. ": ") .. self.message or self.name
    end
    Error = ____initErrorClass_1(nil, ____class_0, "Error")
    local function createErrorClass(self, name)
        local ____initErrorClass_3 = initErrorClass
        local ____class_2 = __TS__Class()
        ____class_2.name = ____class_2.name
        __TS__ClassExtends(____class_2, Error)
        function ____class_2.prototype.____constructor(self, ...)
            ____class_2.____super.prototype.____constructor(self, ...)
            self.name = name
        end
        return ____initErrorClass_3(nil, ____class_2, name)
    end
    RangeError = createErrorClass(nil, "RangeError")
    ReferenceError = createErrorClass(nil, "ReferenceError")
    SyntaxError = createErrorClass(nil, "SyntaxError")
    TypeError = createErrorClass(nil, "TypeError")
    URIError = createErrorClass(nil, "URIError")
end

local function __TS__ObjectGetOwnPropertyDescriptors(object)
    local metatable = getmetatable(object)
    if not metatable then
        return {}
    end
    return rawget(metatable, "_descriptors") or ({})
end

local function __TS__Delete(target, key)
    local descriptors = __TS__ObjectGetOwnPropertyDescriptors(target)
    local descriptor = descriptors[key]
    if descriptor then
        if not descriptor.configurable then
            error(
                __TS__New(
                    TypeError,
                    ((("Cannot delete property " .. tostring(key)) .. " of ") .. tostring(target)) .. "."
                ),
                0
            )
        end
        descriptors[key] = nil
        return true
    end
    target[key] = nil
    return true
end

local function __TS__StringAccess(self, index)
    if index >= 0 and index < #self then
        return string.sub(self, index + 1, index + 1)
    end
end

local function __TS__DelegatedYield(iterable)
    if type(iterable) == "string" then
        for index = 0, #iterable - 1 do
            coroutine.yield(__TS__StringAccess(iterable, index))
        end
    elseif iterable.____coroutine ~= nil then
        local co = iterable.____coroutine
        while true do
            local status, value = coroutine.resume(co)
            if not status then
                error(value, 0)
            end
            if coroutine.status(co) == "dead" then
                return value
            else
                coroutine.yield(value)
            end
        end
    elseif iterable[Symbol.iterator] then
        local iterator = iterable[Symbol.iterator](iterable)
        while true do
            local result = iterator:next()
            if result.done then
                return result.value
            else
                coroutine.yield(result.value)
            end
        end
    else
        for ____, value in ipairs(iterable) do
            coroutine.yield(value)
        end
    end
end

local __TS__Generator
do
    local function generatorIterator(self)
        return self
    end
    local function generatorNext(self, ...)
        local co = self.____coroutine
        if coroutine.status(co) == "dead" then
            return {done = true}
        end
        local status, value = coroutine.resume(co, ...)
        if not status then
            error(value, 0)
        end
        return {
            value = value,
            done = coroutine.status(co) == "dead"
        }
    end
    function __TS__Generator(fn)
        return function(...)
            local args = {...}
            local argsLength = __TS__CountVarargs(...)
            return {
                ____coroutine = coroutine.create(function() return fn(__TS__Unpack(args, 1, argsLength)) end),
                [Symbol.iterator] = generatorIterator,
                next = generatorNext
            }
        end
    end
end

local function __TS__InstanceOfObject(value)
    local valueType = type(value)
    return valueType == "table" or valueType == "function"
end

local function __TS__LuaIteratorSpread(self, state, firstKey)
    local results = {}
    local key, value = self(state, firstKey)
    while key do
        results[#results + 1] = {key, value}
        key, value = self(state, key)
    end
    return __TS__Unpack(results)
end

local Map
do
    Map = __TS__Class()
    Map.name = "Map"
    function Map.prototype.____constructor(self, entries)
        self[Symbol.toStringTag] = "Map"
        self.items = {}
        self.size = 0
        self.nextKey = {}
        self.previousKey = {}
        if entries == nil then
            return
        end
        local iterable = entries
        if iterable[Symbol.iterator] then
            local iterator = iterable[Symbol.iterator](iterable)
            while true do
                local result = iterator:next()
                if result.done then
                    break
                end
                local value = result.value
                self:set(value[1], value[2])
            end
        else
            local array = entries
            for ____, kvp in ipairs(array) do
                self:set(kvp[1], kvp[2])
            end
        end
    end
    function Map.prototype.clear(self)
        self.items = {}
        self.nextKey = {}
        self.previousKey = {}
        self.firstKey = nil
        self.lastKey = nil
        self.size = 0
    end
    function Map.prototype.delete(self, key)
        local contains = self:has(key)
        if contains then
            self.size = self.size - 1
            local next = self.nextKey[key]
            local previous = self.previousKey[key]
            if next ~= nil and previous ~= nil then
                self.nextKey[previous] = next
                self.previousKey[next] = previous
            elseif next ~= nil then
                self.firstKey = next
                self.previousKey[next] = nil
            elseif previous ~= nil then
                self.lastKey = previous
                self.nextKey[previous] = nil
            else
                self.firstKey = nil
                self.lastKey = nil
            end
            self.nextKey[key] = nil
            self.previousKey[key] = nil
        end
        self.items[key] = nil
        return contains
    end
    function Map.prototype.forEach(self, callback)
        for ____, key in __TS__Iterator(self:keys()) do
            callback(nil, self.items[key], key, self)
        end
    end
    function Map.prototype.get(self, key)
        return self.items[key]
    end
    function Map.prototype.has(self, key)
        return self.nextKey[key] ~= nil or self.lastKey == key
    end
    function Map.prototype.set(self, key, value)
        local isNewValue = not self:has(key)
        if isNewValue then
            self.size = self.size + 1
        end
        self.items[key] = value
        if self.firstKey == nil then
            self.firstKey = key
            self.lastKey = key
        elseif isNewValue then
            self.nextKey[self.lastKey] = key
            self.previousKey[key] = self.lastKey
            self.lastKey = key
        end
        return self
    end
    Map.prototype[Symbol.iterator] = function(self)
        return self:entries()
    end
    function Map.prototype.entries(self)
        local items = self.items
        local nextKey = self.nextKey
        local key = self.firstKey
        return {
            [Symbol.iterator] = function(self)
                return self
            end,
            next = function(self)
                local result = {done = not key, value = {key, items[key]}}
                key = nextKey[key]
                return result
            end
        }
    end
    function Map.prototype.keys(self)
        local nextKey = self.nextKey
        local key = self.firstKey
        return {
            [Symbol.iterator] = function(self)
                return self
            end,
            next = function(self)
                local result = {done = not key, value = key}
                key = nextKey[key]
                return result
            end
        }
    end
    function Map.prototype.values(self)
        local items = self.items
        local nextKey = self.nextKey
        local key = self.firstKey
        return {
            [Symbol.iterator] = function(self)
                return self
            end,
            next = function(self)
                local result = {done = not key, value = items[key]}
                key = nextKey[key]
                return result
            end
        }
    end
    Map[Symbol.species] = Map
end

local __TS__Match = string.match

local __TS__MathAtan2 = math.atan2 or math.atan

local __TS__MathModf = math.modf

local function __TS__MathSign(val)
    if val > 0 then
        return 1
    elseif val < 0 then
        return -1
    end
    return 0
end

local function __TS__Number(value)
    local valueType = type(value)
    if valueType == "number" then
        return value
    elseif valueType == "string" then
        local numberValue = tonumber(value)
        if numberValue then
            return numberValue
        end
        if value == "Infinity" then
            return math.huge
        end
        if value == "-Infinity" then
            return -math.huge
        end
        local stringWithoutSpaces = string.gsub(value, "%s", "")
        if stringWithoutSpaces == "" then
            return 0
        end
        return 0 / 0
    elseif valueType == "boolean" then
        return value and 1 or 0
    else
        return 0 / 0
    end
end

local function __TS__NumberIsFinite(value)
    return type(value) == "number" and value == value and value ~= math.huge and value ~= -math.huge
end

local function __TS__NumberIsInteger(value)
    return __TS__NumberIsFinite(value) and math.floor(value) == value
end

local function __TS__NumberIsNaN(value)
    return value ~= value
end

local function __TS__StringSubstring(self, start, ____end)
    if ____end ~= ____end then
        ____end = 0
    end
    if ____end ~= nil and start > ____end then
        start, ____end = ____end, start
    end
    if start >= 0 then
        start = start + 1
    else
        start = 1
    end
    if ____end ~= nil and ____end < 0 then
        ____end = 0
    end
    return string.sub(self, start, ____end)
end

local __TS__ParseInt
do
    local parseIntBasePattern = "0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTvVwWxXyYzZ"
    function __TS__ParseInt(numberString, base)
        if base == nil then
            base = 10
            local hexMatch = __TS__Match(numberString, "^%s*-?0[xX]")
            if hexMatch ~= nil then
                base = 16
                numberString = (__TS__Match(hexMatch, "-")) and "-" .. __TS__StringSubstring(numberString, #hexMatch) or __TS__StringSubstring(numberString, #hexMatch)
            end
        end
        if base < 2 or base > 36 then
            return 0 / 0
        end
        local allowedDigits = base <= 10 and __TS__StringSubstring(parseIntBasePattern, 0, base) or __TS__StringSubstring(parseIntBasePattern, 0, 10 + 2 * (base - 10))
        local pattern = ("^%s*(-?[" .. allowedDigits) .. "]*)"
        local number = tonumber((__TS__Match(numberString, pattern)), base)
        if number == nil then
            return 0 / 0
        end
        if number >= 0 then
            return math.floor(number)
        else
            return math.ceil(number)
        end
    end
end

local function __TS__ParseFloat(numberString)
    local infinityMatch = __TS__Match(numberString, "^%s*(-?Infinity)")
    if infinityMatch ~= nil then
        return __TS__StringAccess(infinityMatch, 0) == "-" and -math.huge or math.huge
    end
    local number = tonumber((__TS__Match(numberString, "^%s*(-?%d+%.?%d*)")))
    return number or 0 / 0
end

local __TS__NumberToString
do
    local radixChars = "0123456789abcdefghijklmnopqrstuvwxyz"
    function __TS__NumberToString(self, radix)
        if radix == nil or radix == 10 or self == math.huge or self == -math.huge or self ~= self then
            return tostring(self)
        end
        radix = math.floor(radix)
        if radix < 2 or radix > 36 then
            error("toString() radix argument must be between 2 and 36", 0)
        end
        local integer, fraction = __TS__MathModf(math.abs(self))
        local result = ""
        if radix == 8 then
            result = string.format("%o", integer)
        elseif radix == 16 then
            result = string.format("%x", integer)
        else
            repeat
                do
                    result = __TS__StringAccess(radixChars, integer % radix) .. result
                    integer = math.floor(integer / radix)
                end
            until not (integer ~= 0)
        end
        if fraction ~= 0 then
            result = result .. "."
            local delta = 1e-16
            repeat
                do
                    fraction = fraction * radix
                    delta = delta * radix
                    local digit = math.floor(fraction)
                    result = result .. __TS__StringAccess(radixChars, digit)
                    fraction = fraction - digit
                end
            until not (fraction >= delta)
        end
        if self < 0 then
            result = "-" .. result
        end
        return result
    end
end

local function __TS__NumberToFixed(self, fractionDigits)
    if math.abs(self) >= 1e+21 or self ~= self then
        return tostring(self)
    end
    local f = math.floor(fractionDigits or 0)
    if f < 0 or f > 99 then
        error("toFixed() digits argument must be between 0 and 99", 0)
    end
    return string.format(
        ("%." .. tostring(f)) .. "f",
        self
    )
end

local function __TS__ObjectDefineProperty(target, key, desc)
    local luaKey = type(key) == "number" and key + 1 or key
    local value = rawget(target, luaKey)
    local hasGetterOrSetter = desc.get ~= nil or desc.set ~= nil
    local descriptor
    if hasGetterOrSetter then
        if value ~= nil then
            error(
                "Cannot redefine property: " .. tostring(key),
                0
            )
        end
        descriptor = desc
    else
        local valueExists = value ~= nil
        local ____desc_set_4 = desc.set
        local ____desc_get_5 = desc.get
        local ____temp_0
        if desc.configurable ~= nil then
            ____temp_0 = desc.configurable
        else
            ____temp_0 = valueExists
        end
        local ____temp_1
        if desc.enumerable ~= nil then
            ____temp_1 = desc.enumerable
        else
            ____temp_1 = valueExists
        end
        local ____temp_2
        if desc.writable ~= nil then
            ____temp_2 = desc.writable
        else
            ____temp_2 = valueExists
        end
        local ____temp_3
        if desc.value ~= nil then
            ____temp_3 = desc.value
        else
            ____temp_3 = value
        end
        descriptor = {
            set = ____desc_set_4,
            get = ____desc_get_5,
            configurable = ____temp_0,
            enumerable = ____temp_1,
            writable = ____temp_2,
            value = ____temp_3
        }
    end
    __TS__SetDescriptor(target, luaKey, descriptor)
    return target
end

local function __TS__ObjectEntries(obj)
    local result = {}
    local len = 0
    for key in pairs(obj) do
        len = len + 1
        result[len] = {key, obj[key]}
    end
    return result
end

local function __TS__ObjectFromEntries(entries)
    local obj = {}
    local iterable = entries
    if iterable[Symbol.iterator] then
        local iterator = iterable[Symbol.iterator](iterable)
        while true do
            local result = iterator:next()
            if result.done then
                break
            end
            local value = result.value
            obj[value[1]] = value[2]
        end
    else
        for ____, entry in ipairs(entries) do
            obj[entry[1]] = entry[2]
        end
    end
    return obj
end

local function __TS__ObjectKeys(obj)
    local result = {}
    local len = 0
    for key in pairs(obj) do
        len = len + 1
        result[len] = key
    end
    return result
end

local function __TS__ObjectRest(target, usedProperties)
    local result = {}
    for property in pairs(target) do
        if not usedProperties[property] then
            result[property] = target[property]
        end
    end
    return result
end

local function __TS__ObjectValues(obj)
    local result = {}
    local len = 0
    for key in pairs(obj) do
        len = len + 1
        result[len] = obj[key]
    end
    return result
end

local function __TS__PromiseAll(iterable)
    local results = {}
    local toResolve = {}
    local numToResolve = 0
    local i = 0
    for ____, item in __TS__Iterator(iterable) do
        if __TS__InstanceOf(item, __TS__Promise) then
            if item.state == 1 then
                results[i + 1] = item.value
            elseif item.state == 2 then
                return __TS__Promise.reject(item.rejectionReason)
            else
                numToResolve = numToResolve + 1
                toResolve[i] = item
            end
        else
            results[i + 1] = item
        end
        i = i + 1
    end
    if numToResolve == 0 then
        return __TS__Promise.resolve(results)
    end
    return __TS__New(
        __TS__Promise,
        function(____, resolve, reject)
            for index, promise in pairs(toResolve) do
                promise["then"](
                    promise,
                    function(____, data)
                        results[index + 1] = data
                        numToResolve = numToResolve - 1
                        if numToResolve == 0 then
                            resolve(nil, results)
                        end
                    end,
                    function(____, reason)
                        reject(nil, reason)
                    end
                )
            end
        end
    )
end

local function __TS__PromiseAllSettled(iterable)
    local results = {}
    local toResolve = {}
    local numToResolve = 0
    local i = 0
    for ____, item in __TS__Iterator(iterable) do
        if __TS__InstanceOf(item, __TS__Promise) then
            if item.state == 1 then
                results[i + 1] = {status = "fulfilled", value = item.value}
            elseif item.state == 2 then
                results[i + 1] = {status = "rejected", reason = item.rejectionReason}
            else
                numToResolve = numToResolve + 1
                toResolve[i] = item
            end
        else
            results[i + 1] = {status = "fulfilled", value = item}
        end
        i = i + 1
    end
    if numToResolve == 0 then
        return __TS__Promise.resolve(results)
    end
    return __TS__New(
        __TS__Promise,
        function(____, resolve)
            for index, promise in pairs(toResolve) do
                promise["then"](
                    promise,
                    function(____, data)
                        results[index + 1] = {status = "fulfilled", value = data}
                        numToResolve = numToResolve - 1
                        if numToResolve == 0 then
                            resolve(nil, results)
                        end
                    end,
                    function(____, reason)
                        results[index + 1] = {status = "rejected", reason = reason}
                        numToResolve = numToResolve - 1
                        if numToResolve == 0 then
                            resolve(nil, results)
                        end
                    end
                )
            end
        end
    )
end

local function __TS__PromiseAny(iterable)
    local rejections = {}
    local pending = {}
    for ____, item in __TS__Iterator(iterable) do
        if __TS__InstanceOf(item, __TS__Promise) then
            if item.state == 1 then
                return __TS__Promise.resolve(item.value)
            elseif item.state == 2 then
                rejections[#rejections + 1] = item.rejectionReason
            else
                pending[#pending + 1] = item
            end
        else
            return __TS__Promise.resolve(item)
        end
    end
    if #pending == 0 then
        return __TS__Promise.reject("No promises to resolve with .any()")
    end
    local numResolved = 0
    return __TS__New(
        __TS__Promise,
        function(____, resolve, reject)
            for ____, promise in ipairs(pending) do
                promise["then"](
                    promise,
                    function(____, data)
                        resolve(nil, data)
                    end,
                    function(____, reason)
                        rejections[#rejections + 1] = reason
                        numResolved = numResolved + 1
                        if numResolved == #pending then
                            reject(nil, {name = "AggregateError", message = "All Promises rejected", errors = rejections})
                        end
                    end
                )
            end
        end
    )
end

local function __TS__PromiseRace(iterable)
    local pending = {}
    for ____, item in __TS__Iterator(iterable) do
        if __TS__InstanceOf(item, __TS__Promise) then
            if item.state == 1 then
                return __TS__Promise.resolve(item.value)
            elseif item.state == 2 then
                return __TS__Promise.reject(item.rejectionReason)
            else
                pending[#pending + 1] = item
            end
        else
            return __TS__Promise.resolve(item)
        end
    end
    return __TS__New(
        __TS__Promise,
        function(____, resolve, reject)
            for ____, promise in ipairs(pending) do
                promise["then"](
                    promise,
                    function(____, value) return resolve(nil, value) end,
                    function(____, reason) return reject(nil, reason) end
                )
            end
        end
    )
end

local Set
do
    Set = __TS__Class()
    Set.name = "Set"
    function Set.prototype.____constructor(self, values)
        self[Symbol.toStringTag] = "Set"
        self.size = 0
        self.nextKey = {}
        self.previousKey = {}
        if values == nil then
            return
        end
        local iterable = values
        if iterable[Symbol.iterator] then
            local iterator = iterable[Symbol.iterator](iterable)
            while true do
                local result = iterator:next()
                if result.done then
                    break
                end
                self:add(result.value)
            end
        else
            local array = values
            for ____, value in ipairs(array) do
                self:add(value)
            end
        end
    end
    function Set.prototype.add(self, value)
        local isNewValue = not self:has(value)
        if isNewValue then
            self.size = self.size + 1
        end
        if self.firstKey == nil then
            self.firstKey = value
            self.lastKey = value
        elseif isNewValue then
            self.nextKey[self.lastKey] = value
            self.previousKey[value] = self.lastKey
            self.lastKey = value
        end
        return self
    end
    function Set.prototype.clear(self)
        self.nextKey = {}
        self.previousKey = {}
        self.firstKey = nil
        self.lastKey = nil
        self.size = 0
    end
    function Set.prototype.delete(self, value)
        local contains = self:has(value)
        if contains then
            self.size = self.size - 1
            local next = self.nextKey[value]
            local previous = self.previousKey[value]
            if next ~= nil and previous ~= nil then
                self.nextKey[previous] = next
                self.previousKey[next] = previous
            elseif next ~= nil then
                self.firstKey = next
                self.previousKey[next] = nil
            elseif previous ~= nil then
                self.lastKey = previous
                self.nextKey[previous] = nil
            else
                self.firstKey = nil
                self.lastKey = nil
            end
            self.nextKey[value] = nil
            self.previousKey[value] = nil
        end
        return contains
    end
    function Set.prototype.forEach(self, callback)
        for ____, key in __TS__Iterator(self:keys()) do
            callback(nil, key, key, self)
        end
    end
    function Set.prototype.has(self, value)
        return self.nextKey[value] ~= nil or self.lastKey == value
    end
    Set.prototype[Symbol.iterator] = function(self)
        return self:values()
    end
    function Set.prototype.entries(self)
        local nextKey = self.nextKey
        local key = self.firstKey
        return {
            [Symbol.iterator] = function(self)
                return self
            end,
            next = function(self)
                local result = {done = not key, value = {key, key}}
                key = nextKey[key]
                return result
            end
        }
    end
    function Set.prototype.keys(self)
        local nextKey = self.nextKey
        local key = self.firstKey
        return {
            [Symbol.iterator] = function(self)
                return self
            end,
            next = function(self)
                local result = {done = not key, value = key}
                key = nextKey[key]
                return result
            end
        }
    end
    function Set.prototype.values(self)
        local nextKey = self.nextKey
        local key = self.firstKey
        return {
            [Symbol.iterator] = function(self)
                return self
            end,
            next = function(self)
                local result = {done = not key, value = key}
                key = nextKey[key]
                return result
            end
        }
    end
    Set[Symbol.species] = Set
end

local function __TS__SparseArrayNew(...)
    local sparseArray = {...}
    sparseArray.sparseLength = __TS__CountVarargs(...)
    return sparseArray
end

local function __TS__SparseArrayPush(sparseArray, ...)
    local args = {...}
    local argsLen = __TS__CountVarargs(...)
    local listLen = sparseArray.sparseLength
    for i = 1, argsLen do
        sparseArray[listLen + i] = args[i]
    end
    sparseArray.sparseLength = listLen + argsLen
end

local function __TS__SparseArraySpread(sparseArray)
    local _unpack = unpack or table.unpack
    return _unpack(sparseArray, 1, sparseArray.sparseLength)
end

local WeakMap
do
    WeakMap = __TS__Class()
    WeakMap.name = "WeakMap"
    function WeakMap.prototype.____constructor(self, entries)
        self[Symbol.toStringTag] = "WeakMap"
        self.items = {}
        setmetatable(self.items, {__mode = "k"})
        if entries == nil then
            return
        end
        local iterable = entries
        if iterable[Symbol.iterator] then
            local iterator = iterable[Symbol.iterator](iterable)
            while true do
                local result = iterator:next()
                if result.done then
                    break
                end
                local value = result.value
                self.items[value[1]] = value[2]
            end
        else
            for ____, kvp in ipairs(entries) do
                self.items[kvp[1]] = kvp[2]
            end
        end
    end
    function WeakMap.prototype.delete(self, key)
        local contains = self:has(key)
        self.items[key] = nil
        return contains
    end
    function WeakMap.prototype.get(self, key)
        return self.items[key]
    end
    function WeakMap.prototype.has(self, key)
        return self.items[key] ~= nil
    end
    function WeakMap.prototype.set(self, key, value)
        self.items[key] = value
        return self
    end
    WeakMap[Symbol.species] = WeakMap
end

local WeakSet
do
    WeakSet = __TS__Class()
    WeakSet.name = "WeakSet"
    function WeakSet.prototype.____constructor(self, values)
        self[Symbol.toStringTag] = "WeakSet"
        self.items = {}
        setmetatable(self.items, {__mode = "k"})
        if values == nil then
            return
        end
        local iterable = values
        if iterable[Symbol.iterator] then
            local iterator = iterable[Symbol.iterator](iterable)
            while true do
                local result = iterator:next()
                if result.done then
                    break
                end
                self.items[result.value] = true
            end
        else
            for ____, value in ipairs(values) do
                self.items[value] = true
            end
        end
    end
    function WeakSet.prototype.add(self, value)
        self.items[value] = true
        return self
    end
    function WeakSet.prototype.delete(self, value)
        local contains = self:has(value)
        self.items[value] = nil
        return contains
    end
    function WeakSet.prototype.has(self, value)
        return self.items[value] == true
    end
    WeakSet[Symbol.species] = WeakSet
end

local function __TS__SourceMapTraceBack(fileName, sourceMap)
    _G.__TS__sourcemap = _G.__TS__sourcemap or ({})
    _G.__TS__sourcemap[fileName] = sourceMap
    if _G.__TS__originalTraceback == nil then
        local originalTraceback = debug.traceback
        _G.__TS__originalTraceback = originalTraceback
        debug.traceback = function(thread, message, level)
            local trace
            if thread == nil and message == nil and level == nil then
                trace = originalTraceback()
            elseif __TS__StringIncludes(_VERSION, "Lua 5.0") then
                trace = originalTraceback((("[Level " .. tostring(level)) .. "] ") .. tostring(message))
            else
                trace = originalTraceback(thread, message, level)
            end
            if type(trace) ~= "string" then
                return trace
            end
            local function replacer(____, file, srcFile, line)
                local fileSourceMap = _G.__TS__sourcemap[file]
                if fileSourceMap ~= nil and fileSourceMap[line] ~= nil then
                    local data = fileSourceMap[line]
                    if type(data) == "number" then
                        return (srcFile .. ":") .. tostring(data)
                    end
                    return (data.file .. ":") .. tostring(data.line)
                end
                return (file .. ":") .. line
            end
            local result = string.gsub(
                trace,
                "(%S+)%.lua:(%d+)",
                function(file, line) return replacer(nil, file .. ".lua", file .. ".ts", line) end
            )
            local function stringReplacer(____, file, line)
                local fileSourceMap = _G.__TS__sourcemap[file]
                if fileSourceMap ~= nil and fileSourceMap[line] ~= nil then
                    local chunkName = (__TS__Match(file, "%[string \"([^\"]+)\"%]"))
                    local sourceName = string.gsub(chunkName, ".lua$", ".ts")
                    local data = fileSourceMap[line]
                    if type(data) == "number" then
                        return (sourceName .. ":") .. tostring(data)
                    end
                    return (data.file .. ":") .. tostring(data.line)
                end
                return (file .. ":") .. line
            end
            result = string.gsub(
                result,
                "(%[string \"[^\"]+\"%]):(%d+)",
                function(file, line) return stringReplacer(nil, file, line) end
            )
            return result
        end
    end
end

local function __TS__Spread(iterable)
    local arr = {}
    if type(iterable) == "string" then
        for i = 0, #iterable - 1 do
            arr[i + 1] = __TS__StringAccess(iterable, i)
        end
    else
        local len = 0
        for ____, item in __TS__Iterator(iterable) do
            len = len + 1
            arr[len] = item
        end
    end
    return __TS__Unpack(arr)
end

local function __TS__StringCharAt(self, pos)
    if pos ~= pos then
        pos = 0
    end
    if pos < 0 then
        return ""
    end
    return string.sub(self, pos + 1, pos + 1)
end

local function __TS__StringCharCodeAt(self, index)
    if index ~= index then
        index = 0
    end
    if index < 0 then
        return 0 / 0
    end
    return string.byte(self, index + 1) or 0 / 0
end

local function __TS__StringEndsWith(self, searchString, endPosition)
    if endPosition == nil or endPosition > #self then
        endPosition = #self
    end
    return string.sub(self, endPosition - #searchString + 1, endPosition) == searchString
end

local function __TS__StringPadEnd(self, maxLength, fillString)
    if fillString == nil then
        fillString = " "
    end
    if maxLength ~= maxLength then
        maxLength = 0
    end
    if maxLength == -math.huge or maxLength == math.huge then
        error("Invalid string length", 0)
    end
    if #self >= maxLength or #fillString == 0 then
        return self
    end
    maxLength = maxLength - #self
    if maxLength > #fillString then
        fillString = fillString .. string.rep(
            fillString,
            math.floor(maxLength / #fillString)
        )
    end
    return self .. string.sub(
        fillString,
        1,
        math.floor(maxLength)
    )
end

local function __TS__StringPadStart(self, maxLength, fillString)
    if fillString == nil then
        fillString = " "
    end
    if maxLength ~= maxLength then
        maxLength = 0
    end
    if maxLength == -math.huge or maxLength == math.huge then
        error("Invalid string length", 0)
    end
    if #self >= maxLength or #fillString == 0 then
        return self
    end
    maxLength = maxLength - #self
    if maxLength > #fillString then
        fillString = fillString .. string.rep(
            fillString,
            math.floor(maxLength / #fillString)
        )
    end
    return string.sub(
        fillString,
        1,
        math.floor(maxLength)
    ) .. self
end

local __TS__StringReplace
do
    local sub = string.sub
    function __TS__StringReplace(source, searchValue, replaceValue)
        local startPos, endPos = string.find(source, searchValue, nil, true)
        if not startPos then
            return source
        end
        local before = sub(source, 1, startPos - 1)
        local replacement = type(replaceValue) == "string" and replaceValue or replaceValue(nil, searchValue, startPos - 1, source)
        local after = sub(source, endPos + 1)
        return (before .. replacement) .. after
    end
end

local __TS__StringSplit
do
    local sub = string.sub
    local find = string.find
    function __TS__StringSplit(source, separator, limit)
        if limit == nil then
            limit = 4294967295
        end
        if limit == 0 then
            return {}
        end
        local result = {}
        local resultIndex = 1
        if separator == nil or separator == "" then
            for i = 1, #source do
                result[resultIndex] = sub(source, i, i)
                resultIndex = resultIndex + 1
            end
        else
            local currentPos = 1
            while resultIndex <= limit do
                local startPos, endPos = find(source, separator, currentPos, true)
                if not startPos then
                    break
                end
                result[resultIndex] = sub(source, currentPos, startPos - 1)
                resultIndex = resultIndex + 1
                currentPos = endPos + 1
            end
            if resultIndex <= limit then
                result[resultIndex] = sub(source, currentPos)
            end
        end
        return result
    end
end

local __TS__StringReplaceAll
do
    local sub = string.sub
    local find = string.find
    function __TS__StringReplaceAll(source, searchValue, replaceValue)
        if type(replaceValue) == "string" then
            local concat = table.concat(
                __TS__StringSplit(source, searchValue),
                replaceValue
            )
            if #searchValue == 0 then
                return (replaceValue .. concat) .. replaceValue
            end
            return concat
        end
        local parts = {}
        local partsIndex = 1
        if #searchValue == 0 then
            parts[1] = replaceValue(nil, "", 0, source)
            partsIndex = 2
            for i = 1, #source do
                parts[partsIndex] = sub(source, i, i)
                parts[partsIndex + 1] = replaceValue(nil, "", i, source)
                partsIndex = partsIndex + 2
            end
        else
            local currentPos = 1
            while true do
                local startPos, endPos = find(source, searchValue, currentPos, true)
                if not startPos then
                    break
                end
                parts[partsIndex] = sub(source, currentPos, startPos - 1)
                parts[partsIndex + 1] = replaceValue(nil, searchValue, startPos - 1, source)
                partsIndex = partsIndex + 2
                currentPos = endPos + 1
            end
            parts[partsIndex] = sub(source, currentPos)
        end
        return table.concat(parts)
    end
end

local function __TS__StringSlice(self, start, ____end)
    if start == nil or start ~= start then
        start = 0
    end
    if ____end ~= ____end then
        ____end = 0
    end
    if start >= 0 then
        start = start + 1
    end
    if ____end ~= nil and ____end < 0 then
        ____end = ____end - 1
    end
    return string.sub(self, start, ____end)
end

local function __TS__StringStartsWith(self, searchString, position)
    if position == nil or position < 0 then
        position = 0
    end
    return string.sub(self, position + 1, #searchString + position) == searchString
end

local function __TS__StringSubstr(self, from, length)
    if from ~= from then
        from = 0
    end
    if length ~= nil then
        if length ~= length or length <= 0 then
            return ""
        end
        length = length + from
    end
    if from >= 0 then
        from = from + 1
    end
    return string.sub(self, from, length)
end

local function __TS__StringTrim(self)
    local result = string.gsub(self, "^[%s ﻿]*(.-)[%s ﻿]*$", "%1")
    return result
end

local function __TS__StringTrimEnd(self)
    local result = string.gsub(self, "[%s ﻿]*$", "")
    return result
end

local function __TS__StringTrimStart(self)
    local result = string.gsub(self, "^[%s ﻿]*", "")
    return result
end

local __TS__SymbolRegistryFor, __TS__SymbolRegistryKeyFor
do
    local symbolRegistry = {}
    function __TS__SymbolRegistryFor(key)
        if not symbolRegistry[key] then
            symbolRegistry[key] = __TS__Symbol(key)
        end
        return symbolRegistry[key]
    end
    function __TS__SymbolRegistryKeyFor(sym)
        for key in pairs(symbolRegistry) do
            if symbolRegistry[key] == sym then
                return key
            end
        end
        return nil
    end
end

local function __TS__TypeOf(value)
    local luaType = type(value)
    if luaType == "table" then
        return "object"
    elseif luaType == "nil" then
        return "undefined"
    else
        return luaType
    end
end

local function __TS__Using(self, cb, ...)
    local args = {...}
    local thrownError
    local ok, result = xpcall(
        function() return cb(
            nil,
            __TS__Unpack(args)
        ) end,
        function(err)
            thrownError = err
            return thrownError
        end
    )
    local argArray = {__TS__Unpack(args)}
    do
        local i = #argArray - 1
        while i >= 0 do
            local ____self_0 = argArray[i + 1]
            ____self_0[Symbol.dispose](____self_0)
            i = i - 1
        end
    end
    if not ok then
        error(thrownError, 0)
    end
    return result
end

local function __TS__UsingAsync(self, cb, ...)
    local args = {...}
    return __TS__AsyncAwaiter(function(____awaiter_resolve)
        local thrownError
        local ok, result = xpcall(
            function() return cb(
                nil,
                __TS__Unpack(args)
            ) end,
            function(err)
                thrownError = err
                return thrownError
            end
        )
        local argArray = {__TS__Unpack(args)}
        do
            local i = #argArray - 1
            while i >= 0 do
                if argArray[i + 1][Symbol.dispose] ~= nil then
                    local ____self_0 = argArray[i + 1]
                    ____self_0[Symbol.dispose](____self_0)
                end
                if argArray[i + 1][Symbol.asyncDispose] ~= nil then
                    local ____self_1 = argArray[i + 1]
                    __TS__Await(____self_1[Symbol.asyncDispose](____self_1))
                end
                i = i - 1
            end
        end
        if not ok then
            error(thrownError, 0)
        end
        return ____awaiter_resolve(nil, result)
    end)
end

return {
  __TS__ArrayAt = __TS__ArrayAt,
  __TS__ArrayConcat = __TS__ArrayConcat,
  __TS__ArrayEntries = __TS__ArrayEntries,
  __TS__ArrayEvery = __TS__ArrayEvery,
  __TS__ArrayFill = __TS__ArrayFill,
  __TS__ArrayFilter = __TS__ArrayFilter,
  __TS__ArrayForEach = __TS__ArrayForEach,
  __TS__ArrayFind = __TS__ArrayFind,
  __TS__ArrayFindIndex = __TS__ArrayFindIndex,
  __TS__ArrayFrom = __TS__ArrayFrom,
  __TS__ArrayIncludes = __TS__ArrayIncludes,
  __TS__ArrayIndexOf = __TS__ArrayIndexOf,
  __TS__ArrayIsArray = __TS__ArrayIsArray,
  __TS__ArrayJoin = __TS__ArrayJoin,
  __TS__ArrayMap = __TS__ArrayMap,
  __TS__ArrayPush = __TS__ArrayPush,
  __TS__ArrayPushArray = __TS__ArrayPushArray,
  __TS__ArrayReduce = __TS__ArrayReduce,
  __TS__ArrayReduceRight = __TS__ArrayReduceRight,
  __TS__ArrayReverse = __TS__ArrayReverse,
  __TS__ArrayUnshift = __TS__ArrayUnshift,
  __TS__ArraySort = __TS__ArraySort,
  __TS__ArraySlice = __TS__ArraySlice,
  __TS__ArraySome = __TS__ArraySome,
  __TS__ArraySplice = __TS__ArraySplice,
  __TS__ArrayToObject = __TS__ArrayToObject,
  __TS__ArrayFlat = __TS__ArrayFlat,
  __TS__ArrayFlatMap = __TS__ArrayFlatMap,
  __TS__ArraySetLength = __TS__ArraySetLength,
  __TS__ArrayToReversed = __TS__ArrayToReversed,
  __TS__ArrayToSorted = __TS__ArrayToSorted,
  __TS__ArrayToSpliced = __TS__ArrayToSpliced,
  __TS__ArrayWith = __TS__ArrayWith,
  __TS__AsyncAwaiter = __TS__AsyncAwaiter,
  __TS__Await = __TS__Await,
  __TS__Class = __TS__Class,
  __TS__ClassExtends = __TS__ClassExtends,
  __TS__CloneDescriptor = __TS__CloneDescriptor,
  __TS__CountVarargs = __TS__CountVarargs,
  __TS__Decorate = __TS__Decorate,
  __TS__DecorateLegacy = __TS__DecorateLegacy,
  __TS__DecorateParam = __TS__DecorateParam,
  __TS__Delete = __TS__Delete,
  __TS__DelegatedYield = __TS__DelegatedYield,
  Error = Error,
  RangeError = RangeError,
  ReferenceError = ReferenceError,
  SyntaxError = SyntaxError,
  TypeError = TypeError,
  URIError = URIError,
  __TS__FunctionBind = __TS__FunctionBind,
  __TS__Generator = __TS__Generator,
  __TS__InstanceOf = __TS__InstanceOf,
  __TS__InstanceOfObject = __TS__InstanceOfObject,
  __TS__Iterator = __TS__Iterator,
  __TS__LuaIteratorSpread = __TS__LuaIteratorSpread,
  Map = Map,
  __TS__Match = __TS__Match,
  __TS__MathAtan2 = __TS__MathAtan2,
  __TS__MathModf = __TS__MathModf,
  __TS__MathSign = __TS__MathSign,
  __TS__New = __TS__New,
  __TS__Number = __TS__Number,
  __TS__NumberIsFinite = __TS__NumberIsFinite,
  __TS__NumberIsInteger = __TS__NumberIsInteger,
  __TS__NumberIsNaN = __TS__NumberIsNaN,
  __TS__ParseInt = __TS__ParseInt,
  __TS__ParseFloat = __TS__ParseFloat,
  __TS__NumberToString = __TS__NumberToString,
  __TS__NumberToFixed = __TS__NumberToFixed,
  __TS__ObjectAssign = __TS__ObjectAssign,
  __TS__ObjectDefineProperty = __TS__ObjectDefineProperty,
  __TS__ObjectEntries = __TS__ObjectEntries,
  __TS__ObjectFromEntries = __TS__ObjectFromEntries,
  __TS__ObjectGetOwnPropertyDescriptor = __TS__ObjectGetOwnPropertyDescriptor,
  __TS__ObjectGetOwnPropertyDescriptors = __TS__ObjectGetOwnPropertyDescriptors,
  __TS__ObjectKeys = __TS__ObjectKeys,
  __TS__ObjectRest = __TS__ObjectRest,
  __TS__ObjectValues = __TS__ObjectValues,
  __TS__ParseFloat = __TS__ParseFloat,
  __TS__ParseInt = __TS__ParseInt,
  __TS__Promise = __TS__Promise,
  __TS__PromiseAll = __TS__PromiseAll,
  __TS__PromiseAllSettled = __TS__PromiseAllSettled,
  __TS__PromiseAny = __TS__PromiseAny,
  __TS__PromiseRace = __TS__PromiseRace,
  Set = Set,
  __TS__SetDescriptor = __TS__SetDescriptor,
  __TS__SparseArrayNew = __TS__SparseArrayNew,
  __TS__SparseArrayPush = __TS__SparseArrayPush,
  __TS__SparseArraySpread = __TS__SparseArraySpread,
  WeakMap = WeakMap,
  WeakSet = WeakSet,
  __TS__SourceMapTraceBack = __TS__SourceMapTraceBack,
  __TS__Spread = __TS__Spread,
  __TS__StringAccess = __TS__StringAccess,
  __TS__StringCharAt = __TS__StringCharAt,
  __TS__StringCharCodeAt = __TS__StringCharCodeAt,
  __TS__StringEndsWith = __TS__StringEndsWith,
  __TS__StringIncludes = __TS__StringIncludes,
  __TS__StringPadEnd = __TS__StringPadEnd,
  __TS__StringPadStart = __TS__StringPadStart,
  __TS__StringReplace = __TS__StringReplace,
  __TS__StringReplaceAll = __TS__StringReplaceAll,
  __TS__StringSlice = __TS__StringSlice,
  __TS__StringSplit = __TS__StringSplit,
  __TS__StringStartsWith = __TS__StringStartsWith,
  __TS__StringSubstr = __TS__StringSubstr,
  __TS__StringSubstring = __TS__StringSubstring,
  __TS__StringTrim = __TS__StringTrim,
  __TS__StringTrimEnd = __TS__StringTrimEnd,
  __TS__StringTrimStart = __TS__StringTrimStart,
  __TS__Symbol = __TS__Symbol,
  Symbol = Symbol,
  __TS__SymbolRegistryFor = __TS__SymbolRegistryFor,
  __TS__SymbolRegistryKeyFor = __TS__SymbolRegistryKeyFor,
  __TS__TypeOf = __TS__TypeOf,
  __TS__Unpack = __TS__Unpack,
  __TS__Using = __TS__Using,
  __TS__UsingAsync = __TS__UsingAsync
}
 end,
["enums.ModCallbackCustom"] = function(...) 
local ____exports = {}
--- - The Isaac API offers a lot of callbacks, but a lot of times there isn't one for the specific
--   thing that you are looking to do. So, `isaacscript-common` adds a bunch of new callbacks that
--   you can use.
-- - The extra callbacks are efficient such that no code is executed until there is one or more
--   subscriptions.
-- - You must upgrade your mod with the `upgradeMod` helper function before using a custom callback.
____exports.ModCallbackCustom = {}
____exports.ModCallbackCustom.ENTITY_TAKE_DMG_FILTER = 0
____exports.ModCallbackCustom[____exports.ModCallbackCustom.ENTITY_TAKE_DMG_FILTER] = "ENTITY_TAKE_DMG_FILTER"
____exports.ModCallbackCustom.ENTITY_TAKE_DMG_PLAYER = 1
____exports.ModCallbackCustom[____exports.ModCallbackCustom.ENTITY_TAKE_DMG_PLAYER] = "ENTITY_TAKE_DMG_PLAYER"
____exports.ModCallbackCustom.INPUT_ACTION_FILTER = 2
____exports.ModCallbackCustom[____exports.ModCallbackCustom.INPUT_ACTION_FILTER] = "INPUT_ACTION_FILTER"
____exports.ModCallbackCustom.INPUT_ACTION_PLAYER = 3
____exports.ModCallbackCustom[____exports.ModCallbackCustom.INPUT_ACTION_PLAYER] = "INPUT_ACTION_PLAYER"
____exports.ModCallbackCustom.POST_AMBUSH_FINISHED = 4
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_AMBUSH_FINISHED] = "POST_AMBUSH_FINISHED"
____exports.ModCallbackCustom.POST_AMBUSH_STARTED = 5
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_AMBUSH_STARTED] = "POST_AMBUSH_STARTED"
____exports.ModCallbackCustom.POST_BOMB_EXPLODED = 6
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_BOMB_EXPLODED] = "POST_BOMB_EXPLODED"
____exports.ModCallbackCustom.POST_BOMB_INIT_FILTER = 7
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_BOMB_INIT_FILTER] = "POST_BOMB_INIT_FILTER"
____exports.ModCallbackCustom.POST_BOMB_INIT_LATE = 8
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_BOMB_INIT_LATE] = "POST_BOMB_INIT_LATE"
____exports.ModCallbackCustom.POST_BOMB_RENDER_FILTER = 9
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_BOMB_RENDER_FILTER] = "POST_BOMB_RENDER_FILTER"
____exports.ModCallbackCustom.POST_BOMB_UPDATE_FILTER = 10
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_BOMB_UPDATE_FILTER] = "POST_BOMB_UPDATE_FILTER"
____exports.ModCallbackCustom.POST_BONE_SWING = 11
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_BONE_SWING] = "POST_BONE_SWING"
____exports.ModCallbackCustom.POST_COLLECTIBLE_EMPTY = 12
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_COLLECTIBLE_EMPTY] = "POST_COLLECTIBLE_EMPTY"
____exports.ModCallbackCustom.POST_CURSED_TELEPORT = 13
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_CURSED_TELEPORT] = "POST_CURSED_TELEPORT"
____exports.ModCallbackCustom.POST_CUSTOM_REVIVE = 14
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_CUSTOM_REVIVE] = "POST_CUSTOM_REVIVE"
____exports.ModCallbackCustom.POST_DICE_ROOM_ACTIVATED = 15
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_DICE_ROOM_ACTIVATED] = "POST_DICE_ROOM_ACTIVATED"
____exports.ModCallbackCustom.POST_DOOR_RENDER = 16
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_DOOR_RENDER] = "POST_DOOR_RENDER"
____exports.ModCallbackCustom.POST_DOOR_UPDATE = 17
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_DOOR_UPDATE] = "POST_DOOR_UPDATE"
____exports.ModCallbackCustom.POST_EFFECT_INIT_FILTER = 18
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_EFFECT_INIT_FILTER] = "POST_EFFECT_INIT_FILTER"
____exports.ModCallbackCustom.POST_EFFECT_INIT_LATE = 19
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_EFFECT_INIT_LATE] = "POST_EFFECT_INIT_LATE"
____exports.ModCallbackCustom.POST_EFFECT_RENDER_FILTER = 20
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_EFFECT_RENDER_FILTER] = "POST_EFFECT_RENDER_FILTER"
____exports.ModCallbackCustom.POST_EFFECT_STATE_CHANGED = 21
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_EFFECT_STATE_CHANGED] = "POST_EFFECT_STATE_CHANGED"
____exports.ModCallbackCustom.POST_EFFECT_UPDATE_FILTER = 22
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_EFFECT_UPDATE_FILTER] = "POST_EFFECT_UPDATE_FILTER"
____exports.ModCallbackCustom.POST_ENTITY_KILL_FILTER = 23
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ENTITY_KILL_FILTER] = "POST_ENTITY_KILL_FILTER"
____exports.ModCallbackCustom.POST_ESAU_JR = 24
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ESAU_JR] = "POST_ESAU_JR"
____exports.ModCallbackCustom.POST_FAMILIAR_INIT_FILTER = 25
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FAMILIAR_INIT_FILTER] = "POST_FAMILIAR_INIT_FILTER"
____exports.ModCallbackCustom.POST_FAMILIAR_INIT_LATE = 26
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FAMILIAR_INIT_LATE] = "POST_FAMILIAR_INIT_LATE"
____exports.ModCallbackCustom.POST_FAMILIAR_RENDER_FILTER = 27
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FAMILIAR_RENDER_FILTER] = "POST_FAMILIAR_RENDER_FILTER"
____exports.ModCallbackCustom.POST_FAMILIAR_STATE_CHANGED = 28
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FAMILIAR_STATE_CHANGED] = "POST_FAMILIAR_STATE_CHANGED"
____exports.ModCallbackCustom.POST_FAMILIAR_UPDATE_FILTER = 29
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FAMILIAR_UPDATE_FILTER] = "POST_FAMILIAR_UPDATE_FILTER"
____exports.ModCallbackCustom.POST_FIRST_ESAU_JR = 30
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FIRST_ESAU_JR] = "POST_FIRST_ESAU_JR"
____exports.ModCallbackCustom.POST_FIRST_FLIP = 31
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FIRST_FLIP] = "POST_FIRST_FLIP"
____exports.ModCallbackCustom.POST_FLIP = 32
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FLIP] = "POST_FLIP"
____exports.ModCallbackCustom.POST_GAME_END_FILTER = 33
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GAME_END_FILTER] = "POST_GAME_END_FILTER"
____exports.ModCallbackCustom.POST_GAME_STARTED_REORDERED = 34
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GAME_STARTED_REORDERED] = "POST_GAME_STARTED_REORDERED"
____exports.ModCallbackCustom.POST_GAME_STARTED_REORDERED_LAST = 35
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GAME_STARTED_REORDERED_LAST] = "POST_GAME_STARTED_REORDERED_LAST"
____exports.ModCallbackCustom.POST_GREED_MODE_WAVE = 36
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GREED_MODE_WAVE] = "POST_GREED_MODE_WAVE"
____exports.ModCallbackCustom.POST_GRID_ENTITY_BROKEN = 37
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_BROKEN] = "POST_GRID_ENTITY_BROKEN"
____exports.ModCallbackCustom.POST_GRID_ENTITY_COLLISION = 38
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_COLLISION] = "POST_GRID_ENTITY_COLLISION"
____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_BROKEN = 39
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_BROKEN] = "POST_GRID_ENTITY_CUSTOM_BROKEN"
____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_COLLISION = 40
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_COLLISION] = "POST_GRID_ENTITY_CUSTOM_COLLISION"
____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_INIT = 41
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_INIT] = "POST_GRID_ENTITY_CUSTOM_INIT"
____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_REMOVE = 42
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_REMOVE] = "POST_GRID_ENTITY_CUSTOM_REMOVE"
____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_RENDER = 43
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_RENDER] = "POST_GRID_ENTITY_CUSTOM_RENDER"
____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_STATE_CHANGED = 44
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_STATE_CHANGED] = "POST_GRID_ENTITY_CUSTOM_STATE_CHANGED"
____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_UPDATE = 45
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_UPDATE] = "POST_GRID_ENTITY_CUSTOM_UPDATE"
____exports.ModCallbackCustom.POST_GRID_ENTITY_INIT = 46
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_INIT] = "POST_GRID_ENTITY_INIT"
____exports.ModCallbackCustom.POST_GRID_ENTITY_REMOVE = 47
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_REMOVE] = "POST_GRID_ENTITY_REMOVE"
____exports.ModCallbackCustom.POST_GRID_ENTITY_RENDER = 48
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_RENDER] = "POST_GRID_ENTITY_RENDER"
____exports.ModCallbackCustom.POST_GRID_ENTITY_STATE_CHANGED = 49
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_STATE_CHANGED] = "POST_GRID_ENTITY_STATE_CHANGED"
____exports.ModCallbackCustom.POST_GRID_ENTITY_UPDATE = 50
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_UPDATE] = "POST_GRID_ENTITY_UPDATE"
____exports.ModCallbackCustom.POST_HOLY_MANTLE_REMOVED = 51
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_HOLY_MANTLE_REMOVED] = "POST_HOLY_MANTLE_REMOVED"
____exports.ModCallbackCustom.POST_ITEM_DISCHARGE = 52
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ITEM_DISCHARGE] = "POST_ITEM_DISCHARGE"
____exports.ModCallbackCustom.POST_ITEM_PICKUP = 53
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ITEM_PICKUP] = "POST_ITEM_PICKUP"
____exports.ModCallbackCustom.POST_KEYBOARD_CHANGED = 54
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_KEYBOARD_CHANGED] = "POST_KEYBOARD_CHANGED"
____exports.ModCallbackCustom.POST_KNIFE_INIT_FILTER = 55
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_KNIFE_INIT_FILTER] = "POST_KNIFE_INIT_FILTER"
____exports.ModCallbackCustom.POST_KNIFE_INIT_LATE = 56
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_KNIFE_INIT_LATE] = "POST_KNIFE_INIT_LATE"
____exports.ModCallbackCustom.POST_KNIFE_RENDER_FILTER = 57
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_KNIFE_RENDER_FILTER] = "POST_KNIFE_RENDER_FILTER"
____exports.ModCallbackCustom.POST_KNIFE_UPDATE_FILTER = 58
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_KNIFE_UPDATE_FILTER] = "POST_KNIFE_UPDATE_FILTER"
____exports.ModCallbackCustom.POST_LASER_INIT_FILTER = 59
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_LASER_INIT_FILTER] = "POST_LASER_INIT_FILTER"
____exports.ModCallbackCustom.POST_LASER_INIT_LATE = 60
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_LASER_INIT_LATE] = "POST_LASER_INIT_LATE"
____exports.ModCallbackCustom.POST_LASER_RENDER_FILTER = 61
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_LASER_RENDER_FILTER] = "POST_LASER_RENDER_FILTER"
____exports.ModCallbackCustom.POST_LASER_UPDATE_FILTER = 62
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_LASER_UPDATE_FILTER] = "POST_LASER_UPDATE_FILTER"
____exports.ModCallbackCustom.POST_NEW_LEVEL_REORDERED = 63
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NEW_LEVEL_REORDERED] = "POST_NEW_LEVEL_REORDERED"
____exports.ModCallbackCustom.POST_NEW_ROOM_EARLY = 64
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NEW_ROOM_EARLY] = "POST_NEW_ROOM_EARLY"
____exports.ModCallbackCustom.POST_NEW_ROOM_REORDERED = 65
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NEW_ROOM_REORDERED] = "POST_NEW_ROOM_REORDERED"
____exports.ModCallbackCustom.POST_NPC_DEATH_FILTER = 66
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NPC_DEATH_FILTER] = "POST_NPC_DEATH_FILTER"
____exports.ModCallbackCustom.POST_NPC_INIT_FILTER = 67
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NPC_INIT_FILTER] = "POST_NPC_INIT_FILTER"
____exports.ModCallbackCustom.POST_NPC_INIT_LATE = 68
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NPC_INIT_LATE] = "POST_NPC_INIT_LATE"
____exports.ModCallbackCustom.POST_NPC_RENDER_FILTER = 69
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NPC_RENDER_FILTER] = "POST_NPC_RENDER_FILTER"
____exports.ModCallbackCustom.POST_NPC_STATE_CHANGED = 70
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NPC_STATE_CHANGED] = "POST_NPC_STATE_CHANGED"
____exports.ModCallbackCustom.POST_NPC_UPDATE_FILTER = 71
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NPC_UPDATE_FILTER] = "POST_NPC_UPDATE_FILTER"
____exports.ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED = 72
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED] = "POST_PEFFECT_UPDATE_REORDERED"
____exports.ModCallbackCustom.POST_PICKUP_CHANGED = 73
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_CHANGED] = "POST_PICKUP_CHANGED"
____exports.ModCallbackCustom.POST_PICKUP_COLLECT = 74
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_COLLECT] = "POST_PICKUP_COLLECT"
____exports.ModCallbackCustom.POST_PICKUP_INIT_FILTER = 75
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_INIT_FILTER] = "POST_PICKUP_INIT_FILTER"
____exports.ModCallbackCustom.POST_PICKUP_INIT_FIRST = 76
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_INIT_FIRST] = "POST_PICKUP_INIT_FIRST"
____exports.ModCallbackCustom.POST_PICKUP_INIT_LATE = 77
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_INIT_LATE] = "POST_PICKUP_INIT_LATE"
____exports.ModCallbackCustom.POST_PICKUP_RENDER_FILTER = 78
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_RENDER_FILTER] = "POST_PICKUP_RENDER_FILTER"
____exports.ModCallbackCustom.POST_PICKUP_SELECTION_FILTER = 79
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_SELECTION_FILTER] = "POST_PICKUP_SELECTION_FILTER"
____exports.ModCallbackCustom.POST_PICKUP_STATE_CHANGED = 80
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_STATE_CHANGED] = "POST_PICKUP_STATE_CHANGED"
____exports.ModCallbackCustom.POST_PICKUP_UPDATE_FILTER = 81
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_UPDATE_FILTER] = "POST_PICKUP_UPDATE_FILTER"
____exports.ModCallbackCustom.POST_PIT_RENDER = 82
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PIT_RENDER] = "POST_PIT_RENDER"
____exports.ModCallbackCustom.POST_PIT_UPDATE = 83
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PIT_UPDATE] = "POST_PIT_UPDATE"
____exports.ModCallbackCustom.POST_PLAYER_CHANGE_HEALTH = 84
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_CHANGE_HEALTH] = "POST_PLAYER_CHANGE_HEALTH"
____exports.ModCallbackCustom.POST_PLAYER_CHANGE_STAT = 85
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_CHANGE_STAT] = "POST_PLAYER_CHANGE_STAT"
____exports.ModCallbackCustom.POST_PLAYER_CHANGE_TYPE = 86
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_CHANGE_TYPE] = "POST_PLAYER_CHANGE_TYPE"
____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED = 87
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED] = "POST_PLAYER_COLLECTIBLE_ADDED"
____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED = 88
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED] = "POST_PLAYER_COLLECTIBLE_REMOVED"
____exports.ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE = 89
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE] = "POST_PLAYER_FATAL_DAMAGE"
____exports.ModCallbackCustom.POST_PLAYER_INIT_FIRST = 90
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_INIT_FIRST] = "POST_PLAYER_INIT_FIRST"
____exports.ModCallbackCustom.POST_PLAYER_INIT_LATE = 91
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_INIT_LATE] = "POST_PLAYER_INIT_LATE"
____exports.ModCallbackCustom.POST_PLAYER_RENDER_REORDERED = 92
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_RENDER_REORDERED] = "POST_PLAYER_RENDER_REORDERED"
____exports.ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED = 93
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED] = "POST_PLAYER_UPDATE_REORDERED"
____exports.ModCallbackCustom.POST_POOP_RENDER = 94
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_POOP_RENDER] = "POST_POOP_RENDER"
____exports.ModCallbackCustom.POST_POOP_UPDATE = 95
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_POOP_UPDATE] = "POST_POOP_UPDATE"
____exports.ModCallbackCustom.POST_PRESSURE_PLATE_RENDER = 96
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PRESSURE_PLATE_RENDER] = "POST_PRESSURE_PLATE_RENDER"
____exports.ModCallbackCustom.POST_PRESSURE_PLATE_UPDATE = 97
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PRESSURE_PLATE_UPDATE] = "POST_PRESSURE_PLATE_UPDATE"
____exports.ModCallbackCustom.POST_PROJECTILE_INIT_FILTER = 98
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PROJECTILE_INIT_FILTER] = "POST_PROJECTILE_INIT_FILTER"
____exports.ModCallbackCustom.POST_PROJECTILE_INIT_LATE = 99
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PROJECTILE_INIT_LATE] = "POST_PROJECTILE_INIT_LATE"
____exports.ModCallbackCustom.POST_PROJECTILE_KILL = 100
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PROJECTILE_KILL] = "POST_PROJECTILE_KILL"
____exports.ModCallbackCustom.POST_PROJECTILE_RENDER_FILTER = 101
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PROJECTILE_RENDER_FILTER] = "POST_PROJECTILE_RENDER_FILTER"
____exports.ModCallbackCustom.POST_PROJECTILE_UPDATE_FILTER = 102
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PROJECTILE_UPDATE_FILTER] = "POST_PROJECTILE_UPDATE_FILTER"
____exports.ModCallbackCustom.POST_PURCHASE = 103
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PURCHASE] = "POST_PURCHASE"
____exports.ModCallbackCustom.POST_ROCK_RENDER = 104
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ROCK_RENDER] = "POST_ROCK_RENDER"
____exports.ModCallbackCustom.POST_ROCK_UPDATE = 105
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ROCK_UPDATE] = "POST_ROCK_UPDATE"
____exports.ModCallbackCustom.POST_ROOM_CLEAR_CHANGED = 106
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ROOM_CLEAR_CHANGED] = "POST_ROOM_CLEAR_CHANGED"
____exports.ModCallbackCustom.POST_SACRIFICE = 107
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SACRIFICE] = "POST_SACRIFICE"
____exports.ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED = 108
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED] = "POST_SLOT_ANIMATION_CHANGED"
____exports.ModCallbackCustom.POST_SLOT_COLLISION = 109
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_COLLISION] = "POST_SLOT_COLLISION"
____exports.ModCallbackCustom.POST_SLOT_DESTROYED = 110
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_DESTROYED] = "POST_SLOT_DESTROYED"
____exports.ModCallbackCustom.POST_SLOT_INIT = 111
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_INIT] = "POST_SLOT_INIT"
____exports.ModCallbackCustom.POST_SLOT_RENDER = 112
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_RENDER] = "POST_SLOT_RENDER"
____exports.ModCallbackCustom.POST_SLOT_UPDATE = 113
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_UPDATE] = "POST_SLOT_UPDATE"
____exports.ModCallbackCustom.POST_SPIKES_RENDER = 114
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SPIKES_RENDER] = "POST_SPIKES_RENDER"
____exports.ModCallbackCustom.POST_SPIKES_UPDATE = 115
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SPIKES_UPDATE] = "POST_SPIKES_UPDATE"
____exports.ModCallbackCustom.POST_TEAR_INIT_FILTER = 116
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_INIT_FILTER] = "POST_TEAR_INIT_FILTER"
____exports.ModCallbackCustom.POST_TEAR_INIT_LATE = 117
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_INIT_LATE] = "POST_TEAR_INIT_LATE"
____exports.ModCallbackCustom.POST_TEAR_INIT_VERY_LATE = 118
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_INIT_VERY_LATE] = "POST_TEAR_INIT_VERY_LATE"
____exports.ModCallbackCustom.POST_TEAR_KILL = 119
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_KILL] = "POST_TEAR_KILL"
____exports.ModCallbackCustom.POST_TEAR_RENDER_FILTER = 120
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_RENDER_FILTER] = "POST_TEAR_RENDER_FILTER"
____exports.ModCallbackCustom.POST_TEAR_UPDATE_FILTER = 121
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_UPDATE_FILTER] = "POST_TEAR_UPDATE_FILTER"
____exports.ModCallbackCustom.POST_TNT_RENDER = 122
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TNT_RENDER] = "POST_TNT_RENDER"
____exports.ModCallbackCustom.POST_TNT_UPDATE = 123
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TNT_UPDATE] = "POST_TNT_UPDATE"
____exports.ModCallbackCustom.POST_TRANSFORMATION = 124
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TRANSFORMATION] = "POST_TRANSFORMATION"
____exports.ModCallbackCustom.POST_TRINKET_BREAK = 125
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TRINKET_BREAK] = "POST_TRINKET_BREAK"
____exports.ModCallbackCustom.POST_USE_PILL_FILTER = 126
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_USE_PILL_FILTER] = "POST_USE_PILL_FILTER"
____exports.ModCallbackCustom.PRE_BERSERK_DEATH = 127
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_BERSERK_DEATH] = "PRE_BERSERK_DEATH"
____exports.ModCallbackCustom.PRE_BOMB_COLLISION_FILTER = 128
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_BOMB_COLLISION_FILTER] = "PRE_BOMB_COLLISION_FILTER"
____exports.ModCallbackCustom.PRE_CUSTOM_REVIVE = 129
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_CUSTOM_REVIVE] = "PRE_CUSTOM_REVIVE"
____exports.ModCallbackCustom.PRE_ENTITY_SPAWN_FILTER = 130
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_ENTITY_SPAWN_FILTER] = "PRE_ENTITY_SPAWN_FILTER"
____exports.ModCallbackCustom.PRE_FAMILIAR_COLLISION_FILTER = 131
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_FAMILIAR_COLLISION_FILTER] = "PRE_FAMILIAR_COLLISION_FILTER"
____exports.ModCallbackCustom.PRE_GET_PEDESTAL = 132
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_GET_PEDESTAL] = "PRE_GET_PEDESTAL"
____exports.ModCallbackCustom.PRE_ITEM_PICKUP = 133
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_ITEM_PICKUP] = "PRE_ITEM_PICKUP"
____exports.ModCallbackCustom.PRE_KNIFE_COLLISION_FILTER = 134
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_KNIFE_COLLISION_FILTER] = "PRE_KNIFE_COLLISION_FILTER"
____exports.ModCallbackCustom.PRE_NEW_LEVEL = 135
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_NEW_LEVEL] = "PRE_NEW_LEVEL"
____exports.ModCallbackCustom.PRE_NPC_COLLISION_FILTER = 136
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_NPC_COLLISION_FILTER] = "PRE_NPC_COLLISION_FILTER"
____exports.ModCallbackCustom.PRE_NPC_UPDATE_FILTER = 137
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_NPC_UPDATE_FILTER] = "PRE_NPC_UPDATE_FILTER"
____exports.ModCallbackCustom.PRE_PROJECTILE_COLLISION_FILTER = 138
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_PROJECTILE_COLLISION_FILTER] = "PRE_PROJECTILE_COLLISION_FILTER"
____exports.ModCallbackCustom.PRE_ROOM_ENTITY_SPAWN_FILTER = 139
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_ROOM_ENTITY_SPAWN_FILTER] = "PRE_ROOM_ENTITY_SPAWN_FILTER"
____exports.ModCallbackCustom.PRE_TEAR_COLLISION_FILTER = 140
____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_TEAR_COLLISION_FILTER] = "PRE_TEAR_COLLISION_FILTER"
return ____exports
 end,
["enums.AmbushType"] = function(...) 
local ____exports = {}
--- This is used by the `POST_AMBUSH_STARTED` and `POST_AMBUSH_FINISHED` custom callbacks.
____exports.AmbushType = {}
____exports.AmbushType.CHALLENGE_ROOM = 0
____exports.AmbushType[____exports.AmbushType.CHALLENGE_ROOM] = "CHALLENGE_ROOM"
____exports.AmbushType.BOSS_RUSH = 1
____exports.AmbushType[____exports.AmbushType.BOSS_RUSH] = "BOSS_RUSH"
return ____exports
 end,
["enums.HealthType"] = function(...) 
local ____exports = {}
--- This represents the type of health that is either given or taken away from a player. Note that we
-- cannot use the `HeartSubType` enum for this purpose this since it has no value for broken hearts
-- or max hearts.
____exports.HealthType = {}
____exports.HealthType.RED = 0
____exports.HealthType[____exports.HealthType.RED] = "RED"
____exports.HealthType.SOUL = 1
____exports.HealthType[____exports.HealthType.SOUL] = "SOUL"
____exports.HealthType.ETERNAL = 2
____exports.HealthType[____exports.HealthType.ETERNAL] = "ETERNAL"
____exports.HealthType.BLACK = 3
____exports.HealthType[____exports.HealthType.BLACK] = "BLACK"
____exports.HealthType.GOLDEN = 4
____exports.HealthType[____exports.HealthType.GOLDEN] = "GOLDEN"
____exports.HealthType.BONE = 5
____exports.HealthType[____exports.HealthType.BONE] = "BONE"
____exports.HealthType.ROTTEN = 6
____exports.HealthType[____exports.HealthType.ROTTEN] = "ROTTEN"
____exports.HealthType.BROKEN = 7
____exports.HealthType[____exports.HealthType.BROKEN] = "BROKEN"
____exports.HealthType.MAX_HEARTS = 8
____exports.HealthType[____exports.HealthType.MAX_HEARTS] = "MAX_HEARTS"
return ____exports
 end,
["enums.PlayerStat"] = function(...) 
local ____exports = {}
--- This represents the kinds of stats that a player can have.
____exports.PlayerStat = {}
____exports.PlayerStat.DAMAGE = 0
____exports.PlayerStat[____exports.PlayerStat.DAMAGE] = "DAMAGE"
____exports.PlayerStat.FIRE_DELAY = 1
____exports.PlayerStat[____exports.PlayerStat.FIRE_DELAY] = "FIRE_DELAY"
____exports.PlayerStat.SHOT_SPEED = 2
____exports.PlayerStat[____exports.PlayerStat.SHOT_SPEED] = "SHOT_SPEED"
____exports.PlayerStat.TEAR_HEIGHT = 3
____exports.PlayerStat[____exports.PlayerStat.TEAR_HEIGHT] = "TEAR_HEIGHT"
____exports.PlayerStat.TEAR_RANGE = 4
____exports.PlayerStat[____exports.PlayerStat.TEAR_RANGE] = "TEAR_RANGE"
____exports.PlayerStat.TEAR_FALLING_ACCELERATION = 5
____exports.PlayerStat[____exports.PlayerStat.TEAR_FALLING_ACCELERATION] = "TEAR_FALLING_ACCELERATION"
____exports.PlayerStat.TEAR_FALLING_SPEED = 6
____exports.PlayerStat[____exports.PlayerStat.TEAR_FALLING_SPEED] = "TEAR_FALLING_SPEED"
____exports.PlayerStat.MOVE_SPEED = 7
____exports.PlayerStat[____exports.PlayerStat.MOVE_SPEED] = "MOVE_SPEED"
____exports.PlayerStat.TEAR_FLAG = 8
____exports.PlayerStat[____exports.PlayerStat.TEAR_FLAG] = "TEAR_FLAG"
____exports.PlayerStat.TEAR_COLOR = 9
____exports.PlayerStat[____exports.PlayerStat.TEAR_COLOR] = "TEAR_COLOR"
____exports.PlayerStat.FLYING = 10
____exports.PlayerStat[____exports.PlayerStat.FLYING] = "FLYING"
____exports.PlayerStat.LUCK = 11
____exports.PlayerStat[____exports.PlayerStat.LUCK] = "LUCK"
____exports.PlayerStat.SIZE = 12
____exports.PlayerStat[____exports.PlayerStat.SIZE] = "SIZE"
return ____exports
 end,
["enums.SlotDestructionType"] = function(...) 
local ____exports = {}
--- This is used in the `POST_SLOT_DESTROYED` custom callback.
____exports.SlotDestructionType = {}
____exports.SlotDestructionType.NORMAL = 0
____exports.SlotDestructionType[____exports.SlotDestructionType.NORMAL] = "NORMAL"
____exports.SlotDestructionType.COLLECTIBLE_PAYOUT = 1
____exports.SlotDestructionType[____exports.SlotDestructionType.COLLECTIBLE_PAYOUT] = "COLLECTIBLE_PAYOUT"
return ____exports
 end,
["types.ReadonlySet"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local ____exports = {}
--- An alias for the `Set` constructor that returns a read-only set.
____exports.ReadonlySet = Set
return ____exports
 end,
["types.PickingUpItem"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ItemType = ____isaac_2Dtypescript_2Ddefinitions.ItemType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local DEFAULT_ITEM_TYPE = ItemType.NULL
local DEFAULT_SUB_TYPE = CollectibleType.NULL
function ____exports.newPickingUpItem(self)
    return {itemType = DEFAULT_ITEM_TYPE, subType = DEFAULT_SUB_TYPE}
end
function ____exports.resetPickingUpItem(self, pickingUpItem)
    pickingUpItem.itemType = DEFAULT_ITEM_TYPE
    pickingUpItem.subType = DEFAULT_SUB_TYPE
end
local COLLECTIBLE_ITEM_TYPES = __TS__New(ReadonlySet, {ItemType.PASSIVE, ItemType.ACTIVE, ItemType.FAMILIAR})
--- Helper function to narrow the type of `PickingUpItem`.
function ____exports.isPickingUpItemNull(self, pickingUpItem)
    return pickingUpItem.itemType == ItemType.NULL
end
--- Helper function to narrow the type of `PickingUpItem`.
function ____exports.isPickingUpItemCollectible(self, pickingUpItem)
    return COLLECTIBLE_ITEM_TYPES:has(pickingUpItem.itemType)
end
--- Helper function to narrow the type of `PickingUpItem`.
function ____exports.isPickingUpItemTrinket(self, pickingUpItem)
    return pickingUpItem.itemType == ItemType.TRINKET
end
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.index"] = function(...) 
local ____exports = {}
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ActiveSlot")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.BackdropType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.BrokenWatchState")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ButtonAction")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.CallbackPriority")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.Challenge")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ChampionColor")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.CollectibleAnimation")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.CollectiblePedestalType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.CollectibleSpriteLayer")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.Controller")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ControllerIndex")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.CopyableIsaacAPIClassType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.CurseID")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.DebugCommand")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.Difficulty")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.Dimension")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.Direction")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.DoorSlot")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.Ending")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.EntityCollisionClass")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.EntityGridCollisionClass")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.EntityType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.FadeoutTarget")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.GameStateFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.GridCollisionClass")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.GridEntityType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.GridEntityXMLType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.GridPath")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.GridRoom")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.InputHook")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ItemConfigCardType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ItemConfigChargeType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ItemConfigPillEffectClass")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ItemConfigPillEffectType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ItemPoolType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ItemType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.Keyboard")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.LanguageAbbreviation")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.LaserOffset")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.LevelStage")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.LevelStateFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.LineCheckMode")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ModCallback")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.Mouse")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.Music")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.NPCID")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.NPCState")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.NullItemID")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.PickupPrice")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.PillEffect")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.PlayerForm")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.PlayerItemAnimation")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.PlayerSpriteLayer")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.PocketItemSlot")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.PoopSpellType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.ProjectilesMode")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.RenderMode")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.RoomDescriptorDisplayType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.RoomDifficulty")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.RoomShape")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.RoomTransitionAnim")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.RoomType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.SeedEffect")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.SkinColor")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.SortingLayer")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.SoundEffect")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.StageID")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.StageTransition")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.StageType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.TrinketSlot")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.WeaponType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.collections.gridEntityStates")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.collections.gridEntityVariants")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.collections.npcStates")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.collections.roomSubTypes")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.collections.subTypes")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.collections.variants")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.ActionTrigger")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.CacheFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.DamageFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.DisplayFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.DoorSlotFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.EntityFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.EntityPartition")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.ItemConfigTag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.LevelCurse")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.ProjectileFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.RoomDescriptorFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.TargetFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.TearFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.flags.UseFlag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.mods.EncyclopediaItemPoolType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.mods.ModConfigMenuOptionType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.enums.mods.StageAPIEnums")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.mods.StageAPIEnums"] = function(...) 
local ____exports = {}
____exports.StageAPICallback = {}
____exports.StageAPICallback.POST_CHANGE_ROOM_GFX = "POST_CHANGE_ROOM_GFX"
____exports.StageAPICallback.POST_CHECK_VALID_ROOM = "POST_CHECK_VALID_ROOM"
____exports.StageAPICallback.POST_CUSTOM_DOOR_UPDATE = "POST_CUSTOM_DOOR_UPDATE"
____exports.StageAPICallback.POST_CUSTOM_GRID_PROJECTILE_HELPER_UPDATE = "POST_CUSTOM_GRID_PROJECTILE_HELPER_UPDATE"
____exports.StageAPICallback.POST_CUSTOM_GRID_PROJECTILE_UPDATE = "POST_CUSTOM_GRID_PROJECTILE_UPDATE"
____exports.StageAPICallback.POST_CUSTOM_GRID_REMOVE = "POST_CUSTOM_GRID_REMOVE"
____exports.StageAPICallback.POST_CUSTOM_GRID_UPDATE = "POST_CUSTOM_GRID_UPDATE"
____exports.StageAPICallback.POST_GRID_UPDATE = "POST_GRID_UPDATE"
____exports.StageAPICallback.POST_OVERRIDDEN_GRID_BREAK = "POST_OVERRIDDEN_GRID_BREAK"
____exports.StageAPICallback.POST_ROOM_INIT = "POST_ROOM_INIT"
____exports.StageAPICallback.POST_ROOM_LOAD = "POST_ROOM_LOAD"
____exports.StageAPICallback.POST_SPAWN_CUSTOM_DOOR = "POST_SPAWN_CUSTOM_DOOR"
____exports.StageAPICallback.POST_SPAWN_CUSTOM_GRID = "POST_SPAWN_CUSTOM_GRID"
____exports.StageAPICallback.POST_STAGEAPI_NEW_ROOM = "POST_STAGEAPI_NEW_ROOM"
____exports.StageAPICallback.POST_STAGEAPI_NEW_ROOM_GENERATION = "POST_STAGEAPI_NEW_ROOM_GENERATION"
____exports.StageAPICallback.PRE_BOSS_SELECT = "PRE_BOSS_SELECT"
____exports.StageAPICallback.PRE_CHANGE_ROOM_GFX = "PRE_CHANGE_ROOM_GFX"
____exports.StageAPICallback.PRE_ROOM_LAYOUT_CHOOSE = "PRE_ROOM_LAYOUT_CHOOSE"
____exports.StageAPICallback.PRE_SELECT_ENTITY_LIST = "PRE_SELECT_ENTITY_LIST"
____exports.StageAPICallback.PRE_SELECT_GRIDENTITY_LIST = "PRE_SELECT_GRIDENTITY_LIST"
____exports.StageAPICallback.PRE_SELECT_NEXT_STAGE = "PRE_SELECT_NEXT_STAGE"
____exports.StageAPICallback.PRE_SPAWN_ENTITY = "PRE_SPAWN_ENTITY"
____exports.StageAPICallback.PRE_SPAWN_ENTITY_LIST = "PRE_SPAWN_ENTITY_LIST"
____exports.StageAPICallback.PRE_SPAWN_GRID = "PRE_SPAWN_GRID"
____exports.StageAPICallback.PRE_STAGEAPI_NEW_ROOM = "PRE_STAGEAPI_NEW_ROOM"
____exports.StageAPICallback.PRE_TRANSITION_RENDER = "PRE_TRANSITION_RENDER"
____exports.StageAPICallback.PRE_UPDATE_GRID_GFX = "PRE_UPDATE_GRID_GFX"
____exports.StageAPILayoutButtonVariant = {}
____exports.StageAPILayoutButtonVariant.ROOM_CLEAR = 0
____exports.StageAPILayoutButtonVariant[____exports.StageAPILayoutButtonVariant.ROOM_CLEAR] = "ROOM_CLEAR"
____exports.StageAPILayoutButtonVariant.REWARD = 1
____exports.StageAPILayoutButtonVariant[____exports.StageAPILayoutButtonVariant.REWARD] = "REWARD"
____exports.StageAPILayoutButtonVariant.GREED = 2
____exports.StageAPILayoutButtonVariant[____exports.StageAPILayoutButtonVariant.GREED] = "GREED"
____exports.StageAPILayoutButtonVariant.KILL = 9
____exports.StageAPILayoutButtonVariant[____exports.StageAPILayoutButtonVariant.KILL] = "KILL"
____exports.StageAPILayoutButtonVariant.RAIL = 3
____exports.StageAPILayoutButtonVariant[____exports.StageAPILayoutButtonVariant.RAIL] = "RAIL"
____exports.StageAPILayoutCornyPoopSubtype = {}
____exports.StageAPILayoutCornyPoopSubtype.NORMAL = 0
____exports.StageAPILayoutCornyPoopSubtype[____exports.StageAPILayoutCornyPoopSubtype.NORMAL] = "NORMAL"
____exports.StageAPILayoutCornyPoopSubtype.NON_REPLACEABLE = 1
____exports.StageAPILayoutCornyPoopSubtype[____exports.StageAPILayoutCornyPoopSubtype.NON_REPLACEABLE] = "NON_REPLACEABLE"
____exports.StageAPILayoutGridType = {}
____exports.StageAPILayoutGridType.ROCK = 1000
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.ROCK] = "ROCK"
____exports.StageAPILayoutGridType.ROCK_ALT = 1002
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.ROCK_ALT] = "ROCK_ALT"
____exports.StageAPILayoutGridType.ROCK_BOMB = 1001
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.ROCK_BOMB] = "ROCK_BOMB"
____exports.StageAPILayoutGridType.ROCK_SPIKE = 1010
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.ROCK_SPIKE] = "ROCK_SPIKE"
____exports.StageAPILayoutGridType.ROCK_GOLD = 1011
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.ROCK_GOLD] = "ROCK_GOLD"
____exports.StageAPILayoutGridType.MARKED_SKULL = 1008
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.MARKED_SKULL] = "MARKED_SKULL"
____exports.StageAPILayoutGridType.BLOCK_METAL = 1900
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.BLOCK_METAL] = "BLOCK_METAL"
____exports.StageAPILayoutGridType.BLOCK_METAL_TALL = 1901
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.BLOCK_METAL_TALL] = "BLOCK_METAL_TALL"
____exports.StageAPILayoutGridType.BLOCK_INVISIBLE = 1999
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.BLOCK_INVISIBLE] = "BLOCK_INVISIBLE"
____exports.StageAPILayoutGridType.BLOCK_KEY = 4000
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.BLOCK_KEY] = "BLOCK_KEY"
____exports.StageAPILayoutGridType.PIT = 3000
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.PIT] = "PIT"
____exports.StageAPILayoutGridType.TNT = 1300
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.TNT] = "TNT"
____exports.StageAPILayoutGridType.TNT_PUSHABLE = 292
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.TNT_PUSHABLE] = "TNT_PUSHABLE"
____exports.StageAPILayoutGridType.SPIKES = 1930
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.SPIKES] = "SPIKES"
____exports.StageAPILayoutGridType.SPIKES_ON_OFF = 1931
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.SPIKES_ON_OFF] = "SPIKES_ON_OFF"
____exports.StageAPILayoutGridType.COBWEB = 1940
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.COBWEB] = "COBWEB"
____exports.StageAPILayoutGridType.BUTTON = 4500
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.BUTTON] = "BUTTON"
____exports.StageAPILayoutGridType.POOP = 1500
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.POOP] = "POOP"
____exports.StageAPILayoutGridType.POOP_CORNY = 1495
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.POOP_CORNY] = "POOP_CORNY"
____exports.StageAPILayoutGridType.POOP_RED = 1490
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.POOP_RED] = "POOP_RED"
____exports.StageAPILayoutGridType.POOP_GOLD = 1496
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.POOP_GOLD] = "POOP_GOLD"
____exports.StageAPILayoutGridType.POOP_RAINBOW = 1494
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.POOP_RAINBOW] = "POOP_RAINBOW"
____exports.StageAPILayoutGridType.POOP_BLACK = 1497
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.POOP_BLACK] = "POOP_BLACK"
____exports.StageAPILayoutGridType.POOP_HOLY = 1498
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.POOP_HOLY] = "POOP_HOLY"
____exports.StageAPILayoutGridType.POOP_CHARMING = 1501
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.POOP_CHARMING] = "POOP_CHARMING"
____exports.StageAPILayoutGridType.GRAVITY = 10000
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.GRAVITY] = "GRAVITY"
____exports.StageAPILayoutGridType.PITFALL = 291
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.PITFALL] = "PITFALL"
____exports.StageAPILayoutGridType.PROP_A = 10
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.PROP_A] = "PROP_A"
____exports.StageAPILayoutGridType.PROP_B = 20
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.PROP_B] = "PROP_B"
____exports.StageAPILayoutGridType.PROP_C = 30
____exports.StageAPILayoutGridType[____exports.StageAPILayoutGridType.PROP_C] = "PROP_C"
____exports.StageAPILayoutPitfallVariant = {}
____exports.StageAPILayoutPitfallVariant.NORMAL = 0
____exports.StageAPILayoutPitfallVariant[____exports.StageAPILayoutPitfallVariant.NORMAL] = "NORMAL"
____exports.StageAPILayoutPitfallVariant.SUCTION = 1
____exports.StageAPILayoutPitfallVariant[____exports.StageAPILayoutPitfallVariant.SUCTION] = "SUCTION"
____exports.StageAPILayoutPitfallVariant.TELEPORT = 2
____exports.StageAPILayoutPitfallVariant[____exports.StageAPILayoutPitfallVariant.TELEPORT] = "TELEPORT"
____exports.StageAPILayoutPoopSubtype = {}
____exports.StageAPILayoutPoopSubtype.NORMAL = 0
____exports.StageAPILayoutPoopSubtype[____exports.StageAPILayoutPoopSubtype.NORMAL] = "NORMAL"
____exports.StageAPILayoutPoopSubtype.NON_REPLACEABLE = 1
____exports.StageAPILayoutPoopSubtype[____exports.StageAPILayoutPoopSubtype.NON_REPLACEABLE] = "NON_REPLACEABLE"
____exports.StageAPILayoutRockSubtype = {}
____exports.StageAPILayoutRockSubtype.NORMAL = 0
____exports.StageAPILayoutRockSubtype[____exports.StageAPILayoutRockSubtype.NORMAL] = "NORMAL"
____exports.StageAPILayoutRockSubtype.NON_REPLACEABLE = 1
____exports.StageAPILayoutRockSubtype[____exports.StageAPILayoutRockSubtype.NON_REPLACEABLE] = "NON_REPLACEABLE"
____exports.StageAPILayoutSpikesOnOffVariant = {}
____exports.StageAPILayoutSpikesOnOffVariant.NORMAL = 0
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.NORMAL] = "NORMAL"
____exports.StageAPILayoutSpikesOnOffVariant.DOWN_1_FIFTH = 1
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.DOWN_1_FIFTH] = "DOWN_1_FIFTH"
____exports.StageAPILayoutSpikesOnOffVariant.DOWN_2_FIFTHS = 2
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.DOWN_2_FIFTHS] = "DOWN_2_FIFTHS"
____exports.StageAPILayoutSpikesOnOffVariant.DOWN_3_FIFTHS = 3
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.DOWN_3_FIFTHS] = "DOWN_3_FIFTHS"
____exports.StageAPILayoutSpikesOnOffVariant.DOWN_4_FIFTHS = 4
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.DOWN_4_FIFTHS] = "DOWN_4_FIFTHS"
____exports.StageAPILayoutSpikesOnOffVariant.DOWN_5_FIFTHS = 5
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.DOWN_5_FIFTHS] = "DOWN_5_FIFTHS"
____exports.StageAPILayoutSpikesOnOffVariant.UP_1_FIFTH = 6
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.UP_1_FIFTH] = "UP_1_FIFTH"
____exports.StageAPILayoutSpikesOnOffVariant.UP_2_FIFTHS = 7
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.UP_2_FIFTHS] = "UP_2_FIFTHS"
____exports.StageAPILayoutSpikesOnOffVariant.UP_3_FIFTHS = 8
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.UP_3_FIFTHS] = "UP_3_FIFTHS"
____exports.StageAPILayoutSpikesOnOffVariant.UP_4_FIFTHS = 9
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.UP_4_FIFTHS] = "UP_4_FIFTHS"
____exports.StageAPILayoutSpikesOnOffVariant.UP_5_FIFTHS = 10
____exports.StageAPILayoutSpikesOnOffVariant[____exports.StageAPILayoutSpikesOnOffVariant.UP_5_FIFTHS] = "UP_5_FIFTHS"
____exports.StageAPIPickupRandomGroupVariant = {}
____exports.StageAPIPickupRandomGroupVariant.ANY = 0
____exports.StageAPIPickupRandomGroupVariant[____exports.StageAPIPickupRandomGroupVariant.ANY] = "ANY"
____exports.StageAPIPickupRandomGroupVariant.NOT_CHEST_ITEM = 1
____exports.StageAPIPickupRandomGroupVariant[____exports.StageAPIPickupRandomGroupVariant.NOT_CHEST_ITEM] = "NOT_CHEST_ITEM"
____exports.StageAPIPickupRandomGroupVariant.NOT_ITEM = 2
____exports.StageAPIPickupRandomGroupVariant[____exports.StageAPIPickupRandomGroupVariant.NOT_ITEM] = "NOT_ITEM"
____exports.StageAPIPickupRandomGroupVariant.NOT_CHEST_ITEM_COIN = 3
____exports.StageAPIPickupRandomGroupVariant[____exports.StageAPIPickupRandomGroupVariant.NOT_CHEST_ITEM_COIN] = "NOT_CHEST_ITEM_COIN"
____exports.StageAPIPickupRandomGroupVariant.NOT_CHEST_ITEM_TRINKET = 4
____exports.StageAPIPickupRandomGroupVariant[____exports.StageAPIPickupRandomGroupVariant.NOT_CHEST_ITEM_TRINKET] = "NOT_CHEST_ITEM_TRINKET"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.mods.ModConfigMenuOptionType"] = function(...) 
local ____exports = {}
____exports.ModConfigMenuOptionType = {}
____exports.ModConfigMenuOptionType.TEXT = 1
____exports.ModConfigMenuOptionType[____exports.ModConfigMenuOptionType.TEXT] = "TEXT"
____exports.ModConfigMenuOptionType.SPACE = 2
____exports.ModConfigMenuOptionType[____exports.ModConfigMenuOptionType.SPACE] = "SPACE"
____exports.ModConfigMenuOptionType.SCROLL = 3
____exports.ModConfigMenuOptionType[____exports.ModConfigMenuOptionType.SCROLL] = "SCROLL"
____exports.ModConfigMenuOptionType.BOOLEAN = 4
____exports.ModConfigMenuOptionType[____exports.ModConfigMenuOptionType.BOOLEAN] = "BOOLEAN"
____exports.ModConfigMenuOptionType.NUMBER = 5
____exports.ModConfigMenuOptionType[____exports.ModConfigMenuOptionType.NUMBER] = "NUMBER"
____exports.ModConfigMenuOptionType.KEY_BIND_KEYBOARD = 6
____exports.ModConfigMenuOptionType[____exports.ModConfigMenuOptionType.KEY_BIND_KEYBOARD] = "KEY_BIND_KEYBOARD"
____exports.ModConfigMenuOptionType.KEY_BIND_CONTROLLER = 7
____exports.ModConfigMenuOptionType[____exports.ModConfigMenuOptionType.KEY_BIND_CONTROLLER] = "KEY_BIND_CONTROLLER"
____exports.ModConfigMenuOptionType.TITLE = 8
____exports.ModConfigMenuOptionType[____exports.ModConfigMenuOptionType.TITLE] = "TITLE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.mods.EncyclopediaItemPoolType"] = function(...) 
local ____exports = {}
____exports.EncyclopediaItemPoolType = {}
____exports.EncyclopediaItemPoolType.POOL_TREASURE = 1
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_TREASURE] = "POOL_TREASURE"
____exports.EncyclopediaItemPoolType.POOL_SHOP = 2
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_SHOP] = "POOL_SHOP"
____exports.EncyclopediaItemPoolType.POOL_BOSS = 3
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_BOSS] = "POOL_BOSS"
____exports.EncyclopediaItemPoolType.POOL_DEVIL = 4
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_DEVIL] = "POOL_DEVIL"
____exports.EncyclopediaItemPoolType.POOL_ANGEL = 5
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_ANGEL] = "POOL_ANGEL"
____exports.EncyclopediaItemPoolType.POOL_SECRET = 6
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_SECRET] = "POOL_SECRET"
____exports.EncyclopediaItemPoolType.POOL_ENCYCLOPEDIARARY = 7
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_ENCYCLOPEDIARARY] = "POOL_ENCYCLOPEDIARARY"
____exports.EncyclopediaItemPoolType.POOL_SHELL_GAME = 8
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_SHELL_GAME] = "POOL_SHELL_GAME"
____exports.EncyclopediaItemPoolType.POOL_GOLDEN_CHEST = 9
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_GOLDEN_CHEST] = "POOL_GOLDEN_CHEST"
____exports.EncyclopediaItemPoolType.POOL_RED_CHEST = 10
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_RED_CHEST] = "POOL_RED_CHEST"
____exports.EncyclopediaItemPoolType.POOL_BEGGAR = 11
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_BEGGAR] = "POOL_BEGGAR"
____exports.EncyclopediaItemPoolType.POOL_DEMON_BEGGAR = 12
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_DEMON_BEGGAR] = "POOL_DEMON_BEGGAR"
____exports.EncyclopediaItemPoolType.POOL_CURSE = 13
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_CURSE] = "POOL_CURSE"
____exports.EncyclopediaItemPoolType.POOL_KEY_MASTER = 14
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_KEY_MASTER] = "POOL_KEY_MASTER"
____exports.EncyclopediaItemPoolType.POOL_BATTERY_BUM = 15
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_BATTERY_BUM] = "POOL_BATTERY_BUM"
____exports.EncyclopediaItemPoolType.POOL_MOMS_CHEST = 16
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_MOMS_CHEST] = "POOL_MOMS_CHEST"
____exports.EncyclopediaItemPoolType.POOL_GREED_TREASURE = 17
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_GREED_TREASURE] = "POOL_GREED_TREASURE"
____exports.EncyclopediaItemPoolType.POOL_GREED_BOSS = 18
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_GREED_BOSS] = "POOL_GREED_BOSS"
____exports.EncyclopediaItemPoolType.POOL_GREED_SHOP = 19
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_GREED_SHOP] = "POOL_GREED_SHOP"
____exports.EncyclopediaItemPoolType.POOL_GREED_DEVIL = 20
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_GREED_DEVIL] = "POOL_GREED_DEVIL"
____exports.EncyclopediaItemPoolType.POOL_GREED_ANGEL = 21
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_GREED_ANGEL] = "POOL_GREED_ANGEL"
____exports.EncyclopediaItemPoolType.POOL_GREED_CURSE = 22
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_GREED_CURSE] = "POOL_GREED_CURSE"
____exports.EncyclopediaItemPoolType.POOL_GREED_SECRET = 23
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_GREED_SECRET] = "POOL_GREED_SECRET"
____exports.EncyclopediaItemPoolType.POOL_CRANE_GAME = 24
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_CRANE_GAME] = "POOL_CRANE_GAME"
____exports.EncyclopediaItemPoolType.POOL_ULTRA_SECRET = 25
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_ULTRA_SECRET] = "POOL_ULTRA_SECRET"
____exports.EncyclopediaItemPoolType.POOL_BOMB_BUM = 26
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_BOMB_BUM] = "POOL_BOMB_BUM"
____exports.EncyclopediaItemPoolType.POOL_PLANETARIUM = 27
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_PLANETARIUM] = "POOL_PLANETARIUM"
____exports.EncyclopediaItemPoolType.POOL_OLD_CHEST = 28
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_OLD_CHEST] = "POOL_OLD_CHEST"
____exports.EncyclopediaItemPoolType.POOL_BABY_SHOP = 29
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_BABY_SHOP] = "POOL_BABY_SHOP"
____exports.EncyclopediaItemPoolType.POOL_WOODEN_CHEST = 30
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_WOODEN_CHEST] = "POOL_WOODEN_CHEST"
____exports.EncyclopediaItemPoolType.POOL_ROTTEN_BEGGAR = 31
____exports.EncyclopediaItemPoolType[____exports.EncyclopediaItemPoolType.POOL_ROTTEN_BEGGAR] = "POOL_ROTTEN_BEGGAR"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.UseFlag"] = function(...) 
local ____exports = {}
--- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename UseFlag
local UseFlagInternal = {
    NO_ANIMATION = 1 << 0,
    NO_COSTUME = 1 << 1,
    OWNED = 1 << 2,
    ALLOW_NON_MAIN_PLAYERS = 1 << 3,
    REMOVE_ACTIVE = 1 << 4,
    CAR_BATTERY = 1 << 5,
    VOID = 1 << 6,
    MIMIC = 1 << 7,
    NO_ANNOUNCER_VOICE = 1 << 8,
    ALLOW_WISP_SPAWN = 1 << 9,
    CUSTOM_VARDATA = 1 << 10,
    NO_HUD = 1 << 11
}
____exports.UseFlag = UseFlagInternal
____exports.UseFlagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.TearFlag"] = function(...) 
local ____exports = {}
local getTearFlag
function getTearFlag(self, shift)
    return shift >= 64 and BitSet128(0, 1 << shift - 64) or BitSet128(1 << shift, 0)
end
--- For `EntityType.TEAR` (2).
-- 
-- This enum was renamed from "TearFlags" to be consistent with the other flag enums.
-- 
-- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type. Furthermore, enums cannot be instantiated
-- with `BitSet128` objects.)
-- 
-- Generally, the `TearVariant` affects the graphics of the tear, while the `TearFlag` affects the
-- gameplay mechanic. For example, the Euthanasia collectible grants a chance for needle tears that
-- explode. `TearVariant.NEEDLE` makes the tear look like a needle, and the exploding effect comes
-- from `TearFlag.NEEDLE`.
-- 
-- However, there are some exceptions. For example, Sharp Key makes Isaac shoot key tears that deal
-- extra damage. Both the graphical effect and the extra damage are granted by
-- `TearVariant.KEY_BLOOD`.
-- 
-- @enum
-- @notExported
-- @rename TearFlag
local TearFlagInternal = {
    NORMAL = BitSet128(0, 0),
    SPECTRAL = getTearFlag(nil, 0),
    PIERCING = getTearFlag(nil, 1),
    HOMING = getTearFlag(nil, 2),
    SLOW = getTearFlag(nil, 3),
    POISON = getTearFlag(nil, 4),
    FREEZE = getTearFlag(nil, 5),
    SPLIT = getTearFlag(nil, 6),
    GROW = getTearFlag(nil, 7),
    BOOMERANG = getTearFlag(nil, 8),
    PERSISTENT = getTearFlag(nil, 9),
    WIGGLE = getTearFlag(nil, 10),
    MULLIGAN = getTearFlag(nil, 11),
    EXPLOSIVE = getTearFlag(nil, 12),
    CHARM = getTearFlag(nil, 13),
    CONFUSION = getTearFlag(nil, 14),
    HP_DROP = getTearFlag(nil, 15),
    ORBIT = getTearFlag(nil, 16),
    WAIT = getTearFlag(nil, 17),
    QUAD_SPLIT = getTearFlag(nil, 18),
    BOUNCE = getTearFlag(nil, 19),
    FEAR = getTearFlag(nil, 20),
    SHRINK = getTearFlag(nil, 21),
    BURN = getTearFlag(nil, 22),
    ATTRACTOR = getTearFlag(nil, 23),
    KNOCKBACK = getTearFlag(nil, 24),
    PULSE = getTearFlag(nil, 25),
    SPIRAL = getTearFlag(nil, 26),
    FLAT = getTearFlag(nil, 27),
    SAD_BOMB = getTearFlag(nil, 28),
    BUTT_BOMB = getTearFlag(nil, 29),
    SQUARE = getTearFlag(nil, 30),
    GLOW = getTearFlag(nil, 31),
    GISH = getTearFlag(nil, 32),
    MYSTERIOUS_LIQUID_CREEP = getTearFlag(nil, 33),
    SHIELDED = getTearFlag(nil, 34),
    GLITTER_BOMB = getTearFlag(nil, 35),
    SCATTER_BOMB = getTearFlag(nil, 36),
    STICKY = getTearFlag(nil, 37),
    CONTINUUM = getTearFlag(nil, 38),
    LIGHT_FROM_HEAVEN = getTearFlag(nil, 39),
    COIN_DROP = getTearFlag(nil, 40),
    BLACK_HP_DROP = getTearFlag(nil, 41),
    TRACTOR_BEAM = getTearFlag(nil, 42),
    GODS_FLESH = getTearFlag(nil, 43),
    GREED_COIN = getTearFlag(nil, 44),
    CROSS_BOMB = getTearFlag(nil, 45),
    BIG_SPIRAL = getTearFlag(nil, 46),
    PERMANENT_CONFUSION = getTearFlag(nil, 47),
    BOOGER = getTearFlag(nil, 48),
    EGG = getTearFlag(nil, 49),
    ACID = getTearFlag(nil, 50),
    BONE = getTearFlag(nil, 51),
    BELIAL = getTearFlag(nil, 52),
    MIDAS = getTearFlag(nil, 53),
    NEEDLE = getTearFlag(nil, 54),
    JACOBS = getTearFlag(nil, 55),
    HORN = getTearFlag(nil, 56),
    LASER = getTearFlag(nil, 57),
    POP = getTearFlag(nil, 58),
    ABSORB = getTearFlag(nil, 59),
    LASER_SHOT = getTearFlag(nil, 60),
    HYDRO_BOUNCE = getTearFlag(nil, 61),
    BURST_SPLIT = getTearFlag(nil, 62),
    CREEP_TRAIL = getTearFlag(nil, 63),
    PUNCH = getTearFlag(nil, 64),
    ICE = getTearFlag(nil, 65),
    MAGNETIZE = getTearFlag(nil, 66),
    BAIT = getTearFlag(nil, 67),
    OCCULT = getTearFlag(nil, 68),
    ORBIT_ADVANCED = getTearFlag(nil, 69),
    ROCK = getTearFlag(nil, 70),
    TURN_HORIZONTAL = getTearFlag(nil, 71),
    BLOOD_BOMB = getTearFlag(nil, 72),
    ECOLI = getTearFlag(nil, 73),
    COIN_DROP_DEATH = getTearFlag(nil, 74),
    BRIMSTONE_BOMB = getTearFlag(nil, 75),
    RIFT = getTearFlag(nil, 76),
    SPORE = getTearFlag(nil, 77),
    GHOST_BOMB = getTearFlag(nil, 78),
    CARD_DROP_DEATH = getTearFlag(nil, 79),
    RUNE_DROP_DEATH = getTearFlag(nil, 80),
    TELEPORT = getTearFlag(nil, 81),
    TEAR_DECELERATE = getTearFlag(nil, 82),
    TEAR_ACCELERATE = getTearFlag(nil, 83),
    BOUNCE_WALLS_ONLY = getTearFlag(nil, 104),
    NO_GRID_DAMAGE = getTearFlag(nil, 105),
    BACKSTAB = getTearFlag(nil, 106),
    FETUS_SWORD = getTearFlag(nil, 107),
    FETUS_BONE = getTearFlag(nil, 108),
    FETUS_KNIFE = getTearFlag(nil, 109),
    FETUS_TECH_X = getTearFlag(nil, 110),
    FETUS_TECH = getTearFlag(nil, 111),
    FETUS_BRIMSTONE = getTearFlag(nil, 112),
    FETUS_BOMBER = getTearFlag(nil, 113),
    FETUS = getTearFlag(nil, 114),
    REROLL_ROCK_WISP = getTearFlag(nil, 115),
    MOM_STOMP_WISP = getTearFlag(nil, 116),
    ENEMY_TO_WISP = getTearFlag(nil, 117),
    REROLL_ENEMY = getTearFlag(nil, 118),
    GIGA_BOMB = getTearFlag(nil, 119),
    EXTRA_GORE = getTearFlag(nil, 120),
    RAINBOW = getTearFlag(nil, 121),
    DETONATE = getTearFlag(nil, 122),
    CHAIN = getTearFlag(nil, 123),
    DARK_MATTER = getTearFlag(nil, 124),
    GOLDEN_BOMB = getTearFlag(nil, 125),
    FAST_BOMB = getTearFlag(nil, 126),
    LUDOVICO = getTearFlag(nil, 127)
}
____exports.TearFlag = TearFlagInternal
____exports.TearFlagZero = ____exports.TearFlag.NORMAL
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.TargetFlag"] = function(...) 
local ____exports = {}
--- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename TargetFlag
local TargetFlagInternal = {
    ALLOW_SWITCHING = 1 << 0,
    DONT_PRIORITIZE_ENEMIES_CLOSE_TO_PLAYER = 1 << 1,
    PRIORITIZE_ENEMIES_WITH_HIGH_HP = 1 << 2,
    PRIORITIZE_ENEMIES_WITH_LOW_HP = 1 << 3,
    GIVE_LOWER_PRIORITY_TO_CURRENT_TARGET = 1 << 4
}
____exports.TargetFlag = TargetFlagInternal
____exports.TargetFlagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.RoomDescriptorFlag"] = function(...) 
local ____exports = {}
--- Matches the `RoomDescriptor.FLAG_*` members of the `RoomDescriptor` class. In IsaacScript, we
-- reimplement this as an object instead, since it is cleaner.
-- 
-- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename RoomDescriptorFlag
local RoomDescriptorFlagInternal = {
    CLEAR = 1 << 0,
    PRESSURE_PLATES_TRIGGERED = 1 << 1,
    SACRIFICE_DONE = 1 << 2,
    CHALLENGE_DONE = 1 << 3,
    SURPRISE_MINIBOSS = 1 << 4,
    HAS_WATER = 1 << 5,
    ALT_BOSS_MUSIC = 1 << 6,
    NO_REWARD = 1 << 7,
    FLOODED = 1 << 8,
    PITCH_BLACK = 1 << 9,
    RED_ROOM = 1 << 10,
    DEVIL_TREASURE = 1 << 11,
    USE_ALTERNATE_BACKDROP = 1 << 12,
    CURSED_MIST = 1 << 13,
    MAMA_MEGA = 1 << 14,
    NO_WALLS = 1 << 15,
    ROTGUT_CLEARED = 1 << 16,
    PORTAL_LINKED = 1 << 17,
    BLUE_REDIRECT = 1 << 18
}
____exports.RoomDescriptorFlag = RoomDescriptorFlagInternal
____exports.RoomDescriptorFlagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.ProjectileFlag"] = function(...) 
local ____exports = {}
--- For `EntityType.PROJECTILE` (9).
-- 
-- This enum was renamed from "ProjectileFlags" to be consistent with the other flag enums.
-- 
-- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename ProjectileFlag
local ProjectileFlagInternal = {
    SMART = 1 << 0,
    EXPLODE = 1 << 1,
    ACID_GREEN = 1 << 2,
    GOO = 1 << 3,
    GHOST = 1 << 4,
    WIGGLE = 1 << 5,
    BOOMERANG = 1 << 6,
    HIT_ENEMIES = 1 << 7,
    ACID_RED = 1 << 8,
    GREED = 1 << 9,
    RED_CREEP = 1 << 10,
    ORBIT_CW = 1 << 11,
    ORBIT_CCW = 1 << 12,
    NO_WALL_COLLIDE = 1 << 13,
    CREEP_BROWN = 1 << 14,
    FIRE = 1 << 15,
    BURST = 1 << 16,
    ANY_HEIGHT_ENTITY_HIT = 1 << 17,
    CURVE_LEFT = 1 << 18,
    CURVE_RIGHT = 1 << 19,
    TURN_HORIZONTAL = 1 << 20,
    SINE_VELOCITY = 1 << 21,
    MEGA_WIGGLE = 1 << 22,
    SAWTOOTH_WIGGLE = 1 << 23,
    SLOWED = 1 << 24,
    TRIANGLE = 1 << 25,
    MOVE_TO_PARENT = 1 << 26,
    ACCELERATE = 1 << 27,
    DECELERATE = 1 << 28,
    BURST3 = 1 << 29,
    CONTINUUM = 1 << 30,
    CANT_HIT_PLAYER = 1 << 31,
    CHANGE_FLAGS_AFTER_TIMEOUT = 1 << 32,
    CHANGE_VELOCITY_AFTER_TIMEOUT = 1 << 33,
    STASIS = 1 << 34,
    FIRE_WAVE = 1 << 35,
    FIRE_WAVE_X = 1 << 36,
    ACCELERATE_EX = 1 << 37,
    BURST8 = 1 << 38,
    FIRE_SPAWN = 1 << 39,
    ANTI_GRAVITY = 1 << 40,
    TRACTOR_BEAM = 1 << 41,
    BOUNCE = 1 << 42,
    BOUNCE_FLOOR = 1 << 43,
    SHIELDED = 1 << 44,
    BLUE_FIRE_SPAWN = 1 << 45,
    LASER_SHOT = 1 << 46,
    GODHEAD = 1 << 47,
    SMART_PERFECT = 1 << 48,
    BURST_SPLIT = 1 << 49,
    WIGGLE_ROTGUT = 1 << 50,
    FREEZE = 1 << 51,
    ACCELERATE_TO_POSITION = 1 << 52,
    BROCCOLI = 1 << 53,
    BACK_SPLIT = 1 << 54,
    SIDE_WAVE = 1 << 55,
    ORBIT_PARENT = 1 << 56,
    FADEOUT = 1 << 57
}
____exports.ProjectileFlag = ProjectileFlagInternal
____exports.ProjectileFlagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.LevelCurse"] = function(...) 
local ____exports = {}
local getLevelCurse
local ____CurseID = require("lua_modules.isaac-typescript-definitions.dist.enums.CurseID")
local CurseID = ____CurseID.CurseID
function getLevelCurse(self, curseID)
    return 1 << curseID - 1
end
--- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename LevelCurse
local LevelCurseInternal = {
    NONE = 0,
    DARKNESS = getLevelCurse(nil, CurseID.DARKNESS),
    LABYRINTH = getLevelCurse(nil, CurseID.LABYRINTH),
    LOST = getLevelCurse(nil, CurseID.LOST),
    UNKNOWN = getLevelCurse(nil, CurseID.UNKNOWN),
    CURSED = getLevelCurse(nil, CurseID.CURSED),
    MAZE = getLevelCurse(nil, CurseID.MAZE),
    BLIND = getLevelCurse(nil, CurseID.BLIND),
    GIANT = getLevelCurse(nil, CurseID.GIANT)
}
____exports.LevelCurse = LevelCurseInternal
____exports.LevelCurseZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.CurseID"] = function(...) 
local ____exports = {}
--- Matches the "id" field in the "resources/curses.xml" file. This is used to compute the
-- `LevelCurse` enum.
-- 
-- The values of this enum are integers. Do not use this enum to check for the presence of curses;
-- use the `LevelCurse` enum instead, which has bit flag values.
____exports.CurseID = {}
____exports.CurseID.DARKNESS = 1
____exports.CurseID[____exports.CurseID.DARKNESS] = "DARKNESS"
____exports.CurseID.LABYRINTH = 2
____exports.CurseID[____exports.CurseID.LABYRINTH] = "LABYRINTH"
____exports.CurseID.LOST = 3
____exports.CurseID[____exports.CurseID.LOST] = "LOST"
____exports.CurseID.UNKNOWN = 4
____exports.CurseID[____exports.CurseID.UNKNOWN] = "UNKNOWN"
____exports.CurseID.CURSED = 5
____exports.CurseID[____exports.CurseID.CURSED] = "CURSED"
____exports.CurseID.MAZE = 6
____exports.CurseID[____exports.CurseID.MAZE] = "MAZE"
____exports.CurseID.BLIND = 7
____exports.CurseID[____exports.CurseID.BLIND] = "BLIND"
____exports.CurseID.GIANT = 8
____exports.CurseID[____exports.CurseID.GIANT] = "GIANT"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.ItemConfigTag"] = function(...) 
local ____exports = {}
--- Matches the ItemConfig.TAG_ members of the ItemConfig class. In IsaacScript, we re-implement this
-- as an object instead, since it is cleaner.
-- 
-- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename ItemConfigTag
local ItemConfigTagInternal = {
    DEAD = 1 << 0,
    SYRINGE = 1 << 1,
    MOM = 1 << 2,
    TECH = 1 << 3,
    BATTERY = 1 << 4,
    GUPPY = 1 << 5,
    FLY = 1 << 6,
    BOB = 1 << 7,
    MUSHROOM = 1 << 8,
    BABY = 1 << 9,
    ANGEL = 1 << 10,
    DEVIL = 1 << 11,
    POOP = 1 << 12,
    BOOK = 1 << 13,
    SPIDER = 1 << 14,
    QUEST = 1 << 15,
    MONSTER_MANUAL = 1 << 16,
    NO_GREED = 1 << 17,
    FOOD = 1 << 18,
    TEARS_UP = 1 << 19,
    OFFENSIVE = 1 << 20,
    NO_KEEPER = 1 << 21,
    NO_LOST_BR = 1 << 22,
    STARS = 1 << 23,
    SUMMONABLE = 1 << 24,
    NO_CANTRIP = 1 << 25,
    WISP = 1 << 26,
    UNIQUE_FAMILIAR = 1 << 27,
    NO_CHALLENGE = 1 << 28,
    NO_DAILY = 1 << 29,
    LAZ_SHARED = 1 << 30,
    LAZ_SHARED_GLOBAL = 1 << 31,
    NO_EDEN = 1 << 32
}
____exports.ItemConfigTag = ItemConfigTagInternal
____exports.ItemConfigTagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.EntityPartition"] = function(...) 
local ____exports = {}
--- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename EntityPartition
local EntityPartitionInternal = {
    FAMILIAR = 1 << 0,
    BULLET = 1 << 1,
    TEAR = 1 << 2,
    ENEMY = 1 << 3,
    PICKUP = 1 << 4,
    PLAYER = 1 << 5,
    EFFECT = 1 << 6
}
____exports.EntityPartition = EntityPartitionInternal
____exports.EntityPartitionZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.EntityFlag"] = function(...) 
local ____exports = {}
--- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename EntityFlag
local EntityFlagInternal = {
    NO_STATUS_EFFECTS = 1 << 0,
    NO_INTERPOLATE = 1 << 1,
    APPEAR = 1 << 2,
    RENDER_FLOOR = 1 << 3,
    NO_TARGET = 1 << 4,
    FREEZE = 1 << 5,
    POISON = 1 << 6,
    SLOW = 1 << 7,
    CHARM = 1 << 8,
    CONFUSION = 1 << 9,
    MIDAS_FREEZE = 1 << 10,
    FEAR = 1 << 11,
    BURN = 1 << 12,
    RENDER_WALL = 1 << 13,
    INTERPOLATION_UPDATE = 1 << 14,
    APPLY_GRAVITY = 1 << 15,
    NO_BLOOD_SPLASH = 1 << 16,
    NO_REMOVE_ON_TEX_RENDER = 1 << 17,
    NO_DEATH_TRIGGER = 1 << 18,
    NO_SPIKE_DAMAGE = 1 << 19,
    LASER_POP = 1 << 19,
    ITEM_SHOULD_DUPLICATE = 1 << 19,
    BOSS_DEATH_TRIGGERED = 1 << 20,
    DONT_OVERWRITE = 1 << 21,
    SPAWN_STICKY_SPIDERS = 1 << 22,
    SPAWN_BLACK_HP = 1 << 23,
    SHRINK = 1 << 24,
    NO_FLASH_ON_DAMAGE = 1 << 25,
    NO_KNOCKBACK = 1 << 26,
    SLIPPERY_PHYSICS = 1 << 27,
    ADD_JAR_FLY = 1 << 28,
    FRIENDLY = 1 << 29,
    NO_PHYSICS_KNOCKBACK = 1 << 30,
    DONT_COUNT_BOSS_HP = 1 << 31,
    NO_SPRITE_UPDATE = 1 << 32,
    CONTAGIOUS = 1 << 33,
    BLEED_OUT = 1 << 34,
    HIDE_HP_BAR = 1 << 35,
    NO_DAMAGE_BLINK = 1 << 36,
    PERSISTENT = 1 << 37,
    BACKDROP_DETAIL = 1 << 38,
    AMBUSH = 1 << 39,
    GLITCH = 1 << 40,
    SPIN = 1 << 41,
    NO_REWARD = 1 << 42,
    REDUCE_GIBS = 1 << 43,
    TRANSITION_UPDATE = 1 << 44,
    NO_PLAYER_CONTROL = 1 << 45,
    NO_QUERY = 1 << 46,
    KNOCKED_BACK = 1 << 47,
    APPLY_IMPACT_DAMAGE = 1 << 48,
    ICE_FROZEN = 1 << 49,
    ICE = 1 << 50,
    MAGNETIZED = 1 << 51,
    BAITED = 1 << 52,
    KILL_SWITCH = 1 << 53,
    WEAKNESS = 1 << 54,
    EXTRA_GORE = 1 << 55,
    BRIMSTONE_MARKED = 1 << 56,
    HELD = 1 << 57,
    THROWN = 1 << 58,
    FRIENDLY_BALL = 1 << 59
}
____exports.EntityFlag = EntityFlagInternal
____exports.EntityFlagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.DoorSlotFlag"] = function(...) 
local ____exports = {}
local ____DoorSlot = require("lua_modules.isaac-typescript-definitions.dist.enums.DoorSlot")
local DoorSlot = ____DoorSlot.DoorSlot
--- For `GridEntityType.DOOR` (16).
-- 
-- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename DoorSlotFlag
local DoorSlotFlagInternal = {
    LEFT_0 = 1 << DoorSlot.LEFT_0,
    UP_0 = 1 << DoorSlot.UP_0,
    RIGHT_0 = 1 << DoorSlot.RIGHT_0,
    DOWN_0 = 1 << DoorSlot.DOWN_0,
    LEFT_1 = 1 << DoorSlot.LEFT_1,
    UP_1 = 1 << DoorSlot.UP_1,
    RIGHT_1 = 1 << DoorSlot.RIGHT_1,
    DOWN_1 = 1 << DoorSlot.DOWN_1
}
____exports.DoorSlotFlag = DoorSlotFlagInternal
____exports.DoorSlotFlagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.DoorSlot"] = function(...) 
local ____exports = {}
____exports.DoorSlot = {}
____exports.DoorSlot.NO_DOOR_SLOT = -1
____exports.DoorSlot[____exports.DoorSlot.NO_DOOR_SLOT] = "NO_DOOR_SLOT"
____exports.DoorSlot.LEFT_0 = 0
____exports.DoorSlot[____exports.DoorSlot.LEFT_0] = "LEFT_0"
____exports.DoorSlot.UP_0 = 1
____exports.DoorSlot[____exports.DoorSlot.UP_0] = "UP_0"
____exports.DoorSlot.RIGHT_0 = 2
____exports.DoorSlot[____exports.DoorSlot.RIGHT_0] = "RIGHT_0"
____exports.DoorSlot.DOWN_0 = 3
____exports.DoorSlot[____exports.DoorSlot.DOWN_0] = "DOWN_0"
____exports.DoorSlot.LEFT_1 = 4
____exports.DoorSlot[____exports.DoorSlot.LEFT_1] = "LEFT_1"
____exports.DoorSlot.UP_1 = 5
____exports.DoorSlot[____exports.DoorSlot.UP_1] = "UP_1"
____exports.DoorSlot.RIGHT_1 = 6
____exports.DoorSlot[____exports.DoorSlot.RIGHT_1] = "RIGHT_1"
____exports.DoorSlot.DOWN_1 = 7
____exports.DoorSlot[____exports.DoorSlot.DOWN_1] = "DOWN_1"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.DisplayFlag"] = function(...) 
local ____exports = {}
--- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename DisplayFlag
local DisplayFlagInternal = {INVISIBLE = 1 << -1, VISIBLE = 1 << 0, SHADOW = 1 << 1, SHOW_ICON = 1 << 2}
____exports.DisplayFlag = DisplayFlagInternal
____exports.DisplayFlagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.DamageFlag"] = function(...) 
local ____exports = {}
--- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename DamageFlag
local DamageFlagInternal = {
    NO_KILL = 1 << 0,
    FIRE = 1 << 1,
    EXPLOSION = 1 << 2,
    LASER = 1 << 3,
    ACID = 1 << 4,
    RED_HEARTS = 1 << 5,
    COUNTDOWN = 1 << 6,
    SPIKES = 1 << 7,
    CLONES = 1 << 8,
    POOP = 1 << 9,
    DEVIL = 1 << 10,
    ISSAC_HEART = 1 << 11,
    TNT = 1 << 12,
    INVINCIBLE = 1 << 13,
    SPAWN_FLY = 1 << 14,
    POISON_BURN = 1 << 15,
    CURSED_DOOR = 1 << 16,
    TIMER = 1 << 17,
    IV_BAG = 1 << 18,
    PITFALL = 1 << 19,
    CHEST = 1 << 20,
    FAKE = 1 << 21,
    BOOGER = 1 << 22,
    SPAWN_BLACK_HEART = 1 << 23,
    CRUSH = 1 << 24,
    NO_MODIFIERS = 1 << 25,
    SPAWN_RED_HEART = 1 << 26,
    SPAWN_COIN = 1 << 27,
    NO_PENALTIES = 1 << 28,
    SPAWN_TEMP_HEART = 1 << 29,
    IGNORE_ARMOR = 1 << 30,
    SPAWN_CARD = 1 << 31,
    SPAWN_RUNE = 1 << 32
}
____exports.DamageFlag = DamageFlagInternal
____exports.DamageFlagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.CacheFlag"] = function(...) 
local ____exports = {}
--- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename CacheFlag
local CacheFlagInternal = {
    DAMAGE = 1 << 0,
    FIRE_DELAY = 1 << 1,
    SHOT_SPEED = 1 << 2,
    RANGE = 1 << 3,
    SPEED = 1 << 4,
    TEAR_FLAG = 1 << 5,
    TEAR_COLOR = 1 << 6,
    FLYING = 1 << 7,
    WEAPON = 1 << 8,
    FAMILIARS = 1 << 9,
    LUCK = 1 << 10,
    SIZE = 1 << 11,
    COLOR = 1 << 12,
    PICKUP_VISION = 1 << 13,
    ALL = (1 << 16) - 1,
    TWIN_SYNC = 1 << 31
}
____exports.CacheFlag = CacheFlagInternal
____exports.CacheFlagZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.flags.ActionTrigger"] = function(...) 
local ____exports = {}
--- This is represented as an object instead of an enum due to limitations with TypeScript enums. (We
-- want this type to be a child of the `BitFlag` type.)
-- 
-- @enum
-- @notExported
-- @rename ActionTrigger
local ActionTriggerInternal = {
    NONE = 1 << -1,
    BOMB_PLACED = 1 << 0,
    MOVED = 1 << 1,
    SHOOTING = 1 << 2,
    CARD_PILL_USED = 1 << 3,
    ITEM_ACTIVATED = 1 << 4,
    ITEMS_DROPPED = 1 << 5
}
____exports.ActionTrigger = ActionTriggerInternal
____exports.ActionTriggerZero = 0
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.collections.variants"] = function(...) 
local ____exports = {}
--- For `EntityType.PLAYER` (1).
____exports.PlayerVariant = {}
____exports.PlayerVariant.PLAYER = 0
____exports.PlayerVariant[____exports.PlayerVariant.PLAYER] = "PLAYER"
____exports.PlayerVariant.COOP_BABY = 1
____exports.PlayerVariant[____exports.PlayerVariant.COOP_BABY] = "COOP_BABY"
--- For `EntityType.TEAR` (2).
-- 
-- Generally, the `TearVariant` affects the graphics of the tear, while the `TearFlag` affects the
-- gameplay mechanic. For example, the Euthanasia collectible grants a chance for needle tears that
-- explode. `TearVariant.NEEDLE` makes the tear look like a needle, and the exploding effect comes
-- from `TearFlag.NEEDLE`.
-- 
-- However, there are some exceptions:
-- - `TearVariant.CHAOS_CARD` (9) - The variant grants the instant-kill property of the tear.
-- - `TearVariant.KEY_BLOOD` (44) - Sharp Key makes Isaac shoot key tears that deal extra damage.
--   Both the graphical effect and the extra damage are granted by this variant.
____exports.TearVariant = {}
____exports.TearVariant.BLUE = 0
____exports.TearVariant[____exports.TearVariant.BLUE] = "BLUE"
____exports.TearVariant.BLOOD = 1
____exports.TearVariant[____exports.TearVariant.BLOOD] = "BLOOD"
____exports.TearVariant.TOOTH = 2
____exports.TearVariant[____exports.TearVariant.TOOTH] = "TOOTH"
____exports.TearVariant.METALLIC = 3
____exports.TearVariant[____exports.TearVariant.METALLIC] = "METALLIC"
____exports.TearVariant.BOBS_HEAD = 4
____exports.TearVariant[____exports.TearVariant.BOBS_HEAD] = "BOBS_HEAD"
____exports.TearVariant.FIRE_MIND = 5
____exports.TearVariant[____exports.TearVariant.FIRE_MIND] = "FIRE_MIND"
____exports.TearVariant.DARK_MATTER = 6
____exports.TearVariant[____exports.TearVariant.DARK_MATTER] = "DARK_MATTER"
____exports.TearVariant.MYSTERIOUS = 7
____exports.TearVariant[____exports.TearVariant.MYSTERIOUS] = "MYSTERIOUS"
____exports.TearVariant.SCHYTHE = 8
____exports.TearVariant[____exports.TearVariant.SCHYTHE] = "SCHYTHE"
____exports.TearVariant.CHAOS_CARD = 9
____exports.TearVariant[____exports.TearVariant.CHAOS_CARD] = "CHAOS_CARD"
____exports.TearVariant.LOST_CONTACT = 10
____exports.TearVariant[____exports.TearVariant.LOST_CONTACT] = "LOST_CONTACT"
____exports.TearVariant.CUPID_BLUE = 11
____exports.TearVariant[____exports.TearVariant.CUPID_BLUE] = "CUPID_BLUE"
____exports.TearVariant.CUPID_BLOOD = 12
____exports.TearVariant[____exports.TearVariant.CUPID_BLOOD] = "CUPID_BLOOD"
____exports.TearVariant.NAIL = 13
____exports.TearVariant[____exports.TearVariant.NAIL] = "NAIL"
____exports.TearVariant.PUPULA = 14
____exports.TearVariant[____exports.TearVariant.PUPULA] = "PUPULA"
____exports.TearVariant.PUPULA_BLOOD = 15
____exports.TearVariant[____exports.TearVariant.PUPULA_BLOOD] = "PUPULA_BLOOD"
____exports.TearVariant.GODS_FLESH = 16
____exports.TearVariant[____exports.TearVariant.GODS_FLESH] = "GODS_FLESH"
____exports.TearVariant.GODS_FLESH_BLOOD = 17
____exports.TearVariant[____exports.TearVariant.GODS_FLESH_BLOOD] = "GODS_FLESH_BLOOD"
____exports.TearVariant.DIAMOND = 18
____exports.TearVariant[____exports.TearVariant.DIAMOND] = "DIAMOND"
____exports.TearVariant.EXPLOSIVO = 19
____exports.TearVariant[____exports.TearVariant.EXPLOSIVO] = "EXPLOSIVO"
____exports.TearVariant.COIN = 20
____exports.TearVariant[____exports.TearVariant.COIN] = "COIN"
____exports.TearVariant.MULTIDIMENSIONAL = 21
____exports.TearVariant[____exports.TearVariant.MULTIDIMENSIONAL] = "MULTIDIMENSIONAL"
____exports.TearVariant.STONE = 22
____exports.TearVariant[____exports.TearVariant.STONE] = "STONE"
____exports.TearVariant.NAIL_BLOOD = 23
____exports.TearVariant[____exports.TearVariant.NAIL_BLOOD] = "NAIL_BLOOD"
____exports.TearVariant.GLAUCOMA = 24
____exports.TearVariant[____exports.TearVariant.GLAUCOMA] = "GLAUCOMA"
____exports.TearVariant.GLAUCOMA_BLOOD = 25
____exports.TearVariant[____exports.TearVariant.GLAUCOMA_BLOOD] = "GLAUCOMA_BLOOD"
____exports.TearVariant.BOOGER = 26
____exports.TearVariant[____exports.TearVariant.BOOGER] = "BOOGER"
____exports.TearVariant.EGG = 27
____exports.TearVariant[____exports.TearVariant.EGG] = "EGG"
____exports.TearVariant.RAZOR = 28
____exports.TearVariant[____exports.TearVariant.RAZOR] = "RAZOR"
____exports.TearVariant.BONE = 29
____exports.TearVariant[____exports.TearVariant.BONE] = "BONE"
____exports.TearVariant.BLACK_TOOTH = 30
____exports.TearVariant[____exports.TearVariant.BLACK_TOOTH] = "BLACK_TOOTH"
____exports.TearVariant.NEEDLE = 31
____exports.TearVariant[____exports.TearVariant.NEEDLE] = "NEEDLE"
____exports.TearVariant.BELIAL = 32
____exports.TearVariant[____exports.TearVariant.BELIAL] = "BELIAL"
____exports.TearVariant.EYE = 33
____exports.TearVariant[____exports.TearVariant.EYE] = "EYE"
____exports.TearVariant.EYE_BLOOD = 34
____exports.TearVariant[____exports.TearVariant.EYE_BLOOD] = "EYE_BLOOD"
____exports.TearVariant.BALLOON = 35
____exports.TearVariant[____exports.TearVariant.BALLOON] = "BALLOON"
____exports.TearVariant.HUNGRY = 36
____exports.TearVariant[____exports.TearVariant.HUNGRY] = "HUNGRY"
____exports.TearVariant.BALLOON_BRIMSTONE = 37
____exports.TearVariant[____exports.TearVariant.BALLOON_BRIMSTONE] = "BALLOON_BRIMSTONE"
____exports.TearVariant.BALLOON_BOMB = 38
____exports.TearVariant[____exports.TearVariant.BALLOON_BOMB] = "BALLOON_BOMB"
____exports.TearVariant.FIST = 39
____exports.TearVariant[____exports.TearVariant.FIST] = "FIST"
____exports.TearVariant.GRID_ENTITY = 40
____exports.TearVariant[____exports.TearVariant.GRID_ENTITY] = "GRID_ENTITY"
____exports.TearVariant.ICE = 41
____exports.TearVariant[____exports.TearVariant.ICE] = "ICE"
____exports.TearVariant.ROCK = 42
____exports.TearVariant[____exports.TearVariant.ROCK] = "ROCK"
____exports.TearVariant.KEY = 43
____exports.TearVariant[____exports.TearVariant.KEY] = "KEY"
____exports.TearVariant.KEY_BLOOD = 44
____exports.TearVariant[____exports.TearVariant.KEY_BLOOD] = "KEY_BLOOD"
____exports.TearVariant.ERASER = 45
____exports.TearVariant[____exports.TearVariant.ERASER] = "ERASER"
____exports.TearVariant.FIRE = 46
____exports.TearVariant[____exports.TearVariant.FIRE] = "FIRE"
____exports.TearVariant.SWORD_BEAM = 47
____exports.TearVariant[____exports.TearVariant.SWORD_BEAM] = "SWORD_BEAM"
____exports.TearVariant.SPORE = 48
____exports.TearVariant[____exports.TearVariant.SPORE] = "SPORE"
____exports.TearVariant.TECH_SWORD_BEAM = 49
____exports.TearVariant[____exports.TearVariant.TECH_SWORD_BEAM] = "TECH_SWORD_BEAM"
____exports.TearVariant.FETUS = 50
____exports.TearVariant[____exports.TearVariant.FETUS] = "FETUS"
--- For `EntityType.FAMILIAR` (3).
____exports.FamiliarVariant = {}
____exports.FamiliarVariant.FAMILIAR_NULL = 0
____exports.FamiliarVariant[____exports.FamiliarVariant.FAMILIAR_NULL] = "FAMILIAR_NULL"
____exports.FamiliarVariant.BROTHER_BOBBY = 1
____exports.FamiliarVariant[____exports.FamiliarVariant.BROTHER_BOBBY] = "BROTHER_BOBBY"
____exports.FamiliarVariant.DEMON_BABY = 2
____exports.FamiliarVariant[____exports.FamiliarVariant.DEMON_BABY] = "DEMON_BABY"
____exports.FamiliarVariant.LITTLE_CHUBBY = 3
____exports.FamiliarVariant[____exports.FamiliarVariant.LITTLE_CHUBBY] = "LITTLE_CHUBBY"
____exports.FamiliarVariant.LITTLE_GISH = 4
____exports.FamiliarVariant[____exports.FamiliarVariant.LITTLE_GISH] = "LITTLE_GISH"
____exports.FamiliarVariant.LITTLE_STEVEN = 5
____exports.FamiliarVariant[____exports.FamiliarVariant.LITTLE_STEVEN] = "LITTLE_STEVEN"
____exports.FamiliarVariant.ROBO_BABY = 6
____exports.FamiliarVariant[____exports.FamiliarVariant.ROBO_BABY] = "ROBO_BABY"
____exports.FamiliarVariant.SISTER_MAGGY = 7
____exports.FamiliarVariant[____exports.FamiliarVariant.SISTER_MAGGY] = "SISTER_MAGGY"
____exports.FamiliarVariant.ABEL = 8
____exports.FamiliarVariant[____exports.FamiliarVariant.ABEL] = "ABEL"
____exports.FamiliarVariant.GHOST_BABY = 9
____exports.FamiliarVariant[____exports.FamiliarVariant.GHOST_BABY] = "GHOST_BABY"
____exports.FamiliarVariant.HARLEQUIN_BABY = 10
____exports.FamiliarVariant[____exports.FamiliarVariant.HARLEQUIN_BABY] = "HARLEQUIN_BABY"
____exports.FamiliarVariant.RAINBOW_BABY = 11
____exports.FamiliarVariant[____exports.FamiliarVariant.RAINBOW_BABY] = "RAINBOW_BABY"
____exports.FamiliarVariant.ISAACS_HEAD = 12
____exports.FamiliarVariant[____exports.FamiliarVariant.ISAACS_HEAD] = "ISAACS_HEAD"
____exports.FamiliarVariant.BLUE_BABY_SOUL = 13
____exports.FamiliarVariant[____exports.FamiliarVariant.BLUE_BABY_SOUL] = "BLUE_BABY_SOUL"
____exports.FamiliarVariant.DEAD_BIRD = 14
____exports.FamiliarVariant[____exports.FamiliarVariant.DEAD_BIRD] = "DEAD_BIRD"
____exports.FamiliarVariant.EVES_BIRD_FOOT = 15
____exports.FamiliarVariant[____exports.FamiliarVariant.EVES_BIRD_FOOT] = "EVES_BIRD_FOOT"
____exports.FamiliarVariant.DADDY_LONGLEGS = 16
____exports.FamiliarVariant[____exports.FamiliarVariant.DADDY_LONGLEGS] = "DADDY_LONGLEGS"
____exports.FamiliarVariant.PEEPER = 17
____exports.FamiliarVariant[____exports.FamiliarVariant.PEEPER] = "PEEPER"
____exports.FamiliarVariant.BOMB_BAG = 20
____exports.FamiliarVariant[____exports.FamiliarVariant.BOMB_BAG] = "BOMB_BAG"
____exports.FamiliarVariant.SACK_OF_PENNIES = 21
____exports.FamiliarVariant[____exports.FamiliarVariant.SACK_OF_PENNIES] = "SACK_OF_PENNIES"
____exports.FamiliarVariant.LITTLE_CHAD = 22
____exports.FamiliarVariant[____exports.FamiliarVariant.LITTLE_CHAD] = "LITTLE_CHAD"
____exports.FamiliarVariant.RELIC = 23
____exports.FamiliarVariant[____exports.FamiliarVariant.RELIC] = "RELIC"
____exports.FamiliarVariant.BUM_FRIEND = 24
____exports.FamiliarVariant[____exports.FamiliarVariant.BUM_FRIEND] = "BUM_FRIEND"
____exports.FamiliarVariant.HOLY_WATER = 25
____exports.FamiliarVariant[____exports.FamiliarVariant.HOLY_WATER] = "HOLY_WATER"
____exports.FamiliarVariant.KEY_PIECE_1 = 26
____exports.FamiliarVariant[____exports.FamiliarVariant.KEY_PIECE_1] = "KEY_PIECE_1"
____exports.FamiliarVariant.KEY_PIECE_2 = 27
____exports.FamiliarVariant[____exports.FamiliarVariant.KEY_PIECE_2] = "KEY_PIECE_2"
____exports.FamiliarVariant.KEY_FULL = 28
____exports.FamiliarVariant[____exports.FamiliarVariant.KEY_FULL] = "KEY_FULL"
____exports.FamiliarVariant.FOREVER_ALONE = 30
____exports.FamiliarVariant[____exports.FamiliarVariant.FOREVER_ALONE] = "FOREVER_ALONE"
____exports.FamiliarVariant.DISTANT_ADMIRATION = 31
____exports.FamiliarVariant[____exports.FamiliarVariant.DISTANT_ADMIRATION] = "DISTANT_ADMIRATION"
____exports.FamiliarVariant.GUARDIAN_ANGEL = 32
____exports.FamiliarVariant[____exports.FamiliarVariant.GUARDIAN_ANGEL] = "GUARDIAN_ANGEL"
____exports.FamiliarVariant.FLY_ORBITAL = 33
____exports.FamiliarVariant[____exports.FamiliarVariant.FLY_ORBITAL] = "FLY_ORBITAL"
____exports.FamiliarVariant.SACRIFICIAL_DAGGER = 35
____exports.FamiliarVariant[____exports.FamiliarVariant.SACRIFICIAL_DAGGER] = "SACRIFICIAL_DAGGER"
____exports.FamiliarVariant.DEAD_CAT = 40
____exports.FamiliarVariant[____exports.FamiliarVariant.DEAD_CAT] = "DEAD_CAT"
____exports.FamiliarVariant.ONE_UP = 41
____exports.FamiliarVariant[____exports.FamiliarVariant.ONE_UP] = "ONE_UP"
____exports.FamiliarVariant.GUPPYS_HAIRBALL = 42
____exports.FamiliarVariant[____exports.FamiliarVariant.GUPPYS_HAIRBALL] = "GUPPYS_HAIRBALL"
____exports.FamiliarVariant.BLUE_FLY = 43
____exports.FamiliarVariant[____exports.FamiliarVariant.BLUE_FLY] = "BLUE_FLY"
____exports.FamiliarVariant.CUBE_OF_MEAT_1 = 44
____exports.FamiliarVariant[____exports.FamiliarVariant.CUBE_OF_MEAT_1] = "CUBE_OF_MEAT_1"
____exports.FamiliarVariant.CUBE_OF_MEAT_2 = 45
____exports.FamiliarVariant[____exports.FamiliarVariant.CUBE_OF_MEAT_2] = "CUBE_OF_MEAT_2"
____exports.FamiliarVariant.CUBE_OF_MEAT_3 = 46
____exports.FamiliarVariant[____exports.FamiliarVariant.CUBE_OF_MEAT_3] = "CUBE_OF_MEAT_3"
____exports.FamiliarVariant.CUBE_OF_MEAT_4 = 47
____exports.FamiliarVariant[____exports.FamiliarVariant.CUBE_OF_MEAT_4] = "CUBE_OF_MEAT_4"
____exports.FamiliarVariant.ISAACS_BODY = 48
____exports.FamiliarVariant[____exports.FamiliarVariant.ISAACS_BODY] = "ISAACS_BODY"
____exports.FamiliarVariant.SMART_FLY = 50
____exports.FamiliarVariant[____exports.FamiliarVariant.SMART_FLY] = "SMART_FLY"
____exports.FamiliarVariant.DRY_BABY = 51
____exports.FamiliarVariant[____exports.FamiliarVariant.DRY_BABY] = "DRY_BABY"
____exports.FamiliarVariant.JUICY_SACK = 52
____exports.FamiliarVariant[____exports.FamiliarVariant.JUICY_SACK] = "JUICY_SACK"
____exports.FamiliarVariant.ROBO_BABY_2 = 53
____exports.FamiliarVariant[____exports.FamiliarVariant.ROBO_BABY_2] = "ROBO_BABY_2"
____exports.FamiliarVariant.ROTTEN_BABY = 54
____exports.FamiliarVariant[____exports.FamiliarVariant.ROTTEN_BABY] = "ROTTEN_BABY"
____exports.FamiliarVariant.HEADLESS_BABY = 55
____exports.FamiliarVariant[____exports.FamiliarVariant.HEADLESS_BABY] = "HEADLESS_BABY"
____exports.FamiliarVariant.LEECH = 56
____exports.FamiliarVariant[____exports.FamiliarVariant.LEECH] = "LEECH"
____exports.FamiliarVariant.MYSTERY_SACK = 57
____exports.FamiliarVariant[____exports.FamiliarVariant.MYSTERY_SACK] = "MYSTERY_SACK"
____exports.FamiliarVariant.BBF = 58
____exports.FamiliarVariant[____exports.FamiliarVariant.BBF] = "BBF"
____exports.FamiliarVariant.BOBS_BRAIN = 59
____exports.FamiliarVariant[____exports.FamiliarVariant.BOBS_BRAIN] = "BOBS_BRAIN"
____exports.FamiliarVariant.BEST_BUD = 60
____exports.FamiliarVariant[____exports.FamiliarVariant.BEST_BUD] = "BEST_BUD"
____exports.FamiliarVariant.LIL_BRIMSTONE = 61
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_BRIMSTONE] = "LIL_BRIMSTONE"
____exports.FamiliarVariant.ISAACS_HEART = 62
____exports.FamiliarVariant[____exports.FamiliarVariant.ISAACS_HEART] = "ISAACS_HEART"
____exports.FamiliarVariant.LIL_HAUNT = 63
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_HAUNT] = "LIL_HAUNT"
____exports.FamiliarVariant.DARK_BUM = 64
____exports.FamiliarVariant[____exports.FamiliarVariant.DARK_BUM] = "DARK_BUM"
____exports.FamiliarVariant.BIG_FAN = 65
____exports.FamiliarVariant[____exports.FamiliarVariant.BIG_FAN] = "BIG_FAN"
____exports.FamiliarVariant.SISSY_LONGLEGS = 66
____exports.FamiliarVariant[____exports.FamiliarVariant.SISSY_LONGLEGS] = "SISSY_LONGLEGS"
____exports.FamiliarVariant.PUNCHING_BAG = 67
____exports.FamiliarVariant[____exports.FamiliarVariant.PUNCHING_BAG] = "PUNCHING_BAG"
____exports.FamiliarVariant.GUILLOTINE = 68
____exports.FamiliarVariant[____exports.FamiliarVariant.GUILLOTINE] = "GUILLOTINE"
____exports.FamiliarVariant.BALL_OF_BANDAGES_1 = 69
____exports.FamiliarVariant[____exports.FamiliarVariant.BALL_OF_BANDAGES_1] = "BALL_OF_BANDAGES_1"
____exports.FamiliarVariant.BALL_OF_BANDAGES_2 = 70
____exports.FamiliarVariant[____exports.FamiliarVariant.BALL_OF_BANDAGES_2] = "BALL_OF_BANDAGES_2"
____exports.FamiliarVariant.BALL_OF_BANDAGES_3 = 71
____exports.FamiliarVariant[____exports.FamiliarVariant.BALL_OF_BANDAGES_3] = "BALL_OF_BANDAGES_3"
____exports.FamiliarVariant.BALL_OF_BANDAGES_4 = 72
____exports.FamiliarVariant[____exports.FamiliarVariant.BALL_OF_BANDAGES_4] = "BALL_OF_BANDAGES_4"
____exports.FamiliarVariant.BLUE_SPIDER = 73
____exports.FamiliarVariant[____exports.FamiliarVariant.BLUE_SPIDER] = "BLUE_SPIDER"
____exports.FamiliarVariant.MONGO_BABY = 74
____exports.FamiliarVariant[____exports.FamiliarVariant.MONGO_BABY] = "MONGO_BABY"
____exports.FamiliarVariant.SAMSONS_CHAINS = 75
____exports.FamiliarVariant[____exports.FamiliarVariant.SAMSONS_CHAINS] = "SAMSONS_CHAINS"
____exports.FamiliarVariant.CAINS_OTHER_EYE = 76
____exports.FamiliarVariant[____exports.FamiliarVariant.CAINS_OTHER_EYE] = "CAINS_OTHER_EYE"
____exports.FamiliarVariant.BLUE_BABYS_ONLY_FRIEND = 77
____exports.FamiliarVariant[____exports.FamiliarVariant.BLUE_BABYS_ONLY_FRIEND] = "BLUE_BABYS_ONLY_FRIEND"
____exports.FamiliarVariant.SCISSORS = 78
____exports.FamiliarVariant[____exports.FamiliarVariant.SCISSORS] = "SCISSORS"
____exports.FamiliarVariant.GEMINI = 79
____exports.FamiliarVariant[____exports.FamiliarVariant.GEMINI] = "GEMINI"
____exports.FamiliarVariant.INCUBUS = 80
____exports.FamiliarVariant[____exports.FamiliarVariant.INCUBUS] = "INCUBUS"
____exports.FamiliarVariant.FATES_REWARD = 81
____exports.FamiliarVariant[____exports.FamiliarVariant.FATES_REWARD] = "FATES_REWARD"
____exports.FamiliarVariant.LIL_CHEST = 82
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_CHEST] = "LIL_CHEST"
____exports.FamiliarVariant.SWORN_PROTECTOR = 83
____exports.FamiliarVariant[____exports.FamiliarVariant.SWORN_PROTECTOR] = "SWORN_PROTECTOR"
____exports.FamiliarVariant.FRIEND_ZONE = 84
____exports.FamiliarVariant[____exports.FamiliarVariant.FRIEND_ZONE] = "FRIEND_ZONE"
____exports.FamiliarVariant.LOST_FLY = 85
____exports.FamiliarVariant[____exports.FamiliarVariant.LOST_FLY] = "LOST_FLY"
____exports.FamiliarVariant.CHARGED_BABY = 86
____exports.FamiliarVariant[____exports.FamiliarVariant.CHARGED_BABY] = "CHARGED_BABY"
____exports.FamiliarVariant.LIL_GURDY = 87
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_GURDY] = "LIL_GURDY"
____exports.FamiliarVariant.BUMBO = 88
____exports.FamiliarVariant[____exports.FamiliarVariant.BUMBO] = "BUMBO"
____exports.FamiliarVariant.CENSER = 89
____exports.FamiliarVariant[____exports.FamiliarVariant.CENSER] = "CENSER"
____exports.FamiliarVariant.KEY_BUM = 90
____exports.FamiliarVariant[____exports.FamiliarVariant.KEY_BUM] = "KEY_BUM"
____exports.FamiliarVariant.RUNE_BAG = 91
____exports.FamiliarVariant[____exports.FamiliarVariant.RUNE_BAG] = "RUNE_BAG"
____exports.FamiliarVariant.SERAPHIM = 92
____exports.FamiliarVariant[____exports.FamiliarVariant.SERAPHIM] = "SERAPHIM"
____exports.FamiliarVariant.GB_BUG = 93
____exports.FamiliarVariant[____exports.FamiliarVariant.GB_BUG] = "GB_BUG"
____exports.FamiliarVariant.SPIDER_MOD = 94
____exports.FamiliarVariant[____exports.FamiliarVariant.SPIDER_MOD] = "SPIDER_MOD"
____exports.FamiliarVariant.FARTING_BABY = 95
____exports.FamiliarVariant[____exports.FamiliarVariant.FARTING_BABY] = "FARTING_BABY"
____exports.FamiliarVariant.SUCCUBUS = 96
____exports.FamiliarVariant[____exports.FamiliarVariant.SUCCUBUS] = "SUCCUBUS"
____exports.FamiliarVariant.LIL_LOKI = 97
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_LOKI] = "LIL_LOKI"
____exports.FamiliarVariant.OBSESSED_FAN = 98
____exports.FamiliarVariant[____exports.FamiliarVariant.OBSESSED_FAN] = "OBSESSED_FAN"
____exports.FamiliarVariant.PAPA_FLY = 99
____exports.FamiliarVariant[____exports.FamiliarVariant.PAPA_FLY] = "PAPA_FLY"
____exports.FamiliarVariant.MILK = 100
____exports.FamiliarVariant[____exports.FamiliarVariant.MILK] = "MILK"
____exports.FamiliarVariant.MULTIDIMENSIONAL_BABY = 101
____exports.FamiliarVariant[____exports.FamiliarVariant.MULTIDIMENSIONAL_BABY] = "MULTIDIMENSIONAL_BABY"
____exports.FamiliarVariant.SUPER_BUM = 102
____exports.FamiliarVariant[____exports.FamiliarVariant.SUPER_BUM] = "SUPER_BUM"
____exports.FamiliarVariant.TONSIL = 103
____exports.FamiliarVariant[____exports.FamiliarVariant.TONSIL] = "TONSIL"
____exports.FamiliarVariant.BIG_CHUBBY = 104
____exports.FamiliarVariant[____exports.FamiliarVariant.BIG_CHUBBY] = "BIG_CHUBBY"
____exports.FamiliarVariant.DEPRESSION = 105
____exports.FamiliarVariant[____exports.FamiliarVariant.DEPRESSION] = "DEPRESSION"
____exports.FamiliarVariant.SHADE = 106
____exports.FamiliarVariant[____exports.FamiliarVariant.SHADE] = "SHADE"
____exports.FamiliarVariant.HUSHY = 107
____exports.FamiliarVariant[____exports.FamiliarVariant.HUSHY] = "HUSHY"
____exports.FamiliarVariant.LIL_MONSTRO = 108
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_MONSTRO] = "LIL_MONSTRO"
____exports.FamiliarVariant.KING_BABY = 109
____exports.FamiliarVariant[____exports.FamiliarVariant.KING_BABY] = "KING_BABY"
____exports.FamiliarVariant.FINGER = 110
____exports.FamiliarVariant[____exports.FamiliarVariant.FINGER] = "FINGER"
____exports.FamiliarVariant.YO_LISTEN = 111
____exports.FamiliarVariant[____exports.FamiliarVariant.YO_LISTEN] = "YO_LISTEN"
____exports.FamiliarVariant.ACID_BABY = 112
____exports.FamiliarVariant[____exports.FamiliarVariant.ACID_BABY] = "ACID_BABY"
____exports.FamiliarVariant.SPIDER_BABY = 113
____exports.FamiliarVariant[____exports.FamiliarVariant.SPIDER_BABY] = "SPIDER_BABY"
____exports.FamiliarVariant.SACK_OF_SACKS = 114
____exports.FamiliarVariant[____exports.FamiliarVariant.SACK_OF_SACKS] = "SACK_OF_SACKS"
____exports.FamiliarVariant.BROWN_NUGGET_POOTER = 115
____exports.FamiliarVariant[____exports.FamiliarVariant.BROWN_NUGGET_POOTER] = "BROWN_NUGGET_POOTER"
____exports.FamiliarVariant.BLOODSHOT_EYE = 116
____exports.FamiliarVariant[____exports.FamiliarVariant.BLOODSHOT_EYE] = "BLOODSHOT_EYE"
____exports.FamiliarVariant.MOMS_RAZOR = 117
____exports.FamiliarVariant[____exports.FamiliarVariant.MOMS_RAZOR] = "MOMS_RAZOR"
____exports.FamiliarVariant.ANGRY_FLY = 118
____exports.FamiliarVariant[____exports.FamiliarVariant.ANGRY_FLY] = "ANGRY_FLY"
____exports.FamiliarVariant.BUDDY_IN_A_BOX = 119
____exports.FamiliarVariant[____exports.FamiliarVariant.BUDDY_IN_A_BOX] = "BUDDY_IN_A_BOX"
____exports.FamiliarVariant.SPRINKLER = 120
____exports.FamiliarVariant[____exports.FamiliarVariant.SPRINKLER] = "SPRINKLER"
____exports.FamiliarVariant.LEPROSY = 121
____exports.FamiliarVariant[____exports.FamiliarVariant.LEPROSY] = "LEPROSY"
____exports.FamiliarVariant.LIL_HARBINGERS = 122
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_HARBINGERS] = "LIL_HARBINGERS"
____exports.FamiliarVariant.ANGELIC_PRISM = 123
____exports.FamiliarVariant[____exports.FamiliarVariant.ANGELIC_PRISM] = "ANGELIC_PRISM"
____exports.FamiliarVariant.MYSTERY_EGG = 124
____exports.FamiliarVariant[____exports.FamiliarVariant.MYSTERY_EGG] = "MYSTERY_EGG"
____exports.FamiliarVariant.LIL_SPEWER = 125
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_SPEWER] = "LIL_SPEWER"
____exports.FamiliarVariant.SLIPPED_RIB = 126
____exports.FamiliarVariant[____exports.FamiliarVariant.SLIPPED_RIB] = "SLIPPED_RIB"
____exports.FamiliarVariant.POINTY_RIB = 127
____exports.FamiliarVariant[____exports.FamiliarVariant.POINTY_RIB] = "POINTY_RIB"
____exports.FamiliarVariant.BONE_ORBITAL = 128
____exports.FamiliarVariant[____exports.FamiliarVariant.BONE_ORBITAL] = "BONE_ORBITAL"
____exports.FamiliarVariant.HALLOWED_GROUND = 129
____exports.FamiliarVariant[____exports.FamiliarVariant.HALLOWED_GROUND] = "HALLOWED_GROUND"
____exports.FamiliarVariant.JAW_BONE = 130
____exports.FamiliarVariant[____exports.FamiliarVariant.JAW_BONE] = "JAW_BONE"
____exports.FamiliarVariant.INTRUDER = 200
____exports.FamiliarVariant[____exports.FamiliarVariant.INTRUDER] = "INTRUDER"
____exports.FamiliarVariant.DIP = 201
____exports.FamiliarVariant[____exports.FamiliarVariant.DIP] = "DIP"
____exports.FamiliarVariant.DAMOCLES = 202
____exports.FamiliarVariant[____exports.FamiliarVariant.DAMOCLES] = "DAMOCLES"
____exports.FamiliarVariant.BLOOD_OATH = 203
____exports.FamiliarVariant[____exports.FamiliarVariant.BLOOD_OATH] = "BLOOD_OATH"
____exports.FamiliarVariant.PSY_FLY = 204
____exports.FamiliarVariant[____exports.FamiliarVariant.PSY_FLY] = "PSY_FLY"
____exports.FamiliarVariant.MENORAH = 205
____exports.FamiliarVariant[____exports.FamiliarVariant.MENORAH] = "MENORAH"
____exports.FamiliarVariant.WISP = 206
____exports.FamiliarVariant[____exports.FamiliarVariant.WISP] = "WISP"
____exports.FamiliarVariant.PEEPER_2 = 207
____exports.FamiliarVariant[____exports.FamiliarVariant.PEEPER_2] = "PEEPER_2"
____exports.FamiliarVariant.BOILED_BABY = 208
____exports.FamiliarVariant[____exports.FamiliarVariant.BOILED_BABY] = "BOILED_BABY"
____exports.FamiliarVariant.FREEZER_BABY = 209
____exports.FamiliarVariant[____exports.FamiliarVariant.FREEZER_BABY] = "FREEZER_BABY"
____exports.FamiliarVariant.BIRD_CAGE = 210
____exports.FamiliarVariant[____exports.FamiliarVariant.BIRD_CAGE] = "BIRD_CAGE"
____exports.FamiliarVariant.LOST_SOUL = 211
____exports.FamiliarVariant[____exports.FamiliarVariant.LOST_SOUL] = "LOST_SOUL"
____exports.FamiliarVariant.LIL_DUMPY = 212
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_DUMPY] = "LIL_DUMPY"
____exports.FamiliarVariant.KNIFE_PIECE_1 = 213
____exports.FamiliarVariant[____exports.FamiliarVariant.KNIFE_PIECE_1] = "KNIFE_PIECE_1"
____exports.FamiliarVariant.KNIFE_PIECE_2 = 214
____exports.FamiliarVariant[____exports.FamiliarVariant.KNIFE_PIECE_2] = "KNIFE_PIECE_2"
____exports.FamiliarVariant.TINYTOMA = 216
____exports.FamiliarVariant[____exports.FamiliarVariant.TINYTOMA] = "TINYTOMA"
____exports.FamiliarVariant.TINYTOMA_2 = 217
____exports.FamiliarVariant[____exports.FamiliarVariant.TINYTOMA_2] = "TINYTOMA_2"
____exports.FamiliarVariant.BOT_FLY = 218
____exports.FamiliarVariant[____exports.FamiliarVariant.BOT_FLY] = "BOT_FLY"
____exports.FamiliarVariant.SIREN_MINION = 220
____exports.FamiliarVariant[____exports.FamiliarVariant.SIREN_MINION] = "SIREN_MINION"
____exports.FamiliarVariant.PASCHAL_CANDLE = 221
____exports.FamiliarVariant[____exports.FamiliarVariant.PASCHAL_CANDLE] = "PASCHAL_CANDLE"
____exports.FamiliarVariant.STITCHES = 222
____exports.FamiliarVariant[____exports.FamiliarVariant.STITCHES] = "STITCHES"
____exports.FamiliarVariant.KNIFE_FULL = 223
____exports.FamiliarVariant[____exports.FamiliarVariant.KNIFE_FULL] = "KNIFE_FULL"
____exports.FamiliarVariant.BABY_PLUM = 224
____exports.FamiliarVariant[____exports.FamiliarVariant.BABY_PLUM] = "BABY_PLUM"
____exports.FamiliarVariant.FRUITY_PLUM = 225
____exports.FamiliarVariant[____exports.FamiliarVariant.FRUITY_PLUM] = "FRUITY_PLUM"
____exports.FamiliarVariant.SPIN_TO_WIN = 226
____exports.FamiliarVariant[____exports.FamiliarVariant.SPIN_TO_WIN] = "SPIN_TO_WIN"
____exports.FamiliarVariant.MINISAAC = 228
____exports.FamiliarVariant[____exports.FamiliarVariant.MINISAAC] = "MINISAAC"
____exports.FamiliarVariant.SWARM_FLY_ORBITAL = 229
____exports.FamiliarVariant[____exports.FamiliarVariant.SWARM_FLY_ORBITAL] = "SWARM_FLY_ORBITAL"
____exports.FamiliarVariant.LIL_ABADDON = 230
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_ABADDON] = "LIL_ABADDON"
____exports.FamiliarVariant.ABYSS_LOCUST = 231
____exports.FamiliarVariant[____exports.FamiliarVariant.ABYSS_LOCUST] = "ABYSS_LOCUST"
____exports.FamiliarVariant.LIL_PORTAL = 232
____exports.FamiliarVariant[____exports.FamiliarVariant.LIL_PORTAL] = "LIL_PORTAL"
____exports.FamiliarVariant.WORM_FRIEND = 233
____exports.FamiliarVariant[____exports.FamiliarVariant.WORM_FRIEND] = "WORM_FRIEND"
____exports.FamiliarVariant.BONE_SPUR = 234
____exports.FamiliarVariant[____exports.FamiliarVariant.BONE_SPUR] = "BONE_SPUR"
____exports.FamiliarVariant.TWISTED_BABY = 235
____exports.FamiliarVariant[____exports.FamiliarVariant.TWISTED_BABY] = "TWISTED_BABY"
____exports.FamiliarVariant.STAR_OF_BETHLEHEM = 236
____exports.FamiliarVariant[____exports.FamiliarVariant.STAR_OF_BETHLEHEM] = "STAR_OF_BETHLEHEM"
____exports.FamiliarVariant.ITEM_WISP = 237
____exports.FamiliarVariant[____exports.FamiliarVariant.ITEM_WISP] = "ITEM_WISP"
____exports.FamiliarVariant.BLOOD_BABY = 238
____exports.FamiliarVariant[____exports.FamiliarVariant.BLOOD_BABY] = "BLOOD_BABY"
____exports.FamiliarVariant.CUBE_BABY = 239
____exports.FamiliarVariant[____exports.FamiliarVariant.CUBE_BABY] = "CUBE_BABY"
____exports.FamiliarVariant.UMBILICAL_BABY = 240
____exports.FamiliarVariant[____exports.FamiliarVariant.UMBILICAL_BABY] = "UMBILICAL_BABY"
____exports.FamiliarVariant.BLOOD_PUPPY = 241
____exports.FamiliarVariant[____exports.FamiliarVariant.BLOOD_PUPPY] = "BLOOD_PUPPY"
____exports.FamiliarVariant.VANISHING_TWIN = 242
____exports.FamiliarVariant[____exports.FamiliarVariant.VANISHING_TWIN] = "VANISHING_TWIN"
____exports.FamiliarVariant.DECAP_ATTACK = 243
____exports.FamiliarVariant[____exports.FamiliarVariant.DECAP_ATTACK] = "DECAP_ATTACK"
____exports.FamiliarVariant.FORGOTTEN_BODY = 900
____exports.FamiliarVariant[____exports.FamiliarVariant.FORGOTTEN_BODY] = "FORGOTTEN_BODY"
--- For `EntityType.BOMB` (4).
____exports.BombVariant = {}
____exports.BombVariant.NORMAL = 0
____exports.BombVariant[____exports.BombVariant.NORMAL] = "NORMAL"
____exports.BombVariant.BIG = 1
____exports.BombVariant[____exports.BombVariant.BIG] = "BIG"
____exports.BombVariant.DECOY = 2
____exports.BombVariant[____exports.BombVariant.DECOY] = "DECOY"
____exports.BombVariant.TROLL = 3
____exports.BombVariant[____exports.BombVariant.TROLL] = "TROLL"
____exports.BombVariant.MEGA_TROLL = 4
____exports.BombVariant[____exports.BombVariant.MEGA_TROLL] = "MEGA_TROLL"
____exports.BombVariant.POISON = 5
____exports.BombVariant[____exports.BombVariant.POISON] = "POISON"
____exports.BombVariant.POISON_BIG = 6
____exports.BombVariant[____exports.BombVariant.POISON_BIG] = "POISON_BIG"
____exports.BombVariant.SAD = 7
____exports.BombVariant[____exports.BombVariant.SAD] = "SAD"
____exports.BombVariant.HOT = 8
____exports.BombVariant[____exports.BombVariant.HOT] = "HOT"
____exports.BombVariant.BUTT = 9
____exports.BombVariant[____exports.BombVariant.BUTT] = "BUTT"
____exports.BombVariant.MR_MEGA = 10
____exports.BombVariant[____exports.BombVariant.MR_MEGA] = "MR_MEGA"
____exports.BombVariant.BOBBY = 11
____exports.BombVariant[____exports.BombVariant.BOBBY] = "BOBBY"
____exports.BombVariant.GLITTER = 12
____exports.BombVariant[____exports.BombVariant.GLITTER] = "GLITTER"
____exports.BombVariant.THROWABLE = 13
____exports.BombVariant[____exports.BombVariant.THROWABLE] = "THROWABLE"
____exports.BombVariant.SMALL = 14
____exports.BombVariant[____exports.BombVariant.SMALL] = "SMALL"
____exports.BombVariant.BRIMSTONE = 15
____exports.BombVariant[____exports.BombVariant.BRIMSTONE] = "BRIMSTONE"
____exports.BombVariant.SAD_BLOOD = 16
____exports.BombVariant[____exports.BombVariant.SAD_BLOOD] = "SAD_BLOOD"
____exports.BombVariant.GIGA = 17
____exports.BombVariant[____exports.BombVariant.GIGA] = "GIGA"
____exports.BombVariant.GOLDEN_TROLL = 18
____exports.BombVariant[____exports.BombVariant.GOLDEN_TROLL] = "GOLDEN_TROLL"
____exports.BombVariant.ROCKET = 19
____exports.BombVariant[____exports.BombVariant.ROCKET] = "ROCKET"
____exports.BombVariant.ROCKET_GIGA = 20
____exports.BombVariant[____exports.BombVariant.ROCKET_GIGA] = "ROCKET_GIGA"
--- For `EntityType.PICKUP` (5).
____exports.PickupVariant = {}
____exports.PickupVariant.NULL = 0
____exports.PickupVariant[____exports.PickupVariant.NULL] = "NULL"
____exports.PickupVariant.HEART = 10
____exports.PickupVariant[____exports.PickupVariant.HEART] = "HEART"
____exports.PickupVariant.COIN = 20
____exports.PickupVariant[____exports.PickupVariant.COIN] = "COIN"
____exports.PickupVariant.KEY = 30
____exports.PickupVariant[____exports.PickupVariant.KEY] = "KEY"
____exports.PickupVariant.BOMB = 40
____exports.PickupVariant[____exports.PickupVariant.BOMB] = "BOMB"
____exports.PickupVariant.THROWABLE_BOMB = 41
____exports.PickupVariant[____exports.PickupVariant.THROWABLE_BOMB] = "THROWABLE_BOMB"
____exports.PickupVariant.POOP = 42
____exports.PickupVariant[____exports.PickupVariant.POOP] = "POOP"
____exports.PickupVariant.CHEST = 50
____exports.PickupVariant[____exports.PickupVariant.CHEST] = "CHEST"
____exports.PickupVariant.BOMB_CHEST = 51
____exports.PickupVariant[____exports.PickupVariant.BOMB_CHEST] = "BOMB_CHEST"
____exports.PickupVariant.SPIKED_CHEST = 52
____exports.PickupVariant[____exports.PickupVariant.SPIKED_CHEST] = "SPIKED_CHEST"
____exports.PickupVariant.ETERNAL_CHEST = 53
____exports.PickupVariant[____exports.PickupVariant.ETERNAL_CHEST] = "ETERNAL_CHEST"
____exports.PickupVariant.MIMIC_CHEST = 54
____exports.PickupVariant[____exports.PickupVariant.MIMIC_CHEST] = "MIMIC_CHEST"
____exports.PickupVariant.OLD_CHEST = 55
____exports.PickupVariant[____exports.PickupVariant.OLD_CHEST] = "OLD_CHEST"
____exports.PickupVariant.WOODEN_CHEST = 56
____exports.PickupVariant[____exports.PickupVariant.WOODEN_CHEST] = "WOODEN_CHEST"
____exports.PickupVariant.MEGA_CHEST = 57
____exports.PickupVariant[____exports.PickupVariant.MEGA_CHEST] = "MEGA_CHEST"
____exports.PickupVariant.HAUNTED_CHEST = 58
____exports.PickupVariant[____exports.PickupVariant.HAUNTED_CHEST] = "HAUNTED_CHEST"
____exports.PickupVariant.LOCKED_CHEST = 60
____exports.PickupVariant[____exports.PickupVariant.LOCKED_CHEST] = "LOCKED_CHEST"
____exports.PickupVariant.SACK = 69
____exports.PickupVariant[____exports.PickupVariant.SACK] = "SACK"
____exports.PickupVariant.PILL = 70
____exports.PickupVariant[____exports.PickupVariant.PILL] = "PILL"
____exports.PickupVariant.LIL_BATTERY = 90
____exports.PickupVariant[____exports.PickupVariant.LIL_BATTERY] = "LIL_BATTERY"
____exports.PickupVariant.COLLECTIBLE = 100
____exports.PickupVariant[____exports.PickupVariant.COLLECTIBLE] = "COLLECTIBLE"
____exports.PickupVariant.BROKEN_SHOVEL = 110
____exports.PickupVariant[____exports.PickupVariant.BROKEN_SHOVEL] = "BROKEN_SHOVEL"
____exports.PickupVariant.SHOP_ITEM = 150
____exports.PickupVariant[____exports.PickupVariant.SHOP_ITEM] = "SHOP_ITEM"
____exports.PickupVariant.CARD = 300
____exports.PickupVariant[____exports.PickupVariant.CARD] = "CARD"
____exports.PickupVariant.BIG_CHEST = 340
____exports.PickupVariant[____exports.PickupVariant.BIG_CHEST] = "BIG_CHEST"
____exports.PickupVariant.TRINKET = 350
____exports.PickupVariant[____exports.PickupVariant.TRINKET] = "TRINKET"
____exports.PickupVariant.RED_CHEST = 360
____exports.PickupVariant[____exports.PickupVariant.RED_CHEST] = "RED_CHEST"
____exports.PickupVariant.TROPHY = 370
____exports.PickupVariant[____exports.PickupVariant.TROPHY] = "TROPHY"
____exports.PickupVariant.BED = 380
____exports.PickupVariant[____exports.PickupVariant.BED] = "BED"
____exports.PickupVariant.MOMS_CHEST = 390
____exports.PickupVariant[____exports.PickupVariant.MOMS_CHEST] = "MOMS_CHEST"
--- For `EntityType.SLOT` (6).
____exports.SlotVariant = {}
____exports.SlotVariant.SLOT_MACHINE = 1
____exports.SlotVariant[____exports.SlotVariant.SLOT_MACHINE] = "SLOT_MACHINE"
____exports.SlotVariant.BLOOD_DONATION_MACHINE = 2
____exports.SlotVariant[____exports.SlotVariant.BLOOD_DONATION_MACHINE] = "BLOOD_DONATION_MACHINE"
____exports.SlotVariant.FORTUNE_TELLING_MACHINE = 3
____exports.SlotVariant[____exports.SlotVariant.FORTUNE_TELLING_MACHINE] = "FORTUNE_TELLING_MACHINE"
____exports.SlotVariant.BEGGAR = 4
____exports.SlotVariant[____exports.SlotVariant.BEGGAR] = "BEGGAR"
____exports.SlotVariant.DEVIL_BEGGAR = 5
____exports.SlotVariant[____exports.SlotVariant.DEVIL_BEGGAR] = "DEVIL_BEGGAR"
____exports.SlotVariant.SHELL_GAME = 6
____exports.SlotVariant[____exports.SlotVariant.SHELL_GAME] = "SHELL_GAME"
____exports.SlotVariant.KEY_MASTER = 7
____exports.SlotVariant[____exports.SlotVariant.KEY_MASTER] = "KEY_MASTER"
____exports.SlotVariant.DONATION_MACHINE = 8
____exports.SlotVariant[____exports.SlotVariant.DONATION_MACHINE] = "DONATION_MACHINE"
____exports.SlotVariant.BOMB_BUM = 9
____exports.SlotVariant[____exports.SlotVariant.BOMB_BUM] = "BOMB_BUM"
____exports.SlotVariant.SHOP_RESTOCK_MACHINE = 10
____exports.SlotVariant[____exports.SlotVariant.SHOP_RESTOCK_MACHINE] = "SHOP_RESTOCK_MACHINE"
____exports.SlotVariant.GREED_DONATION_MACHINE = 11
____exports.SlotVariant[____exports.SlotVariant.GREED_DONATION_MACHINE] = "GREED_DONATION_MACHINE"
____exports.SlotVariant.MOMS_DRESSING_TABLE = 12
____exports.SlotVariant[____exports.SlotVariant.MOMS_DRESSING_TABLE] = "MOMS_DRESSING_TABLE"
____exports.SlotVariant.BATTERY_BUM = 13
____exports.SlotVariant[____exports.SlotVariant.BATTERY_BUM] = "BATTERY_BUM"
____exports.SlotVariant.ISAAC_SECRET = 14
____exports.SlotVariant[____exports.SlotVariant.ISAAC_SECRET] = "ISAAC_SECRET"
____exports.SlotVariant.HELL_GAME = 15
____exports.SlotVariant[____exports.SlotVariant.HELL_GAME] = "HELL_GAME"
____exports.SlotVariant.CRANE_GAME = 16
____exports.SlotVariant[____exports.SlotVariant.CRANE_GAME] = "CRANE_GAME"
____exports.SlotVariant.CONFESSIONAL = 17
____exports.SlotVariant[____exports.SlotVariant.CONFESSIONAL] = "CONFESSIONAL"
____exports.SlotVariant.ROTTEN_BEGGAR = 18
____exports.SlotVariant[____exports.SlotVariant.ROTTEN_BEGGAR] = "ROTTEN_BEGGAR"
--- For `EntityType.LASER` (7).
____exports.LaserVariant = {}
____exports.LaserVariant.THICK_RED = 1
____exports.LaserVariant[____exports.LaserVariant.THICK_RED] = "THICK_RED"
____exports.LaserVariant.THIN_RED = 2
____exports.LaserVariant[____exports.LaserVariant.THIN_RED] = "THIN_RED"
____exports.LaserVariant.SHOOP_DA_WHOOP = 3
____exports.LaserVariant[____exports.LaserVariant.SHOOP_DA_WHOOP] = "SHOOP_DA_WHOOP"
____exports.LaserVariant.PRIDE = 4
____exports.LaserVariant[____exports.LaserVariant.PRIDE] = "PRIDE"
____exports.LaserVariant.LIGHT_BEAM = 5
____exports.LaserVariant[____exports.LaserVariant.LIGHT_BEAM] = "LIGHT_BEAM"
____exports.LaserVariant.GIANT_RED = 6
____exports.LaserVariant[____exports.LaserVariant.GIANT_RED] = "GIANT_RED"
____exports.LaserVariant.TRACTOR_BEAM = 7
____exports.LaserVariant[____exports.LaserVariant.TRACTOR_BEAM] = "TRACTOR_BEAM"
____exports.LaserVariant.LIGHT_RING = 8
____exports.LaserVariant[____exports.LaserVariant.LIGHT_RING] = "LIGHT_RING"
____exports.LaserVariant.BRIMSTONE_TECHNOLOGY = 9
____exports.LaserVariant[____exports.LaserVariant.BRIMSTONE_TECHNOLOGY] = "BRIMSTONE_TECHNOLOGY"
____exports.LaserVariant.ELECTRIC = 10
____exports.LaserVariant[____exports.LaserVariant.ELECTRIC] = "ELECTRIC"
____exports.LaserVariant.THICKER_RED = 11
____exports.LaserVariant[____exports.LaserVariant.THICKER_RED] = "THICKER_RED"
____exports.LaserVariant.THICK_BROWN = 12
____exports.LaserVariant[____exports.LaserVariant.THICK_BROWN] = "THICK_BROWN"
____exports.LaserVariant.BEAST = 13
____exports.LaserVariant[____exports.LaserVariant.BEAST] = "BEAST"
____exports.LaserVariant.THICKER_BRIMSTONE_TECHNOLOGY = 14
____exports.LaserVariant[____exports.LaserVariant.THICKER_BRIMSTONE_TECHNOLOGY] = "THICKER_BRIMSTONE_TECHNOLOGY"
____exports.LaserVariant.GIANT_BRIMSTONE_TECHNOLOGY = 15
____exports.LaserVariant[____exports.LaserVariant.GIANT_BRIMSTONE_TECHNOLOGY] = "GIANT_BRIMSTONE_TECHNOLOGY"
--- For `EntityType.KNIFE` (8).
____exports.KnifeVariant = {}
____exports.KnifeVariant.MOMS_KNIFE = 0
____exports.KnifeVariant[____exports.KnifeVariant.MOMS_KNIFE] = "MOMS_KNIFE"
____exports.KnifeVariant.BONE_CLUB = 1
____exports.KnifeVariant[____exports.KnifeVariant.BONE_CLUB] = "BONE_CLUB"
____exports.KnifeVariant.BONE_SCYTHE = 2
____exports.KnifeVariant[____exports.KnifeVariant.BONE_SCYTHE] = "BONE_SCYTHE"
____exports.KnifeVariant.DONKEY_JAWBONE = 3
____exports.KnifeVariant[____exports.KnifeVariant.DONKEY_JAWBONE] = "DONKEY_JAWBONE"
____exports.KnifeVariant.BAG_OF_CRAFTING = 4
____exports.KnifeVariant[____exports.KnifeVariant.BAG_OF_CRAFTING] = "BAG_OF_CRAFTING"
____exports.KnifeVariant.SUMPTORIUM = 5
____exports.KnifeVariant[____exports.KnifeVariant.SUMPTORIUM] = "SUMPTORIUM"
____exports.KnifeVariant.NOTCHED_AXE = 9
____exports.KnifeVariant[____exports.KnifeVariant.NOTCHED_AXE] = "NOTCHED_AXE"
____exports.KnifeVariant.SPIRIT_SWORD = 10
____exports.KnifeVariant[____exports.KnifeVariant.SPIRIT_SWORD] = "SPIRIT_SWORD"
____exports.KnifeVariant.TECH_SWORD = 11
____exports.KnifeVariant[____exports.KnifeVariant.TECH_SWORD] = "TECH_SWORD"
--- For `EntityType.PROJECTILE` (9).
____exports.ProjectileVariant = {}
____exports.ProjectileVariant.NORMAL = 0
____exports.ProjectileVariant[____exports.ProjectileVariant.NORMAL] = "NORMAL"
____exports.ProjectileVariant.BONE = 1
____exports.ProjectileVariant[____exports.ProjectileVariant.BONE] = "BONE"
____exports.ProjectileVariant.FIRE = 2
____exports.ProjectileVariant[____exports.ProjectileVariant.FIRE] = "FIRE"
____exports.ProjectileVariant.PUKE = 3
____exports.ProjectileVariant[____exports.ProjectileVariant.PUKE] = "PUKE"
____exports.ProjectileVariant.TEAR = 4
____exports.ProjectileVariant[____exports.ProjectileVariant.TEAR] = "TEAR"
____exports.ProjectileVariant.CORN = 5
____exports.ProjectileVariant[____exports.ProjectileVariant.CORN] = "CORN"
____exports.ProjectileVariant.HUSH = 6
____exports.ProjectileVariant[____exports.ProjectileVariant.HUSH] = "HUSH"
____exports.ProjectileVariant.COIN = 7
____exports.ProjectileVariant[____exports.ProjectileVariant.COIN] = "COIN"
____exports.ProjectileVariant.GRID = 8
____exports.ProjectileVariant[____exports.ProjectileVariant.GRID] = "GRID"
____exports.ProjectileVariant.ROCK = 9
____exports.ProjectileVariant[____exports.ProjectileVariant.ROCK] = "ROCK"
____exports.ProjectileVariant.RING = 10
____exports.ProjectileVariant[____exports.ProjectileVariant.RING] = "RING"
____exports.ProjectileVariant.MEAT = 11
____exports.ProjectileVariant[____exports.ProjectileVariant.MEAT] = "MEAT"
____exports.ProjectileVariant.FCUK = 12
____exports.ProjectileVariant[____exports.ProjectileVariant.FCUK] = "FCUK"
____exports.ProjectileVariant.WING = 13
____exports.ProjectileVariant[____exports.ProjectileVariant.WING] = "WING"
____exports.ProjectileVariant.LAVA = 14
____exports.ProjectileVariant[____exports.ProjectileVariant.LAVA] = "LAVA"
____exports.ProjectileVariant.HEAD = 15
____exports.ProjectileVariant[____exports.ProjectileVariant.HEAD] = "HEAD"
____exports.ProjectileVariant.PEEP = 16
____exports.ProjectileVariant[____exports.ProjectileVariant.PEEP] = "PEEP"
--- For `EntityType.GAPER` (10).
____exports.GaperVariant = {}
____exports.GaperVariant.FROWNING_GAPER = 0
____exports.GaperVariant[____exports.GaperVariant.FROWNING_GAPER] = "FROWNING_GAPER"
____exports.GaperVariant.GAPER = 1
____exports.GaperVariant[____exports.GaperVariant.GAPER] = "GAPER"
____exports.GaperVariant.FLAMING_GAPER = 2
____exports.GaperVariant[____exports.GaperVariant.FLAMING_GAPER] = "FLAMING_GAPER"
____exports.GaperVariant.ROTTEN_GAPER = 3
____exports.GaperVariant[____exports.GaperVariant.ROTTEN_GAPER] = "ROTTEN_GAPER"
--- For `EntityType.GUSHER` (11).
____exports.GusherVariant = {}
____exports.GusherVariant.GUSHER = 0
____exports.GusherVariant[____exports.GusherVariant.GUSHER] = "GUSHER"
____exports.GusherVariant.PACER = 1
____exports.GusherVariant[____exports.GusherVariant.PACER] = "PACER"
--- For `EntityType.POOTER` (14).
____exports.PooterVariant = {}
____exports.PooterVariant.POOTER = 0
____exports.PooterVariant[____exports.PooterVariant.POOTER] = "POOTER"
____exports.PooterVariant.SUPER_POOTER = 1
____exports.PooterVariant[____exports.PooterVariant.SUPER_POOTER] = "SUPER_POOTER"
____exports.PooterVariant.TAINTED_POOTER = 2
____exports.PooterVariant[____exports.PooterVariant.TAINTED_POOTER] = "TAINTED_POOTER"
--- For `EntityType.CLOTTY` (15).
____exports.ClottyVariant = {}
____exports.ClottyVariant.CLOTTY = 0
____exports.ClottyVariant[____exports.ClottyVariant.CLOTTY] = "CLOTTY"
____exports.ClottyVariant.CLOT = 1
____exports.ClottyVariant[____exports.ClottyVariant.CLOT] = "CLOT"
____exports.ClottyVariant.BLOB = 2
____exports.ClottyVariant[____exports.ClottyVariant.BLOB] = "BLOB"
____exports.ClottyVariant.GRILLED_CLOTTY = 3
____exports.ClottyVariant[____exports.ClottyVariant.GRILLED_CLOTTY] = "GRILLED_CLOTTY"
--- For `EntityType.MULLIGAN` (16).
____exports.MulliganVariant = {}
____exports.MulliganVariant.MULLIGAN = 0
____exports.MulliganVariant[____exports.MulliganVariant.MULLIGAN] = "MULLIGAN"
____exports.MulliganVariant.MULLIGOON = 1
____exports.MulliganVariant[____exports.MulliganVariant.MULLIGOON] = "MULLIGOON"
____exports.MulliganVariant.MULLIBOOM = 2
____exports.MulliganVariant[____exports.MulliganVariant.MULLIBOOM] = "MULLIBOOM"
--- For `EntityType.SHOPKEEPER` (17).
____exports.ShopkeeperVariant = {}
____exports.ShopkeeperVariant.SHOPKEEPER = 0
____exports.ShopkeeperVariant[____exports.ShopkeeperVariant.SHOPKEEPER] = "SHOPKEEPER"
____exports.ShopkeeperVariant.SECRET_ROOM_KEEPER = 1
____exports.ShopkeeperVariant[____exports.ShopkeeperVariant.SECRET_ROOM_KEEPER] = "SECRET_ROOM_KEEPER"
____exports.ShopkeeperVariant.ERROR_ROOM_KEEPER = 2
____exports.ShopkeeperVariant[____exports.ShopkeeperVariant.ERROR_ROOM_KEEPER] = "ERROR_ROOM_KEEPER"
____exports.ShopkeeperVariant.SPECIAL_SHOPKEEPER = 3
____exports.ShopkeeperVariant[____exports.ShopkeeperVariant.SPECIAL_SHOPKEEPER] = "SPECIAL_SHOPKEEPER"
____exports.ShopkeeperVariant.SPECIAL_SECRET_ROOM_KEEPER = 4
____exports.ShopkeeperVariant[____exports.ShopkeeperVariant.SPECIAL_SECRET_ROOM_KEEPER] = "SPECIAL_SECRET_ROOM_KEEPER"
--- For `EntityType.LARRY_JR` (19).
____exports.LarryJrVariant = {}
____exports.LarryJrVariant.LARRY_JR = 0
____exports.LarryJrVariant[____exports.LarryJrVariant.LARRY_JR] = "LARRY_JR"
____exports.LarryJrVariant.HOLLOW = 1
____exports.LarryJrVariant[____exports.LarryJrVariant.HOLLOW] = "HOLLOW"
____exports.LarryJrVariant.TUFF_TWIN = 2
____exports.LarryJrVariant[____exports.LarryJrVariant.TUFF_TWIN] = "TUFF_TWIN"
____exports.LarryJrVariant.SHELL = 3
____exports.LarryJrVariant[____exports.LarryJrVariant.SHELL] = "SHELL"
--- For `EntityType.HIVE` (22).
____exports.HiveVariant = {}
____exports.HiveVariant.HIVE = 0
____exports.HiveVariant[____exports.HiveVariant.HIVE] = "HIVE"
____exports.HiveVariant.DROWNED_HIVE = 1
____exports.HiveVariant[____exports.HiveVariant.DROWNED_HIVE] = "DROWNED_HIVE"
____exports.HiveVariant.HOLY_MULLIGAN = 2
____exports.HiveVariant[____exports.HiveVariant.HOLY_MULLIGAN] = "HOLY_MULLIGAN"
____exports.HiveVariant.TAINTED_MULLIGAN = 3
____exports.HiveVariant[____exports.HiveVariant.TAINTED_MULLIGAN] = "TAINTED_MULLIGAN"
--- For `EntityType.CHARGER` (23).
____exports.ChargerVariant = {}
____exports.ChargerVariant.CHARGER = 0
____exports.ChargerVariant[____exports.ChargerVariant.CHARGER] = "CHARGER"
____exports.ChargerVariant.DROWNED_CHARGER = 1
____exports.ChargerVariant[____exports.ChargerVariant.DROWNED_CHARGER] = "DROWNED_CHARGER"
____exports.ChargerVariant.DANK_CHARGER = 2
____exports.ChargerVariant[____exports.ChargerVariant.DANK_CHARGER] = "DANK_CHARGER"
____exports.ChargerVariant.CARRION_PRINCESS = 3
____exports.ChargerVariant[____exports.ChargerVariant.CARRION_PRINCESS] = "CARRION_PRINCESS"
--- For `EntityType.GLOBIN` (24).
____exports.GlobinVariant = {}
____exports.GlobinVariant.GLOBIN = 0
____exports.GlobinVariant[____exports.GlobinVariant.GLOBIN] = "GLOBIN"
____exports.GlobinVariant.GAZING_GLOBIN = 1
____exports.GlobinVariant[____exports.GlobinVariant.GAZING_GLOBIN] = "GAZING_GLOBIN"
____exports.GlobinVariant.DANK_GLOBIN = 2
____exports.GlobinVariant[____exports.GlobinVariant.DANK_GLOBIN] = "DANK_GLOBIN"
____exports.GlobinVariant.CURSED_GLOBIN = 3
____exports.GlobinVariant[____exports.GlobinVariant.CURSED_GLOBIN] = "CURSED_GLOBIN"
--- For `EntityType.BOOM_FLY` (25).
____exports.BoomFlyVariant = {}
____exports.BoomFlyVariant.BOOM_FLY = 0
____exports.BoomFlyVariant[____exports.BoomFlyVariant.BOOM_FLY] = "BOOM_FLY"
____exports.BoomFlyVariant.RED_BOOM_FLY = 1
____exports.BoomFlyVariant[____exports.BoomFlyVariant.RED_BOOM_FLY] = "RED_BOOM_FLY"
____exports.BoomFlyVariant.DROWNED_BOOM_FLY = 2
____exports.BoomFlyVariant[____exports.BoomFlyVariant.DROWNED_BOOM_FLY] = "DROWNED_BOOM_FLY"
____exports.BoomFlyVariant.DRAGON_FLY = 3
____exports.BoomFlyVariant[____exports.BoomFlyVariant.DRAGON_FLY] = "DRAGON_FLY"
____exports.BoomFlyVariant.BONE_FLY = 4
____exports.BoomFlyVariant[____exports.BoomFlyVariant.BONE_FLY] = "BONE_FLY"
____exports.BoomFlyVariant.SICK_BOOM_FLY = 5
____exports.BoomFlyVariant[____exports.BoomFlyVariant.SICK_BOOM_FLY] = "SICK_BOOM_FLY"
____exports.BoomFlyVariant.TAINTED_BOOM_FLY = 6
____exports.BoomFlyVariant[____exports.BoomFlyVariant.TAINTED_BOOM_FLY] = "TAINTED_BOOM_FLY"
--- For `EntityType.MAW` (26).
____exports.MawVariant = {}
____exports.MawVariant.MAW = 0
____exports.MawVariant[____exports.MawVariant.MAW] = "MAW"
____exports.MawVariant.RED_MAW = 1
____exports.MawVariant[____exports.MawVariant.RED_MAW] = "RED_MAW"
____exports.MawVariant.PSYCHIC_MAW = 2
____exports.MawVariant[____exports.MawVariant.PSYCHIC_MAW] = "PSYCHIC_MAW"
--- For `EntityType.HOST` (27).
____exports.HostVariant = {}
____exports.HostVariant.HOST = 0
____exports.HostVariant[____exports.HostVariant.HOST] = "HOST"
____exports.HostVariant.RED_HOST = 1
____exports.HostVariant[____exports.HostVariant.RED_HOST] = "RED_HOST"
____exports.HostVariant.HARD_HOST = 3
____exports.HostVariant[____exports.HostVariant.HARD_HOST] = "HARD_HOST"
--- For `EntityType.CHUB` (28).
____exports.ChubVariant = {}
____exports.ChubVariant.CHUB = 0
____exports.ChubVariant[____exports.ChubVariant.CHUB] = "CHUB"
____exports.ChubVariant.CHAD = 1
____exports.ChubVariant[____exports.ChubVariant.CHAD] = "CHAD"
____exports.ChubVariant.CARRION_QUEEN = 2
____exports.ChubVariant[____exports.ChubVariant.CARRION_QUEEN] = "CARRION_QUEEN"
--- For `EntityType.HOPPER` (29).
____exports.HopperVariant = {}
____exports.HopperVariant.HOPPER = 0
____exports.HopperVariant[____exports.HopperVariant.HOPPER] = "HOPPER"
____exports.HopperVariant.TRITE = 1
____exports.HopperVariant[____exports.HopperVariant.TRITE] = "TRITE"
____exports.HopperVariant.EGGY = 2
____exports.HopperVariant[____exports.HopperVariant.EGGY] = "EGGY"
____exports.HopperVariant.TAINTED_HOPPER = 3
____exports.HopperVariant[____exports.HopperVariant.TAINTED_HOPPER] = "TAINTED_HOPPER"
--- For `EntityType.BOIL` (30).
____exports.BoilVariant = {}
____exports.BoilVariant.BOIL = 0
____exports.BoilVariant[____exports.BoilVariant.BOIL] = "BOIL"
____exports.BoilVariant.GUT = 1
____exports.BoilVariant[____exports.BoilVariant.GUT] = "GUT"
____exports.BoilVariant.SACK = 2
____exports.BoilVariant[____exports.BoilVariant.SACK] = "SACK"
--- For `EntityType.SPITTY` (31).
____exports.SpittyVariant = {}
____exports.SpittyVariant.SPITTY = 0
____exports.SpittyVariant[____exports.SpittyVariant.SPITTY] = "SPITTY"
____exports.SpittyVariant.TAINTED_SPITTY = 1
____exports.SpittyVariant[____exports.SpittyVariant.TAINTED_SPITTY] = "TAINTED_SPITTY"
--- For `EntityType.FIREPLACE` (33).
-- 
-- Also see the `FireplaceGridEntityVariant` enum, which is different and used for the grid entity
-- version.
____exports.FireplaceVariant = {}
____exports.FireplaceVariant.NORMAL = 0
____exports.FireplaceVariant[____exports.FireplaceVariant.NORMAL] = "NORMAL"
____exports.FireplaceVariant.RED = 1
____exports.FireplaceVariant[____exports.FireplaceVariant.RED] = "RED"
____exports.FireplaceVariant.BLUE = 2
____exports.FireplaceVariant[____exports.FireplaceVariant.BLUE] = "BLUE"
____exports.FireplaceVariant.PURPLE = 3
____exports.FireplaceVariant[____exports.FireplaceVariant.PURPLE] = "PURPLE"
____exports.FireplaceVariant.WHITE = 4
____exports.FireplaceVariant[____exports.FireplaceVariant.WHITE] = "WHITE"
____exports.FireplaceVariant.MOVEABLE = 10
____exports.FireplaceVariant[____exports.FireplaceVariant.MOVEABLE] = "MOVEABLE"
____exports.FireplaceVariant.COAL = 11
____exports.FireplaceVariant[____exports.FireplaceVariant.COAL] = "COAL"
____exports.FireplaceVariant.MOVEABLE_BLUE = 12
____exports.FireplaceVariant[____exports.FireplaceVariant.MOVEABLE_BLUE] = "MOVEABLE_BLUE"
____exports.FireplaceVariant.MOVEABLE_PURPLE = 13
____exports.FireplaceVariant[____exports.FireplaceVariant.MOVEABLE_PURPLE] = "MOVEABLE_PURPLE"
--- For `EntityType.LEAPER` (34).
____exports.LeaperVariant = {}
____exports.LeaperVariant.LEAPER = 0
____exports.LeaperVariant[____exports.LeaperVariant.LEAPER] = "LEAPER"
____exports.LeaperVariant.STICKY_LEAPER = 1
____exports.LeaperVariant[____exports.LeaperVariant.STICKY_LEAPER] = "STICKY_LEAPER"
--- For `EntityType.MR_MAW` (35).
____exports.MrMawVariant = {}
____exports.MrMawVariant.MR_MAW = 0
____exports.MrMawVariant[____exports.MrMawVariant.MR_MAW] = "MR_MAW"
____exports.MrMawVariant.MR_MAW_HEAD = 1
____exports.MrMawVariant[____exports.MrMawVariant.MR_MAW_HEAD] = "MR_MAW_HEAD"
____exports.MrMawVariant.MR_RED_MAW = 2
____exports.MrMawVariant[____exports.MrMawVariant.MR_RED_MAW] = "MR_RED_MAW"
____exports.MrMawVariant.MR_RED_MAW_HEAD = 3
____exports.MrMawVariant[____exports.MrMawVariant.MR_RED_MAW_HEAD] = "MR_RED_MAW_HEAD"
____exports.MrMawVariant.MR_MAW_NECK = 10
____exports.MrMawVariant[____exports.MrMawVariant.MR_MAW_NECK] = "MR_MAW_NECK"
--- For `EntityType.BABY` (38).
____exports.BabyVariant = {}
____exports.BabyVariant.BABY = 0
____exports.BabyVariant[____exports.BabyVariant.BABY] = "BABY"
____exports.BabyVariant.ANGELIC_BABY = 1
____exports.BabyVariant[____exports.BabyVariant.ANGELIC_BABY] = "ANGELIC_BABY"
____exports.BabyVariant.ULTRA_PRIDE_BABY = 2
____exports.BabyVariant[____exports.BabyVariant.ULTRA_PRIDE_BABY] = "ULTRA_PRIDE_BABY"
____exports.BabyVariant.WRINKLY_BABY = 3
____exports.BabyVariant[____exports.BabyVariant.WRINKLY_BABY] = "WRINKLY_BABY"
--- For `EntityType.VIS` (39).
____exports.VisVariant = {}
____exports.VisVariant.VIS = 0
____exports.VisVariant[____exports.VisVariant.VIS] = "VIS"
____exports.VisVariant.DOUBLE_VIS = 1
____exports.VisVariant[____exports.VisVariant.DOUBLE_VIS] = "DOUBLE_VIS"
____exports.VisVariant.CHUBBER = 2
____exports.VisVariant[____exports.VisVariant.CHUBBER] = "CHUBBER"
____exports.VisVariant.SCARRED_DOUBLE_VIS = 3
____exports.VisVariant[____exports.VisVariant.SCARRED_DOUBLE_VIS] = "SCARRED_DOUBLE_VIS"
____exports.VisVariant.CHUBBER_PROJECTILE = 22
____exports.VisVariant[____exports.VisVariant.CHUBBER_PROJECTILE] = "CHUBBER_PROJECTILE"
--- For `EntityType.GUTS` (40).
____exports.GutsVariant = {}
____exports.GutsVariant.GUTS = 0
____exports.GutsVariant[____exports.GutsVariant.GUTS] = "GUTS"
____exports.GutsVariant.SCARRED_GUTS = 1
____exports.GutsVariant[____exports.GutsVariant.SCARRED_GUTS] = "SCARRED_GUTS"
____exports.GutsVariant.SLOG = 2
____exports.GutsVariant[____exports.GutsVariant.SLOG] = "SLOG"
--- For `EntityType.KNIGHT` (41).
____exports.KnightVariant = {}
____exports.KnightVariant.KNIGHT = 0
____exports.KnightVariant[____exports.KnightVariant.KNIGHT] = "KNIGHT"
____exports.KnightVariant.SELFLESS_KNIGHT = 1
____exports.KnightVariant[____exports.KnightVariant.SELFLESS_KNIGHT] = "SELFLESS_KNIGHT"
____exports.KnightVariant.LOOSE_KNIGHT = 2
____exports.KnightVariant[____exports.KnightVariant.LOOSE_KNIGHT] = "LOOSE_KNIGHT"
____exports.KnightVariant.BRAINLESS_KNIGHT = 3
____exports.KnightVariant[____exports.KnightVariant.BRAINLESS_KNIGHT] = "BRAINLESS_KNIGHT"
____exports.KnightVariant.BLACK_KNIGHT = 4
____exports.KnightVariant[____exports.KnightVariant.BLACK_KNIGHT] = "BLACK_KNIGHT"
--- For `EntityType.GRIMACE` (42).
____exports.GrimaceVariant = {}
____exports.GrimaceVariant.STONE_GRIMACE = 0
____exports.GrimaceVariant[____exports.GrimaceVariant.STONE_GRIMACE] = "STONE_GRIMACE"
____exports.GrimaceVariant.VOMIT_GRIMACE = 1
____exports.GrimaceVariant[____exports.GrimaceVariant.VOMIT_GRIMACE] = "VOMIT_GRIMACE"
____exports.GrimaceVariant.TRIPLE_GRIMACE = 2
____exports.GrimaceVariant[____exports.GrimaceVariant.TRIPLE_GRIMACE] = "TRIPLE_GRIMACE"
--- For `EntityType.MONSTRO_2` (43).
____exports.Monstro2Variant = {}
____exports.Monstro2Variant.MONSTRO_2 = 0
____exports.Monstro2Variant[____exports.Monstro2Variant.MONSTRO_2] = "MONSTRO_2"
____exports.Monstro2Variant.GISH = 1
____exports.Monstro2Variant[____exports.Monstro2Variant.GISH] = "GISH"
--- For `EntityType.POKY` (44).
____exports.PokyVariant = {}
____exports.PokyVariant.POKY = 0
____exports.PokyVariant[____exports.PokyVariant.POKY] = "POKY"
____exports.PokyVariant.SLIDE = 1
____exports.PokyVariant[____exports.PokyVariant.SLIDE] = "SLIDE"
--- For `EntityType.MOM` (45).
____exports.MomVariant = {}
____exports.MomVariant.MOM = 0
____exports.MomVariant[____exports.MomVariant.MOM] = "MOM"
____exports.MomVariant.STOMP = 10
____exports.MomVariant[____exports.MomVariant.STOMP] = "STOMP"
--- For `EntityType.SLOTH` (46).
____exports.SlothVariant = {}
____exports.SlothVariant.SLOTH = 0
____exports.SlothVariant[____exports.SlothVariant.SLOTH] = "SLOTH"
____exports.SlothVariant.SUPER_SLOTH = 1
____exports.SlothVariant[____exports.SlothVariant.SUPER_SLOTH] = "SUPER_SLOTH"
____exports.SlothVariant.ULTRA_PRIDE = 2
____exports.SlothVariant[____exports.SlothVariant.ULTRA_PRIDE] = "ULTRA_PRIDE"
--- For `EntityType.LUST` (47).
____exports.LustVariant = {}
____exports.LustVariant.LUST = 0
____exports.LustVariant[____exports.LustVariant.LUST] = "LUST"
____exports.LustVariant.SUPER_LUST = 1
____exports.LustVariant[____exports.LustVariant.SUPER_LUST] = "SUPER_LUST"
--- For `EntityType.WRATH` (48).
____exports.WrathVariant = {}
____exports.WrathVariant.WRATH = 0
____exports.WrathVariant[____exports.WrathVariant.WRATH] = "WRATH"
____exports.WrathVariant.SUPER_WRATH = 1
____exports.WrathVariant[____exports.WrathVariant.SUPER_WRATH] = "SUPER_WRATH"
--- For `EntityType.GLUTTONY` (49).
____exports.GluttonyVariant = {}
____exports.GluttonyVariant.GLUTTONY = 0
____exports.GluttonyVariant[____exports.GluttonyVariant.GLUTTONY] = "GLUTTONY"
____exports.GluttonyVariant.SUPER_GLUTTONY = 1
____exports.GluttonyVariant[____exports.GluttonyVariant.SUPER_GLUTTONY] = "SUPER_GLUTTONY"
--- For `EntityType.GREED` (50).
____exports.GreedVariant = {}
____exports.GreedVariant.GREED = 0
____exports.GreedVariant[____exports.GreedVariant.GREED] = "GREED"
____exports.GreedVariant.SUPER_GREED = 1
____exports.GreedVariant[____exports.GreedVariant.SUPER_GREED] = "SUPER_GREED"
--- For `EntityType.ENVY` (51).
____exports.EnvyVariant = {}
____exports.EnvyVariant.ENVY = 0
____exports.EnvyVariant[____exports.EnvyVariant.ENVY] = "ENVY"
____exports.EnvyVariant.SUPER_ENVY = 1
____exports.EnvyVariant[____exports.EnvyVariant.SUPER_ENVY] = "SUPER_ENVY"
____exports.EnvyVariant.ENVY_BIG = 10
____exports.EnvyVariant[____exports.EnvyVariant.ENVY_BIG] = "ENVY_BIG"
____exports.EnvyVariant.SUPER_ENVY_BIG = 11
____exports.EnvyVariant[____exports.EnvyVariant.SUPER_ENVY_BIG] = "SUPER_ENVY_BIG"
____exports.EnvyVariant.ENVY_MEDIUM = 20
____exports.EnvyVariant[____exports.EnvyVariant.ENVY_MEDIUM] = "ENVY_MEDIUM"
____exports.EnvyVariant.SUPER_ENVY_MEDIUM = 21
____exports.EnvyVariant[____exports.EnvyVariant.SUPER_ENVY_MEDIUM] = "SUPER_ENVY_MEDIUM"
____exports.EnvyVariant.ENVY_SMALL = 30
____exports.EnvyVariant[____exports.EnvyVariant.ENVY_SMALL] = "ENVY_SMALL"
____exports.EnvyVariant.SUPER_ENVY_SMALL = 31
____exports.EnvyVariant[____exports.EnvyVariant.SUPER_ENVY_SMALL] = "SUPER_ENVY_SMALL"
--- For `EntityType.PRIDE` (52).
____exports.PrideVariant = {}
____exports.PrideVariant.PRIDE = 0
____exports.PrideVariant[____exports.PrideVariant.PRIDE] = "PRIDE"
____exports.PrideVariant.SUPER_PRIDE = 1
____exports.PrideVariant[____exports.PrideVariant.SUPER_PRIDE] = "SUPER_PRIDE"
--- For `EntityType.DOPLE` (53).
____exports.DopleVariant = {}
____exports.DopleVariant.DOPLE = 0
____exports.DopleVariant[____exports.DopleVariant.DOPLE] = "DOPLE"
____exports.DopleVariant.EVIL_TWIN = 1
____exports.DopleVariant[____exports.DopleVariant.EVIL_TWIN] = "EVIL_TWIN"
--- For `EntityType.LEECH` (55).
____exports.LeechVariant = {}
____exports.LeechVariant.LEECH = 0
____exports.LeechVariant[____exports.LeechVariant.LEECH] = "LEECH"
____exports.LeechVariant.KAMIKAZE_LEECH = 1
____exports.LeechVariant[____exports.LeechVariant.KAMIKAZE_LEECH] = "KAMIKAZE_LEECH"
____exports.LeechVariant.HOLY_LEECH = 2
____exports.LeechVariant[____exports.LeechVariant.HOLY_LEECH] = "HOLY_LEECH"
--- For `EntityType.MEMBRAIN` (57).
____exports.MemBrainVariant = {}
____exports.MemBrainVariant.MEMBRAIN = 0
____exports.MemBrainVariant[____exports.MemBrainVariant.MEMBRAIN] = "MEMBRAIN"
____exports.MemBrainVariant.MAMA_GUTS = 1
____exports.MemBrainVariant[____exports.MemBrainVariant.MAMA_GUTS] = "MAMA_GUTS"
____exports.MemBrainVariant.DEAD_MEAT = 2
____exports.MemBrainVariant[____exports.MemBrainVariant.DEAD_MEAT] = "DEAD_MEAT"
--- For `EntityType.PARA_BITE` (58).
____exports.ParaBiteVariant = {}
____exports.ParaBiteVariant.PARA_BITE = 0
____exports.ParaBiteVariant[____exports.ParaBiteVariant.PARA_BITE] = "PARA_BITE"
____exports.ParaBiteVariant.SCARRED_PARA_BITE = 1
____exports.ParaBiteVariant[____exports.ParaBiteVariant.SCARRED_PARA_BITE] = "SCARRED_PARA_BITE"
--- For `EntityType.EYE` (60).
____exports.EyeVariant = {}
____exports.EyeVariant.EYE = 0
____exports.EyeVariant[____exports.EyeVariant.EYE] = "EYE"
____exports.EyeVariant.BLOODSHOT_EYE = 1
____exports.EyeVariant[____exports.EyeVariant.BLOODSHOT_EYE] = "BLOODSHOT_EYE"
____exports.EyeVariant.HOLY_EYE = 2
____exports.EyeVariant[____exports.EyeVariant.HOLY_EYE] = "HOLY_EYE"
--- For `EntityType.SUCKER` (61).
____exports.SuckerVariant = {}
____exports.SuckerVariant.SUCKER = 0
____exports.SuckerVariant[____exports.SuckerVariant.SUCKER] = "SUCKER"
____exports.SuckerVariant.SPIT = 1
____exports.SuckerVariant[____exports.SuckerVariant.SPIT] = "SPIT"
____exports.SuckerVariant.SOUL_SUCKER = 2
____exports.SuckerVariant[____exports.SuckerVariant.SOUL_SUCKER] = "SOUL_SUCKER"
____exports.SuckerVariant.INK = 3
____exports.SuckerVariant[____exports.SuckerVariant.INK] = "INK"
____exports.SuckerVariant.MAMA_FLY = 4
____exports.SuckerVariant[____exports.SuckerVariant.MAMA_FLY] = "MAMA_FLY"
____exports.SuckerVariant.BULB = 5
____exports.SuckerVariant[____exports.SuckerVariant.BULB] = "BULB"
____exports.SuckerVariant.BLOOD_FLY = 6
____exports.SuckerVariant[____exports.SuckerVariant.BLOOD_FLY] = "BLOOD_FLY"
____exports.SuckerVariant.TAINTED_SUCKER = 7
____exports.SuckerVariant[____exports.SuckerVariant.TAINTED_SUCKER] = "TAINTED_SUCKER"
--- For `EntityType.PIN` (62).
____exports.PinVariant = {}
____exports.PinVariant.PIN = 0
____exports.PinVariant[____exports.PinVariant.PIN] = "PIN"
____exports.PinVariant.SCOLEX = 1
____exports.PinVariant[____exports.PinVariant.SCOLEX] = "SCOLEX"
____exports.PinVariant.FRAIL = 2
____exports.PinVariant[____exports.PinVariant.FRAIL] = "FRAIL"
____exports.PinVariant.WORMWOOD = 3
____exports.PinVariant[____exports.PinVariant.WORMWOOD] = "WORMWOOD"
--- For `EntityType.WAR` (65).
____exports.WarVariant = {}
____exports.WarVariant.WAR = 0
____exports.WarVariant[____exports.WarVariant.WAR] = "WAR"
____exports.WarVariant.CONQUEST = 1
____exports.WarVariant[____exports.WarVariant.CONQUEST] = "CONQUEST"
____exports.WarVariant.WAR_WITHOUT_HORSE = 2
____exports.WarVariant[____exports.WarVariant.WAR_WITHOUT_HORSE] = "WAR_WITHOUT_HORSE"
--- For `EntityType.DEATH` (66).
____exports.DeathVariant = {}
____exports.DeathVariant.DEATH = 0
____exports.DeathVariant[____exports.DeathVariant.DEATH] = "DEATH"
____exports.DeathVariant.DEATH_SCYTHE = 10
____exports.DeathVariant[____exports.DeathVariant.DEATH_SCYTHE] = "DEATH_SCYTHE"
____exports.DeathVariant.DEATH_HORSE = 20
____exports.DeathVariant[____exports.DeathVariant.DEATH_HORSE] = "DEATH_HORSE"
____exports.DeathVariant.DEATH_WITHOUT_HORSE = 30
____exports.DeathVariant[____exports.DeathVariant.DEATH_WITHOUT_HORSE] = "DEATH_WITHOUT_HORSE"
--- For `EntityType.DUKE_OF_FLIES` (67).
____exports.DukeOfFliesVariant = {}
____exports.DukeOfFliesVariant.DUKE_OF_FLIES = 0
____exports.DukeOfFliesVariant[____exports.DukeOfFliesVariant.DUKE_OF_FLIES] = "DUKE_OF_FLIES"
____exports.DukeOfFliesVariant.HUSK = 1
____exports.DukeOfFliesVariant[____exports.DukeOfFliesVariant.HUSK] = "HUSK"
--- For `EntityType.PEEP` (68).
____exports.PeepVariant = {}
____exports.PeepVariant.PEEP = 0
____exports.PeepVariant[____exports.PeepVariant.PEEP] = "PEEP"
____exports.PeepVariant.BLOAT = 1
____exports.PeepVariant[____exports.PeepVariant.BLOAT] = "BLOAT"
____exports.PeepVariant.PEEP_EYE = 10
____exports.PeepVariant[____exports.PeepVariant.PEEP_EYE] = "PEEP_EYE"
____exports.PeepVariant.BLOAT_EYE = 11
____exports.PeepVariant[____exports.PeepVariant.BLOAT_EYE] = "BLOAT_EYE"
--- For `EntityType.LOKI` (69).
____exports.LokiVariant = {}
____exports.LokiVariant.LOKI = 0
____exports.LokiVariant[____exports.LokiVariant.LOKI] = "LOKI"
____exports.LokiVariant.LOKII = 1
____exports.LokiVariant[____exports.LokiVariant.LOKII] = "LOKII"
--- For:
-- - `EntityType.FISTULA_BIG` (71)
-- - `EntityType.FISTULA_MEDIUM` (72)
-- - `EntityType.FISTULA_SMALL` (73)
____exports.FistulaVariant = {}
____exports.FistulaVariant.FISTULA = 0
____exports.FistulaVariant[____exports.FistulaVariant.FISTULA] = "FISTULA"
____exports.FistulaVariant.TERATOMA = 1
____exports.FistulaVariant[____exports.FistulaVariant.TERATOMA] = "TERATOMA"
--- For `EntityType.MOMS_HEART` (78).
____exports.MomsHeartVariant = {}
____exports.MomsHeartVariant.MOMS_HEART = 0
____exports.MomsHeartVariant[____exports.MomsHeartVariant.MOMS_HEART] = "MOMS_HEART"
____exports.MomsHeartVariant.IT_LIVES = 1
____exports.MomsHeartVariant[____exports.MomsHeartVariant.IT_LIVES] = "IT_LIVES"
____exports.MomsHeartVariant.MOMS_GUTS = 10
____exports.MomsHeartVariant[____exports.MomsHeartVariant.MOMS_GUTS] = "MOMS_GUTS"
--- For `EntityType.GEMINI` (79).
____exports.GeminiVariant = {}
____exports.GeminiVariant.GEMINI = 0
____exports.GeminiVariant[____exports.GeminiVariant.GEMINI] = "GEMINI"
____exports.GeminiVariant.STEVEN = 1
____exports.GeminiVariant[____exports.GeminiVariant.STEVEN] = "STEVEN"
____exports.GeminiVariant.BLIGHTED_OVUM = 2
____exports.GeminiVariant[____exports.GeminiVariant.BLIGHTED_OVUM] = "BLIGHTED_OVUM"
____exports.GeminiVariant.GEMINI_BABY = 10
____exports.GeminiVariant[____exports.GeminiVariant.GEMINI_BABY] = "GEMINI_BABY"
____exports.GeminiVariant.STEVEN_BABY = 11
____exports.GeminiVariant[____exports.GeminiVariant.STEVEN_BABY] = "STEVEN_BABY"
____exports.GeminiVariant.BLIGHTED_OVUM_BABY = 12
____exports.GeminiVariant[____exports.GeminiVariant.BLIGHTED_OVUM_BABY] = "BLIGHTED_OVUM_BABY"
____exports.GeminiVariant.UMBILICAL_CORD = 20
____exports.GeminiVariant[____exports.GeminiVariant.UMBILICAL_CORD] = "UMBILICAL_CORD"
--- For `EntityType.FALLEN` (81).
____exports.FallenVariant = {}
____exports.FallenVariant.FALLEN = 0
____exports.FallenVariant[____exports.FallenVariant.FALLEN] = "FALLEN"
____exports.FallenVariant.KRAMPUS = 1
____exports.FallenVariant[____exports.FallenVariant.KRAMPUS] = "KRAMPUS"
--- For `EntityType.SATAN` (84).
____exports.SatanVariant = {}
____exports.SatanVariant.SATAN = 0
____exports.SatanVariant[____exports.SatanVariant.SATAN] = "SATAN"
____exports.SatanVariant.STOMP = 10
____exports.SatanVariant[____exports.SatanVariant.STOMP] = "STOMP"
--- For `EntityType.GURGLE` (87).
____exports.GurgleVariant = {}
____exports.GurgleVariant.GURGLE = 0
____exports.GurgleVariant[____exports.GurgleVariant.GURGLE] = "GURGLE"
____exports.GurgleVariant.CRACKLE = 1
____exports.GurgleVariant[____exports.GurgleVariant.CRACKLE] = "CRACKLE"
--- For `EntityType.WALKING_BOIL` (88).
____exports.WalkingBoilVariant = {}
____exports.WalkingBoilVariant.WALKING_BOIL = 0
____exports.WalkingBoilVariant[____exports.WalkingBoilVariant.WALKING_BOIL] = "WALKING_BOIL"
____exports.WalkingBoilVariant.WALKING_GUT = 1
____exports.WalkingBoilVariant[____exports.WalkingBoilVariant.WALKING_GUT] = "WALKING_GUT"
____exports.WalkingBoilVariant.WALKING_SACK = 2
____exports.WalkingBoilVariant[____exports.WalkingBoilVariant.WALKING_SACK] = "WALKING_SACK"
--- For `EntityType.HEART` (92).
____exports.HeartVariant = {}
____exports.HeartVariant.HEART = 0
____exports.HeartVariant[____exports.HeartVariant.HEART] = "HEART"
____exports.HeartVariant.HALF_HEART = 1
____exports.HeartVariant[____exports.HeartVariant.HALF_HEART] = "HALF_HEART"
--- For `EntityType.MASK` (93).
____exports.MaskVariant = {}
____exports.MaskVariant.MASK = 0
____exports.MaskVariant[____exports.MaskVariant.MASK] = "MASK"
____exports.MaskVariant.MASK_2 = 1
____exports.MaskVariant[____exports.MaskVariant.MASK_2] = "MASK_2"
--- For `EntityType.WIDOW` (100).
____exports.WidowVariant = {}
____exports.WidowVariant.WIDOW = 0
____exports.WidowVariant[____exports.WidowVariant.WIDOW] = "WIDOW"
____exports.WidowVariant.WRETCHED = 1
____exports.WidowVariant[____exports.WidowVariant.WRETCHED] = "WRETCHED"
--- For `EntityType.DADDY_LONG_LEGS` (101).
____exports.DaddyLongLegsVariant = {}
____exports.DaddyLongLegsVariant.DADDY_LONG_LEGS = 0
____exports.DaddyLongLegsVariant[____exports.DaddyLongLegsVariant.DADDY_LONG_LEGS] = "DADDY_LONG_LEGS"
____exports.DaddyLongLegsVariant.TRIACHNID = 1
____exports.DaddyLongLegsVariant[____exports.DaddyLongLegsVariant.TRIACHNID] = "TRIACHNID"
--- For `EntityType.ISAAC` (102).
____exports.IsaacVariant = {}
____exports.IsaacVariant.ISAAC = 0
____exports.IsaacVariant[____exports.IsaacVariant.ISAAC] = "ISAAC"
____exports.IsaacVariant.BLUE_BABY = 1
____exports.IsaacVariant[____exports.IsaacVariant.BLUE_BABY] = "BLUE_BABY"
____exports.IsaacVariant.BLUE_BABY_HUSH = 2
____exports.IsaacVariant[____exports.IsaacVariant.BLUE_BABY_HUSH] = "BLUE_BABY_HUSH"
--- For `EntityType.CONSTANT_STONE_SHOOTER` (202).
____exports.ConstantStoneShooterVariant = {}
____exports.ConstantStoneShooterVariant.CONSTANT_STONE_SHOOTER = 0
____exports.ConstantStoneShooterVariant[____exports.ConstantStoneShooterVariant.CONSTANT_STONE_SHOOTER] = "CONSTANT_STONE_SHOOTER"
____exports.ConstantStoneShooterVariant.CROSS_STONE_SHOOTER = 10
____exports.ConstantStoneShooterVariant[____exports.ConstantStoneShooterVariant.CROSS_STONE_SHOOTER] = "CROSS_STONE_SHOOTER"
____exports.ConstantStoneShooterVariant.CROSS_STONE_SHOOTER_ALWAYS_ON = 11
____exports.ConstantStoneShooterVariant[____exports.ConstantStoneShooterVariant.CROSS_STONE_SHOOTER_ALWAYS_ON] = "CROSS_STONE_SHOOTER_ALWAYS_ON"
--- For `EntityType.BABY_LONG_LEGS` (206).
____exports.BabyLongLegsVariant = {}
____exports.BabyLongLegsVariant.BABY_LONG_LEGS = 0
____exports.BabyLongLegsVariant[____exports.BabyLongLegsVariant.BABY_LONG_LEGS] = "BABY_LONG_LEGS"
____exports.BabyLongLegsVariant.SMALL_BABY_LONG_LEGS = 1
____exports.BabyLongLegsVariant[____exports.BabyLongLegsVariant.SMALL_BABY_LONG_LEGS] = "SMALL_BABY_LONG_LEGS"
--- For `EntityType.CRAZY_LONG_LEGS` (207).
____exports.CrazyLongLegsVariant = {}
____exports.CrazyLongLegsVariant.CRAZY_LONG_LEGS = 0
____exports.CrazyLongLegsVariant[____exports.CrazyLongLegsVariant.CRAZY_LONG_LEGS] = "CRAZY_LONG_LEGS"
____exports.CrazyLongLegsVariant.SMALL_CRAZY_LONG_LEGS = 1
____exports.CrazyLongLegsVariant[____exports.CrazyLongLegsVariant.SMALL_CRAZY_LONG_LEGS] = "SMALL_CRAZY_LONG_LEGS"
--- For `EntityType.FATTY` (208).
____exports.FattyVariant = {}
____exports.FattyVariant.FATTY = 0
____exports.FattyVariant[____exports.FattyVariant.FATTY] = "FATTY"
____exports.FattyVariant.PALE_FATTY = 1
____exports.FattyVariant[____exports.FattyVariant.PALE_FATTY] = "PALE_FATTY"
____exports.FattyVariant.FLAMING_FATTY = 2
____exports.FattyVariant[____exports.FattyVariant.FLAMING_FATTY] = "FLAMING_FATTY"
--- For `EntityType.DEATHS_HEAD` (212).
____exports.DeathsHeadVariant = {}
____exports.DeathsHeadVariant.DEATHS_HEAD = 0
____exports.DeathsHeadVariant[____exports.DeathsHeadVariant.DEATHS_HEAD] = "DEATHS_HEAD"
____exports.DeathsHeadVariant.DANK_DEATHS_HEAD = 1
____exports.DeathsHeadVariant[____exports.DeathsHeadVariant.DANK_DEATHS_HEAD] = "DANK_DEATHS_HEAD"
____exports.DeathsHeadVariant.CURSED_DEATHS_HEAD = 2
____exports.DeathsHeadVariant[____exports.DeathsHeadVariant.CURSED_DEATHS_HEAD] = "CURSED_DEATHS_HEAD"
____exports.DeathsHeadVariant.BRIMSTONE_DEATHS_HEAD = 3
____exports.DeathsHeadVariant[____exports.DeathsHeadVariant.BRIMSTONE_DEATHS_HEAD] = "BRIMSTONE_DEATHS_HEAD"
____exports.DeathsHeadVariant.RED_SKULL = 4
____exports.DeathsHeadVariant[____exports.DeathsHeadVariant.RED_SKULL] = "RED_SKULL"
--- For `EntityType.SWINGER` (216).
____exports.SwingerVariant = {}
____exports.SwingerVariant.SWINGER = 0
____exports.SwingerVariant[____exports.SwingerVariant.SWINGER] = "SWINGER"
____exports.SwingerVariant.SWINGER_HEAD = 1
____exports.SwingerVariant[____exports.SwingerVariant.SWINGER_HEAD] = "SWINGER_HEAD"
____exports.SwingerVariant.SWINGER_NECK = 10
____exports.SwingerVariant[____exports.SwingerVariant.SWINGER_NECK] = "SWINGER_NECK"
--- For `EntityType.DIP` (217).
____exports.DipVariant = {}
____exports.DipVariant.DIP = 0
____exports.DipVariant[____exports.DipVariant.DIP] = "DIP"
____exports.DipVariant.CORN = 1
____exports.DipVariant[____exports.DipVariant.CORN] = "CORN"
____exports.DipVariant.BROWNIE_CORN = 2
____exports.DipVariant[____exports.DipVariant.BROWNIE_CORN] = "BROWNIE_CORN"
____exports.DipVariant.BIG_CORN = 3
____exports.DipVariant[____exports.DipVariant.BIG_CORN] = "BIG_CORN"
--- For `EntityType.SQUIRT` (220).
____exports.SquirtVariant = {}
____exports.SquirtVariant.SQUIRT = 0
____exports.SquirtVariant[____exports.SquirtVariant.SQUIRT] = "SQUIRT"
____exports.SquirtVariant.DANK_SQUIRT = 1
____exports.SquirtVariant[____exports.SquirtVariant.DANK_SQUIRT] = "DANK_SQUIRT"
--- For `EntityType.SKINNY` (226).
____exports.SkinnyVariant = {}
____exports.SkinnyVariant.SKINNY = 0
____exports.SkinnyVariant[____exports.SkinnyVariant.SKINNY] = "SKINNY"
____exports.SkinnyVariant.ROTTY = 1
____exports.SkinnyVariant[____exports.SkinnyVariant.ROTTY] = "ROTTY"
____exports.SkinnyVariant.CRISPY = 2
____exports.SkinnyVariant[____exports.SkinnyVariant.CRISPY] = "CRISPY"
--- For `EntityType.BONY` (227).
____exports.BonyVariant = {}
____exports.BonyVariant.BONY = 0
____exports.BonyVariant[____exports.BonyVariant.BONY] = "BONY"
____exports.BonyVariant.HOLY_BONY = 1
____exports.BonyVariant[____exports.BonyVariant.HOLY_BONY] = "HOLY_BONY"
--- For `EntityType.HOMUNCULUS` (228).
____exports.HomunculusVariant = {}
____exports.HomunculusVariant.HOMUNCULUS = 0
____exports.HomunculusVariant[____exports.HomunculusVariant.HOMUNCULUS] = "HOMUNCULUS"
____exports.HomunculusVariant.HOMUNCULUS_CORD = 10
____exports.HomunculusVariant[____exports.HomunculusVariant.HOMUNCULUS_CORD] = "HOMUNCULUS_CORD"
--- For `EntityType.TUMOR` (229).
____exports.TumorVariant = {}
____exports.TumorVariant.TUMOR = 0
____exports.TumorVariant[____exports.TumorVariant.TUMOR] = "TUMOR"
____exports.TumorVariant.PLANETOID = 1
____exports.TumorVariant[____exports.TumorVariant.PLANETOID] = "PLANETOID"
--- For `EntityType.NERVE_ENDING` (231).
____exports.NerveEndingVariant = {}
____exports.NerveEndingVariant.NERVE_ENDING = 0
____exports.NerveEndingVariant[____exports.NerveEndingVariant.NERVE_ENDING] = "NERVE_ENDING"
____exports.NerveEndingVariant.NERVE_ENDING_2 = 1
____exports.NerveEndingVariant[____exports.NerveEndingVariant.NERVE_ENDING_2] = "NERVE_ENDING_2"
--- For `EntityType.GURGLING` (237).
____exports.GurglingVariant = {}
____exports.GurglingVariant.GURGLING = 0
____exports.GurglingVariant[____exports.GurglingVariant.GURGLING] = "GURGLING"
____exports.GurglingVariant.GURGLING_BOSS = 1
____exports.GurglingVariant[____exports.GurglingVariant.GURGLING_BOSS] = "GURGLING_BOSS"
____exports.GurglingVariant.TURDLING = 2
____exports.GurglingVariant[____exports.GurglingVariant.TURDLING] = "TURDLING"
--- For `EntityType.GRUB` (239).
____exports.GrubVariant = {}
____exports.GrubVariant.GRUB = 0
____exports.GrubVariant[____exports.GrubVariant.GRUB] = "GRUB"
____exports.GrubVariant.CORPSE_EATER = 1
____exports.GrubVariant[____exports.GrubVariant.CORPSE_EATER] = "CORPSE_EATER"
____exports.GrubVariant.CARRION_RIDER = 2
____exports.GrubVariant[____exports.GrubVariant.CARRION_RIDER] = "CARRION_RIDER"
--- For `EntityType.WALL_CREEP` (240).
____exports.WallCreepVariant = {}
____exports.WallCreepVariant.WALL_CREEP = 0
____exports.WallCreepVariant[____exports.WallCreepVariant.WALL_CREEP] = "WALL_CREEP"
____exports.WallCreepVariant.SOY_CREEP = 1
____exports.WallCreepVariant[____exports.WallCreepVariant.SOY_CREEP] = "SOY_CREEP"
____exports.WallCreepVariant.RAG_CREEP = 2
____exports.WallCreepVariant[____exports.WallCreepVariant.RAG_CREEP] = "RAG_CREEP"
____exports.WallCreepVariant.TAINTED_SOY_CREEP = 3
____exports.WallCreepVariant[____exports.WallCreepVariant.TAINTED_SOY_CREEP] = "TAINTED_SOY_CREEP"
--- For `EntityType.RAGE_CREEP` (241).
____exports.RageCreepVariant = {}
____exports.RageCreepVariant.RAGE_CREEP = 0
____exports.RageCreepVariant[____exports.RageCreepVariant.RAGE_CREEP] = "RAGE_CREEP"
____exports.RageCreepVariant.SPLIT_RAGE_CREEP = 1
____exports.RageCreepVariant[____exports.RageCreepVariant.SPLIT_RAGE_CREEP] = "SPLIT_RAGE_CREEP"
--- For `EntityType.ROUND_WORM` (244).
____exports.RoundWormVariant = {}
____exports.RoundWormVariant.ROUND_WORM = 0
____exports.RoundWormVariant[____exports.RoundWormVariant.ROUND_WORM] = "ROUND_WORM"
____exports.RoundWormVariant.TUBE_WORM = 1
____exports.RoundWormVariant[____exports.RoundWormVariant.TUBE_WORM] = "TUBE_WORM"
____exports.RoundWormVariant.TAINTED_ROUND_WORM = 2
____exports.RoundWormVariant[____exports.RoundWormVariant.TAINTED_ROUND_WORM] = "TAINTED_ROUND_WORM"
____exports.RoundWormVariant.TAINTED_TUBE_WORM = 3
____exports.RoundWormVariant[____exports.RoundWormVariant.TAINTED_TUBE_WORM] = "TAINTED_TUBE_WORM"
--- For `EntityType.POOP` (245).
____exports.PoopEntityVariant = {}
____exports.PoopEntityVariant.NORMAL = 0
____exports.PoopEntityVariant[____exports.PoopEntityVariant.NORMAL] = "NORMAL"
____exports.PoopEntityVariant.GOLDEN = 1
____exports.PoopEntityVariant[____exports.PoopEntityVariant.GOLDEN] = "GOLDEN"
____exports.PoopEntityVariant.STONE = 11
____exports.PoopEntityVariant[____exports.PoopEntityVariant.STONE] = "STONE"
____exports.PoopEntityVariant.CORNY = 12
____exports.PoopEntityVariant[____exports.PoopEntityVariant.CORNY] = "CORNY"
____exports.PoopEntityVariant.BURNING = 13
____exports.PoopEntityVariant[____exports.PoopEntityVariant.BURNING] = "BURNING"
____exports.PoopEntityVariant.STINKY = 14
____exports.PoopEntityVariant[____exports.PoopEntityVariant.STINKY] = "STINKY"
____exports.PoopEntityVariant.BLACK = 15
____exports.PoopEntityVariant[____exports.PoopEntityVariant.BLACK] = "BLACK"
____exports.PoopEntityVariant.WHITE = 16
____exports.PoopEntityVariant[____exports.PoopEntityVariant.WHITE] = "WHITE"
--- For `EntityType.RAGLING` (246).
____exports.RaglingVariant = {}
____exports.RaglingVariant.RAGLING = 0
____exports.RaglingVariant[____exports.RaglingVariant.RAGLING] = "RAGLING"
____exports.RaglingVariant.RAG_MANS_RAGLING = 1
____exports.RaglingVariant[____exports.RaglingVariant.RAG_MANS_RAGLING] = "RAG_MANS_RAGLING"
--- For `EntityType.BEGOTTEN` (251).
____exports.BegottenVariant = {}
____exports.BegottenVariant.BEGOTTEN = 0
____exports.BegottenVariant[____exports.BegottenVariant.BEGOTTEN] = "BEGOTTEN"
____exports.BegottenVariant.BEGOTTEN_CHAIN = 10
____exports.BegottenVariant[____exports.BegottenVariant.BEGOTTEN_CHAIN] = "BEGOTTEN_CHAIN"
--- For `EntityType.CONJOINED_FATTY` (257).
____exports.ConjoinedFattyVariant = {}
____exports.ConjoinedFattyVariant.CONJOINED_FATTY = 0
____exports.ConjoinedFattyVariant[____exports.ConjoinedFattyVariant.CONJOINED_FATTY] = "CONJOINED_FATTY"
____exports.ConjoinedFattyVariant.BLUE_CONJOINED_FATTY = 1
____exports.ConjoinedFattyVariant[____exports.ConjoinedFattyVariant.BLUE_CONJOINED_FATTY] = "BLUE_CONJOINED_FATTY"
--- For `EntityType.HAUNT` (260).
____exports.HauntVariant = {}
____exports.HauntVariant.HAUNT = 0
____exports.HauntVariant[____exports.HauntVariant.HAUNT] = "HAUNT"
____exports.HauntVariant.LIL_HAUNT = 10
____exports.HauntVariant[____exports.HauntVariant.LIL_HAUNT] = "LIL_HAUNT"
--- For `EntityType.DINGLE` (261).
____exports.DingleVariant = {}
____exports.DingleVariant.DINGLE = 0
____exports.DingleVariant[____exports.DingleVariant.DINGLE] = "DINGLE"
____exports.DingleVariant.DANGLE = 1
____exports.DingleVariant[____exports.DingleVariant.DANGLE] = "DANGLE"
--- For `EntityType.MAMA_GURDY` (266).
____exports.MamaGurdyVariant = {}
____exports.MamaGurdyVariant.MAMA_GURDY = 0
____exports.MamaGurdyVariant[____exports.MamaGurdyVariant.MAMA_GURDY] = "MAMA_GURDY"
____exports.MamaGurdyVariant.LEFT_HAND = 1
____exports.MamaGurdyVariant[____exports.MamaGurdyVariant.LEFT_HAND] = "LEFT_HAND"
____exports.MamaGurdyVariant.RIGHT_HAND = 2
____exports.MamaGurdyVariant[____exports.MamaGurdyVariant.RIGHT_HAND] = "RIGHT_HAND"
--- For `EntityType.POLYCEPHALUS` (269).
____exports.PolycephalusVariant = {}
____exports.PolycephalusVariant.POLYCEPHALUS = 0
____exports.PolycephalusVariant[____exports.PolycephalusVariant.POLYCEPHALUS] = "POLYCEPHALUS"
____exports.PolycephalusVariant.PILE = 1
____exports.PolycephalusVariant[____exports.PolycephalusVariant.PILE] = "PILE"
--- For `EntityType.URIEL` (271) and `EntityType.GABRIEL` (272).
____exports.AngelVariant = {}
____exports.AngelVariant.NORMAL = 0
____exports.AngelVariant[____exports.AngelVariant.NORMAL] = "NORMAL"
____exports.AngelVariant.FALLEN = 1
____exports.AngelVariant[____exports.AngelVariant.FALLEN] = "FALLEN"
--- For `EntityType.LAMB` (273).
____exports.LambVariant = {}
____exports.LambVariant.LAMB = 0
____exports.LambVariant[____exports.LambVariant.LAMB] = "LAMB"
____exports.LambVariant.BODY = 10
____exports.LambVariant[____exports.LambVariant.BODY] = "BODY"
--- For `EntityType.MEGA_SATAN` (274) and `EntityType.MEGA_SATAN_2` (275).
____exports.MegaSatanVariant = {}
____exports.MegaSatanVariant.MEGA_SATAN = 0
____exports.MegaSatanVariant[____exports.MegaSatanVariant.MEGA_SATAN] = "MEGA_SATAN"
____exports.MegaSatanVariant.MEGA_SATAN_RIGHT_HAND = 1
____exports.MegaSatanVariant[____exports.MegaSatanVariant.MEGA_SATAN_RIGHT_HAND] = "MEGA_SATAN_RIGHT_HAND"
____exports.MegaSatanVariant.MEGA_SATAN_LEFT_HAND = 2
____exports.MegaSatanVariant[____exports.MegaSatanVariant.MEGA_SATAN_LEFT_HAND] = "MEGA_SATAN_LEFT_HAND"
--- For `EntityType.PITFALL` (291).
____exports.PitfallVariant = {}
____exports.PitfallVariant.PITFALL = 0
____exports.PitfallVariant[____exports.PitfallVariant.PITFALL] = "PITFALL"
____exports.PitfallVariant.SUCTION_PITFALL = 1
____exports.PitfallVariant[____exports.PitfallVariant.SUCTION_PITFALL] = "SUCTION_PITFALL"
____exports.PitfallVariant.TELEPORT_PITFALL = 2
____exports.PitfallVariant[____exports.PitfallVariant.TELEPORT_PITFALL] = "TELEPORT_PITFALL"
--- For `EntityType.MOVABLE_TNT` (292).
____exports.MoveableTNTVariant = {}
____exports.MoveableTNTVariant.MOVEABLE_TNT = 0
____exports.MoveableTNTVariant[____exports.MoveableTNTVariant.MOVEABLE_TNT] = "MOVEABLE_TNT"
____exports.MoveableTNTVariant.MINE_CRAFTER = 1
____exports.MoveableTNTVariant[____exports.MoveableTNTVariant.MINE_CRAFTER] = "MINE_CRAFTER"
--- For `EntityType.ULTRA_COIN` (293).
____exports.UltraCoinVariant = {}
____exports.UltraCoinVariant.SPINNER = 0
____exports.UltraCoinVariant[____exports.UltraCoinVariant.SPINNER] = "SPINNER"
____exports.UltraCoinVariant.KEY = 1
____exports.UltraCoinVariant[____exports.UltraCoinVariant.KEY] = "KEY"
____exports.UltraCoinVariant.BOMB = 2
____exports.UltraCoinVariant[____exports.UltraCoinVariant.BOMB] = "BOMB"
____exports.UltraCoinVariant.HEART = 3
____exports.UltraCoinVariant[____exports.UltraCoinVariant.HEART] = "HEART"
--- For `EntityType.STONEY` (302).
____exports.StoneyVariant = {}
____exports.StoneyVariant.STONEY = 0
____exports.StoneyVariant[____exports.StoneyVariant.STONEY] = "STONEY"
____exports.StoneyVariant.CROSS_STONEY = 10
____exports.StoneyVariant[____exports.StoneyVariant.CROSS_STONEY] = "CROSS_STONEY"
--- For `EntityType.PORTAL` (306).
____exports.PortalVariant = {}
____exports.PortalVariant.PORTAL = 0
____exports.PortalVariant[____exports.PortalVariant.PORTAL] = "PORTAL"
____exports.PortalVariant.LIL_PORTAL = 1
____exports.PortalVariant[____exports.PortalVariant.LIL_PORTAL] = "LIL_PORTAL"
--- For `EntityType.LEPER` (310).
____exports.LeperVariant = {}
____exports.LeperVariant.LEPER = 0
____exports.LeperVariant[____exports.LeperVariant.LEPER] = "LEPER"
____exports.LeperVariant.LEPER_FLESH = 1
____exports.LeperVariant[____exports.LeperVariant.LEPER_FLESH] = "LEPER_FLESH"
--- For `EntityType.MR_MINE` (311).
____exports.MrMineVariant = {}
____exports.MrMineVariant.MR_MINE = 0
____exports.MrMineVariant[____exports.MrMineVariant.MR_MINE] = "MR_MINE"
____exports.MrMineVariant.MR_MINE_NECK = 10
____exports.MrMineVariant[____exports.MrMineVariant.MR_MINE_NECK] = "MR_MINE_NECK"
--- For `EntityType.LITTLE_HORN` (404).
____exports.LittleHornVariant = {}
____exports.LittleHornVariant.LITTLE_HORN = 0
____exports.LittleHornVariant[____exports.LittleHornVariant.LITTLE_HORN] = "LITTLE_HORN"
____exports.LittleHornVariant.DARK_BALL = 1
____exports.LittleHornVariant[____exports.LittleHornVariant.DARK_BALL] = "DARK_BALL"
--- For `EntityType.RAG_MAN` (405).
____exports.RagManVariant = {}
____exports.RagManVariant.RAG_MAN = 0
____exports.RagManVariant[____exports.RagManVariant.RAG_MAN] = "RAG_MAN"
____exports.RagManVariant.RAG_MAN_HEAD = 1
____exports.RagManVariant[____exports.RagManVariant.RAG_MAN_HEAD] = "RAG_MAN_HEAD"
--- For `EntityType.ULTRA_GREED` (406).
____exports.UltraGreedVariant = {}
____exports.UltraGreedVariant.ULTRA_GREED = 0
____exports.UltraGreedVariant[____exports.UltraGreedVariant.ULTRA_GREED] = "ULTRA_GREED"
____exports.UltraGreedVariant.ULTRA_GREEDIER = 1
____exports.UltraGreedVariant[____exports.UltraGreedVariant.ULTRA_GREEDIER] = "ULTRA_GREEDIER"
--- For `EntityType.RAG_MEGA` (409).
____exports.RagMegaVariant = {}
____exports.RagMegaVariant.RAG_MEGA = 0
____exports.RagMegaVariant[____exports.RagMegaVariant.RAG_MEGA] = "RAG_MEGA"
____exports.RagMegaVariant.PURPLE_BALL = 1
____exports.RagMegaVariant[____exports.RagMegaVariant.PURPLE_BALL] = "PURPLE_BALL"
____exports.RagMegaVariant.REBIRTH_PILLAR = 2
____exports.RagMegaVariant[____exports.RagMegaVariant.REBIRTH_PILLAR] = "REBIRTH_PILLAR"
--- For `EntityType.BIG_HORN` (411).
____exports.BigHornVariant = {}
____exports.BigHornVariant.BIG_HORN = 0
____exports.BigHornVariant[____exports.BigHornVariant.BIG_HORN] = "BIG_HORN"
____exports.BigHornVariant.SMALL_HOLE = 1
____exports.BigHornVariant[____exports.BigHornVariant.SMALL_HOLE] = "SMALL_HOLE"
____exports.BigHornVariant.BIG_HOLE = 2
____exports.BigHornVariant[____exports.BigHornVariant.BIG_HOLE] = "BIG_HOLE"
--- For `EntityType.BLOOD_PUPPY` (802).
____exports.BloodPuppyVariant = {}
____exports.BloodPuppyVariant.SMALL = 0
____exports.BloodPuppyVariant[____exports.BloodPuppyVariant.SMALL] = "SMALL"
____exports.BloodPuppyVariant.LARGE = 1
____exports.BloodPuppyVariant[____exports.BloodPuppyVariant.LARGE] = "LARGE"
--- For `EntityType.SUB_HORF` (812).
____exports.SubHorfVariant = {}
____exports.SubHorfVariant.SUB_HORF = 0
____exports.SubHorfVariant[____exports.SubHorfVariant.SUB_HORF] = "SUB_HORF"
____exports.SubHorfVariant.TAINTED_SUB_HORF = 1
____exports.SubHorfVariant[____exports.SubHorfVariant.TAINTED_SUB_HORF] = "TAINTED_SUB_HORF"
--- For `EntityType.POLTY` (816).
____exports.PoltyVariant = {}
____exports.PoltyVariant.POLTY = 0
____exports.PoltyVariant[____exports.PoltyVariant.POLTY] = "POLTY"
____exports.PoltyVariant.KINETI = 1
____exports.PoltyVariant[____exports.PoltyVariant.KINETI] = "KINETI"
--- For `EntityType.PREY` (817).
____exports.PreyVariant = {}
____exports.PreyVariant.PREY = 0
____exports.PreyVariant[____exports.PreyVariant.PREY] = "PREY"
____exports.PreyVariant.MULLIGHOUL = 1
____exports.PreyVariant[____exports.PreyVariant.MULLIGHOUL] = "MULLIGHOUL"
--- For `EntityType.ROCK_SPIDER` (818).
____exports.RockSpiderVariant = {}
____exports.RockSpiderVariant.ROCK_SPIDER = 0
____exports.RockSpiderVariant[____exports.RockSpiderVariant.ROCK_SPIDER] = "ROCK_SPIDER"
____exports.RockSpiderVariant.TINTED_ROCK_SPIDER = 1
____exports.RockSpiderVariant[____exports.RockSpiderVariant.TINTED_ROCK_SPIDER] = "TINTED_ROCK_SPIDER"
____exports.RockSpiderVariant.COAL_SPIDER = 2
____exports.RockSpiderVariant[____exports.RockSpiderVariant.COAL_SPIDER] = "COAL_SPIDER"
--- For `EntityType.FLY_BOMB` (819).
____exports.FlyBombVariant = {}
____exports.FlyBombVariant.FLY_BOMB = 0
____exports.FlyBombVariant[____exports.FlyBombVariant.FLY_BOMB] = "FLY_BOMB"
____exports.FlyBombVariant.ETERNAL_FLY_BOMB = 1
____exports.FlyBombVariant[____exports.FlyBombVariant.ETERNAL_FLY_BOMB] = "ETERNAL_FLY_BOMB"
--- For `EntityType.DANNY` (820).
____exports.DannyVariant = {}
____exports.DannyVariant.DANNY = 0
____exports.DannyVariant[____exports.DannyVariant.DANNY] = "DANNY"
____exports.DannyVariant.COAL_BOY = 1
____exports.DannyVariant[____exports.DannyVariant.COAL_BOY] = "COAL_BOY"
--- For `EntityType.GYRO` (824).
____exports.GyroVariant = {}
____exports.GyroVariant.GYRO = 0
____exports.GyroVariant[____exports.GyroVariant.GYRO] = "GYRO"
____exports.GyroVariant.GRILLED_GYRO = 1
____exports.GyroVariant[____exports.GyroVariant.GRILLED_GYRO] = "GRILLED_GYRO"
--- For `EntityType.FACELESS` (827).
____exports.FacelessVariant = {}
____exports.FacelessVariant.FACELESS = 0
____exports.FacelessVariant[____exports.FacelessVariant.FACELESS] = "FACELESS"
____exports.FacelessVariant.TAINTED_FACELESS = 1
____exports.FacelessVariant[____exports.FacelessVariant.TAINTED_FACELESS] = "TAINTED_FACELESS"
--- For `EntityType.MOLE` (829).
____exports.MoleVariant = {}
____exports.MoleVariant.MOLE = 0
____exports.MoleVariant[____exports.MoleVariant.MOLE] = "MOLE"
____exports.MoleVariant.TAINTED_MOLE = 1
____exports.MoleVariant[____exports.MoleVariant.TAINTED_MOLE] = "TAINTED_MOLE"
--- For `EntityType.BIG_BONY` (830).
____exports.BigBonyVariant = {}
____exports.BigBonyVariant.BIG_BONY = 0
____exports.BigBonyVariant[____exports.BigBonyVariant.BIG_BONY] = "BIG_BONY"
____exports.BigBonyVariant.BIG_BONE = 10
____exports.BigBonyVariant[____exports.BigBonyVariant.BIG_BONE] = "BIG_BONE"
--- For `EntityType.GUTTED_FATTY` (831).
____exports.GuttyFattyVariant = {}
____exports.GuttyFattyVariant.GUTTED_FATTY = 0
____exports.GuttyFattyVariant[____exports.GuttyFattyVariant.GUTTED_FATTY] = "GUTTED_FATTY"
____exports.GuttyFattyVariant.GUTTY_FATTY_EYE = 10
____exports.GuttyFattyVariant[____exports.GuttyFattyVariant.GUTTY_FATTY_EYE] = "GUTTY_FATTY_EYE"
____exports.GuttyFattyVariant.FESTERING_GUTS = 20
____exports.GuttyFattyVariant[____exports.GuttyFattyVariant.FESTERING_GUTS] = "FESTERING_GUTS"
--- For `EntityType.EXORCIST` (832).
____exports.ExorcistVariant = {}
____exports.ExorcistVariant.EXORCIST = 0
____exports.ExorcistVariant[____exports.ExorcistVariant.EXORCIST] = "EXORCIST"
____exports.ExorcistVariant.FANATIC = 1
____exports.ExorcistVariant[____exports.ExorcistVariant.FANATIC] = "FANATIC"
--- For `EntityType.WHIPPER` (834).
____exports.WhipperVariant = {}
____exports.WhipperVariant.WHIPPER = 0
____exports.WhipperVariant[____exports.WhipperVariant.WHIPPER] = "WHIPPER"
____exports.WhipperVariant.SNAPPER = 1
____exports.WhipperVariant[____exports.WhipperVariant.SNAPPER] = "SNAPPER"
____exports.WhipperVariant.FLAGELLANT = 2
____exports.WhipperVariant[____exports.WhipperVariant.FLAGELLANT] = "FLAGELLANT"
--- For `EntityType.PEEPER_FATTY` (835).
____exports.PeeperFattyVariant = {}
____exports.PeeperFattyVariant.PEEPING_FATTY = 0
____exports.PeeperFattyVariant[____exports.PeeperFattyVariant.PEEPING_FATTY] = "PEEPING_FATTY"
____exports.PeeperFattyVariant.PEEPING_FATTY_EYE = 10
____exports.PeeperFattyVariant[____exports.PeeperFattyVariant.PEEPING_FATTY_EYE] = "PEEPING_FATTY_EYE"
--- For `EntityType.REVENANT` (841).
____exports.RevenantVariant = {}
____exports.RevenantVariant.REVENANT = 0
____exports.RevenantVariant[____exports.RevenantVariant.REVENANT] = "REVENANT"
____exports.RevenantVariant.QUAD_REVENANT = 1
____exports.RevenantVariant[____exports.RevenantVariant.QUAD_REVENANT] = "QUAD_REVENANT"
--- For `EntityType.CANARY` (843).
____exports.CanaryVariant = {}
____exports.CanaryVariant.CANARY = 0
____exports.CanaryVariant[____exports.CanaryVariant.CANARY] = "CANARY"
____exports.CanaryVariant.FOREIGNER = 1
____exports.CanaryVariant[____exports.CanaryVariant.FOREIGNER] = "FOREIGNER"
--- For `EntityType.GAPER_LVL_2` (850).
____exports.Gaper2Variant = {}
____exports.Gaper2Variant.GAPER = 0
____exports.Gaper2Variant[____exports.Gaper2Variant.GAPER] = "GAPER"
____exports.Gaper2Variant.HORF = 1
____exports.Gaper2Variant[____exports.Gaper2Variant.HORF] = "HORF"
____exports.Gaper2Variant.GUSHER = 2
____exports.Gaper2Variant[____exports.Gaper2Variant.GUSHER] = "GUSHER"
--- For `EntityType.CHARGER_LVL_2` (855).
____exports.Charger2Variant = {}
____exports.Charger2Variant.CHARGER = 0
____exports.Charger2Variant[____exports.Charger2Variant.CHARGER] = "CHARGER"
____exports.Charger2Variant.ELLEECH = 1
____exports.Charger2Variant[____exports.Charger2Variant.ELLEECH] = "ELLEECH"
--- For `EntityType.EVIS` (865).
____exports.EvisVariant = {}
____exports.EvisVariant.EVIS = 0
____exports.EvisVariant[____exports.EvisVariant.EVIS] = "EVIS"
____exports.EvisVariant.EVIS_GUTS = 10
____exports.EvisVariant[____exports.EvisVariant.EVIS_GUTS] = "EVIS_GUTS"
--- For `EntityType.DARK_ESAU` (866).
____exports.DarkEsauVariant = {}
____exports.DarkEsauVariant.DARK_ESAU = 0
____exports.DarkEsauVariant[____exports.DarkEsauVariant.DARK_ESAU] = "DARK_ESAU"
____exports.DarkEsauVariant.PIT = 1
____exports.DarkEsauVariant[____exports.DarkEsauVariant.PIT] = "PIT"
--- For `EntityType.DUMP` (876).
____exports.DumpVariant = {}
____exports.DumpVariant.DUMP = 0
____exports.DumpVariant[____exports.DumpVariant.DUMP] = "DUMP"
____exports.DumpVariant.DUMP_HEAD = 1
____exports.DumpVariant[____exports.DumpVariant.DUMP_HEAD] = "DUMP_HEAD"
--- For `EntityType.NEEDLE` (881).
____exports.NeedleVariant = {}
____exports.NeedleVariant.NEEDLE = 0
____exports.NeedleVariant[____exports.NeedleVariant.NEEDLE] = "NEEDLE"
____exports.NeedleVariant.PASTY = 1
____exports.NeedleVariant[____exports.NeedleVariant.PASTY] = "PASTY"
--- For `EntityType.CULTIST` (885).
____exports.CultistVariant = {}
____exports.CultistVariant.CULTIST = 0
____exports.CultistVariant[____exports.CultistVariant.CULTIST] = "CULTIST"
____exports.CultistVariant.BLOOD_CULTIST = 1
____exports.CultistVariant[____exports.CultistVariant.BLOOD_CULTIST] = "BLOOD_CULTIST"
____exports.CultistVariant.BONE_TRAP = 10
____exports.CultistVariant[____exports.CultistVariant.BONE_TRAP] = "BONE_TRAP"
--- For `EntityType.VIS_FATTY` (886).
____exports.VisFattyVariant = {}
____exports.VisFattyVariant.VIS_FATTY = 0
____exports.VisFattyVariant[____exports.VisFattyVariant.VIS_FATTY] = "VIS_FATTY"
____exports.VisFattyVariant.FETAL_DEMON = 1
____exports.VisFattyVariant[____exports.VisFattyVariant.FETAL_DEMON] = "FETAL_DEMON"
--- For `EntityType.GOAT` (891).
____exports.GoatVariant = {}
____exports.GoatVariant.GOAT = 0
____exports.GoatVariant[____exports.GoatVariant.GOAT] = "GOAT"
____exports.GoatVariant.BLACK_GOAT = 1
____exports.GoatVariant[____exports.GoatVariant.BLACK_GOAT] = "BLACK_GOAT"
--- For `EntityType.VISAGE` (903).
____exports.VisageVariant = {}
____exports.VisageVariant.VISAGE = 0
____exports.VisageVariant[____exports.VisageVariant.VISAGE] = "VISAGE"
____exports.VisageVariant.VISAGE_MASK = 1
____exports.VisageVariant[____exports.VisageVariant.VISAGE_MASK] = "VISAGE_MASK"
____exports.VisageVariant.VISAGE_CHAIN = 10
____exports.VisageVariant[____exports.VisageVariant.VISAGE_CHAIN] = "VISAGE_CHAIN"
____exports.VisageVariant.VISAGE_PLASMA = 20
____exports.VisageVariant[____exports.VisageVariant.VISAGE_PLASMA] = "VISAGE_PLASMA"
--- For `EntityType.SIREN` (904).
____exports.SirenVariant = {}
____exports.SirenVariant.SIREN = 0
____exports.SirenVariant[____exports.SirenVariant.SIREN] = "SIREN"
____exports.SirenVariant.SIREN_SKULL = 1
____exports.SirenVariant[____exports.SirenVariant.SIREN_SKULL] = "SIREN_SKULL"
____exports.SirenVariant.SIREN_HELPER_PROJECTILE = 10
____exports.SirenVariant[____exports.SirenVariant.SIREN_HELPER_PROJECTILE] = "SIREN_HELPER_PROJECTILE"
--- For `EntityType.SCOURGE` (909).
____exports.ScourgeVariant = {}
____exports.ScourgeVariant.SCOURGE = 0
____exports.ScourgeVariant[____exports.ScourgeVariant.SCOURGE] = "SCOURGE"
____exports.ScourgeVariant.SCOURGE_CHAIN = 10
____exports.ScourgeVariant[____exports.ScourgeVariant.SCOURGE_CHAIN] = "SCOURGE_CHAIN"
--- For `EntityType.CHIMERA` (910).
____exports.ChimeraVariant = {}
____exports.ChimeraVariant.CHIMERA = 0
____exports.ChimeraVariant[____exports.ChimeraVariant.CHIMERA] = "CHIMERA"
____exports.ChimeraVariant.CHIMERA_BODY = 1
____exports.ChimeraVariant[____exports.ChimeraVariant.CHIMERA_BODY] = "CHIMERA_BODY"
____exports.ChimeraVariant.CHIMERA_HEAD = 2
____exports.ChimeraVariant[____exports.ChimeraVariant.CHIMERA_HEAD] = "CHIMERA_HEAD"
--- For `EntityType.ROTGUT` (911).
____exports.RotgutVariant = {}
____exports.RotgutVariant.PHASE_1_HEAD = 0
____exports.RotgutVariant[____exports.RotgutVariant.PHASE_1_HEAD] = "PHASE_1_HEAD"
____exports.RotgutVariant.PHASE_2_MAGGOT = 1
____exports.RotgutVariant[____exports.RotgutVariant.PHASE_2_MAGGOT] = "PHASE_2_MAGGOT"
____exports.RotgutVariant.PHASE_3_HEART = 2
____exports.RotgutVariant[____exports.RotgutVariant.PHASE_3_HEART] = "PHASE_3_HEART"
--- For `EntityType.MOTHER` (912).
____exports.MotherVariant = {}
____exports.MotherVariant.MOTHER_1 = 0
____exports.MotherVariant[____exports.MotherVariant.MOTHER_1] = "MOTHER_1"
____exports.MotherVariant.MOTHER_2 = 10
____exports.MotherVariant[____exports.MotherVariant.MOTHER_2] = "MOTHER_2"
____exports.MotherVariant.DEAD_ISAAC = 20
____exports.MotherVariant[____exports.MotherVariant.DEAD_ISAAC] = "DEAD_ISAAC"
____exports.MotherVariant.WORM = 30
____exports.MotherVariant[____exports.MotherVariant.WORM] = "WORM"
____exports.MotherVariant.BALL = 100
____exports.MotherVariant[____exports.MotherVariant.BALL] = "BALL"
--- For `EntityType.SINGE` (915).
____exports.SingeVariant = {}
____exports.SingeVariant.SINGE = 0
____exports.SingeVariant[____exports.SingeVariant.SINGE] = "SINGE"
____exports.SingeVariant.SINGE_BALL = 1
____exports.SingeVariant[____exports.SingeVariant.SINGE_BALL] = "SINGE_BALL"
--- For `EntityType.RAGLICH` (919).
____exports.RaglichVariant = {}
____exports.RaglichVariant.RAGLICH = 0
____exports.RaglichVariant[____exports.RaglichVariant.RAGLICH] = "RAGLICH"
____exports.RaglichVariant.RAGLICH_ARM = 1
____exports.RaglichVariant[____exports.RaglichVariant.RAGLICH_ARM] = "RAGLICH_ARM"
--- For `EntityType.CLUTCH` (921).
____exports.ClutchVariant = {}
____exports.ClutchVariant.CLUTCH = 0
____exports.ClutchVariant[____exports.ClutchVariant.CLUTCH] = "CLUTCH"
____exports.ClutchVariant.CLUTCH_ORBITAL = 1
____exports.ClutchVariant[____exports.ClutchVariant.CLUTCH_ORBITAL] = "CLUTCH_ORBITAL"
--- For `EntityType.DOGMA` (950).
____exports.DogmaVariant = {}
____exports.DogmaVariant.DOGMA_PHASE_1 = 0
____exports.DogmaVariant[____exports.DogmaVariant.DOGMA_PHASE_1] = "DOGMA_PHASE_1"
____exports.DogmaVariant.TV = 1
____exports.DogmaVariant[____exports.DogmaVariant.TV] = "TV"
____exports.DogmaVariant.ANGEL_PHASE_2 = 2
____exports.DogmaVariant[____exports.DogmaVariant.ANGEL_PHASE_2] = "ANGEL_PHASE_2"
____exports.DogmaVariant.ANGEL_BABY_UNUSED = 10
____exports.DogmaVariant[____exports.DogmaVariant.ANGEL_BABY_UNUSED] = "ANGEL_BABY_UNUSED"
--- For `EntityType.BEAST` (951).
____exports.BeastVariant = {}
____exports.BeastVariant.BEAST = 0
____exports.BeastVariant[____exports.BeastVariant.BEAST] = "BEAST"
____exports.BeastVariant.STALACTITE = 1
____exports.BeastVariant[____exports.BeastVariant.STALACTITE] = "STALACTITE"
____exports.BeastVariant.ROCK_PROJECTILE = 2
____exports.BeastVariant[____exports.BeastVariant.ROCK_PROJECTILE] = "ROCK_PROJECTILE"
____exports.BeastVariant.SOUL = 3
____exports.BeastVariant[____exports.BeastVariant.SOUL] = "SOUL"
____exports.BeastVariant.ULTRA_FAMINE = 10
____exports.BeastVariant[____exports.BeastVariant.ULTRA_FAMINE] = "ULTRA_FAMINE"
____exports.BeastVariant.ULTRA_FAMINE_FLY = 11
____exports.BeastVariant[____exports.BeastVariant.ULTRA_FAMINE_FLY] = "ULTRA_FAMINE_FLY"
____exports.BeastVariant.ULTRA_PESTILENCE = 20
____exports.BeastVariant[____exports.BeastVariant.ULTRA_PESTILENCE] = "ULTRA_PESTILENCE"
____exports.BeastVariant.ULTRA_PESTILENCE_FLY = 21
____exports.BeastVariant[____exports.BeastVariant.ULTRA_PESTILENCE_FLY] = "ULTRA_PESTILENCE_FLY"
____exports.BeastVariant.ULTRA_PESTILENCE_MAGGOT = 22
____exports.BeastVariant[____exports.BeastVariant.ULTRA_PESTILENCE_MAGGOT] = "ULTRA_PESTILENCE_MAGGOT"
____exports.BeastVariant.ULTRA_PESTILENCE_FLY_BALL = 23
____exports.BeastVariant[____exports.BeastVariant.ULTRA_PESTILENCE_FLY_BALL] = "ULTRA_PESTILENCE_FLY_BALL"
____exports.BeastVariant.ULTRA_WAR = 30
____exports.BeastVariant[____exports.BeastVariant.ULTRA_WAR] = "ULTRA_WAR"
____exports.BeastVariant.ULTRA_WAR_BOMB = 31
____exports.BeastVariant[____exports.BeastVariant.ULTRA_WAR_BOMB] = "ULTRA_WAR_BOMB"
____exports.BeastVariant.ULTRA_DEATH = 40
____exports.BeastVariant[____exports.BeastVariant.ULTRA_DEATH] = "ULTRA_DEATH"
____exports.BeastVariant.ULTRA_DEATH_SCYTHE = 41
____exports.BeastVariant[____exports.BeastVariant.ULTRA_DEATH_SCYTHE] = "ULTRA_DEATH_SCYTHE"
____exports.BeastVariant.ULTRA_DEATH_HEAD = 42
____exports.BeastVariant[____exports.BeastVariant.ULTRA_DEATH_HEAD] = "ULTRA_DEATH_HEAD"
____exports.BeastVariant.BACKGROUND_BEAST = 100
____exports.BeastVariant[____exports.BeastVariant.BACKGROUND_BEAST] = "BACKGROUND_BEAST"
____exports.BeastVariant.BACKGROUND_FAMINE = 101
____exports.BeastVariant[____exports.BeastVariant.BACKGROUND_FAMINE] = "BACKGROUND_FAMINE"
____exports.BeastVariant.BACKGROUND_PESTILENCE = 102
____exports.BeastVariant[____exports.BeastVariant.BACKGROUND_PESTILENCE] = "BACKGROUND_PESTILENCE"
____exports.BeastVariant.BACKGROUND_WAR = 103
____exports.BeastVariant[____exports.BeastVariant.BACKGROUND_WAR] = "BACKGROUND_WAR"
____exports.BeastVariant.BACKGROUND_DEATH = 104
____exports.BeastVariant[____exports.BeastVariant.BACKGROUND_DEATH] = "BACKGROUND_DEATH"
--- For `EntityType.GENERIC_PROP` (960).
____exports.GenericPropVariant = {}
____exports.GenericPropVariant.GENERIC_PROP = 0
____exports.GenericPropVariant[____exports.GenericPropVariant.GENERIC_PROP] = "GENERIC_PROP"
____exports.GenericPropVariant.MOMS_DRESSER = 1
____exports.GenericPropVariant[____exports.GenericPropVariant.MOMS_DRESSER] = "MOMS_DRESSER"
____exports.GenericPropVariant.MOMS_VANITY = 2
____exports.GenericPropVariant[____exports.GenericPropVariant.MOMS_VANITY] = "MOMS_VANITY"
____exports.GenericPropVariant.COUCH = 3
____exports.GenericPropVariant[____exports.GenericPropVariant.COUCH] = "COUCH"
____exports.GenericPropVariant.TV = 4
____exports.GenericPropVariant[____exports.GenericPropVariant.TV] = "TV"
--- For `EntityType.EFFECT` (1000).
____exports.EffectVariant = {}
____exports.EffectVariant.EFFECT_NULL = 0
____exports.EffectVariant[____exports.EffectVariant.EFFECT_NULL] = "EFFECT_NULL"
____exports.EffectVariant.BOMB_EXPLOSION = 1
____exports.EffectVariant[____exports.EffectVariant.BOMB_EXPLOSION] = "BOMB_EXPLOSION"
____exports.EffectVariant.BLOOD_EXPLOSION = 2
____exports.EffectVariant[____exports.EffectVariant.BLOOD_EXPLOSION] = "BLOOD_EXPLOSION"
____exports.EffectVariant.FLY_EXPLOSION = 3
____exports.EffectVariant[____exports.EffectVariant.FLY_EXPLOSION] = "FLY_EXPLOSION"
____exports.EffectVariant.ROCK_PARTICLE = 4
____exports.EffectVariant[____exports.EffectVariant.ROCK_PARTICLE] = "ROCK_PARTICLE"
____exports.EffectVariant.BLOOD_PARTICLE = 5
____exports.EffectVariant[____exports.EffectVariant.BLOOD_PARTICLE] = "BLOOD_PARTICLE"
____exports.EffectVariant.DEVIL = 6
____exports.EffectVariant[____exports.EffectVariant.DEVIL] = "DEVIL"
____exports.EffectVariant.BLOOD_SPLAT = 7
____exports.EffectVariant[____exports.EffectVariant.BLOOD_SPLAT] = "BLOOD_SPLAT"
____exports.EffectVariant.LADDER = 8
____exports.EffectVariant[____exports.EffectVariant.LADDER] = "LADDER"
____exports.EffectVariant.ANGEL = 9
____exports.EffectVariant[____exports.EffectVariant.ANGEL] = "ANGEL"
____exports.EffectVariant.BLUE_FLAME = 10
____exports.EffectVariant[____exports.EffectVariant.BLUE_FLAME] = "BLUE_FLAME"
____exports.EffectVariant.BULLET_POOF = 11
____exports.EffectVariant[____exports.EffectVariant.BULLET_POOF] = "BULLET_POOF"
____exports.EffectVariant.TEAR_POOF_A = 12
____exports.EffectVariant[____exports.EffectVariant.TEAR_POOF_A] = "TEAR_POOF_A"
____exports.EffectVariant.TEAR_POOF_B = 13
____exports.EffectVariant[____exports.EffectVariant.TEAR_POOF_B] = "TEAR_POOF_B"
____exports.EffectVariant.RIPPLE_POOF = 14
____exports.EffectVariant[____exports.EffectVariant.RIPPLE_POOF] = "RIPPLE_POOF"
____exports.EffectVariant.POOF_1 = 15
____exports.EffectVariant[____exports.EffectVariant.POOF_1] = "POOF_1"
____exports.EffectVariant.POOF_2 = 16
____exports.EffectVariant[____exports.EffectVariant.POOF_2] = "POOF_2"
____exports.EffectVariant.POOF_4 = 17
____exports.EffectVariant[____exports.EffectVariant.POOF_4] = "POOF_4"
____exports.EffectVariant.BOMB_CRATER = 18
____exports.EffectVariant[____exports.EffectVariant.BOMB_CRATER] = "BOMB_CRATER"
____exports.EffectVariant.CRACK_THE_SKY = 19
____exports.EffectVariant[____exports.EffectVariant.CRACK_THE_SKY] = "CRACK_THE_SKY"
____exports.EffectVariant.SCYTHE_BREAK = 20
____exports.EffectVariant[____exports.EffectVariant.SCYTHE_BREAK] = "SCYTHE_BREAK"
____exports.EffectVariant.TINY_BUG = 21
____exports.EffectVariant[____exports.EffectVariant.TINY_BUG] = "TINY_BUG"
____exports.EffectVariant.CREEP_RED = 22
____exports.EffectVariant[____exports.EffectVariant.CREEP_RED] = "CREEP_RED"
____exports.EffectVariant.CREEP_GREEN = 23
____exports.EffectVariant[____exports.EffectVariant.CREEP_GREEN] = "CREEP_GREEN"
____exports.EffectVariant.CREEP_YELLOW = 24
____exports.EffectVariant[____exports.EffectVariant.CREEP_YELLOW] = "CREEP_YELLOW"
____exports.EffectVariant.CREEP_WHITE = 25
____exports.EffectVariant[____exports.EffectVariant.CREEP_WHITE] = "CREEP_WHITE"
____exports.EffectVariant.CREEP_BLACK = 26
____exports.EffectVariant[____exports.EffectVariant.CREEP_BLACK] = "CREEP_BLACK"
____exports.EffectVariant.WOOD_PARTICLE = 27
____exports.EffectVariant[____exports.EffectVariant.WOOD_PARTICLE] = "WOOD_PARTICLE"
____exports.EffectVariant.MONSTROS_TOOTH = 28
____exports.EffectVariant[____exports.EffectVariant.MONSTROS_TOOTH] = "MONSTROS_TOOTH"
____exports.EffectVariant.MOM_FOOT_STOMP = 29
____exports.EffectVariant[____exports.EffectVariant.MOM_FOOT_STOMP] = "MOM_FOOT_STOMP"
____exports.EffectVariant.TARGET = 30
____exports.EffectVariant[____exports.EffectVariant.TARGET] = "TARGET"
____exports.EffectVariant.ROCKET = 31
____exports.EffectVariant[____exports.EffectVariant.ROCKET] = "ROCKET"
____exports.EffectVariant.PLAYER_CREEP_LEMON_MISHAP = 32
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_LEMON_MISHAP] = "PLAYER_CREEP_LEMON_MISHAP"
____exports.EffectVariant.TINY_FLY = 33
____exports.EffectVariant[____exports.EffectVariant.TINY_FLY] = "TINY_FLY"
____exports.EffectVariant.FART = 34
____exports.EffectVariant[____exports.EffectVariant.FART] = "FART"
____exports.EffectVariant.TOOTH_PARTICLE = 35
____exports.EffectVariant[____exports.EffectVariant.TOOTH_PARTICLE] = "TOOTH_PARTICLE"
____exports.EffectVariant.XRAY_WALL = 36
____exports.EffectVariant[____exports.EffectVariant.XRAY_WALL] = "XRAY_WALL"
____exports.EffectVariant.PLAYER_CREEP_HOLY_WATER = 37
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_HOLY_WATER] = "PLAYER_CREEP_HOLY_WATER"
____exports.EffectVariant.SPIDER_EXPLOSION = 38
____exports.EffectVariant[____exports.EffectVariant.SPIDER_EXPLOSION] = "SPIDER_EXPLOSION"
____exports.EffectVariant.HEAVEN_LIGHT_DOOR = 39
____exports.EffectVariant[____exports.EffectVariant.HEAVEN_LIGHT_DOOR] = "HEAVEN_LIGHT_DOOR"
____exports.EffectVariant.STAR_FLASH = 40
____exports.EffectVariant[____exports.EffectVariant.STAR_FLASH] = "STAR_FLASH"
____exports.EffectVariant.WATER_DROPLET = 41
____exports.EffectVariant[____exports.EffectVariant.WATER_DROPLET] = "WATER_DROPLET"
____exports.EffectVariant.BLOOD_GUSH = 42
____exports.EffectVariant[____exports.EffectVariant.BLOOD_GUSH] = "BLOOD_GUSH"
____exports.EffectVariant.POOP_EXPLOSION = 43
____exports.EffectVariant[____exports.EffectVariant.POOP_EXPLOSION] = "POOP_EXPLOSION"
____exports.EffectVariant.PLAYER_CREEP_WHITE = 44
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_WHITE] = "PLAYER_CREEP_WHITE"
____exports.EffectVariant.PLAYER_CREEP_BLACK = 45
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_BLACK] = "PLAYER_CREEP_BLACK"
____exports.EffectVariant.PLAYER_CREEP_RED = 46
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_RED] = "PLAYER_CREEP_RED"
____exports.EffectVariant.TRINITY_SHIELD = 47
____exports.EffectVariant[____exports.EffectVariant.TRINITY_SHIELD] = "TRINITY_SHIELD"
____exports.EffectVariant.BATTERY = 48
____exports.EffectVariant[____exports.EffectVariant.BATTERY] = "BATTERY"
____exports.EffectVariant.HEART = 49
____exports.EffectVariant[____exports.EffectVariant.HEART] = "HEART"
____exports.EffectVariant.LASER_IMPACT = 50
____exports.EffectVariant[____exports.EffectVariant.LASER_IMPACT] = "LASER_IMPACT"
____exports.EffectVariant.HOT_BOMB_FIRE = 51
____exports.EffectVariant[____exports.EffectVariant.HOT_BOMB_FIRE] = "HOT_BOMB_FIRE"
____exports.EffectVariant.RED_CANDLE_FLAME = 52
____exports.EffectVariant[____exports.EffectVariant.RED_CANDLE_FLAME] = "RED_CANDLE_FLAME"
____exports.EffectVariant.PLAYER_CREEP_GREEN = 53
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_GREEN] = "PLAYER_CREEP_GREEN"
____exports.EffectVariant.PLAYER_CREEP_HOLY_WATER_TRAIL = 54
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_HOLY_WATER_TRAIL] = "PLAYER_CREEP_HOLY_WATER_TRAIL"
____exports.EffectVariant.SPIKE = 55
____exports.EffectVariant[____exports.EffectVariant.SPIKE] = "SPIKE"
____exports.EffectVariant.CREEP_BROWN = 56
____exports.EffectVariant[____exports.EffectVariant.CREEP_BROWN] = "CREEP_BROWN"
____exports.EffectVariant.PULLING_EFFECT = 57
____exports.EffectVariant[____exports.EffectVariant.PULLING_EFFECT] = "PULLING_EFFECT"
____exports.EffectVariant.POOP_PARTICLE = 58
____exports.EffectVariant[____exports.EffectVariant.POOP_PARTICLE] = "POOP_PARTICLE"
____exports.EffectVariant.DUST_CLOUD = 59
____exports.EffectVariant[____exports.EffectVariant.DUST_CLOUD] = "DUST_CLOUD"
____exports.EffectVariant.BOOMERANG = 60
____exports.EffectVariant[____exports.EffectVariant.BOOMERANG] = "BOOMERANG"
____exports.EffectVariant.SHOCKWAVE = 61
____exports.EffectVariant[____exports.EffectVariant.SHOCKWAVE] = "SHOCKWAVE"
____exports.EffectVariant.ROCK_EXPLOSION = 62
____exports.EffectVariant[____exports.EffectVariant.ROCK_EXPLOSION] = "ROCK_EXPLOSION"
____exports.EffectVariant.WORM = 63
____exports.EffectVariant[____exports.EffectVariant.WORM] = "WORM"
____exports.EffectVariant.BEETLE = 64
____exports.EffectVariant[____exports.EffectVariant.BEETLE] = "BEETLE"
____exports.EffectVariant.WISP = 65
____exports.EffectVariant[____exports.EffectVariant.WISP] = "WISP"
____exports.EffectVariant.EMBER_PARTICLE = 66
____exports.EffectVariant[____exports.EffectVariant.EMBER_PARTICLE] = "EMBER_PARTICLE"
____exports.EffectVariant.SHOCKWAVE_DIRECTIONAL = 67
____exports.EffectVariant[____exports.EffectVariant.SHOCKWAVE_DIRECTIONAL] = "SHOCKWAVE_DIRECTIONAL"
____exports.EffectVariant.WALL_BUG = 68
____exports.EffectVariant[____exports.EffectVariant.WALL_BUG] = "WALL_BUG"
____exports.EffectVariant.BUTTERFLY = 69
____exports.EffectVariant[____exports.EffectVariant.BUTTERFLY] = "BUTTERFLY"
____exports.EffectVariant.BLOOD_DROP = 70
____exports.EffectVariant[____exports.EffectVariant.BLOOD_DROP] = "BLOOD_DROP"
____exports.EffectVariant.BRIMSTONE_SWIRL = 71
____exports.EffectVariant[____exports.EffectVariant.BRIMSTONE_SWIRL] = "BRIMSTONE_SWIRL"
____exports.EffectVariant.CRACK_WAVE = 72
____exports.EffectVariant[____exports.EffectVariant.CRACK_WAVE] = "CRACK_WAVE"
____exports.EffectVariant.SHOCKWAVE_RANDOM = 73
____exports.EffectVariant[____exports.EffectVariant.SHOCKWAVE_RANDOM] = "SHOCKWAVE_RANDOM"
____exports.EffectVariant.CARPET = 74
____exports.EffectVariant[____exports.EffectVariant.CARPET] = "CARPET"
____exports.EffectVariant.BAR_PARTICLE = 75
____exports.EffectVariant[____exports.EffectVariant.BAR_PARTICLE] = "BAR_PARTICLE"
____exports.EffectVariant.DICE_FLOOR = 76
____exports.EffectVariant[____exports.EffectVariant.DICE_FLOOR] = "DICE_FLOOR"
____exports.EffectVariant.LARGE_BLOOD_EXPLOSION = 77
____exports.EffectVariant[____exports.EffectVariant.LARGE_BLOOD_EXPLOSION] = "LARGE_BLOOD_EXPLOSION"
____exports.EffectVariant.PLAYER_CREEP_LEMON_PARTY = 78
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_LEMON_PARTY] = "PLAYER_CREEP_LEMON_PARTY"
____exports.EffectVariant.TEAR_POOF_SMALL = 79
____exports.EffectVariant[____exports.EffectVariant.TEAR_POOF_SMALL] = "TEAR_POOF_SMALL"
____exports.EffectVariant.TEAR_POOF_VERY_SMALL = 80
____exports.EffectVariant[____exports.EffectVariant.TEAR_POOF_VERY_SMALL] = "TEAR_POOF_VERY_SMALL"
____exports.EffectVariant.FRIEND_BALL = 81
____exports.EffectVariant[____exports.EffectVariant.FRIEND_BALL] = "FRIEND_BALL"
____exports.EffectVariant.WOMB_TELEPORT = 82
____exports.EffectVariant[____exports.EffectVariant.WOMB_TELEPORT] = "WOMB_TELEPORT"
____exports.EffectVariant.SPEAR_OF_DESTINY = 83
____exports.EffectVariant[____exports.EffectVariant.SPEAR_OF_DESTINY] = "SPEAR_OF_DESTINY"
____exports.EffectVariant.EVIL_EYE = 84
____exports.EffectVariant[____exports.EffectVariant.EVIL_EYE] = "EVIL_EYE"
____exports.EffectVariant.DIAMOND_PARTICLE = 85
____exports.EffectVariant[____exports.EffectVariant.DIAMOND_PARTICLE] = "DIAMOND_PARTICLE"
____exports.EffectVariant.NAIL_PARTICLE = 86
____exports.EffectVariant[____exports.EffectVariant.NAIL_PARTICLE] = "NAIL_PARTICLE"
____exports.EffectVariant.FALLING_EMBER = 87
____exports.EffectVariant[____exports.EffectVariant.FALLING_EMBER] = "FALLING_EMBER"
____exports.EffectVariant.DARK_BALL_SMOKE_PARTICLE = 88
____exports.EffectVariant[____exports.EffectVariant.DARK_BALL_SMOKE_PARTICLE] = "DARK_BALL_SMOKE_PARTICLE"
____exports.EffectVariant.ULTRA_GREED_FOOTPRINT = 89
____exports.EffectVariant[____exports.EffectVariant.ULTRA_GREED_FOOTPRINT] = "ULTRA_GREED_FOOTPRINT"
____exports.EffectVariant.PLAYER_CREEP_PUDDLE_MILK = 90
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_PUDDLE_MILK] = "PLAYER_CREEP_PUDDLE_MILK"
____exports.EffectVariant.MOMS_HAND = 91
____exports.EffectVariant[____exports.EffectVariant.MOMS_HAND] = "MOMS_HAND"
____exports.EffectVariant.PLAYER_CREEP_BLACK_POWDER = 92
____exports.EffectVariant[____exports.EffectVariant.PLAYER_CREEP_BLACK_POWDER] = "PLAYER_CREEP_BLACK_POWDER"
____exports.EffectVariant.PENTAGRAM_BLACK_POWDER = 93
____exports.EffectVariant[____exports.EffectVariant.PENTAGRAM_BLACK_POWDER] = "PENTAGRAM_BLACK_POWDER"
____exports.EffectVariant.CREEP_SLIPPERY_BROWN = 94
____exports.EffectVariant[____exports.EffectVariant.CREEP_SLIPPERY_BROWN] = "CREEP_SLIPPERY_BROWN"
____exports.EffectVariant.GOLD_PARTICLE = 95
____exports.EffectVariant[____exports.EffectVariant.GOLD_PARTICLE] = "GOLD_PARTICLE"
____exports.EffectVariant.HUSH_LASER = 96
____exports.EffectVariant[____exports.EffectVariant.HUSH_LASER] = "HUSH_LASER"
____exports.EffectVariant.IMPACT = 97
____exports.EffectVariant[____exports.EffectVariant.IMPACT] = "IMPACT"
____exports.EffectVariant.COIN_PARTICLE = 98
____exports.EffectVariant[____exports.EffectVariant.COIN_PARTICLE] = "COIN_PARTICLE"
____exports.EffectVariant.WATER_SPLASH = 99
____exports.EffectVariant[____exports.EffectVariant.WATER_SPLASH] = "WATER_SPLASH"
____exports.EffectVariant.HUSH_ASHES = 100
____exports.EffectVariant[____exports.EffectVariant.HUSH_ASHES] = "HUSH_ASHES"
____exports.EffectVariant.HUSH_LASER_UP = 101
____exports.EffectVariant[____exports.EffectVariant.HUSH_LASER_UP] = "HUSH_LASER_UP"
____exports.EffectVariant.BULLET_POOF_HUSH = 102
____exports.EffectVariant[____exports.EffectVariant.BULLET_POOF_HUSH] = "BULLET_POOF_HUSH"
____exports.EffectVariant.ULTRA_GREED_BLING = 103
____exports.EffectVariant[____exports.EffectVariant.ULTRA_GREED_BLING] = "ULTRA_GREED_BLING"
____exports.EffectVariant.FIREWORKS = 104
____exports.EffectVariant[____exports.EffectVariant.FIREWORKS] = "FIREWORKS"
____exports.EffectVariant.BROWN_CLOUD = 105
____exports.EffectVariant[____exports.EffectVariant.BROWN_CLOUD] = "BROWN_CLOUD"
____exports.EffectVariant.FART_RING = 106
____exports.EffectVariant[____exports.EffectVariant.FART_RING] = "FART_RING"
____exports.EffectVariant.BLACK_HOLE = 107
____exports.EffectVariant[____exports.EffectVariant.BLACK_HOLE] = "BLACK_HOLE"
____exports.EffectVariant.MR_ME = 108
____exports.EffectVariant[____exports.EffectVariant.MR_ME] = "MR_ME"
____exports.EffectVariant.DEATH_SKULL = 109
____exports.EffectVariant[____exports.EffectVariant.DEATH_SKULL] = "DEATH_SKULL"
____exports.EffectVariant.ENEMY_BRIMSTONE_SWIRL = 110
____exports.EffectVariant[____exports.EffectVariant.ENEMY_BRIMSTONE_SWIRL] = "ENEMY_BRIMSTONE_SWIRL"
____exports.EffectVariant.HAEMO_TRAIL = 111
____exports.EffectVariant[____exports.EffectVariant.HAEMO_TRAIL] = "HAEMO_TRAIL"
____exports.EffectVariant.HALLOWED_GROUND = 112
____exports.EffectVariant[____exports.EffectVariant.HALLOWED_GROUND] = "HALLOWED_GROUND"
____exports.EffectVariant.BRIMSTONE_BALL = 113
____exports.EffectVariant[____exports.EffectVariant.BRIMSTONE_BALL] = "BRIMSTONE_BALL"
____exports.EffectVariant.FORGOTTEN_CHAIN = 114
____exports.EffectVariant[____exports.EffectVariant.FORGOTTEN_CHAIN] = "FORGOTTEN_CHAIN"
____exports.EffectVariant.BROKEN_SHOVEL_SHADOW = 115
____exports.EffectVariant[____exports.EffectVariant.BROKEN_SHOVEL_SHADOW] = "BROKEN_SHOVEL_SHADOW"
____exports.EffectVariant.DIRT_PATCH = 116
____exports.EffectVariant[____exports.EffectVariant.DIRT_PATCH] = "DIRT_PATCH"
____exports.EffectVariant.FORGOTTEN_SOUL = 117
____exports.EffectVariant[____exports.EffectVariant.FORGOTTEN_SOUL] = "FORGOTTEN_SOUL"
____exports.EffectVariant.SMALL_ROCKET = 118
____exports.EffectVariant[____exports.EffectVariant.SMALL_ROCKET] = "SMALL_ROCKET"
____exports.EffectVariant.TIMER = 119
____exports.EffectVariant[____exports.EffectVariant.TIMER] = "TIMER"
____exports.EffectVariant.SPAWNER = 120
____exports.EffectVariant[____exports.EffectVariant.SPAWNER] = "SPAWNER"
____exports.EffectVariant.LIGHT = 121
____exports.EffectVariant[____exports.EffectVariant.LIGHT] = "LIGHT"
____exports.EffectVariant.BIG_HORN_HOLE_HELPER = 122
____exports.EffectVariant[____exports.EffectVariant.BIG_HORN_HOLE_HELPER] = "BIG_HORN_HOLE_HELPER"
____exports.EffectVariant.HALO = 123
____exports.EffectVariant[____exports.EffectVariant.HALO] = "HALO"
____exports.EffectVariant.TAR_BUBBLE = 124
____exports.EffectVariant[____exports.EffectVariant.TAR_BUBBLE] = "TAR_BUBBLE"
____exports.EffectVariant.BIG_HORN_HAND = 125
____exports.EffectVariant[____exports.EffectVariant.BIG_HORN_HAND] = "BIG_HORN_HAND"
____exports.EffectVariant.TECH_DOT = 126
____exports.EffectVariant[____exports.EffectVariant.TECH_DOT] = "TECH_DOT"
____exports.EffectVariant.MAMA_MEGA_EXPLOSION = 127
____exports.EffectVariant[____exports.EffectVariant.MAMA_MEGA_EXPLOSION] = "MAMA_MEGA_EXPLOSION"
____exports.EffectVariant.OPTION_LINE = 128
____exports.EffectVariant[____exports.EffectVariant.OPTION_LINE] = "OPTION_LINE"
____exports.EffectVariant.LEECH_EXPLOSION = 130
____exports.EffectVariant[____exports.EffectVariant.LEECH_EXPLOSION] = "LEECH_EXPLOSION"
____exports.EffectVariant.MAGGOT_EXPLOSION = 131
____exports.EffectVariant[____exports.EffectVariant.MAGGOT_EXPLOSION] = "MAGGOT_EXPLOSION"
____exports.EffectVariant.BIG_SPLASH = 132
____exports.EffectVariant[____exports.EffectVariant.BIG_SPLASH] = "BIG_SPLASH"
____exports.EffectVariant.WATER_RIPPLE = 133
____exports.EffectVariant[____exports.EffectVariant.WATER_RIPPLE] = "WATER_RIPPLE"
____exports.EffectVariant.PEDESTAL_RIPPLE = 134
____exports.EffectVariant[____exports.EffectVariant.PEDESTAL_RIPPLE] = "PEDESTAL_RIPPLE"
____exports.EffectVariant.RAIN_DROP = 135
____exports.EffectVariant[____exports.EffectVariant.RAIN_DROP] = "RAIN_DROP"
____exports.EffectVariant.GRID_ENTITY_PROJECTILE_HELPER = 136
____exports.EffectVariant[____exports.EffectVariant.GRID_ENTITY_PROJECTILE_HELPER] = "GRID_ENTITY_PROJECTILE_HELPER"
____exports.EffectVariant.WORMWOOD_HOLE = 137
____exports.EffectVariant[____exports.EffectVariant.WORMWOOD_HOLE] = "WORMWOOD_HOLE"
____exports.EffectVariant.MIST = 138
____exports.EffectVariant[____exports.EffectVariant.MIST] = "MIST"
____exports.EffectVariant.TRAPDOOR_COVER = 139
____exports.EffectVariant[____exports.EffectVariant.TRAPDOOR_COVER] = "TRAPDOOR_COVER"
____exports.EffectVariant.BACKDROP_DECORATION = 140
____exports.EffectVariant[____exports.EffectVariant.BACKDROP_DECORATION] = "BACKDROP_DECORATION"
____exports.EffectVariant.SMOKE_CLOUD = 141
____exports.EffectVariant[____exports.EffectVariant.SMOKE_CLOUD] = "SMOKE_CLOUD"
____exports.EffectVariant.WHIRLPOOL = 142
____exports.EffectVariant[____exports.EffectVariant.WHIRLPOOL] = "WHIRLPOOL"
____exports.EffectVariant.FART_WAVE = 143
____exports.EffectVariant[____exports.EffectVariant.FART_WAVE] = "FART_WAVE"
____exports.EffectVariant.ENEMY_GHOST = 144
____exports.EffectVariant[____exports.EffectVariant.ENEMY_GHOST] = "ENEMY_GHOST"
____exports.EffectVariant.ROCK_POOF = 145
____exports.EffectVariant[____exports.EffectVariant.ROCK_POOF] = "ROCK_POOF"
____exports.EffectVariant.DIRT_PILE = 146
____exports.EffectVariant[____exports.EffectVariant.DIRT_PILE] = "DIRT_PILE"
____exports.EffectVariant.FIRE_JET = 147
____exports.EffectVariant[____exports.EffectVariant.FIRE_JET] = "FIRE_JET"
____exports.EffectVariant.FIRE_WAVE = 148
____exports.EffectVariant[____exports.EffectVariant.FIRE_WAVE] = "FIRE_WAVE"
____exports.EffectVariant.BIG_ROCK_EXPLOSION = 149
____exports.EffectVariant[____exports.EffectVariant.BIG_ROCK_EXPLOSION] = "BIG_ROCK_EXPLOSION"
____exports.EffectVariant.BIG_CRACK_WAVE = 150
____exports.EffectVariant[____exports.EffectVariant.BIG_CRACK_WAVE] = "BIG_CRACK_WAVE"
____exports.EffectVariant.BIG_ATTRACT = 151
____exports.EffectVariant[____exports.EffectVariant.BIG_ATTRACT] = "BIG_ATTRACT"
____exports.EffectVariant.HORNFEL_ROOM_CONTROLLER = 152
____exports.EffectVariant[____exports.EffectVariant.HORNFEL_ROOM_CONTROLLER] = "HORNFEL_ROOM_CONTROLLER"
____exports.EffectVariant.OCCULT_TARGET = 153
____exports.EffectVariant[____exports.EffectVariant.OCCULT_TARGET] = "OCCULT_TARGET"
____exports.EffectVariant.DOOR_OUTLINE = 154
____exports.EffectVariant[____exports.EffectVariant.DOOR_OUTLINE] = "DOOR_OUTLINE"
____exports.EffectVariant.CREEP_SLIPPERY_BROWN_GROWING = 155
____exports.EffectVariant[____exports.EffectVariant.CREEP_SLIPPERY_BROWN_GROWING] = "CREEP_SLIPPERY_BROWN_GROWING"
____exports.EffectVariant.TALL_LADDER = 156
____exports.EffectVariant[____exports.EffectVariant.TALL_LADDER] = "TALL_LADDER"
____exports.EffectVariant.WILLO_SPAWNER = 157
____exports.EffectVariant[____exports.EffectVariant.WILLO_SPAWNER] = "WILLO_SPAWNER"
____exports.EffectVariant.TADPOLE = 158
____exports.EffectVariant[____exports.EffectVariant.TADPOLE] = "TADPOLE"
____exports.EffectVariant.LIL_GHOST = 159
____exports.EffectVariant[____exports.EffectVariant.LIL_GHOST] = "LIL_GHOST"
____exports.EffectVariant.BISHOP_SHIELD = 160
____exports.EffectVariant[____exports.EffectVariant.BISHOP_SHIELD] = "BISHOP_SHIELD"
____exports.EffectVariant.PORTAL_TELEPORT = 161
____exports.EffectVariant[____exports.EffectVariant.PORTAL_TELEPORT] = "PORTAL_TELEPORT"
____exports.EffectVariant.HERETIC_PENTAGRAM = 162
____exports.EffectVariant[____exports.EffectVariant.HERETIC_PENTAGRAM] = "HERETIC_PENTAGRAM"
____exports.EffectVariant.CHAIN_GIB = 163
____exports.EffectVariant[____exports.EffectVariant.CHAIN_GIB] = "CHAIN_GIB"
____exports.EffectVariant.SIREN_RING = 164
____exports.EffectVariant[____exports.EffectVariant.SIREN_RING] = "SIREN_RING"
____exports.EffectVariant.CHARM_EFFECT = 165
____exports.EffectVariant[____exports.EffectVariant.CHARM_EFFECT] = "CHARM_EFFECT"
____exports.EffectVariant.SPRITE_TRAIL = 166
____exports.EffectVariant[____exports.EffectVariant.SPRITE_TRAIL] = "SPRITE_TRAIL"
____exports.EffectVariant.CHAIN_LIGHTNING = 167
____exports.EffectVariant[____exports.EffectVariant.CHAIN_LIGHTNING] = "CHAIN_LIGHTNING"
____exports.EffectVariant.COLOSTOMIA_PUDDLE = 168
____exports.EffectVariant[____exports.EffectVariant.COLOSTOMIA_PUDDLE] = "COLOSTOMIA_PUDDLE"
____exports.EffectVariant.CREEP_STATIC = 169
____exports.EffectVariant[____exports.EffectVariant.CREEP_STATIC] = "CREEP_STATIC"
____exports.EffectVariant.DOGMA_DEBRIS = 170
____exports.EffectVariant[____exports.EffectVariant.DOGMA_DEBRIS] = "DOGMA_DEBRIS"
____exports.EffectVariant.DOGMA_BLACK_HOLE = 171
____exports.EffectVariant[____exports.EffectVariant.DOGMA_BLACK_HOLE] = "DOGMA_BLACK_HOLE"
____exports.EffectVariant.DOGMA_ORB = 172
____exports.EffectVariant[____exports.EffectVariant.DOGMA_ORB] = "DOGMA_ORB"
____exports.EffectVariant.CRACKED_ORB_POOF = 173
____exports.EffectVariant[____exports.EffectVariant.CRACKED_ORB_POOF] = "CRACKED_ORB_POOF"
____exports.EffectVariant.SHOP_SPIKES = 174
____exports.EffectVariant[____exports.EffectVariant.SHOP_SPIKES] = "SHOP_SPIKES"
____exports.EffectVariant.KINETI_BEAM = 175
____exports.EffectVariant[____exports.EffectVariant.KINETI_BEAM] = "KINETI_BEAM"
____exports.EffectVariant.CLEAVER_SLASH = 176
____exports.EffectVariant[____exports.EffectVariant.CLEAVER_SLASH] = "CLEAVER_SLASH"
____exports.EffectVariant.REVERSE_EXPLOSION = 177
____exports.EffectVariant[____exports.EffectVariant.REVERSE_EXPLOSION] = "REVERSE_EXPLOSION"
____exports.EffectVariant.URN_OF_SOULS = 178
____exports.EffectVariant[____exports.EffectVariant.URN_OF_SOULS] = "URN_OF_SOULS"
____exports.EffectVariant.ENEMY_SOUL = 179
____exports.EffectVariant[____exports.EffectVariant.ENEMY_SOUL] = "ENEMY_SOUL"
____exports.EffectVariant.RIFT = 180
____exports.EffectVariant[____exports.EffectVariant.RIFT] = "RIFT"
____exports.EffectVariant.LAVA_SPAWNER = 181
____exports.EffectVariant[____exports.EffectVariant.LAVA_SPAWNER] = "LAVA_SPAWNER"
____exports.EffectVariant.BIG_KNIFE = 182
____exports.EffectVariant[____exports.EffectVariant.BIG_KNIFE] = "BIG_KNIFE"
____exports.EffectVariant.MOTHER_SHOCKWAVE = 183
____exports.EffectVariant[____exports.EffectVariant.MOTHER_SHOCKWAVE] = "MOTHER_SHOCKWAVE"
____exports.EffectVariant.WORM_FRIEND_SNARE = 184
____exports.EffectVariant[____exports.EffectVariant.WORM_FRIEND_SNARE] = "WORM_FRIEND_SNARE"
____exports.EffectVariant.REDEMPTION = 185
____exports.EffectVariant[____exports.EffectVariant.REDEMPTION] = "REDEMPTION"
____exports.EffectVariant.HUNGRY_SOUL = 186
____exports.EffectVariant[____exports.EffectVariant.HUNGRY_SOUL] = "HUNGRY_SOUL"
____exports.EffectVariant.EXPLOSION_WAVE = 187
____exports.EffectVariant[____exports.EffectVariant.EXPLOSION_WAVE] = "EXPLOSION_WAVE"
____exports.EffectVariant.DIVINE_INTERVENTION = 188
____exports.EffectVariant[____exports.EffectVariant.DIVINE_INTERVENTION] = "DIVINE_INTERVENTION"
____exports.EffectVariant.PURGATORY = 189
____exports.EffectVariant[____exports.EffectVariant.PURGATORY] = "PURGATORY"
____exports.EffectVariant.MOTHER_TRACER = 190
____exports.EffectVariant[____exports.EffectVariant.MOTHER_TRACER] = "MOTHER_TRACER"
____exports.EffectVariant.PICKUP_GHOST = 191
____exports.EffectVariant[____exports.EffectVariant.PICKUP_GHOST] = "PICKUP_GHOST"
____exports.EffectVariant.FISSURE_SPAWNER = 192
____exports.EffectVariant[____exports.EffectVariant.FISSURE_SPAWNER] = "FISSURE_SPAWNER"
____exports.EffectVariant.ANIMA_CHAIN = 193
____exports.EffectVariant[____exports.EffectVariant.ANIMA_CHAIN] = "ANIMA_CHAIN"
____exports.EffectVariant.DARK_SNARE = 194
____exports.EffectVariant[____exports.EffectVariant.DARK_SNARE] = "DARK_SNARE"
____exports.EffectVariant.CREEP_LIQUID_POOP = 195
____exports.EffectVariant[____exports.EffectVariant.CREEP_LIQUID_POOP] = "CREEP_LIQUID_POOP"
____exports.EffectVariant.GROUND_GLOW = 196
____exports.EffectVariant[____exports.EffectVariant.GROUND_GLOW] = "GROUND_GLOW"
____exports.EffectVariant.DEAD_BIRD = 197
____exports.EffectVariant[____exports.EffectVariant.DEAD_BIRD] = "DEAD_BIRD"
____exports.EffectVariant.GENERIC_TRACER = 198
____exports.EffectVariant[____exports.EffectVariant.GENERIC_TRACER] = "GENERIC_TRACER"
____exports.EffectVariant.ULTRA_DEATH_SCYTHE = 199
____exports.EffectVariant[____exports.EffectVariant.ULTRA_DEATH_SCYTHE] = "ULTRA_DEATH_SCYTHE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.collections.subTypes"] = function(...) 
local ____exports = {}
--- For `EntityType.PLAYER` (1), `PlayerVariant.PLAYER` (0).
-- 
-- This is the sub-type of a player.
-- 
-- This enum is contiguous. (Every value is satisfied between -1 and 40, inclusive.)
-- 
-- Conventionally, variables that have this type are represented as "character" instead of
-- "playerType", since the former is more descriptive of what this value actually represents.
____exports.PlayerType = {}
____exports.PlayerType.POSSESSOR = -1
____exports.PlayerType[____exports.PlayerType.POSSESSOR] = "POSSESSOR"
____exports.PlayerType.ISAAC = 0
____exports.PlayerType[____exports.PlayerType.ISAAC] = "ISAAC"
____exports.PlayerType.MAGDALENE = 1
____exports.PlayerType[____exports.PlayerType.MAGDALENE] = "MAGDALENE"
____exports.PlayerType.CAIN = 2
____exports.PlayerType[____exports.PlayerType.CAIN] = "CAIN"
____exports.PlayerType.JUDAS = 3
____exports.PlayerType[____exports.PlayerType.JUDAS] = "JUDAS"
____exports.PlayerType.BLUE_BABY = 4
____exports.PlayerType[____exports.PlayerType.BLUE_BABY] = "BLUE_BABY"
____exports.PlayerType.EVE = 5
____exports.PlayerType[____exports.PlayerType.EVE] = "EVE"
____exports.PlayerType.SAMSON = 6
____exports.PlayerType[____exports.PlayerType.SAMSON] = "SAMSON"
____exports.PlayerType.AZAZEL = 7
____exports.PlayerType[____exports.PlayerType.AZAZEL] = "AZAZEL"
____exports.PlayerType.LAZARUS = 8
____exports.PlayerType[____exports.PlayerType.LAZARUS] = "LAZARUS"
____exports.PlayerType.EDEN = 9
____exports.PlayerType[____exports.PlayerType.EDEN] = "EDEN"
____exports.PlayerType.LOST = 10
____exports.PlayerType[____exports.PlayerType.LOST] = "LOST"
____exports.PlayerType.LAZARUS_2 = 11
____exports.PlayerType[____exports.PlayerType.LAZARUS_2] = "LAZARUS_2"
____exports.PlayerType.DARK_JUDAS = 12
____exports.PlayerType[____exports.PlayerType.DARK_JUDAS] = "DARK_JUDAS"
____exports.PlayerType.LILITH = 13
____exports.PlayerType[____exports.PlayerType.LILITH] = "LILITH"
____exports.PlayerType.KEEPER = 14
____exports.PlayerType[____exports.PlayerType.KEEPER] = "KEEPER"
____exports.PlayerType.APOLLYON = 15
____exports.PlayerType[____exports.PlayerType.APOLLYON] = "APOLLYON"
____exports.PlayerType.FORGOTTEN = 16
____exports.PlayerType[____exports.PlayerType.FORGOTTEN] = "FORGOTTEN"
____exports.PlayerType.SOUL = 17
____exports.PlayerType[____exports.PlayerType.SOUL] = "SOUL"
____exports.PlayerType.BETHANY = 18
____exports.PlayerType[____exports.PlayerType.BETHANY] = "BETHANY"
____exports.PlayerType.JACOB = 19
____exports.PlayerType[____exports.PlayerType.JACOB] = "JACOB"
____exports.PlayerType.ESAU = 20
____exports.PlayerType[____exports.PlayerType.ESAU] = "ESAU"
____exports.PlayerType.ISAAC_B = 21
____exports.PlayerType[____exports.PlayerType.ISAAC_B] = "ISAAC_B"
____exports.PlayerType.MAGDALENE_B = 22
____exports.PlayerType[____exports.PlayerType.MAGDALENE_B] = "MAGDALENE_B"
____exports.PlayerType.CAIN_B = 23
____exports.PlayerType[____exports.PlayerType.CAIN_B] = "CAIN_B"
____exports.PlayerType.JUDAS_B = 24
____exports.PlayerType[____exports.PlayerType.JUDAS_B] = "JUDAS_B"
____exports.PlayerType.BLUE_BABY_B = 25
____exports.PlayerType[____exports.PlayerType.BLUE_BABY_B] = "BLUE_BABY_B"
____exports.PlayerType.EVE_B = 26
____exports.PlayerType[____exports.PlayerType.EVE_B] = "EVE_B"
____exports.PlayerType.SAMSON_B = 27
____exports.PlayerType[____exports.PlayerType.SAMSON_B] = "SAMSON_B"
____exports.PlayerType.AZAZEL_B = 28
____exports.PlayerType[____exports.PlayerType.AZAZEL_B] = "AZAZEL_B"
____exports.PlayerType.LAZARUS_B = 29
____exports.PlayerType[____exports.PlayerType.LAZARUS_B] = "LAZARUS_B"
____exports.PlayerType.EDEN_B = 30
____exports.PlayerType[____exports.PlayerType.EDEN_B] = "EDEN_B"
____exports.PlayerType.LOST_B = 31
____exports.PlayerType[____exports.PlayerType.LOST_B] = "LOST_B"
____exports.PlayerType.LILITH_B = 32
____exports.PlayerType[____exports.PlayerType.LILITH_B] = "LILITH_B"
____exports.PlayerType.KEEPER_B = 33
____exports.PlayerType[____exports.PlayerType.KEEPER_B] = "KEEPER_B"
____exports.PlayerType.APOLLYON_B = 34
____exports.PlayerType[____exports.PlayerType.APOLLYON_B] = "APOLLYON_B"
____exports.PlayerType.FORGOTTEN_B = 35
____exports.PlayerType[____exports.PlayerType.FORGOTTEN_B] = "FORGOTTEN_B"
____exports.PlayerType.BETHANY_B = 36
____exports.PlayerType[____exports.PlayerType.BETHANY_B] = "BETHANY_B"
____exports.PlayerType.JACOB_B = 37
____exports.PlayerType[____exports.PlayerType.JACOB_B] = "JACOB_B"
____exports.PlayerType.LAZARUS_2_B = 38
____exports.PlayerType[____exports.PlayerType.LAZARUS_2_B] = "LAZARUS_2_B"
____exports.PlayerType.JACOB_2_B = 39
____exports.PlayerType[____exports.PlayerType.JACOB_2_B] = "JACOB_2_B"
____exports.PlayerType.SOUL_B = 40
____exports.PlayerType[____exports.PlayerType.SOUL_B] = "SOUL_B"
--- For `EntityType.PLAYER` (1), `PlayerVariant.COOP_BABY` (1).
____exports.BabySubType = {}
____exports.BabySubType.UNASSIGNED = -1
____exports.BabySubType[____exports.BabySubType.UNASSIGNED] = "UNASSIGNED"
____exports.BabySubType.SPIDER = 0
____exports.BabySubType[____exports.BabySubType.SPIDER] = "SPIDER"
____exports.BabySubType.LOVE = 1
____exports.BabySubType[____exports.BabySubType.LOVE] = "LOVE"
____exports.BabySubType.BLOAT = 2
____exports.BabySubType[____exports.BabySubType.BLOAT] = "BLOAT"
____exports.BabySubType.WATER = 3
____exports.BabySubType[____exports.BabySubType.WATER] = "WATER"
____exports.BabySubType.PSY = 4
____exports.BabySubType[____exports.BabySubType.PSY] = "PSY"
____exports.BabySubType.CURSED = 5
____exports.BabySubType[____exports.BabySubType.CURSED] = "CURSED"
____exports.BabySubType.TROLL = 6
____exports.BabySubType[____exports.BabySubType.TROLL] = "TROLL"
____exports.BabySubType.YBAB = 7
____exports.BabySubType[____exports.BabySubType.YBAB] = "YBAB"
____exports.BabySubType.COCKEYED = 8
____exports.BabySubType[____exports.BabySubType.COCKEYED] = "COCKEYED"
____exports.BabySubType.HOST = 9
____exports.BabySubType[____exports.BabySubType.HOST] = "HOST"
____exports.BabySubType.LOST = 10
____exports.BabySubType[____exports.BabySubType.LOST] = "LOST"
____exports.BabySubType.CUTE = 11
____exports.BabySubType[____exports.BabySubType.CUTE] = "CUTE"
____exports.BabySubType.CROW = 12
____exports.BabySubType[____exports.BabySubType.CROW] = "CROW"
____exports.BabySubType.SHADOW = 13
____exports.BabySubType[____exports.BabySubType.SHADOW] = "SHADOW"
____exports.BabySubType.GLASS = 14
____exports.BabySubType[____exports.BabySubType.GLASS] = "GLASS"
____exports.BabySubType.GOLD = 15
____exports.BabySubType[____exports.BabySubType.GOLD] = "GOLD"
____exports.BabySubType.CY = 16
____exports.BabySubType[____exports.BabySubType.CY] = "CY"
____exports.BabySubType.BEAN = 17
____exports.BabySubType[____exports.BabySubType.BEAN] = "BEAN"
____exports.BabySubType.MAG = 18
____exports.BabySubType[____exports.BabySubType.MAG] = "MAG"
____exports.BabySubType.WRATH = 19
____exports.BabySubType[____exports.BabySubType.WRATH] = "WRATH"
____exports.BabySubType.WRAPPED = 20
____exports.BabySubType[____exports.BabySubType.WRAPPED] = "WRAPPED"
____exports.BabySubType.BEGOTTEN = 21
____exports.BabySubType[____exports.BabySubType.BEGOTTEN] = "BEGOTTEN"
____exports.BabySubType.DEAD = 22
____exports.BabySubType[____exports.BabySubType.DEAD] = "DEAD"
____exports.BabySubType.FIGHTING = 23
____exports.BabySubType[____exports.BabySubType.FIGHTING] = "FIGHTING"
____exports.BabySubType.ZERO = 24
____exports.BabySubType[____exports.BabySubType.ZERO] = "ZERO"
____exports.BabySubType.GLITCH = 25
____exports.BabySubType[____exports.BabySubType.GLITCH] = "GLITCH"
____exports.BabySubType.MAGNET = 26
____exports.BabySubType[____exports.BabySubType.MAGNET] = "MAGNET"
____exports.BabySubType.BLACK = 27
____exports.BabySubType[____exports.BabySubType.BLACK] = "BLACK"
____exports.BabySubType.RED = 28
____exports.BabySubType[____exports.BabySubType.RED] = "RED"
____exports.BabySubType.WHITE = 29
____exports.BabySubType[____exports.BabySubType.WHITE] = "WHITE"
____exports.BabySubType.BLUE = 30
____exports.BabySubType[____exports.BabySubType.BLUE] = "BLUE"
____exports.BabySubType.RAGE = 31
____exports.BabySubType[____exports.BabySubType.RAGE] = "RAGE"
____exports.BabySubType.CRY = 32
____exports.BabySubType[____exports.BabySubType.CRY] = "CRY"
____exports.BabySubType.YELLOW = 33
____exports.BabySubType[____exports.BabySubType.YELLOW] = "YELLOW"
____exports.BabySubType.LONG = 34
____exports.BabySubType[____exports.BabySubType.LONG] = "LONG"
____exports.BabySubType.GREEN = 35
____exports.BabySubType[____exports.BabySubType.GREEN] = "GREEN"
____exports.BabySubType.LIL = 36
____exports.BabySubType[____exports.BabySubType.LIL] = "LIL"
____exports.BabySubType.BIG = 37
____exports.BabySubType[____exports.BabySubType.BIG] = "BIG"
____exports.BabySubType.BROWN = 38
____exports.BabySubType[____exports.BabySubType.BROWN] = "BROWN"
____exports.BabySubType.NOOSE = 39
____exports.BabySubType[____exports.BabySubType.NOOSE] = "NOOSE"
____exports.BabySubType.HIVE = 40
____exports.BabySubType[____exports.BabySubType.HIVE] = "HIVE"
____exports.BabySubType.BUDDY = 41
____exports.BabySubType[____exports.BabySubType.BUDDY] = "BUDDY"
____exports.BabySubType.COLORFUL = 42
____exports.BabySubType[____exports.BabySubType.COLORFUL] = "COLORFUL"
____exports.BabySubType.WHORE = 43
____exports.BabySubType[____exports.BabySubType.WHORE] = "WHORE"
____exports.BabySubType.CRACKED = 44
____exports.BabySubType[____exports.BabySubType.CRACKED] = "CRACKED"
____exports.BabySubType.DRIPPING = 45
____exports.BabySubType[____exports.BabySubType.DRIPPING] = "DRIPPING"
____exports.BabySubType.BLINDING = 46
____exports.BabySubType[____exports.BabySubType.BLINDING] = "BLINDING"
____exports.BabySubType.SUCKY = 47
____exports.BabySubType[____exports.BabySubType.SUCKY] = "SUCKY"
____exports.BabySubType.DARK = 48
____exports.BabySubType[____exports.BabySubType.DARK] = "DARK"
____exports.BabySubType.PICKY = 49
____exports.BabySubType[____exports.BabySubType.PICKY] = "PICKY"
____exports.BabySubType.REVENGE = 50
____exports.BabySubType[____exports.BabySubType.REVENGE] = "REVENGE"
____exports.BabySubType.BELIAL = 51
____exports.BabySubType[____exports.BabySubType.BELIAL] = "BELIAL"
____exports.BabySubType.SALE = 52
____exports.BabySubType[____exports.BabySubType.SALE] = "SALE"
____exports.BabySubType.GOAT = 53
____exports.BabySubType[____exports.BabySubType.GOAT] = "GOAT"
____exports.BabySubType.SUPER_GREED = 54
____exports.BabySubType[____exports.BabySubType.SUPER_GREED] = "SUPER_GREED"
____exports.BabySubType.MORT = 55
____exports.BabySubType[____exports.BabySubType.MORT] = "MORT"
____exports.BabySubType.APOLLYON = 56
____exports.BabySubType[____exports.BabySubType.APOLLYON] = "APOLLYON"
____exports.BabySubType.BONE = 57
____exports.BabySubType[____exports.BabySubType.BONE] = "BONE"
____exports.BabySubType.BOUND = 58
____exports.BabySubType[____exports.BabySubType.BOUND] = "BOUND"
____exports.BabySubType.FOUND_SOUL = 59
____exports.BabySubType[____exports.BabySubType.FOUND_SOUL] = "FOUND_SOUL"
____exports.BabySubType.LOST_WHITE = 60
____exports.BabySubType[____exports.BabySubType.LOST_WHITE] = "LOST_WHITE"
____exports.BabySubType.LOST_BLACK = 61
____exports.BabySubType[____exports.BabySubType.LOST_BLACK] = "LOST_BLACK"
____exports.BabySubType.LOST_BLUE = 62
____exports.BabySubType[____exports.BabySubType.LOST_BLUE] = "LOST_BLUE"
____exports.BabySubType.LOST_GREY = 63
____exports.BabySubType[____exports.BabySubType.LOST_GREY] = "LOST_GREY"
____exports.BabySubType.WISP = 64
____exports.BabySubType[____exports.BabySubType.WISP] = "WISP"
____exports.BabySubType.DOUBLE = 65
____exports.BabySubType[____exports.BabySubType.DOUBLE] = "DOUBLE"
____exports.BabySubType.GLOWING = 66
____exports.BabySubType[____exports.BabySubType.GLOWING] = "GLOWING"
____exports.BabySubType.ILLUSION = 67
____exports.BabySubType[____exports.BabySubType.ILLUSION] = "ILLUSION"
____exports.BabySubType.HOPE = 68
____exports.BabySubType[____exports.BabySubType.HOPE] = "HOPE"
____exports.BabySubType.SOLOMON_A = 69
____exports.BabySubType[____exports.BabySubType.SOLOMON_A] = "SOLOMON_A"
____exports.BabySubType.SOLOMON_B = 70
____exports.BabySubType[____exports.BabySubType.SOLOMON_B] = "SOLOMON_B"
____exports.BabySubType.BASIC = 71
____exports.BabySubType[____exports.BabySubType.BASIC] = "BASIC"
--- For `EntityType.FAMILIAR` (3), `FamiliarVariant.BLUE_FLY` (43).
____exports.BlueFlySubType = {}
____exports.BlueFlySubType.BLUE_FLY = 0
____exports.BlueFlySubType[____exports.BlueFlySubType.BLUE_FLY] = "BLUE_FLY"
____exports.BlueFlySubType.WRATH = 1
____exports.BlueFlySubType[____exports.BlueFlySubType.WRATH] = "WRATH"
____exports.BlueFlySubType.PESTILENCE = 2
____exports.BlueFlySubType[____exports.BlueFlySubType.PESTILENCE] = "PESTILENCE"
____exports.BlueFlySubType.FAMINE = 3
____exports.BlueFlySubType[____exports.BlueFlySubType.FAMINE] = "FAMINE"
____exports.BlueFlySubType.DEATH = 4
____exports.BlueFlySubType[____exports.BlueFlySubType.DEATH] = "DEATH"
____exports.BlueFlySubType.CONQUEST = 5
____exports.BlueFlySubType[____exports.BlueFlySubType.CONQUEST] = "CONQUEST"
--- For `EntityType.FAMILIAR` (3), `FamiliarVariant.DIP` (201).
____exports.DipFamiliarSubType = {}
____exports.DipFamiliarSubType.NORMAL = 0
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.NORMAL] = "NORMAL"
____exports.DipFamiliarSubType.RED = 1
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.RED] = "RED"
____exports.DipFamiliarSubType.CORNY = 2
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.CORNY] = "CORNY"
____exports.DipFamiliarSubType.GOLD = 3
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.GOLD] = "GOLD"
____exports.DipFamiliarSubType.RAINBOW = 4
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.RAINBOW] = "RAINBOW"
____exports.DipFamiliarSubType.BLACK = 5
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.BLACK] = "BLACK"
____exports.DipFamiliarSubType.WHITE = 6
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.WHITE] = "WHITE"
____exports.DipFamiliarSubType.STONE = 12
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.STONE] = "STONE"
____exports.DipFamiliarSubType.FLAMING = 13
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.FLAMING] = "FLAMING"
____exports.DipFamiliarSubType.STINKY = 14
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.STINKY] = "STINKY"
____exports.DipFamiliarSubType.BROWNIE = 20
____exports.DipFamiliarSubType[____exports.DipFamiliarSubType.BROWNIE] = "BROWNIE"
--- For `EntityType.FAMILIAR` (3), `FamiliarVariant.BLOOD_BABY` (238).
____exports.BloodClotSubType = {}
____exports.BloodClotSubType.RED = 0
____exports.BloodClotSubType[____exports.BloodClotSubType.RED] = "RED"
____exports.BloodClotSubType.SOUL = 1
____exports.BloodClotSubType[____exports.BloodClotSubType.SOUL] = "SOUL"
____exports.BloodClotSubType.BLACK = 2
____exports.BloodClotSubType[____exports.BloodClotSubType.BLACK] = "BLACK"
____exports.BloodClotSubType.ETERNAL = 3
____exports.BloodClotSubType[____exports.BloodClotSubType.ETERNAL] = "ETERNAL"
____exports.BloodClotSubType.GOLD = 4
____exports.BloodClotSubType[____exports.BloodClotSubType.GOLD] = "GOLD"
____exports.BloodClotSubType.BONE = 5
____exports.BloodClotSubType[____exports.BloodClotSubType.BONE] = "BONE"
____exports.BloodClotSubType.ROTTEN = 6
____exports.BloodClotSubType[____exports.BloodClotSubType.ROTTEN] = "ROTTEN"
____exports.BloodClotSubType.RED_NO_SUMPTORIUM = 7
____exports.BloodClotSubType[____exports.BloodClotSubType.RED_NO_SUMPTORIUM] = "RED_NO_SUMPTORIUM"
--- For `EntityType.PICKUP` (5), `PickupVariant.NULL` (0).
____exports.PickupNullSubType = {}
____exports.PickupNullSubType.ALL = 0
____exports.PickupNullSubType[____exports.PickupNullSubType.ALL] = "ALL"
____exports.PickupNullSubType.EXCLUDE_COLLECTIBLES_CHESTS = 1
____exports.PickupNullSubType[____exports.PickupNullSubType.EXCLUDE_COLLECTIBLES_CHESTS] = "EXCLUDE_COLLECTIBLES_CHESTS"
____exports.PickupNullSubType.EXCLUDE_COLLECTIBLES = 2
____exports.PickupNullSubType[____exports.PickupNullSubType.EXCLUDE_COLLECTIBLES] = "EXCLUDE_COLLECTIBLES"
____exports.PickupNullSubType.EXCLUDE_COLLECTIBLES_CHESTS_COINS = 3
____exports.PickupNullSubType[____exports.PickupNullSubType.EXCLUDE_COLLECTIBLES_CHESTS_COINS] = "EXCLUDE_COLLECTIBLES_CHESTS_COINS"
____exports.PickupNullSubType.EXCLUDE_COLLECTIBLES_TRINKETS_CHESTS = 4
____exports.PickupNullSubType[____exports.PickupNullSubType.EXCLUDE_COLLECTIBLES_TRINKETS_CHESTS] = "EXCLUDE_COLLECTIBLES_TRINKETS_CHESTS"
--- For `EntityType.PICKUP` (5), `PickupVariant.HEART` (10).
____exports.HeartSubType = {}
____exports.HeartSubType.NULL = 0
____exports.HeartSubType[____exports.HeartSubType.NULL] = "NULL"
____exports.HeartSubType.FULL = 1
____exports.HeartSubType[____exports.HeartSubType.FULL] = "FULL"
____exports.HeartSubType.HALF = 2
____exports.HeartSubType[____exports.HeartSubType.HALF] = "HALF"
____exports.HeartSubType.SOUL = 3
____exports.HeartSubType[____exports.HeartSubType.SOUL] = "SOUL"
____exports.HeartSubType.ETERNAL = 4
____exports.HeartSubType[____exports.HeartSubType.ETERNAL] = "ETERNAL"
____exports.HeartSubType.DOUBLE_PACK = 5
____exports.HeartSubType[____exports.HeartSubType.DOUBLE_PACK] = "DOUBLE_PACK"
____exports.HeartSubType.BLACK = 6
____exports.HeartSubType[____exports.HeartSubType.BLACK] = "BLACK"
____exports.HeartSubType.GOLDEN = 7
____exports.HeartSubType[____exports.HeartSubType.GOLDEN] = "GOLDEN"
____exports.HeartSubType.HALF_SOUL = 8
____exports.HeartSubType[____exports.HeartSubType.HALF_SOUL] = "HALF_SOUL"
____exports.HeartSubType.SCARED = 9
____exports.HeartSubType[____exports.HeartSubType.SCARED] = "SCARED"
____exports.HeartSubType.BLENDED = 10
____exports.HeartSubType[____exports.HeartSubType.BLENDED] = "BLENDED"
____exports.HeartSubType.BONE = 11
____exports.HeartSubType[____exports.HeartSubType.BONE] = "BONE"
____exports.HeartSubType.ROTTEN = 12
____exports.HeartSubType[____exports.HeartSubType.ROTTEN] = "ROTTEN"
--- For `EntityType.PICKUP` (5), `PickupVariant.COIN` (20).
____exports.CoinSubType = {}
____exports.CoinSubType.NULL = 0
____exports.CoinSubType[____exports.CoinSubType.NULL] = "NULL"
____exports.CoinSubType.PENNY = 1
____exports.CoinSubType[____exports.CoinSubType.PENNY] = "PENNY"
____exports.CoinSubType.NICKEL = 2
____exports.CoinSubType[____exports.CoinSubType.NICKEL] = "NICKEL"
____exports.CoinSubType.DIME = 3
____exports.CoinSubType[____exports.CoinSubType.DIME] = "DIME"
____exports.CoinSubType.DOUBLE_PACK = 4
____exports.CoinSubType[____exports.CoinSubType.DOUBLE_PACK] = "DOUBLE_PACK"
____exports.CoinSubType.LUCKY_PENNY = 5
____exports.CoinSubType[____exports.CoinSubType.LUCKY_PENNY] = "LUCKY_PENNY"
____exports.CoinSubType.STICKY_NICKEL = 6
____exports.CoinSubType[____exports.CoinSubType.STICKY_NICKEL] = "STICKY_NICKEL"
____exports.CoinSubType.GOLDEN = 7
____exports.CoinSubType[____exports.CoinSubType.GOLDEN] = "GOLDEN"
--- For `EntityType.PICKUP` (5), `PickupVariant.KEY` (30).
____exports.KeySubType = {}
____exports.KeySubType.NULL = 0
____exports.KeySubType[____exports.KeySubType.NULL] = "NULL"
____exports.KeySubType.NORMAL = 1
____exports.KeySubType[____exports.KeySubType.NORMAL] = "NORMAL"
____exports.KeySubType.GOLDEN = 2
____exports.KeySubType[____exports.KeySubType.GOLDEN] = "GOLDEN"
____exports.KeySubType.DOUBLE_PACK = 3
____exports.KeySubType[____exports.KeySubType.DOUBLE_PACK] = "DOUBLE_PACK"
____exports.KeySubType.CHARGED = 4
____exports.KeySubType[____exports.KeySubType.CHARGED] = "CHARGED"
--- For `EntityType.PICKUP` (5), `PickupVariant.BOMB` (40).
____exports.BombSubType = {}
____exports.BombSubType.NULL = 0
____exports.BombSubType[____exports.BombSubType.NULL] = "NULL"
____exports.BombSubType.NORMAL = 1
____exports.BombSubType[____exports.BombSubType.NORMAL] = "NORMAL"
____exports.BombSubType.DOUBLE_PACK = 2
____exports.BombSubType[____exports.BombSubType.DOUBLE_PACK] = "DOUBLE_PACK"
____exports.BombSubType.TROLL = 3
____exports.BombSubType[____exports.BombSubType.TROLL] = "TROLL"
____exports.BombSubType.GOLDEN = 4
____exports.BombSubType[____exports.BombSubType.GOLDEN] = "GOLDEN"
____exports.BombSubType.MEGA_TROLL = 5
____exports.BombSubType[____exports.BombSubType.MEGA_TROLL] = "MEGA_TROLL"
____exports.BombSubType.GOLDEN_TROLL = 6
____exports.BombSubType[____exports.BombSubType.GOLDEN_TROLL] = "GOLDEN_TROLL"
____exports.BombSubType.GIGA = 7
____exports.BombSubType[____exports.BombSubType.GIGA] = "GIGA"
--- For `EntityType.PICKUP` (5), `PickupVariant.POOP` (42).
____exports.PoopPickupSubType = {}
____exports.PoopPickupSubType.SMALL = 0
____exports.PoopPickupSubType[____exports.PoopPickupSubType.SMALL] = "SMALL"
____exports.PoopPickupSubType.BIG = 1
____exports.PoopPickupSubType[____exports.PoopPickupSubType.BIG] = "BIG"
--- For `EntityType.PICKUP` (5), `PickupVariant.CHEST` (50).
____exports.ChestSubType = {}
____exports.ChestSubType.OPENED = 0
____exports.ChestSubType[____exports.ChestSubType.OPENED] = "OPENED"
____exports.ChestSubType.CLOSED = 1
____exports.ChestSubType[____exports.ChestSubType.CLOSED] = "CLOSED"
--- For `EntityType.PICKUP` (5), `PickupVariant.SACK` (69).
____exports.SackSubType = {}
____exports.SackSubType.NULL = 0
____exports.SackSubType[____exports.SackSubType.NULL] = "NULL"
____exports.SackSubType.NORMAL = 1
____exports.SackSubType[____exports.SackSubType.NORMAL] = "NORMAL"
____exports.SackSubType.BLACK = 2
____exports.SackSubType[____exports.SackSubType.BLACK] = "BLACK"
--- For `EntityType.PICKUP` (5), `PickupVariant.PILL` (70).
-- 
-- This is the sub-type of a pill.
____exports.PillColor = {}
____exports.PillColor.NULL = 0
____exports.PillColor[____exports.PillColor.NULL] = "NULL"
____exports.PillColor.BLUE_BLUE = 1
____exports.PillColor[____exports.PillColor.BLUE_BLUE] = "BLUE_BLUE"
____exports.PillColor.WHITE_BLUE = 2
____exports.PillColor[____exports.PillColor.WHITE_BLUE] = "WHITE_BLUE"
____exports.PillColor.ORANGE_ORANGE = 3
____exports.PillColor[____exports.PillColor.ORANGE_ORANGE] = "ORANGE_ORANGE"
____exports.PillColor.WHITE_WHITE = 4
____exports.PillColor[____exports.PillColor.WHITE_WHITE] = "WHITE_WHITE"
____exports.PillColor.RED_DOTS_RED = 5
____exports.PillColor[____exports.PillColor.RED_DOTS_RED] = "RED_DOTS_RED"
____exports.PillColor.PINK_RED = 6
____exports.PillColor[____exports.PillColor.PINK_RED] = "PINK_RED"
____exports.PillColor.BLUE_CADET_BLUE = 7
____exports.PillColor[____exports.PillColor.BLUE_CADET_BLUE] = "BLUE_CADET_BLUE"
____exports.PillColor.YELLOW_ORANGE = 8
____exports.PillColor[____exports.PillColor.YELLOW_ORANGE] = "YELLOW_ORANGE"
____exports.PillColor.ORANGE_DOTS_WHITE = 9
____exports.PillColor[____exports.PillColor.ORANGE_DOTS_WHITE] = "ORANGE_DOTS_WHITE"
____exports.PillColor.WHITE_AZURE = 10
____exports.PillColor[____exports.PillColor.WHITE_AZURE] = "WHITE_AZURE"
____exports.PillColor.BLACK_YELLOW = 11
____exports.PillColor[____exports.PillColor.BLACK_YELLOW] = "BLACK_YELLOW"
____exports.PillColor.WHITE_BLACK = 12
____exports.PillColor[____exports.PillColor.WHITE_BLACK] = "WHITE_BLACK"
____exports.PillColor.WHITE_YELLOW = 13
____exports.PillColor[____exports.PillColor.WHITE_YELLOW] = "WHITE_YELLOW"
____exports.PillColor.GOLD = 14
____exports.PillColor[____exports.PillColor.GOLD] = "GOLD"
____exports.PillColor.HORSE_BLUE_BLUE = 2049
____exports.PillColor[____exports.PillColor.HORSE_BLUE_BLUE] = "HORSE_BLUE_BLUE"
____exports.PillColor.HORSE_WHITE_BLUE = 2050
____exports.PillColor[____exports.PillColor.HORSE_WHITE_BLUE] = "HORSE_WHITE_BLUE"
____exports.PillColor.HORSE_ORANGE_ORANGE = 2051
____exports.PillColor[____exports.PillColor.HORSE_ORANGE_ORANGE] = "HORSE_ORANGE_ORANGE"
____exports.PillColor.HORSE_WHITE_WHITE = 2052
____exports.PillColor[____exports.PillColor.HORSE_WHITE_WHITE] = "HORSE_WHITE_WHITE"
____exports.PillColor.HORSE_RED_DOTS_RED = 2053
____exports.PillColor[____exports.PillColor.HORSE_RED_DOTS_RED] = "HORSE_RED_DOTS_RED"
____exports.PillColor.HORSE_PINK_RED = 2054
____exports.PillColor[____exports.PillColor.HORSE_PINK_RED] = "HORSE_PINK_RED"
____exports.PillColor.HORSE_BLUE_CADET_BLUE = 2055
____exports.PillColor[____exports.PillColor.HORSE_BLUE_CADET_BLUE] = "HORSE_BLUE_CADET_BLUE"
____exports.PillColor.HORSE_YELLOW_ORANGE = 2056
____exports.PillColor[____exports.PillColor.HORSE_YELLOW_ORANGE] = "HORSE_YELLOW_ORANGE"
____exports.PillColor.HORSE_ORANGE_DOTS_WHITE = 2057
____exports.PillColor[____exports.PillColor.HORSE_ORANGE_DOTS_WHITE] = "HORSE_ORANGE_DOTS_WHITE"
____exports.PillColor.HORSE_WHITE_AZURE = 2058
____exports.PillColor[____exports.PillColor.HORSE_WHITE_AZURE] = "HORSE_WHITE_AZURE"
____exports.PillColor.HORSE_BLACK_YELLOW = 2059
____exports.PillColor[____exports.PillColor.HORSE_BLACK_YELLOW] = "HORSE_BLACK_YELLOW"
____exports.PillColor.HORSE_WHITE_BLACK = 2060
____exports.PillColor[____exports.PillColor.HORSE_WHITE_BLACK] = "HORSE_WHITE_BLACK"
____exports.PillColor.HORSE_WHITE_YELLOW = 2061
____exports.PillColor[____exports.PillColor.HORSE_WHITE_YELLOW] = "HORSE_WHITE_YELLOW"
____exports.PillColor.HORSE_GOLD = 2062
____exports.PillColor[____exports.PillColor.HORSE_GOLD] = "HORSE_GOLD"
--- For `EntityType.PICKUP` (5), `PickupVariant.LIL_BATTERY` (90).
____exports.BatterySubType = {}
____exports.BatterySubType.NULL = 0
____exports.BatterySubType[____exports.BatterySubType.NULL] = "NULL"
____exports.BatterySubType.NORMAL = 1
____exports.BatterySubType[____exports.BatterySubType.NORMAL] = "NORMAL"
____exports.BatterySubType.MICRO = 2
____exports.BatterySubType[____exports.BatterySubType.MICRO] = "MICRO"
____exports.BatterySubType.MEGA = 3
____exports.BatterySubType[____exports.BatterySubType.MEGA] = "MEGA"
____exports.BatterySubType.GOLDEN = 4
____exports.BatterySubType[____exports.BatterySubType.GOLDEN] = "GOLDEN"
--- For `EntityType.PICKUP` (5), `PickupVariant.COLLECTIBLE` (100).
-- 
-- This is the sub-type of a collectible.
-- 
-- This enum is not contiguous. In other words, the enum ranges from `CollectibleType.NULL` (0) to
-- `CollectibleType.MOMS_RING` (732), but there is no corresponding `CollectibleType` with the
-- following values:
-- 
-- 1. 43 (Pills here)
-- 2. 61 (Tarot Card)
-- 3. 235
-- 4. 587 (Menorah)
-- 5. 613 (Salt Shaker)
-- 6. 620 (Voodoo Pin)
-- 7. 630 (Lucky Seven)
-- 8. 648 (Pill Crusher)
-- 9. 662
-- 10. 666
-- 11. 718
____exports.CollectibleType = {}
____exports.CollectibleType.NULL = 0
____exports.CollectibleType[____exports.CollectibleType.NULL] = "NULL"
____exports.CollectibleType.SAD_ONION = 1
____exports.CollectibleType[____exports.CollectibleType.SAD_ONION] = "SAD_ONION"
____exports.CollectibleType.INNER_EYE = 2
____exports.CollectibleType[____exports.CollectibleType.INNER_EYE] = "INNER_EYE"
____exports.CollectibleType.SPOON_BENDER = 3
____exports.CollectibleType[____exports.CollectibleType.SPOON_BENDER] = "SPOON_BENDER"
____exports.CollectibleType.CRICKETS_HEAD = 4
____exports.CollectibleType[____exports.CollectibleType.CRICKETS_HEAD] = "CRICKETS_HEAD"
____exports.CollectibleType.MY_REFLECTION = 5
____exports.CollectibleType[____exports.CollectibleType.MY_REFLECTION] = "MY_REFLECTION"
____exports.CollectibleType.NUMBER_ONE = 6
____exports.CollectibleType[____exports.CollectibleType.NUMBER_ONE] = "NUMBER_ONE"
____exports.CollectibleType.BLOOD_OF_THE_MARTYR = 7
____exports.CollectibleType[____exports.CollectibleType.BLOOD_OF_THE_MARTYR] = "BLOOD_OF_THE_MARTYR"
____exports.CollectibleType.BROTHER_BOBBY = 8
____exports.CollectibleType[____exports.CollectibleType.BROTHER_BOBBY] = "BROTHER_BOBBY"
____exports.CollectibleType.SKATOLE = 9
____exports.CollectibleType[____exports.CollectibleType.SKATOLE] = "SKATOLE"
____exports.CollectibleType.HALO_OF_FLIES = 10
____exports.CollectibleType[____exports.CollectibleType.HALO_OF_FLIES] = "HALO_OF_FLIES"
____exports.CollectibleType.ONE_UP = 11
____exports.CollectibleType[____exports.CollectibleType.ONE_UP] = "ONE_UP"
____exports.CollectibleType.MAGIC_MUSHROOM = 12
____exports.CollectibleType[____exports.CollectibleType.MAGIC_MUSHROOM] = "MAGIC_MUSHROOM"
____exports.CollectibleType.VIRUS = 13
____exports.CollectibleType[____exports.CollectibleType.VIRUS] = "VIRUS"
____exports.CollectibleType.ROID_RAGE = 14
____exports.CollectibleType[____exports.CollectibleType.ROID_RAGE] = "ROID_RAGE"
____exports.CollectibleType.HEART = 15
____exports.CollectibleType[____exports.CollectibleType.HEART] = "HEART"
____exports.CollectibleType.RAW_LIVER = 16
____exports.CollectibleType[____exports.CollectibleType.RAW_LIVER] = "RAW_LIVER"
____exports.CollectibleType.SKELETON_KEY = 17
____exports.CollectibleType[____exports.CollectibleType.SKELETON_KEY] = "SKELETON_KEY"
____exports.CollectibleType.DOLLAR = 18
____exports.CollectibleType[____exports.CollectibleType.DOLLAR] = "DOLLAR"
____exports.CollectibleType.BOOM = 19
____exports.CollectibleType[____exports.CollectibleType.BOOM] = "BOOM"
____exports.CollectibleType.TRANSCENDENCE = 20
____exports.CollectibleType[____exports.CollectibleType.TRANSCENDENCE] = "TRANSCENDENCE"
____exports.CollectibleType.COMPASS = 21
____exports.CollectibleType[____exports.CollectibleType.COMPASS] = "COMPASS"
____exports.CollectibleType.LUNCH = 22
____exports.CollectibleType[____exports.CollectibleType.LUNCH] = "LUNCH"
____exports.CollectibleType.DINNER = 23
____exports.CollectibleType[____exports.CollectibleType.DINNER] = "DINNER"
____exports.CollectibleType.DESSERT = 24
____exports.CollectibleType[____exports.CollectibleType.DESSERT] = "DESSERT"
____exports.CollectibleType.BREAKFAST = 25
____exports.CollectibleType[____exports.CollectibleType.BREAKFAST] = "BREAKFAST"
____exports.CollectibleType.ROTTEN_MEAT = 26
____exports.CollectibleType[____exports.CollectibleType.ROTTEN_MEAT] = "ROTTEN_MEAT"
____exports.CollectibleType.WOODEN_SPOON = 27
____exports.CollectibleType[____exports.CollectibleType.WOODEN_SPOON] = "WOODEN_SPOON"
____exports.CollectibleType.BELT = 28
____exports.CollectibleType[____exports.CollectibleType.BELT] = "BELT"
____exports.CollectibleType.MOMS_UNDERWEAR = 29
____exports.CollectibleType[____exports.CollectibleType.MOMS_UNDERWEAR] = "MOMS_UNDERWEAR"
____exports.CollectibleType.MOMS_HEELS = 30
____exports.CollectibleType[____exports.CollectibleType.MOMS_HEELS] = "MOMS_HEELS"
____exports.CollectibleType.MOMS_LIPSTICK = 31
____exports.CollectibleType[____exports.CollectibleType.MOMS_LIPSTICK] = "MOMS_LIPSTICK"
____exports.CollectibleType.WIRE_COAT_HANGER = 32
____exports.CollectibleType[____exports.CollectibleType.WIRE_COAT_HANGER] = "WIRE_COAT_HANGER"
____exports.CollectibleType.BIBLE = 33
____exports.CollectibleType[____exports.CollectibleType.BIBLE] = "BIBLE"
____exports.CollectibleType.BOOK_OF_BELIAL = 34
____exports.CollectibleType[____exports.CollectibleType.BOOK_OF_BELIAL] = "BOOK_OF_BELIAL"
____exports.CollectibleType.NECRONOMICON = 35
____exports.CollectibleType[____exports.CollectibleType.NECRONOMICON] = "NECRONOMICON"
____exports.CollectibleType.POOP = 36
____exports.CollectibleType[____exports.CollectibleType.POOP] = "POOP"
____exports.CollectibleType.MR_BOOM = 37
____exports.CollectibleType[____exports.CollectibleType.MR_BOOM] = "MR_BOOM"
____exports.CollectibleType.TAMMYS_HEAD = 38
____exports.CollectibleType[____exports.CollectibleType.TAMMYS_HEAD] = "TAMMYS_HEAD"
____exports.CollectibleType.MOMS_BRA = 39
____exports.CollectibleType[____exports.CollectibleType.MOMS_BRA] = "MOMS_BRA"
____exports.CollectibleType.KAMIKAZE = 40
____exports.CollectibleType[____exports.CollectibleType.KAMIKAZE] = "KAMIKAZE"
____exports.CollectibleType.MOMS_PAD = 41
____exports.CollectibleType[____exports.CollectibleType.MOMS_PAD] = "MOMS_PAD"
____exports.CollectibleType.BOBS_ROTTEN_HEAD = 42
____exports.CollectibleType[____exports.CollectibleType.BOBS_ROTTEN_HEAD] = "BOBS_ROTTEN_HEAD"
____exports.CollectibleType.TELEPORT = 44
____exports.CollectibleType[____exports.CollectibleType.TELEPORT] = "TELEPORT"
____exports.CollectibleType.YUM_HEART = 45
____exports.CollectibleType[____exports.CollectibleType.YUM_HEART] = "YUM_HEART"
____exports.CollectibleType.LUCKY_FOOT = 46
____exports.CollectibleType[____exports.CollectibleType.LUCKY_FOOT] = "LUCKY_FOOT"
____exports.CollectibleType.DOCTORS_REMOTE = 47
____exports.CollectibleType[____exports.CollectibleType.DOCTORS_REMOTE] = "DOCTORS_REMOTE"
____exports.CollectibleType.CUPIDS_ARROW = 48
____exports.CollectibleType[____exports.CollectibleType.CUPIDS_ARROW] = "CUPIDS_ARROW"
____exports.CollectibleType.SHOOP_DA_WHOOP = 49
____exports.CollectibleType[____exports.CollectibleType.SHOOP_DA_WHOOP] = "SHOOP_DA_WHOOP"
____exports.CollectibleType.STEVEN = 50
____exports.CollectibleType[____exports.CollectibleType.STEVEN] = "STEVEN"
____exports.CollectibleType.PENTAGRAM = 51
____exports.CollectibleType[____exports.CollectibleType.PENTAGRAM] = "PENTAGRAM"
____exports.CollectibleType.DR_FETUS = 52
____exports.CollectibleType[____exports.CollectibleType.DR_FETUS] = "DR_FETUS"
____exports.CollectibleType.MAGNETO = 53
____exports.CollectibleType[____exports.CollectibleType.MAGNETO] = "MAGNETO"
____exports.CollectibleType.TREASURE_MAP = 54
____exports.CollectibleType[____exports.CollectibleType.TREASURE_MAP] = "TREASURE_MAP"
____exports.CollectibleType.MOMS_EYE = 55
____exports.CollectibleType[____exports.CollectibleType.MOMS_EYE] = "MOMS_EYE"
____exports.CollectibleType.LEMON_MISHAP = 56
____exports.CollectibleType[____exports.CollectibleType.LEMON_MISHAP] = "LEMON_MISHAP"
____exports.CollectibleType.DISTANT_ADMIRATION = 57
____exports.CollectibleType[____exports.CollectibleType.DISTANT_ADMIRATION] = "DISTANT_ADMIRATION"
____exports.CollectibleType.BOOK_OF_SHADOWS = 58
____exports.CollectibleType[____exports.CollectibleType.BOOK_OF_SHADOWS] = "BOOK_OF_SHADOWS"
____exports.CollectibleType.BOOK_OF_BELIAL_BIRTHRIGHT = 59
____exports.CollectibleType[____exports.CollectibleType.BOOK_OF_BELIAL_BIRTHRIGHT] = "BOOK_OF_BELIAL_BIRTHRIGHT"
____exports.CollectibleType.LADDER = 60
____exports.CollectibleType[____exports.CollectibleType.LADDER] = "LADDER"
____exports.CollectibleType.CHARM_OF_THE_VAMPIRE = 62
____exports.CollectibleType[____exports.CollectibleType.CHARM_OF_THE_VAMPIRE] = "CHARM_OF_THE_VAMPIRE"
____exports.CollectibleType.BATTERY = 63
____exports.CollectibleType[____exports.CollectibleType.BATTERY] = "BATTERY"
____exports.CollectibleType.STEAM_SALE = 64
____exports.CollectibleType[____exports.CollectibleType.STEAM_SALE] = "STEAM_SALE"
____exports.CollectibleType.ANARCHIST_COOKBOOK = 65
____exports.CollectibleType[____exports.CollectibleType.ANARCHIST_COOKBOOK] = "ANARCHIST_COOKBOOK"
____exports.CollectibleType.HOURGLASS = 66
____exports.CollectibleType[____exports.CollectibleType.HOURGLASS] = "HOURGLASS"
____exports.CollectibleType.SISTER_MAGGY = 67
____exports.CollectibleType[____exports.CollectibleType.SISTER_MAGGY] = "SISTER_MAGGY"
____exports.CollectibleType.TECHNOLOGY = 68
____exports.CollectibleType[____exports.CollectibleType.TECHNOLOGY] = "TECHNOLOGY"
____exports.CollectibleType.CHOCOLATE_MILK = 69
____exports.CollectibleType[____exports.CollectibleType.CHOCOLATE_MILK] = "CHOCOLATE_MILK"
____exports.CollectibleType.GROWTH_HORMONES = 70
____exports.CollectibleType[____exports.CollectibleType.GROWTH_HORMONES] = "GROWTH_HORMONES"
____exports.CollectibleType.MINI_MUSH = 71
____exports.CollectibleType[____exports.CollectibleType.MINI_MUSH] = "MINI_MUSH"
____exports.CollectibleType.ROSARY = 72
____exports.CollectibleType[____exports.CollectibleType.ROSARY] = "ROSARY"
____exports.CollectibleType.CUBE_OF_MEAT = 73
____exports.CollectibleType[____exports.CollectibleType.CUBE_OF_MEAT] = "CUBE_OF_MEAT"
____exports.CollectibleType.QUARTER = 74
____exports.CollectibleType[____exports.CollectibleType.QUARTER] = "QUARTER"
____exports.CollectibleType.PHD = 75
____exports.CollectibleType[____exports.CollectibleType.PHD] = "PHD"
____exports.CollectibleType.XRAY_VISION = 76
____exports.CollectibleType[____exports.CollectibleType.XRAY_VISION] = "XRAY_VISION"
____exports.CollectibleType.MY_LITTLE_UNICORN = 77
____exports.CollectibleType[____exports.CollectibleType.MY_LITTLE_UNICORN] = "MY_LITTLE_UNICORN"
____exports.CollectibleType.BOOK_OF_REVELATIONS = 78
____exports.CollectibleType[____exports.CollectibleType.BOOK_OF_REVELATIONS] = "BOOK_OF_REVELATIONS"
____exports.CollectibleType.MARK = 79
____exports.CollectibleType[____exports.CollectibleType.MARK] = "MARK"
____exports.CollectibleType.PACT = 80
____exports.CollectibleType[____exports.CollectibleType.PACT] = "PACT"
____exports.CollectibleType.DEAD_CAT = 81
____exports.CollectibleType[____exports.CollectibleType.DEAD_CAT] = "DEAD_CAT"
____exports.CollectibleType.LORD_OF_THE_PIT = 82
____exports.CollectibleType[____exports.CollectibleType.LORD_OF_THE_PIT] = "LORD_OF_THE_PIT"
____exports.CollectibleType.NAIL = 83
____exports.CollectibleType[____exports.CollectibleType.NAIL] = "NAIL"
____exports.CollectibleType.WE_NEED_TO_GO_DEEPER = 84
____exports.CollectibleType[____exports.CollectibleType.WE_NEED_TO_GO_DEEPER] = "WE_NEED_TO_GO_DEEPER"
____exports.CollectibleType.DECK_OF_CARDS = 85
____exports.CollectibleType[____exports.CollectibleType.DECK_OF_CARDS] = "DECK_OF_CARDS"
____exports.CollectibleType.MONSTROS_TOOTH = 86
____exports.CollectibleType[____exports.CollectibleType.MONSTROS_TOOTH] = "MONSTROS_TOOTH"
____exports.CollectibleType.LOKIS_HORNS = 87
____exports.CollectibleType[____exports.CollectibleType.LOKIS_HORNS] = "LOKIS_HORNS"
____exports.CollectibleType.LITTLE_CHUBBY = 88
____exports.CollectibleType[____exports.CollectibleType.LITTLE_CHUBBY] = "LITTLE_CHUBBY"
____exports.CollectibleType.SPIDER_BITE = 89
____exports.CollectibleType[____exports.CollectibleType.SPIDER_BITE] = "SPIDER_BITE"
____exports.CollectibleType.SMALL_ROCK = 90
____exports.CollectibleType[____exports.CollectibleType.SMALL_ROCK] = "SMALL_ROCK"
____exports.CollectibleType.SPELUNKER_HAT = 91
____exports.CollectibleType[____exports.CollectibleType.SPELUNKER_HAT] = "SPELUNKER_HAT"
____exports.CollectibleType.SUPER_BANDAGE = 92
____exports.CollectibleType[____exports.CollectibleType.SUPER_BANDAGE] = "SUPER_BANDAGE"
____exports.CollectibleType.GAMEKID = 93
____exports.CollectibleType[____exports.CollectibleType.GAMEKID] = "GAMEKID"
____exports.CollectibleType.SACK_OF_PENNIES = 94
____exports.CollectibleType[____exports.CollectibleType.SACK_OF_PENNIES] = "SACK_OF_PENNIES"
____exports.CollectibleType.ROBO_BABY = 95
____exports.CollectibleType[____exports.CollectibleType.ROBO_BABY] = "ROBO_BABY"
____exports.CollectibleType.LITTLE_CHAD = 96
____exports.CollectibleType[____exports.CollectibleType.LITTLE_CHAD] = "LITTLE_CHAD"
____exports.CollectibleType.BOOK_OF_SIN = 97
____exports.CollectibleType[____exports.CollectibleType.BOOK_OF_SIN] = "BOOK_OF_SIN"
____exports.CollectibleType.RELIC = 98
____exports.CollectibleType[____exports.CollectibleType.RELIC] = "RELIC"
____exports.CollectibleType.LITTLE_GISH = 99
____exports.CollectibleType[____exports.CollectibleType.LITTLE_GISH] = "LITTLE_GISH"
____exports.CollectibleType.LITTLE_STEVEN = 100
____exports.CollectibleType[____exports.CollectibleType.LITTLE_STEVEN] = "LITTLE_STEVEN"
____exports.CollectibleType.HALO = 101
____exports.CollectibleType[____exports.CollectibleType.HALO] = "HALO"
____exports.CollectibleType.MOMS_BOTTLE_OF_PILLS = 102
____exports.CollectibleType[____exports.CollectibleType.MOMS_BOTTLE_OF_PILLS] = "MOMS_BOTTLE_OF_PILLS"
____exports.CollectibleType.COMMON_COLD = 103
____exports.CollectibleType[____exports.CollectibleType.COMMON_COLD] = "COMMON_COLD"
____exports.CollectibleType.PARASITE = 104
____exports.CollectibleType[____exports.CollectibleType.PARASITE] = "PARASITE"
____exports.CollectibleType.D6 = 105
____exports.CollectibleType[____exports.CollectibleType.D6] = "D6"
____exports.CollectibleType.MR_MEGA = 106
____exports.CollectibleType[____exports.CollectibleType.MR_MEGA] = "MR_MEGA"
____exports.CollectibleType.PINKING_SHEARS = 107
____exports.CollectibleType[____exports.CollectibleType.PINKING_SHEARS] = "PINKING_SHEARS"
____exports.CollectibleType.WAFER = 108
____exports.CollectibleType[____exports.CollectibleType.WAFER] = "WAFER"
____exports.CollectibleType.MONEY_EQUALS_POWER = 109
____exports.CollectibleType[____exports.CollectibleType.MONEY_EQUALS_POWER] = "MONEY_EQUALS_POWER"
____exports.CollectibleType.MOMS_CONTACTS = 110
____exports.CollectibleType[____exports.CollectibleType.MOMS_CONTACTS] = "MOMS_CONTACTS"
____exports.CollectibleType.BEAN = 111
____exports.CollectibleType[____exports.CollectibleType.BEAN] = "BEAN"
____exports.CollectibleType.GUARDIAN_ANGEL = 112
____exports.CollectibleType[____exports.CollectibleType.GUARDIAN_ANGEL] = "GUARDIAN_ANGEL"
____exports.CollectibleType.DEMON_BABY = 113
____exports.CollectibleType[____exports.CollectibleType.DEMON_BABY] = "DEMON_BABY"
____exports.CollectibleType.MOMS_KNIFE = 114
____exports.CollectibleType[____exports.CollectibleType.MOMS_KNIFE] = "MOMS_KNIFE"
____exports.CollectibleType.OUIJA_BOARD = 115
____exports.CollectibleType[____exports.CollectibleType.OUIJA_BOARD] = "OUIJA_BOARD"
____exports.CollectibleType.NINE_VOLT = 116
____exports.CollectibleType[____exports.CollectibleType.NINE_VOLT] = "NINE_VOLT"
____exports.CollectibleType.DEAD_BIRD = 117
____exports.CollectibleType[____exports.CollectibleType.DEAD_BIRD] = "DEAD_BIRD"
____exports.CollectibleType.BRIMSTONE = 118
____exports.CollectibleType[____exports.CollectibleType.BRIMSTONE] = "BRIMSTONE"
____exports.CollectibleType.BLOOD_BAG = 119
____exports.CollectibleType[____exports.CollectibleType.BLOOD_BAG] = "BLOOD_BAG"
____exports.CollectibleType.ODD_MUSHROOM_THIN = 120
____exports.CollectibleType[____exports.CollectibleType.ODD_MUSHROOM_THIN] = "ODD_MUSHROOM_THIN"
____exports.CollectibleType.ODD_MUSHROOM_LARGE = 121
____exports.CollectibleType[____exports.CollectibleType.ODD_MUSHROOM_LARGE] = "ODD_MUSHROOM_LARGE"
____exports.CollectibleType.WHORE_OF_BABYLON = 122
____exports.CollectibleType[____exports.CollectibleType.WHORE_OF_BABYLON] = "WHORE_OF_BABYLON"
____exports.CollectibleType.MONSTER_MANUAL = 123
____exports.CollectibleType[____exports.CollectibleType.MONSTER_MANUAL] = "MONSTER_MANUAL"
____exports.CollectibleType.DEAD_SEA_SCROLLS = 124
____exports.CollectibleType[____exports.CollectibleType.DEAD_SEA_SCROLLS] = "DEAD_SEA_SCROLLS"
____exports.CollectibleType.BOBBY_BOMB = 125
____exports.CollectibleType[____exports.CollectibleType.BOBBY_BOMB] = "BOBBY_BOMB"
____exports.CollectibleType.RAZOR_BLADE = 126
____exports.CollectibleType[____exports.CollectibleType.RAZOR_BLADE] = "RAZOR_BLADE"
____exports.CollectibleType.FORGET_ME_NOW = 127
____exports.CollectibleType[____exports.CollectibleType.FORGET_ME_NOW] = "FORGET_ME_NOW"
____exports.CollectibleType.FOREVER_ALONE = 128
____exports.CollectibleType[____exports.CollectibleType.FOREVER_ALONE] = "FOREVER_ALONE"
____exports.CollectibleType.BUCKET_OF_LARD = 129
____exports.CollectibleType[____exports.CollectibleType.BUCKET_OF_LARD] = "BUCKET_OF_LARD"
____exports.CollectibleType.PONY = 130
____exports.CollectibleType[____exports.CollectibleType.PONY] = "PONY"
____exports.CollectibleType.BOMB_BAG = 131
____exports.CollectibleType[____exports.CollectibleType.BOMB_BAG] = "BOMB_BAG"
____exports.CollectibleType.LUMP_OF_COAL = 132
____exports.CollectibleType[____exports.CollectibleType.LUMP_OF_COAL] = "LUMP_OF_COAL"
____exports.CollectibleType.GUPPYS_PAW = 133
____exports.CollectibleType[____exports.CollectibleType.GUPPYS_PAW] = "GUPPYS_PAW"
____exports.CollectibleType.GUPPYS_TAIL = 134
____exports.CollectibleType[____exports.CollectibleType.GUPPYS_TAIL] = "GUPPYS_TAIL"
____exports.CollectibleType.IV_BAG = 135
____exports.CollectibleType[____exports.CollectibleType.IV_BAG] = "IV_BAG"
____exports.CollectibleType.BEST_FRIEND = 136
____exports.CollectibleType[____exports.CollectibleType.BEST_FRIEND] = "BEST_FRIEND"
____exports.CollectibleType.REMOTE_DETONATOR = 137
____exports.CollectibleType[____exports.CollectibleType.REMOTE_DETONATOR] = "REMOTE_DETONATOR"
____exports.CollectibleType.STIGMATA = 138
____exports.CollectibleType[____exports.CollectibleType.STIGMATA] = "STIGMATA"
____exports.CollectibleType.MOMS_PURSE = 139
____exports.CollectibleType[____exports.CollectibleType.MOMS_PURSE] = "MOMS_PURSE"
____exports.CollectibleType.BOBS_CURSE = 140
____exports.CollectibleType[____exports.CollectibleType.BOBS_CURSE] = "BOBS_CURSE"
____exports.CollectibleType.PAGEANT_BOY = 141
____exports.CollectibleType[____exports.CollectibleType.PAGEANT_BOY] = "PAGEANT_BOY"
____exports.CollectibleType.SCAPULAR = 142
____exports.CollectibleType[____exports.CollectibleType.SCAPULAR] = "SCAPULAR"
____exports.CollectibleType.SPEED_BALL = 143
____exports.CollectibleType[____exports.CollectibleType.SPEED_BALL] = "SPEED_BALL"
____exports.CollectibleType.BUM_FRIEND = 144
____exports.CollectibleType[____exports.CollectibleType.BUM_FRIEND] = "BUM_FRIEND"
____exports.CollectibleType.GUPPYS_HEAD = 145
____exports.CollectibleType[____exports.CollectibleType.GUPPYS_HEAD] = "GUPPYS_HEAD"
____exports.CollectibleType.PRAYER_CARD = 146
____exports.CollectibleType[____exports.CollectibleType.PRAYER_CARD] = "PRAYER_CARD"
____exports.CollectibleType.NOTCHED_AXE = 147
____exports.CollectibleType[____exports.CollectibleType.NOTCHED_AXE] = "NOTCHED_AXE"
____exports.CollectibleType.INFESTATION = 148
____exports.CollectibleType[____exports.CollectibleType.INFESTATION] = "INFESTATION"
____exports.CollectibleType.IPECAC = 149
____exports.CollectibleType[____exports.CollectibleType.IPECAC] = "IPECAC"
____exports.CollectibleType.TOUGH_LOVE = 150
____exports.CollectibleType[____exports.CollectibleType.TOUGH_LOVE] = "TOUGH_LOVE"
____exports.CollectibleType.MULLIGAN = 151
____exports.CollectibleType[____exports.CollectibleType.MULLIGAN] = "MULLIGAN"
____exports.CollectibleType.TECHNOLOGY_2 = 152
____exports.CollectibleType[____exports.CollectibleType.TECHNOLOGY_2] = "TECHNOLOGY_2"
____exports.CollectibleType.MUTANT_SPIDER = 153
____exports.CollectibleType[____exports.CollectibleType.MUTANT_SPIDER] = "MUTANT_SPIDER"
____exports.CollectibleType.CHEMICAL_PEEL = 154
____exports.CollectibleType[____exports.CollectibleType.CHEMICAL_PEEL] = "CHEMICAL_PEEL"
____exports.CollectibleType.PEEPER = 155
____exports.CollectibleType[____exports.CollectibleType.PEEPER] = "PEEPER"
____exports.CollectibleType.HABIT = 156
____exports.CollectibleType[____exports.CollectibleType.HABIT] = "HABIT"
____exports.CollectibleType.BLOODY_LUST = 157
____exports.CollectibleType[____exports.CollectibleType.BLOODY_LUST] = "BLOODY_LUST"
____exports.CollectibleType.CRYSTAL_BALL = 158
____exports.CollectibleType[____exports.CollectibleType.CRYSTAL_BALL] = "CRYSTAL_BALL"
____exports.CollectibleType.SPIRIT_OF_THE_NIGHT = 159
____exports.CollectibleType[____exports.CollectibleType.SPIRIT_OF_THE_NIGHT] = "SPIRIT_OF_THE_NIGHT"
____exports.CollectibleType.CRACK_THE_SKY = 160
____exports.CollectibleType[____exports.CollectibleType.CRACK_THE_SKY] = "CRACK_THE_SKY"
____exports.CollectibleType.ANKH = 161
____exports.CollectibleType[____exports.CollectibleType.ANKH] = "ANKH"
____exports.CollectibleType.CELTIC_CROSS = 162
____exports.CollectibleType[____exports.CollectibleType.CELTIC_CROSS] = "CELTIC_CROSS"
____exports.CollectibleType.GHOST_BABY = 163
____exports.CollectibleType[____exports.CollectibleType.GHOST_BABY] = "GHOST_BABY"
____exports.CollectibleType.CANDLE = 164
____exports.CollectibleType[____exports.CollectibleType.CANDLE] = "CANDLE"
____exports.CollectibleType.CAT_O_NINE_TAILS = 165
____exports.CollectibleType[____exports.CollectibleType.CAT_O_NINE_TAILS] = "CAT_O_NINE_TAILS"
____exports.CollectibleType.D20 = 166
____exports.CollectibleType[____exports.CollectibleType.D20] = "D20"
____exports.CollectibleType.HARLEQUIN_BABY = 167
____exports.CollectibleType[____exports.CollectibleType.HARLEQUIN_BABY] = "HARLEQUIN_BABY"
____exports.CollectibleType.EPIC_FETUS = 168
____exports.CollectibleType[____exports.CollectibleType.EPIC_FETUS] = "EPIC_FETUS"
____exports.CollectibleType.POLYPHEMUS = 169
____exports.CollectibleType[____exports.CollectibleType.POLYPHEMUS] = "POLYPHEMUS"
____exports.CollectibleType.DADDY_LONGLEGS = 170
____exports.CollectibleType[____exports.CollectibleType.DADDY_LONGLEGS] = "DADDY_LONGLEGS"
____exports.CollectibleType.SPIDER_BUTT = 171
____exports.CollectibleType[____exports.CollectibleType.SPIDER_BUTT] = "SPIDER_BUTT"
____exports.CollectibleType.SACRIFICIAL_DAGGER = 172
____exports.CollectibleType[____exports.CollectibleType.SACRIFICIAL_DAGGER] = "SACRIFICIAL_DAGGER"
____exports.CollectibleType.MITRE = 173
____exports.CollectibleType[____exports.CollectibleType.MITRE] = "MITRE"
____exports.CollectibleType.RAINBOW_BABY = 174
____exports.CollectibleType[____exports.CollectibleType.RAINBOW_BABY] = "RAINBOW_BABY"
____exports.CollectibleType.DADS_KEY = 175
____exports.CollectibleType[____exports.CollectibleType.DADS_KEY] = "DADS_KEY"
____exports.CollectibleType.STEM_CELLS = 176
____exports.CollectibleType[____exports.CollectibleType.STEM_CELLS] = "STEM_CELLS"
____exports.CollectibleType.PORTABLE_SLOT = 177
____exports.CollectibleType[____exports.CollectibleType.PORTABLE_SLOT] = "PORTABLE_SLOT"
____exports.CollectibleType.HOLY_WATER = 178
____exports.CollectibleType[____exports.CollectibleType.HOLY_WATER] = "HOLY_WATER"
____exports.CollectibleType.FATE = 179
____exports.CollectibleType[____exports.CollectibleType.FATE] = "FATE"
____exports.CollectibleType.BLACK_BEAN = 180
____exports.CollectibleType[____exports.CollectibleType.BLACK_BEAN] = "BLACK_BEAN"
____exports.CollectibleType.WHITE_PONY = 181
____exports.CollectibleType[____exports.CollectibleType.WHITE_PONY] = "WHITE_PONY"
____exports.CollectibleType.SACRED_HEART = 182
____exports.CollectibleType[____exports.CollectibleType.SACRED_HEART] = "SACRED_HEART"
____exports.CollectibleType.TOOTH_PICKS = 183
____exports.CollectibleType[____exports.CollectibleType.TOOTH_PICKS] = "TOOTH_PICKS"
____exports.CollectibleType.HOLY_GRAIL = 184
____exports.CollectibleType[____exports.CollectibleType.HOLY_GRAIL] = "HOLY_GRAIL"
____exports.CollectibleType.DEAD_DOVE = 185
____exports.CollectibleType[____exports.CollectibleType.DEAD_DOVE] = "DEAD_DOVE"
____exports.CollectibleType.BLOOD_RIGHTS = 186
____exports.CollectibleType[____exports.CollectibleType.BLOOD_RIGHTS] = "BLOOD_RIGHTS"
____exports.CollectibleType.GUPPYS_HAIRBALL = 187
____exports.CollectibleType[____exports.CollectibleType.GUPPYS_HAIRBALL] = "GUPPYS_HAIRBALL"
____exports.CollectibleType.ABEL = 188
____exports.CollectibleType[____exports.CollectibleType.ABEL] = "ABEL"
____exports.CollectibleType.SMB_SUPER_FAN = 189
____exports.CollectibleType[____exports.CollectibleType.SMB_SUPER_FAN] = "SMB_SUPER_FAN"
____exports.CollectibleType.PYRO = 190
____exports.CollectibleType[____exports.CollectibleType.PYRO] = "PYRO"
____exports.CollectibleType.THREE_DOLLAR_BILL = 191
____exports.CollectibleType[____exports.CollectibleType.THREE_DOLLAR_BILL] = "THREE_DOLLAR_BILL"
____exports.CollectibleType.TELEPATHY_BOOK = 192
____exports.CollectibleType[____exports.CollectibleType.TELEPATHY_BOOK] = "TELEPATHY_BOOK"
____exports.CollectibleType.MEAT = 193
____exports.CollectibleType[____exports.CollectibleType.MEAT] = "MEAT"
____exports.CollectibleType.MAGIC_8_BALL = 194
____exports.CollectibleType[____exports.CollectibleType.MAGIC_8_BALL] = "MAGIC_8_BALL"
____exports.CollectibleType.MOMS_COIN_PURSE = 195
____exports.CollectibleType[____exports.CollectibleType.MOMS_COIN_PURSE] = "MOMS_COIN_PURSE"
____exports.CollectibleType.SQUEEZY = 196
____exports.CollectibleType[____exports.CollectibleType.SQUEEZY] = "SQUEEZY"
____exports.CollectibleType.JESUS_JUICE = 197
____exports.CollectibleType[____exports.CollectibleType.JESUS_JUICE] = "JESUS_JUICE"
____exports.CollectibleType.BOX = 198
____exports.CollectibleType[____exports.CollectibleType.BOX] = "BOX"
____exports.CollectibleType.MOMS_KEY = 199
____exports.CollectibleType[____exports.CollectibleType.MOMS_KEY] = "MOMS_KEY"
____exports.CollectibleType.MOMS_EYESHADOW = 200
____exports.CollectibleType[____exports.CollectibleType.MOMS_EYESHADOW] = "MOMS_EYESHADOW"
____exports.CollectibleType.IRON_BAR = 201
____exports.CollectibleType[____exports.CollectibleType.IRON_BAR] = "IRON_BAR"
____exports.CollectibleType.MIDAS_TOUCH = 202
____exports.CollectibleType[____exports.CollectibleType.MIDAS_TOUCH] = "MIDAS_TOUCH"
____exports.CollectibleType.HUMBLEING_BUNDLE = 203
____exports.CollectibleType[____exports.CollectibleType.HUMBLEING_BUNDLE] = "HUMBLEING_BUNDLE"
____exports.CollectibleType.FANNY_PACK = 204
____exports.CollectibleType[____exports.CollectibleType.FANNY_PACK] = "FANNY_PACK"
____exports.CollectibleType.SHARP_PLUG = 205
____exports.CollectibleType[____exports.CollectibleType.SHARP_PLUG] = "SHARP_PLUG"
____exports.CollectibleType.GUILLOTINE = 206
____exports.CollectibleType[____exports.CollectibleType.GUILLOTINE] = "GUILLOTINE"
____exports.CollectibleType.BALL_OF_BANDAGES = 207
____exports.CollectibleType[____exports.CollectibleType.BALL_OF_BANDAGES] = "BALL_OF_BANDAGES"
____exports.CollectibleType.CHAMPION_BELT = 208
____exports.CollectibleType[____exports.CollectibleType.CHAMPION_BELT] = "CHAMPION_BELT"
____exports.CollectibleType.BUTT_BOMBS = 209
____exports.CollectibleType[____exports.CollectibleType.BUTT_BOMBS] = "BUTT_BOMBS"
____exports.CollectibleType.GNAWED_LEAF = 210
____exports.CollectibleType[____exports.CollectibleType.GNAWED_LEAF] = "GNAWED_LEAF"
____exports.CollectibleType.SPIDERBABY = 211
____exports.CollectibleType[____exports.CollectibleType.SPIDERBABY] = "SPIDERBABY"
____exports.CollectibleType.GUPPYS_COLLAR = 212
____exports.CollectibleType[____exports.CollectibleType.GUPPYS_COLLAR] = "GUPPYS_COLLAR"
____exports.CollectibleType.LOST_CONTACT = 213
____exports.CollectibleType[____exports.CollectibleType.LOST_CONTACT] = "LOST_CONTACT"
____exports.CollectibleType.ANEMIC = 214
____exports.CollectibleType[____exports.CollectibleType.ANEMIC] = "ANEMIC"
____exports.CollectibleType.GOAT_HEAD = 215
____exports.CollectibleType[____exports.CollectibleType.GOAT_HEAD] = "GOAT_HEAD"
____exports.CollectibleType.CEREMONIAL_ROBES = 216
____exports.CollectibleType[____exports.CollectibleType.CEREMONIAL_ROBES] = "CEREMONIAL_ROBES"
____exports.CollectibleType.MOMS_WIG = 217
____exports.CollectibleType[____exports.CollectibleType.MOMS_WIG] = "MOMS_WIG"
____exports.CollectibleType.PLACENTA = 218
____exports.CollectibleType[____exports.CollectibleType.PLACENTA] = "PLACENTA"
____exports.CollectibleType.OLD_BANDAGE = 219
____exports.CollectibleType[____exports.CollectibleType.OLD_BANDAGE] = "OLD_BANDAGE"
____exports.CollectibleType.SAD_BOMBS = 220
____exports.CollectibleType[____exports.CollectibleType.SAD_BOMBS] = "SAD_BOMBS"
____exports.CollectibleType.RUBBER_CEMENT = 221
____exports.CollectibleType[____exports.CollectibleType.RUBBER_CEMENT] = "RUBBER_CEMENT"
____exports.CollectibleType.ANTI_GRAVITY = 222
____exports.CollectibleType[____exports.CollectibleType.ANTI_GRAVITY] = "ANTI_GRAVITY"
____exports.CollectibleType.PYROMANIAC = 223
____exports.CollectibleType[____exports.CollectibleType.PYROMANIAC] = "PYROMANIAC"
____exports.CollectibleType.CRICKETS_BODY = 224
____exports.CollectibleType[____exports.CollectibleType.CRICKETS_BODY] = "CRICKETS_BODY"
____exports.CollectibleType.GIMPY = 225
____exports.CollectibleType[____exports.CollectibleType.GIMPY] = "GIMPY"
____exports.CollectibleType.BLACK_LOTUS = 226
____exports.CollectibleType[____exports.CollectibleType.BLACK_LOTUS] = "BLACK_LOTUS"
____exports.CollectibleType.PIGGY_BANK = 227
____exports.CollectibleType[____exports.CollectibleType.PIGGY_BANK] = "PIGGY_BANK"
____exports.CollectibleType.MOMS_PERFUME = 228
____exports.CollectibleType[____exports.CollectibleType.MOMS_PERFUME] = "MOMS_PERFUME"
____exports.CollectibleType.MONSTROS_LUNG = 229
____exports.CollectibleType[____exports.CollectibleType.MONSTROS_LUNG] = "MONSTROS_LUNG"
____exports.CollectibleType.ABADDON = 230
____exports.CollectibleType[____exports.CollectibleType.ABADDON] = "ABADDON"
____exports.CollectibleType.BALL_OF_TAR = 231
____exports.CollectibleType[____exports.CollectibleType.BALL_OF_TAR] = "BALL_OF_TAR"
____exports.CollectibleType.STOP_WATCH = 232
____exports.CollectibleType[____exports.CollectibleType.STOP_WATCH] = "STOP_WATCH"
____exports.CollectibleType.TINY_PLANET = 233
____exports.CollectibleType[____exports.CollectibleType.TINY_PLANET] = "TINY_PLANET"
____exports.CollectibleType.INFESTATION_2 = 234
____exports.CollectibleType[____exports.CollectibleType.INFESTATION_2] = "INFESTATION_2"
____exports.CollectibleType.E_COLI = 236
____exports.CollectibleType[____exports.CollectibleType.E_COLI] = "E_COLI"
____exports.CollectibleType.DEATHS_TOUCH = 237
____exports.CollectibleType[____exports.CollectibleType.DEATHS_TOUCH] = "DEATHS_TOUCH"
____exports.CollectibleType.KEY_PIECE_1 = 238
____exports.CollectibleType[____exports.CollectibleType.KEY_PIECE_1] = "KEY_PIECE_1"
____exports.CollectibleType.KEY_PIECE_2 = 239
____exports.CollectibleType[____exports.CollectibleType.KEY_PIECE_2] = "KEY_PIECE_2"
____exports.CollectibleType.EXPERIMENTAL_TREATMENT = 240
____exports.CollectibleType[____exports.CollectibleType.EXPERIMENTAL_TREATMENT] = "EXPERIMENTAL_TREATMENT"
____exports.CollectibleType.CONTRACT_FROM_BELOW = 241
____exports.CollectibleType[____exports.CollectibleType.CONTRACT_FROM_BELOW] = "CONTRACT_FROM_BELOW"
____exports.CollectibleType.INFAMY = 242
____exports.CollectibleType[____exports.CollectibleType.INFAMY] = "INFAMY"
____exports.CollectibleType.TRINITY_SHIELD = 243
____exports.CollectibleType[____exports.CollectibleType.TRINITY_SHIELD] = "TRINITY_SHIELD"
____exports.CollectibleType.TECH_5 = 244
____exports.CollectibleType[____exports.CollectibleType.TECH_5] = "TECH_5"
____exports.CollectibleType.TWENTY_TWENTY = 245
____exports.CollectibleType[____exports.CollectibleType.TWENTY_TWENTY] = "TWENTY_TWENTY"
____exports.CollectibleType.BLUE_MAP = 246
____exports.CollectibleType[____exports.CollectibleType.BLUE_MAP] = "BLUE_MAP"
____exports.CollectibleType.BFFS = 247
____exports.CollectibleType[____exports.CollectibleType.BFFS] = "BFFS"
____exports.CollectibleType.HIVE_MIND = 248
____exports.CollectibleType[____exports.CollectibleType.HIVE_MIND] = "HIVE_MIND"
____exports.CollectibleType.THERES_OPTIONS = 249
____exports.CollectibleType[____exports.CollectibleType.THERES_OPTIONS] = "THERES_OPTIONS"
____exports.CollectibleType.BOGO_BOMBS = 250
____exports.CollectibleType[____exports.CollectibleType.BOGO_BOMBS] = "BOGO_BOMBS"
____exports.CollectibleType.STARTER_DECK = 251
____exports.CollectibleType[____exports.CollectibleType.STARTER_DECK] = "STARTER_DECK"
____exports.CollectibleType.LITTLE_BAGGY = 252
____exports.CollectibleType[____exports.CollectibleType.LITTLE_BAGGY] = "LITTLE_BAGGY"
____exports.CollectibleType.MAGIC_SCAB = 253
____exports.CollectibleType[____exports.CollectibleType.MAGIC_SCAB] = "MAGIC_SCAB"
____exports.CollectibleType.BLOOD_CLOT = 254
____exports.CollectibleType[____exports.CollectibleType.BLOOD_CLOT] = "BLOOD_CLOT"
____exports.CollectibleType.SCREW = 255
____exports.CollectibleType[____exports.CollectibleType.SCREW] = "SCREW"
____exports.CollectibleType.HOT_BOMBS = 256
____exports.CollectibleType[____exports.CollectibleType.HOT_BOMBS] = "HOT_BOMBS"
____exports.CollectibleType.FIRE_MIND = 257
____exports.CollectibleType[____exports.CollectibleType.FIRE_MIND] = "FIRE_MIND"
____exports.CollectibleType.MISSING_NO = 258
____exports.CollectibleType[____exports.CollectibleType.MISSING_NO] = "MISSING_NO"
____exports.CollectibleType.DARK_MATTER = 259
____exports.CollectibleType[____exports.CollectibleType.DARK_MATTER] = "DARK_MATTER"
____exports.CollectibleType.BLACK_CANDLE = 260
____exports.CollectibleType[____exports.CollectibleType.BLACK_CANDLE] = "BLACK_CANDLE"
____exports.CollectibleType.PROPTOSIS = 261
____exports.CollectibleType[____exports.CollectibleType.PROPTOSIS] = "PROPTOSIS"
____exports.CollectibleType.MISSING_PAGE_2 = 262
____exports.CollectibleType[____exports.CollectibleType.MISSING_PAGE_2] = "MISSING_PAGE_2"
____exports.CollectibleType.CLEAR_RUNE = 263
____exports.CollectibleType[____exports.CollectibleType.CLEAR_RUNE] = "CLEAR_RUNE"
____exports.CollectibleType.SMART_FLY = 264
____exports.CollectibleType[____exports.CollectibleType.SMART_FLY] = "SMART_FLY"
____exports.CollectibleType.DRY_BABY = 265
____exports.CollectibleType[____exports.CollectibleType.DRY_BABY] = "DRY_BABY"
____exports.CollectibleType.JUICY_SACK = 266
____exports.CollectibleType[____exports.CollectibleType.JUICY_SACK] = "JUICY_SACK"
____exports.CollectibleType.ROBO_BABY_2 = 267
____exports.CollectibleType[____exports.CollectibleType.ROBO_BABY_2] = "ROBO_BABY_2"
____exports.CollectibleType.ROTTEN_BABY = 268
____exports.CollectibleType[____exports.CollectibleType.ROTTEN_BABY] = "ROTTEN_BABY"
____exports.CollectibleType.HEADLESS_BABY = 269
____exports.CollectibleType[____exports.CollectibleType.HEADLESS_BABY] = "HEADLESS_BABY"
____exports.CollectibleType.LEECH = 270
____exports.CollectibleType[____exports.CollectibleType.LEECH] = "LEECH"
____exports.CollectibleType.MYSTERY_SACK = 271
____exports.CollectibleType[____exports.CollectibleType.MYSTERY_SACK] = "MYSTERY_SACK"
____exports.CollectibleType.BBF = 272
____exports.CollectibleType[____exports.CollectibleType.BBF] = "BBF"
____exports.CollectibleType.BOBS_BRAIN = 273
____exports.CollectibleType[____exports.CollectibleType.BOBS_BRAIN] = "BOBS_BRAIN"
____exports.CollectibleType.BEST_BUD = 274
____exports.CollectibleType[____exports.CollectibleType.BEST_BUD] = "BEST_BUD"
____exports.CollectibleType.LIL_BRIMSTONE = 275
____exports.CollectibleType[____exports.CollectibleType.LIL_BRIMSTONE] = "LIL_BRIMSTONE"
____exports.CollectibleType.ISAACS_HEART = 276
____exports.CollectibleType[____exports.CollectibleType.ISAACS_HEART] = "ISAACS_HEART"
____exports.CollectibleType.LIL_HAUNT = 277
____exports.CollectibleType[____exports.CollectibleType.LIL_HAUNT] = "LIL_HAUNT"
____exports.CollectibleType.DARK_BUM = 278
____exports.CollectibleType[____exports.CollectibleType.DARK_BUM] = "DARK_BUM"
____exports.CollectibleType.BIG_FAN = 279
____exports.CollectibleType[____exports.CollectibleType.BIG_FAN] = "BIG_FAN"
____exports.CollectibleType.SISSY_LONGLEGS = 280
____exports.CollectibleType[____exports.CollectibleType.SISSY_LONGLEGS] = "SISSY_LONGLEGS"
____exports.CollectibleType.PUNCHING_BAG = 281
____exports.CollectibleType[____exports.CollectibleType.PUNCHING_BAG] = "PUNCHING_BAG"
____exports.CollectibleType.HOW_TO_JUMP = 282
____exports.CollectibleType[____exports.CollectibleType.HOW_TO_JUMP] = "HOW_TO_JUMP"
____exports.CollectibleType.D100 = 283
____exports.CollectibleType[____exports.CollectibleType.D100] = "D100"
____exports.CollectibleType.D4 = 284
____exports.CollectibleType[____exports.CollectibleType.D4] = "D4"
____exports.CollectibleType.D10 = 285
____exports.CollectibleType[____exports.CollectibleType.D10] = "D10"
____exports.CollectibleType.BLANK_CARD = 286
____exports.CollectibleType[____exports.CollectibleType.BLANK_CARD] = "BLANK_CARD"
____exports.CollectibleType.BOOK_OF_SECRETS = 287
____exports.CollectibleType[____exports.CollectibleType.BOOK_OF_SECRETS] = "BOOK_OF_SECRETS"
____exports.CollectibleType.BOX_OF_SPIDERS = 288
____exports.CollectibleType[____exports.CollectibleType.BOX_OF_SPIDERS] = "BOX_OF_SPIDERS"
____exports.CollectibleType.RED_CANDLE = 289
____exports.CollectibleType[____exports.CollectibleType.RED_CANDLE] = "RED_CANDLE"
____exports.CollectibleType.JAR = 290
____exports.CollectibleType[____exports.CollectibleType.JAR] = "JAR"
____exports.CollectibleType.FLUSH = 291
____exports.CollectibleType[____exports.CollectibleType.FLUSH] = "FLUSH"
____exports.CollectibleType.SATANIC_BIBLE = 292
____exports.CollectibleType[____exports.CollectibleType.SATANIC_BIBLE] = "SATANIC_BIBLE"
____exports.CollectibleType.HEAD_OF_KRAMPUS = 293
____exports.CollectibleType[____exports.CollectibleType.HEAD_OF_KRAMPUS] = "HEAD_OF_KRAMPUS"
____exports.CollectibleType.BUTTER_BEAN = 294
____exports.CollectibleType[____exports.CollectibleType.BUTTER_BEAN] = "BUTTER_BEAN"
____exports.CollectibleType.MAGIC_FINGERS = 295
____exports.CollectibleType[____exports.CollectibleType.MAGIC_FINGERS] = "MAGIC_FINGERS"
____exports.CollectibleType.CONVERTER = 296
____exports.CollectibleType[____exports.CollectibleType.CONVERTER] = "CONVERTER"
____exports.CollectibleType.BLUE_BOX = 297
____exports.CollectibleType[____exports.CollectibleType.BLUE_BOX] = "BLUE_BOX"
____exports.CollectibleType.UNICORN_STUMP = 298
____exports.CollectibleType[____exports.CollectibleType.UNICORN_STUMP] = "UNICORN_STUMP"
____exports.CollectibleType.TAURUS = 299
____exports.CollectibleType[____exports.CollectibleType.TAURUS] = "TAURUS"
____exports.CollectibleType.ARIES = 300
____exports.CollectibleType[____exports.CollectibleType.ARIES] = "ARIES"
____exports.CollectibleType.CANCER = 301
____exports.CollectibleType[____exports.CollectibleType.CANCER] = "CANCER"
____exports.CollectibleType.LEO = 302
____exports.CollectibleType[____exports.CollectibleType.LEO] = "LEO"
____exports.CollectibleType.VIRGO = 303
____exports.CollectibleType[____exports.CollectibleType.VIRGO] = "VIRGO"
____exports.CollectibleType.LIBRA = 304
____exports.CollectibleType[____exports.CollectibleType.LIBRA] = "LIBRA"
____exports.CollectibleType.SCORPIO = 305
____exports.CollectibleType[____exports.CollectibleType.SCORPIO] = "SCORPIO"
____exports.CollectibleType.SAGITTARIUS = 306
____exports.CollectibleType[____exports.CollectibleType.SAGITTARIUS] = "SAGITTARIUS"
____exports.CollectibleType.CAPRICORN = 307
____exports.CollectibleType[____exports.CollectibleType.CAPRICORN] = "CAPRICORN"
____exports.CollectibleType.AQUARIUS = 308
____exports.CollectibleType[____exports.CollectibleType.AQUARIUS] = "AQUARIUS"
____exports.CollectibleType.PISCES = 309
____exports.CollectibleType[____exports.CollectibleType.PISCES] = "PISCES"
____exports.CollectibleType.EVES_MASCARA = 310
____exports.CollectibleType[____exports.CollectibleType.EVES_MASCARA] = "EVES_MASCARA"
____exports.CollectibleType.JUDAS_SHADOW = 311
____exports.CollectibleType[____exports.CollectibleType.JUDAS_SHADOW] = "JUDAS_SHADOW"
____exports.CollectibleType.MAGGYS_BOW = 312
____exports.CollectibleType[____exports.CollectibleType.MAGGYS_BOW] = "MAGGYS_BOW"
____exports.CollectibleType.HOLY_MANTLE = 313
____exports.CollectibleType[____exports.CollectibleType.HOLY_MANTLE] = "HOLY_MANTLE"
____exports.CollectibleType.THUNDER_THIGHS = 314
____exports.CollectibleType[____exports.CollectibleType.THUNDER_THIGHS] = "THUNDER_THIGHS"
____exports.CollectibleType.STRANGE_ATTRACTOR = 315
____exports.CollectibleType[____exports.CollectibleType.STRANGE_ATTRACTOR] = "STRANGE_ATTRACTOR"
____exports.CollectibleType.CURSED_EYE = 316
____exports.CollectibleType[____exports.CollectibleType.CURSED_EYE] = "CURSED_EYE"
____exports.CollectibleType.MYSTERIOUS_LIQUID = 317
____exports.CollectibleType[____exports.CollectibleType.MYSTERIOUS_LIQUID] = "MYSTERIOUS_LIQUID"
____exports.CollectibleType.GEMINI = 318
____exports.CollectibleType[____exports.CollectibleType.GEMINI] = "GEMINI"
____exports.CollectibleType.CAINS_OTHER_EYE = 319
____exports.CollectibleType[____exports.CollectibleType.CAINS_OTHER_EYE] = "CAINS_OTHER_EYE"
____exports.CollectibleType.BLUE_BABYS_ONLY_FRIEND = 320
____exports.CollectibleType[____exports.CollectibleType.BLUE_BABYS_ONLY_FRIEND] = "BLUE_BABYS_ONLY_FRIEND"
____exports.CollectibleType.SAMSONS_CHAINS = 321
____exports.CollectibleType[____exports.CollectibleType.SAMSONS_CHAINS] = "SAMSONS_CHAINS"
____exports.CollectibleType.MONGO_BABY = 322
____exports.CollectibleType[____exports.CollectibleType.MONGO_BABY] = "MONGO_BABY"
____exports.CollectibleType.ISAACS_TEARS = 323
____exports.CollectibleType[____exports.CollectibleType.ISAACS_TEARS] = "ISAACS_TEARS"
____exports.CollectibleType.UNDEFINED = 324
____exports.CollectibleType[____exports.CollectibleType.UNDEFINED] = "UNDEFINED"
____exports.CollectibleType.SCISSORS = 325
____exports.CollectibleType[____exports.CollectibleType.SCISSORS] = "SCISSORS"
____exports.CollectibleType.BREATH_OF_LIFE = 326
____exports.CollectibleType[____exports.CollectibleType.BREATH_OF_LIFE] = "BREATH_OF_LIFE"
____exports.CollectibleType.POLAROID = 327
____exports.CollectibleType[____exports.CollectibleType.POLAROID] = "POLAROID"
____exports.CollectibleType.NEGATIVE = 328
____exports.CollectibleType[____exports.CollectibleType.NEGATIVE] = "NEGATIVE"
____exports.CollectibleType.LUDOVICO_TECHNIQUE = 329
____exports.CollectibleType[____exports.CollectibleType.LUDOVICO_TECHNIQUE] = "LUDOVICO_TECHNIQUE"
____exports.CollectibleType.SOY_MILK = 330
____exports.CollectibleType[____exports.CollectibleType.SOY_MILK] = "SOY_MILK"
____exports.CollectibleType.GODHEAD = 331
____exports.CollectibleType[____exports.CollectibleType.GODHEAD] = "GODHEAD"
____exports.CollectibleType.LAZARUS_RAGS = 332
____exports.CollectibleType[____exports.CollectibleType.LAZARUS_RAGS] = "LAZARUS_RAGS"
____exports.CollectibleType.MIND = 333
____exports.CollectibleType[____exports.CollectibleType.MIND] = "MIND"
____exports.CollectibleType.BODY = 334
____exports.CollectibleType[____exports.CollectibleType.BODY] = "BODY"
____exports.CollectibleType.SOUL = 335
____exports.CollectibleType[____exports.CollectibleType.SOUL] = "SOUL"
____exports.CollectibleType.DEAD_ONION = 336
____exports.CollectibleType[____exports.CollectibleType.DEAD_ONION] = "DEAD_ONION"
____exports.CollectibleType.BROKEN_WATCH = 337
____exports.CollectibleType[____exports.CollectibleType.BROKEN_WATCH] = "BROKEN_WATCH"
____exports.CollectibleType.BOOMERANG = 338
____exports.CollectibleType[____exports.CollectibleType.BOOMERANG] = "BOOMERANG"
____exports.CollectibleType.SAFETY_PIN = 339
____exports.CollectibleType[____exports.CollectibleType.SAFETY_PIN] = "SAFETY_PIN"
____exports.CollectibleType.CAFFEINE_PILL = 340
____exports.CollectibleType[____exports.CollectibleType.CAFFEINE_PILL] = "CAFFEINE_PILL"
____exports.CollectibleType.TORN_PHOTO = 341
____exports.CollectibleType[____exports.CollectibleType.TORN_PHOTO] = "TORN_PHOTO"
____exports.CollectibleType.BLUE_CAP = 342
____exports.CollectibleType[____exports.CollectibleType.BLUE_CAP] = "BLUE_CAP"
____exports.CollectibleType.LATCH_KEY = 343
____exports.CollectibleType[____exports.CollectibleType.LATCH_KEY] = "LATCH_KEY"
____exports.CollectibleType.MATCH_BOOK = 344
____exports.CollectibleType[____exports.CollectibleType.MATCH_BOOK] = "MATCH_BOOK"
____exports.CollectibleType.SYNTHOIL = 345
____exports.CollectibleType[____exports.CollectibleType.SYNTHOIL] = "SYNTHOIL"
____exports.CollectibleType.SNACK = 346
____exports.CollectibleType[____exports.CollectibleType.SNACK] = "SNACK"
____exports.CollectibleType.DIPLOPIA = 347
____exports.CollectibleType[____exports.CollectibleType.DIPLOPIA] = "DIPLOPIA"
____exports.CollectibleType.PLACEBO = 348
____exports.CollectibleType[____exports.CollectibleType.PLACEBO] = "PLACEBO"
____exports.CollectibleType.WOODEN_NICKEL = 349
____exports.CollectibleType[____exports.CollectibleType.WOODEN_NICKEL] = "WOODEN_NICKEL"
____exports.CollectibleType.TOXIC_SHOCK = 350
____exports.CollectibleType[____exports.CollectibleType.TOXIC_SHOCK] = "TOXIC_SHOCK"
____exports.CollectibleType.MEGA_BEAN = 351
____exports.CollectibleType[____exports.CollectibleType.MEGA_BEAN] = "MEGA_BEAN"
____exports.CollectibleType.GLASS_CANNON = 352
____exports.CollectibleType[____exports.CollectibleType.GLASS_CANNON] = "GLASS_CANNON"
____exports.CollectibleType.BOMBER_BOY = 353
____exports.CollectibleType[____exports.CollectibleType.BOMBER_BOY] = "BOMBER_BOY"
____exports.CollectibleType.CRACK_JACKS = 354
____exports.CollectibleType[____exports.CollectibleType.CRACK_JACKS] = "CRACK_JACKS"
____exports.CollectibleType.MOMS_PEARLS = 355
____exports.CollectibleType[____exports.CollectibleType.MOMS_PEARLS] = "MOMS_PEARLS"
____exports.CollectibleType.CAR_BATTERY = 356
____exports.CollectibleType[____exports.CollectibleType.CAR_BATTERY] = "CAR_BATTERY"
____exports.CollectibleType.BOX_OF_FRIENDS = 357
____exports.CollectibleType[____exports.CollectibleType.BOX_OF_FRIENDS] = "BOX_OF_FRIENDS"
____exports.CollectibleType.WIZ = 358
____exports.CollectibleType[____exports.CollectibleType.WIZ] = "WIZ"
____exports.CollectibleType.EIGHT_INCH_NAILS = 359
____exports.CollectibleType[____exports.CollectibleType.EIGHT_INCH_NAILS] = "EIGHT_INCH_NAILS"
____exports.CollectibleType.INCUBUS = 360
____exports.CollectibleType[____exports.CollectibleType.INCUBUS] = "INCUBUS"
____exports.CollectibleType.FATES_REWARD = 361
____exports.CollectibleType[____exports.CollectibleType.FATES_REWARD] = "FATES_REWARD"
____exports.CollectibleType.LIL_CHEST = 362
____exports.CollectibleType[____exports.CollectibleType.LIL_CHEST] = "LIL_CHEST"
____exports.CollectibleType.SWORN_PROTECTOR = 363
____exports.CollectibleType[____exports.CollectibleType.SWORN_PROTECTOR] = "SWORN_PROTECTOR"
____exports.CollectibleType.FRIEND_ZONE = 364
____exports.CollectibleType[____exports.CollectibleType.FRIEND_ZONE] = "FRIEND_ZONE"
____exports.CollectibleType.LOST_FLY = 365
____exports.CollectibleType[____exports.CollectibleType.LOST_FLY] = "LOST_FLY"
____exports.CollectibleType.SCATTER_BOMBS = 366
____exports.CollectibleType[____exports.CollectibleType.SCATTER_BOMBS] = "SCATTER_BOMBS"
____exports.CollectibleType.STICKY_BOMBS = 367
____exports.CollectibleType[____exports.CollectibleType.STICKY_BOMBS] = "STICKY_BOMBS"
____exports.CollectibleType.EPIPHORA = 368
____exports.CollectibleType[____exports.CollectibleType.EPIPHORA] = "EPIPHORA"
____exports.CollectibleType.CONTINUUM = 369
____exports.CollectibleType[____exports.CollectibleType.CONTINUUM] = "CONTINUUM"
____exports.CollectibleType.MR_DOLLY = 370
____exports.CollectibleType[____exports.CollectibleType.MR_DOLLY] = "MR_DOLLY"
____exports.CollectibleType.CURSE_OF_THE_TOWER = 371
____exports.CollectibleType[____exports.CollectibleType.CURSE_OF_THE_TOWER] = "CURSE_OF_THE_TOWER"
____exports.CollectibleType.CHARGED_BABY = 372
____exports.CollectibleType[____exports.CollectibleType.CHARGED_BABY] = "CHARGED_BABY"
____exports.CollectibleType.DEAD_EYE = 373
____exports.CollectibleType[____exports.CollectibleType.DEAD_EYE] = "DEAD_EYE"
____exports.CollectibleType.HOLY_LIGHT = 374
____exports.CollectibleType[____exports.CollectibleType.HOLY_LIGHT] = "HOLY_LIGHT"
____exports.CollectibleType.HOST_HAT = 375
____exports.CollectibleType[____exports.CollectibleType.HOST_HAT] = "HOST_HAT"
____exports.CollectibleType.RESTOCK = 376
____exports.CollectibleType[____exports.CollectibleType.RESTOCK] = "RESTOCK"
____exports.CollectibleType.BURSTING_SACK = 377
____exports.CollectibleType[____exports.CollectibleType.BURSTING_SACK] = "BURSTING_SACK"
____exports.CollectibleType.NUMBER_TWO = 378
____exports.CollectibleType[____exports.CollectibleType.NUMBER_TWO] = "NUMBER_TWO"
____exports.CollectibleType.PUPULA_DUPLEX = 379
____exports.CollectibleType[____exports.CollectibleType.PUPULA_DUPLEX] = "PUPULA_DUPLEX"
____exports.CollectibleType.PAY_TO_PLAY = 380
____exports.CollectibleType[____exports.CollectibleType.PAY_TO_PLAY] = "PAY_TO_PLAY"
____exports.CollectibleType.EDENS_BLESSING = 381
____exports.CollectibleType[____exports.CollectibleType.EDENS_BLESSING] = "EDENS_BLESSING"
____exports.CollectibleType.FRIEND_BALL = 382
____exports.CollectibleType[____exports.CollectibleType.FRIEND_BALL] = "FRIEND_BALL"
____exports.CollectibleType.TEAR_DETONATOR = 383
____exports.CollectibleType[____exports.CollectibleType.TEAR_DETONATOR] = "TEAR_DETONATOR"
____exports.CollectibleType.LIL_GURDY = 384
____exports.CollectibleType[____exports.CollectibleType.LIL_GURDY] = "LIL_GURDY"
____exports.CollectibleType.BUMBO = 385
____exports.CollectibleType[____exports.CollectibleType.BUMBO] = "BUMBO"
____exports.CollectibleType.D12 = 386
____exports.CollectibleType[____exports.CollectibleType.D12] = "D12"
____exports.CollectibleType.CENSER = 387
____exports.CollectibleType[____exports.CollectibleType.CENSER] = "CENSER"
____exports.CollectibleType.KEY_BUM = 388
____exports.CollectibleType[____exports.CollectibleType.KEY_BUM] = "KEY_BUM"
____exports.CollectibleType.RUNE_BAG = 389
____exports.CollectibleType[____exports.CollectibleType.RUNE_BAG] = "RUNE_BAG"
____exports.CollectibleType.SERAPHIM = 390
____exports.CollectibleType[____exports.CollectibleType.SERAPHIM] = "SERAPHIM"
____exports.CollectibleType.BETRAYAL = 391
____exports.CollectibleType[____exports.CollectibleType.BETRAYAL] = "BETRAYAL"
____exports.CollectibleType.ZODIAC = 392
____exports.CollectibleType[____exports.CollectibleType.ZODIAC] = "ZODIAC"
____exports.CollectibleType.SERPENTS_KISS = 393
____exports.CollectibleType[____exports.CollectibleType.SERPENTS_KISS] = "SERPENTS_KISS"
____exports.CollectibleType.MARKED = 394
____exports.CollectibleType[____exports.CollectibleType.MARKED] = "MARKED"
____exports.CollectibleType.TECH_X = 395
____exports.CollectibleType[____exports.CollectibleType.TECH_X] = "TECH_X"
____exports.CollectibleType.VENTRICLE_RAZOR = 396
____exports.CollectibleType[____exports.CollectibleType.VENTRICLE_RAZOR] = "VENTRICLE_RAZOR"
____exports.CollectibleType.TRACTOR_BEAM = 397
____exports.CollectibleType[____exports.CollectibleType.TRACTOR_BEAM] = "TRACTOR_BEAM"
____exports.CollectibleType.GODS_FLESH = 398
____exports.CollectibleType[____exports.CollectibleType.GODS_FLESH] = "GODS_FLESH"
____exports.CollectibleType.MAW_OF_THE_VOID = 399
____exports.CollectibleType[____exports.CollectibleType.MAW_OF_THE_VOID] = "MAW_OF_THE_VOID"
____exports.CollectibleType.SPEAR_OF_DESTINY = 400
____exports.CollectibleType[____exports.CollectibleType.SPEAR_OF_DESTINY] = "SPEAR_OF_DESTINY"
____exports.CollectibleType.EXPLOSIVO = 401
____exports.CollectibleType[____exports.CollectibleType.EXPLOSIVO] = "EXPLOSIVO"
____exports.CollectibleType.CHAOS = 402
____exports.CollectibleType[____exports.CollectibleType.CHAOS] = "CHAOS"
____exports.CollectibleType.SPIDER_MOD = 403
____exports.CollectibleType[____exports.CollectibleType.SPIDER_MOD] = "SPIDER_MOD"
____exports.CollectibleType.FARTING_BABY = 404
____exports.CollectibleType[____exports.CollectibleType.FARTING_BABY] = "FARTING_BABY"
____exports.CollectibleType.GB_BUG = 405
____exports.CollectibleType[____exports.CollectibleType.GB_BUG] = "GB_BUG"
____exports.CollectibleType.D8 = 406
____exports.CollectibleType[____exports.CollectibleType.D8] = "D8"
____exports.CollectibleType.PURITY = 407
____exports.CollectibleType[____exports.CollectibleType.PURITY] = "PURITY"
____exports.CollectibleType.ATHAME = 408
____exports.CollectibleType[____exports.CollectibleType.ATHAME] = "ATHAME"
____exports.CollectibleType.EMPTY_VESSEL = 409
____exports.CollectibleType[____exports.CollectibleType.EMPTY_VESSEL] = "EMPTY_VESSEL"
____exports.CollectibleType.EVIL_EYE = 410
____exports.CollectibleType[____exports.CollectibleType.EVIL_EYE] = "EVIL_EYE"
____exports.CollectibleType.LUSTY_BLOOD = 411
____exports.CollectibleType[____exports.CollectibleType.LUSTY_BLOOD] = "LUSTY_BLOOD"
____exports.CollectibleType.CAMBION_CONCEPTION = 412
____exports.CollectibleType[____exports.CollectibleType.CAMBION_CONCEPTION] = "CAMBION_CONCEPTION"
____exports.CollectibleType.IMMACULATE_CONCEPTION = 413
____exports.CollectibleType[____exports.CollectibleType.IMMACULATE_CONCEPTION] = "IMMACULATE_CONCEPTION"
____exports.CollectibleType.MORE_OPTIONS = 414
____exports.CollectibleType[____exports.CollectibleType.MORE_OPTIONS] = "MORE_OPTIONS"
____exports.CollectibleType.CROWN_OF_LIGHT = 415
____exports.CollectibleType[____exports.CollectibleType.CROWN_OF_LIGHT] = "CROWN_OF_LIGHT"
____exports.CollectibleType.DEEP_POCKETS = 416
____exports.CollectibleType[____exports.CollectibleType.DEEP_POCKETS] = "DEEP_POCKETS"
____exports.CollectibleType.SUCCUBUS = 417
____exports.CollectibleType[____exports.CollectibleType.SUCCUBUS] = "SUCCUBUS"
____exports.CollectibleType.FRUIT_CAKE = 418
____exports.CollectibleType[____exports.CollectibleType.FRUIT_CAKE] = "FRUIT_CAKE"
____exports.CollectibleType.TELEPORT_2 = 419
____exports.CollectibleType[____exports.CollectibleType.TELEPORT_2] = "TELEPORT_2"
____exports.CollectibleType.BLACK_POWDER = 420
____exports.CollectibleType[____exports.CollectibleType.BLACK_POWDER] = "BLACK_POWDER"
____exports.CollectibleType.KIDNEY_BEAN = 421
____exports.CollectibleType[____exports.CollectibleType.KIDNEY_BEAN] = "KIDNEY_BEAN"
____exports.CollectibleType.GLOWING_HOUR_GLASS = 422
____exports.CollectibleType[____exports.CollectibleType.GLOWING_HOUR_GLASS] = "GLOWING_HOUR_GLASS"
____exports.CollectibleType.CIRCLE_OF_PROTECTION = 423
____exports.CollectibleType[____exports.CollectibleType.CIRCLE_OF_PROTECTION] = "CIRCLE_OF_PROTECTION"
____exports.CollectibleType.SACK_HEAD = 424
____exports.CollectibleType[____exports.CollectibleType.SACK_HEAD] = "SACK_HEAD"
____exports.CollectibleType.NIGHT_LIGHT = 425
____exports.CollectibleType[____exports.CollectibleType.NIGHT_LIGHT] = "NIGHT_LIGHT"
____exports.CollectibleType.OBSESSED_FAN = 426
____exports.CollectibleType[____exports.CollectibleType.OBSESSED_FAN] = "OBSESSED_FAN"
____exports.CollectibleType.MINE_CRAFTER = 427
____exports.CollectibleType[____exports.CollectibleType.MINE_CRAFTER] = "MINE_CRAFTER"
____exports.CollectibleType.PJS = 428
____exports.CollectibleType[____exports.CollectibleType.PJS] = "PJS"
____exports.CollectibleType.HEAD_OF_THE_KEEPER = 429
____exports.CollectibleType[____exports.CollectibleType.HEAD_OF_THE_KEEPER] = "HEAD_OF_THE_KEEPER"
____exports.CollectibleType.PAPA_FLY = 430
____exports.CollectibleType[____exports.CollectibleType.PAPA_FLY] = "PAPA_FLY"
____exports.CollectibleType.MULTIDIMENSIONAL_BABY = 431
____exports.CollectibleType[____exports.CollectibleType.MULTIDIMENSIONAL_BABY] = "MULTIDIMENSIONAL_BABY"
____exports.CollectibleType.GLITTER_BOMBS = 432
____exports.CollectibleType[____exports.CollectibleType.GLITTER_BOMBS] = "GLITTER_BOMBS"
____exports.CollectibleType.MY_SHADOW = 433
____exports.CollectibleType[____exports.CollectibleType.MY_SHADOW] = "MY_SHADOW"
____exports.CollectibleType.JAR_OF_FLIES = 434
____exports.CollectibleType[____exports.CollectibleType.JAR_OF_FLIES] = "JAR_OF_FLIES"
____exports.CollectibleType.LIL_LOKI = 435
____exports.CollectibleType[____exports.CollectibleType.LIL_LOKI] = "LIL_LOKI"
____exports.CollectibleType.MILK = 436
____exports.CollectibleType[____exports.CollectibleType.MILK] = "MILK"
____exports.CollectibleType.D7 = 437
____exports.CollectibleType[____exports.CollectibleType.D7] = "D7"
____exports.CollectibleType.BINKY = 438
____exports.CollectibleType[____exports.CollectibleType.BINKY] = "BINKY"
____exports.CollectibleType.MOMS_BOX = 439
____exports.CollectibleType[____exports.CollectibleType.MOMS_BOX] = "MOMS_BOX"
____exports.CollectibleType.KIDNEY_STONE = 440
____exports.CollectibleType[____exports.CollectibleType.KIDNEY_STONE] = "KIDNEY_STONE"
____exports.CollectibleType.MEGA_BLAST = 441
____exports.CollectibleType[____exports.CollectibleType.MEGA_BLAST] = "MEGA_BLAST"
____exports.CollectibleType.DARK_PRINCES_CROWN = 442
____exports.CollectibleType[____exports.CollectibleType.DARK_PRINCES_CROWN] = "DARK_PRINCES_CROWN"
____exports.CollectibleType.APPLE = 443
____exports.CollectibleType[____exports.CollectibleType.APPLE] = "APPLE"
____exports.CollectibleType.LEAD_PENCIL = 444
____exports.CollectibleType[____exports.CollectibleType.LEAD_PENCIL] = "LEAD_PENCIL"
____exports.CollectibleType.DOG_TOOTH = 445
____exports.CollectibleType[____exports.CollectibleType.DOG_TOOTH] = "DOG_TOOTH"
____exports.CollectibleType.DEAD_TOOTH = 446
____exports.CollectibleType[____exports.CollectibleType.DEAD_TOOTH] = "DEAD_TOOTH"
____exports.CollectibleType.LINGER_BEAN = 447
____exports.CollectibleType[____exports.CollectibleType.LINGER_BEAN] = "LINGER_BEAN"
____exports.CollectibleType.SHARD_OF_GLASS = 448
____exports.CollectibleType[____exports.CollectibleType.SHARD_OF_GLASS] = "SHARD_OF_GLASS"
____exports.CollectibleType.METAL_PLATE = 449
____exports.CollectibleType[____exports.CollectibleType.METAL_PLATE] = "METAL_PLATE"
____exports.CollectibleType.EYE_OF_GREED = 450
____exports.CollectibleType[____exports.CollectibleType.EYE_OF_GREED] = "EYE_OF_GREED"
____exports.CollectibleType.TAROT_CLOTH = 451
____exports.CollectibleType[____exports.CollectibleType.TAROT_CLOTH] = "TAROT_CLOTH"
____exports.CollectibleType.VARICOSE_VEINS = 452
____exports.CollectibleType[____exports.CollectibleType.VARICOSE_VEINS] = "VARICOSE_VEINS"
____exports.CollectibleType.COMPOUND_FRACTURE = 453
____exports.CollectibleType[____exports.CollectibleType.COMPOUND_FRACTURE] = "COMPOUND_FRACTURE"
____exports.CollectibleType.POLYDACTYLY = 454
____exports.CollectibleType[____exports.CollectibleType.POLYDACTYLY] = "POLYDACTYLY"
____exports.CollectibleType.DADS_LOST_COIN = 455
____exports.CollectibleType[____exports.CollectibleType.DADS_LOST_COIN] = "DADS_LOST_COIN"
____exports.CollectibleType.MIDNIGHT_SNACK = 456
____exports.CollectibleType[____exports.CollectibleType.MIDNIGHT_SNACK] = "MIDNIGHT_SNACK"
____exports.CollectibleType.CONE_HEAD = 457
____exports.CollectibleType[____exports.CollectibleType.CONE_HEAD] = "CONE_HEAD"
____exports.CollectibleType.BELLY_BUTTON = 458
____exports.CollectibleType[____exports.CollectibleType.BELLY_BUTTON] = "BELLY_BUTTON"
____exports.CollectibleType.SINUS_INFECTION = 459
____exports.CollectibleType[____exports.CollectibleType.SINUS_INFECTION] = "SINUS_INFECTION"
____exports.CollectibleType.GLAUCOMA = 460
____exports.CollectibleType[____exports.CollectibleType.GLAUCOMA] = "GLAUCOMA"
____exports.CollectibleType.PARASITOID = 461
____exports.CollectibleType[____exports.CollectibleType.PARASITOID] = "PARASITOID"
____exports.CollectibleType.EYE_OF_BELIAL = 462
____exports.CollectibleType[____exports.CollectibleType.EYE_OF_BELIAL] = "EYE_OF_BELIAL"
____exports.CollectibleType.SULFURIC_ACID = 463
____exports.CollectibleType[____exports.CollectibleType.SULFURIC_ACID] = "SULFURIC_ACID"
____exports.CollectibleType.GLYPH_OF_BALANCE = 464
____exports.CollectibleType[____exports.CollectibleType.GLYPH_OF_BALANCE] = "GLYPH_OF_BALANCE"
____exports.CollectibleType.ANALOG_STICK = 465
____exports.CollectibleType[____exports.CollectibleType.ANALOG_STICK] = "ANALOG_STICK"
____exports.CollectibleType.CONTAGION = 466
____exports.CollectibleType[____exports.CollectibleType.CONTAGION] = "CONTAGION"
____exports.CollectibleType.FINGER = 467
____exports.CollectibleType[____exports.CollectibleType.FINGER] = "FINGER"
____exports.CollectibleType.SHADE = 468
____exports.CollectibleType[____exports.CollectibleType.SHADE] = "SHADE"
____exports.CollectibleType.DEPRESSION = 469
____exports.CollectibleType[____exports.CollectibleType.DEPRESSION] = "DEPRESSION"
____exports.CollectibleType.HUSHY = 470
____exports.CollectibleType[____exports.CollectibleType.HUSHY] = "HUSHY"
____exports.CollectibleType.LIL_MONSTRO = 471
____exports.CollectibleType[____exports.CollectibleType.LIL_MONSTRO] = "LIL_MONSTRO"
____exports.CollectibleType.KING_BABY = 472
____exports.CollectibleType[____exports.CollectibleType.KING_BABY] = "KING_BABY"
____exports.CollectibleType.BIG_CHUBBY = 473
____exports.CollectibleType[____exports.CollectibleType.BIG_CHUBBY] = "BIG_CHUBBY"
____exports.CollectibleType.BROKEN_GLASS_CANNON = 474
____exports.CollectibleType[____exports.CollectibleType.BROKEN_GLASS_CANNON] = "BROKEN_GLASS_CANNON"
____exports.CollectibleType.PLAN_C = 475
____exports.CollectibleType[____exports.CollectibleType.PLAN_C] = "PLAN_C"
____exports.CollectibleType.D1 = 476
____exports.CollectibleType[____exports.CollectibleType.D1] = "D1"
____exports.CollectibleType.VOID = 477
____exports.CollectibleType[____exports.CollectibleType.VOID] = "VOID"
____exports.CollectibleType.PAUSE = 478
____exports.CollectibleType[____exports.CollectibleType.PAUSE] = "PAUSE"
____exports.CollectibleType.SMELTER = 479
____exports.CollectibleType[____exports.CollectibleType.SMELTER] = "SMELTER"
____exports.CollectibleType.COMPOST = 480
____exports.CollectibleType[____exports.CollectibleType.COMPOST] = "COMPOST"
____exports.CollectibleType.DATAMINER = 481
____exports.CollectibleType[____exports.CollectibleType.DATAMINER] = "DATAMINER"
____exports.CollectibleType.CLICKER = 482
____exports.CollectibleType[____exports.CollectibleType.CLICKER] = "CLICKER"
____exports.CollectibleType.MAMA_MEGA = 483
____exports.CollectibleType[____exports.CollectibleType.MAMA_MEGA] = "MAMA_MEGA"
____exports.CollectibleType.WAIT_WHAT = 484
____exports.CollectibleType[____exports.CollectibleType.WAIT_WHAT] = "WAIT_WHAT"
____exports.CollectibleType.CROOKED_PENNY = 485
____exports.CollectibleType[____exports.CollectibleType.CROOKED_PENNY] = "CROOKED_PENNY"
____exports.CollectibleType.DULL_RAZOR = 486
____exports.CollectibleType[____exports.CollectibleType.DULL_RAZOR] = "DULL_RAZOR"
____exports.CollectibleType.POTATO_PEELER = 487
____exports.CollectibleType[____exports.CollectibleType.POTATO_PEELER] = "POTATO_PEELER"
____exports.CollectibleType.METRONOME = 488
____exports.CollectibleType[____exports.CollectibleType.METRONOME] = "METRONOME"
____exports.CollectibleType.D_INFINITY = 489
____exports.CollectibleType[____exports.CollectibleType.D_INFINITY] = "D_INFINITY"
____exports.CollectibleType.EDENS_SOUL = 490
____exports.CollectibleType[____exports.CollectibleType.EDENS_SOUL] = "EDENS_SOUL"
____exports.CollectibleType.ACID_BABY = 491
____exports.CollectibleType[____exports.CollectibleType.ACID_BABY] = "ACID_BABY"
____exports.CollectibleType.YO_LISTEN = 492
____exports.CollectibleType[____exports.CollectibleType.YO_LISTEN] = "YO_LISTEN"
____exports.CollectibleType.ADRENALINE = 493
____exports.CollectibleType[____exports.CollectibleType.ADRENALINE] = "ADRENALINE"
____exports.CollectibleType.JACOBS_LADDER = 494
____exports.CollectibleType[____exports.CollectibleType.JACOBS_LADDER] = "JACOBS_LADDER"
____exports.CollectibleType.GHOST_PEPPER = 495
____exports.CollectibleType[____exports.CollectibleType.GHOST_PEPPER] = "GHOST_PEPPER"
____exports.CollectibleType.EUTHANASIA = 496
____exports.CollectibleType[____exports.CollectibleType.EUTHANASIA] = "EUTHANASIA"
____exports.CollectibleType.CAMO_UNDIES = 497
____exports.CollectibleType[____exports.CollectibleType.CAMO_UNDIES] = "CAMO_UNDIES"
____exports.CollectibleType.DUALITY = 498
____exports.CollectibleType[____exports.CollectibleType.DUALITY] = "DUALITY"
____exports.CollectibleType.EUCHARIST = 499
____exports.CollectibleType[____exports.CollectibleType.EUCHARIST] = "EUCHARIST"
____exports.CollectibleType.SACK_OF_SACKS = 500
____exports.CollectibleType[____exports.CollectibleType.SACK_OF_SACKS] = "SACK_OF_SACKS"
____exports.CollectibleType.GREEDS_GULLET = 501
____exports.CollectibleType[____exports.CollectibleType.GREEDS_GULLET] = "GREEDS_GULLET"
____exports.CollectibleType.LARGE_ZIT = 502
____exports.CollectibleType[____exports.CollectibleType.LARGE_ZIT] = "LARGE_ZIT"
____exports.CollectibleType.LITTLE_HORN = 503
____exports.CollectibleType[____exports.CollectibleType.LITTLE_HORN] = "LITTLE_HORN"
____exports.CollectibleType.BROWN_NUGGET = 504
____exports.CollectibleType[____exports.CollectibleType.BROWN_NUGGET] = "BROWN_NUGGET"
____exports.CollectibleType.POKE_GO = 505
____exports.CollectibleType[____exports.CollectibleType.POKE_GO] = "POKE_GO"
____exports.CollectibleType.BACKSTABBER = 506
____exports.CollectibleType[____exports.CollectibleType.BACKSTABBER] = "BACKSTABBER"
____exports.CollectibleType.SHARP_STRAW = 507
____exports.CollectibleType[____exports.CollectibleType.SHARP_STRAW] = "SHARP_STRAW"
____exports.CollectibleType.MOMS_RAZOR = 508
____exports.CollectibleType[____exports.CollectibleType.MOMS_RAZOR] = "MOMS_RAZOR"
____exports.CollectibleType.BLOODSHOT_EYE = 509
____exports.CollectibleType[____exports.CollectibleType.BLOODSHOT_EYE] = "BLOODSHOT_EYE"
____exports.CollectibleType.DELIRIOUS = 510
____exports.CollectibleType[____exports.CollectibleType.DELIRIOUS] = "DELIRIOUS"
____exports.CollectibleType.ANGRY_FLY = 511
____exports.CollectibleType[____exports.CollectibleType.ANGRY_FLY] = "ANGRY_FLY"
____exports.CollectibleType.BLACK_HOLE = 512
____exports.CollectibleType[____exports.CollectibleType.BLACK_HOLE] = "BLACK_HOLE"
____exports.CollectibleType.BOZO = 513
____exports.CollectibleType[____exports.CollectibleType.BOZO] = "BOZO"
____exports.CollectibleType.BROKEN_MODEM = 514
____exports.CollectibleType[____exports.CollectibleType.BROKEN_MODEM] = "BROKEN_MODEM"
____exports.CollectibleType.MYSTERY_GIFT = 515
____exports.CollectibleType[____exports.CollectibleType.MYSTERY_GIFT] = "MYSTERY_GIFT"
____exports.CollectibleType.SPRINKLER = 516
____exports.CollectibleType[____exports.CollectibleType.SPRINKLER] = "SPRINKLER"
____exports.CollectibleType.FAST_BOMBS = 517
____exports.CollectibleType[____exports.CollectibleType.FAST_BOMBS] = "FAST_BOMBS"
____exports.CollectibleType.BUDDY_IN_A_BOX = 518
____exports.CollectibleType[____exports.CollectibleType.BUDDY_IN_A_BOX] = "BUDDY_IN_A_BOX"
____exports.CollectibleType.LIL_DELIRIUM = 519
____exports.CollectibleType[____exports.CollectibleType.LIL_DELIRIUM] = "LIL_DELIRIUM"
____exports.CollectibleType.JUMPER_CABLES = 520
____exports.CollectibleType[____exports.CollectibleType.JUMPER_CABLES] = "JUMPER_CABLES"
____exports.CollectibleType.COUPON = 521
____exports.CollectibleType[____exports.CollectibleType.COUPON] = "COUPON"
____exports.CollectibleType.TELEKINESIS = 522
____exports.CollectibleType[____exports.CollectibleType.TELEKINESIS] = "TELEKINESIS"
____exports.CollectibleType.MOVING_BOX = 523
____exports.CollectibleType[____exports.CollectibleType.MOVING_BOX] = "MOVING_BOX"
____exports.CollectibleType.TECHNOLOGY_ZERO = 524
____exports.CollectibleType[____exports.CollectibleType.TECHNOLOGY_ZERO] = "TECHNOLOGY_ZERO"
____exports.CollectibleType.LEPROSY = 525
____exports.CollectibleType[____exports.CollectibleType.LEPROSY] = "LEPROSY"
____exports.CollectibleType.SEVEN_SEALS = 526
____exports.CollectibleType[____exports.CollectibleType.SEVEN_SEALS] = "SEVEN_SEALS"
____exports.CollectibleType.MR_ME = 527
____exports.CollectibleType[____exports.CollectibleType.MR_ME] = "MR_ME"
____exports.CollectibleType.ANGELIC_PRISM = 528
____exports.CollectibleType[____exports.CollectibleType.ANGELIC_PRISM] = "ANGELIC_PRISM"
____exports.CollectibleType.POP = 529
____exports.CollectibleType[____exports.CollectibleType.POP] = "POP"
____exports.CollectibleType.DEATHS_LIST = 530
____exports.CollectibleType[____exports.CollectibleType.DEATHS_LIST] = "DEATHS_LIST"
____exports.CollectibleType.HAEMOLACRIA = 531
____exports.CollectibleType[____exports.CollectibleType.HAEMOLACRIA] = "HAEMOLACRIA"
____exports.CollectibleType.LACHRYPHAGY = 532
____exports.CollectibleType[____exports.CollectibleType.LACHRYPHAGY] = "LACHRYPHAGY"
____exports.CollectibleType.TRISAGION = 533
____exports.CollectibleType[____exports.CollectibleType.TRISAGION] = "TRISAGION"
____exports.CollectibleType.SCHOOLBAG = 534
____exports.CollectibleType[____exports.CollectibleType.SCHOOLBAG] = "SCHOOLBAG"
____exports.CollectibleType.BLANKET = 535
____exports.CollectibleType[____exports.CollectibleType.BLANKET] = "BLANKET"
____exports.CollectibleType.SACRIFICIAL_ALTAR = 536
____exports.CollectibleType[____exports.CollectibleType.SACRIFICIAL_ALTAR] = "SACRIFICIAL_ALTAR"
____exports.CollectibleType.LIL_SPEWER = 537
____exports.CollectibleType[____exports.CollectibleType.LIL_SPEWER] = "LIL_SPEWER"
____exports.CollectibleType.MARBLES = 538
____exports.CollectibleType[____exports.CollectibleType.MARBLES] = "MARBLES"
____exports.CollectibleType.MYSTERY_EGG = 539
____exports.CollectibleType[____exports.CollectibleType.MYSTERY_EGG] = "MYSTERY_EGG"
____exports.CollectibleType.FLAT_STONE = 540
____exports.CollectibleType[____exports.CollectibleType.FLAT_STONE] = "FLAT_STONE"
____exports.CollectibleType.MARROW = 541
____exports.CollectibleType[____exports.CollectibleType.MARROW] = "MARROW"
____exports.CollectibleType.SLIPPED_RIB = 542
____exports.CollectibleType[____exports.CollectibleType.SLIPPED_RIB] = "SLIPPED_RIB"
____exports.CollectibleType.HALLOWED_GROUND = 543
____exports.CollectibleType[____exports.CollectibleType.HALLOWED_GROUND] = "HALLOWED_GROUND"
____exports.CollectibleType.POINTY_RIB = 544
____exports.CollectibleType[____exports.CollectibleType.POINTY_RIB] = "POINTY_RIB"
____exports.CollectibleType.BOOK_OF_THE_DEAD = 545
____exports.CollectibleType[____exports.CollectibleType.BOOK_OF_THE_DEAD] = "BOOK_OF_THE_DEAD"
____exports.CollectibleType.DADS_RING = 546
____exports.CollectibleType[____exports.CollectibleType.DADS_RING] = "DADS_RING"
____exports.CollectibleType.DIVORCE_PAPERS = 547
____exports.CollectibleType[____exports.CollectibleType.DIVORCE_PAPERS] = "DIVORCE_PAPERS"
____exports.CollectibleType.JAW_BONE = 548
____exports.CollectibleType[____exports.CollectibleType.JAW_BONE] = "JAW_BONE"
____exports.CollectibleType.BRITTLE_BONES = 549
____exports.CollectibleType[____exports.CollectibleType.BRITTLE_BONES] = "BRITTLE_BONES"
____exports.CollectibleType.BROKEN_SHOVEL_1 = 550
____exports.CollectibleType[____exports.CollectibleType.BROKEN_SHOVEL_1] = "BROKEN_SHOVEL_1"
____exports.CollectibleType.BROKEN_SHOVEL_2 = 551
____exports.CollectibleType[____exports.CollectibleType.BROKEN_SHOVEL_2] = "BROKEN_SHOVEL_2"
____exports.CollectibleType.MOMS_SHOVEL = 552
____exports.CollectibleType[____exports.CollectibleType.MOMS_SHOVEL] = "MOMS_SHOVEL"
____exports.CollectibleType.MUCORMYCOSIS = 553
____exports.CollectibleType[____exports.CollectibleType.MUCORMYCOSIS] = "MUCORMYCOSIS"
____exports.CollectibleType.TWO_SPOOKY = 554
____exports.CollectibleType[____exports.CollectibleType.TWO_SPOOKY] = "TWO_SPOOKY"
____exports.CollectibleType.GOLDEN_RAZOR = 555
____exports.CollectibleType[____exports.CollectibleType.GOLDEN_RAZOR] = "GOLDEN_RAZOR"
____exports.CollectibleType.SULFUR = 556
____exports.CollectibleType[____exports.CollectibleType.SULFUR] = "SULFUR"
____exports.CollectibleType.FORTUNE_COOKIE = 557
____exports.CollectibleType[____exports.CollectibleType.FORTUNE_COOKIE] = "FORTUNE_COOKIE"
____exports.CollectibleType.EYE_SORE = 558
____exports.CollectibleType[____exports.CollectibleType.EYE_SORE] = "EYE_SORE"
____exports.CollectibleType.ONE_HUNDRED_TWENTY_VOLT = 559
____exports.CollectibleType[____exports.CollectibleType.ONE_HUNDRED_TWENTY_VOLT] = "ONE_HUNDRED_TWENTY_VOLT"
____exports.CollectibleType.IT_HURTS = 560
____exports.CollectibleType[____exports.CollectibleType.IT_HURTS] = "IT_HURTS"
____exports.CollectibleType.ALMOND_MILK = 561
____exports.CollectibleType[____exports.CollectibleType.ALMOND_MILK] = "ALMOND_MILK"
____exports.CollectibleType.ROCK_BOTTOM = 562
____exports.CollectibleType[____exports.CollectibleType.ROCK_BOTTOM] = "ROCK_BOTTOM"
____exports.CollectibleType.NANCY_BOMBS = 563
____exports.CollectibleType[____exports.CollectibleType.NANCY_BOMBS] = "NANCY_BOMBS"
____exports.CollectibleType.BAR_OF_SOAP = 564
____exports.CollectibleType[____exports.CollectibleType.BAR_OF_SOAP] = "BAR_OF_SOAP"
____exports.CollectibleType.BLOOD_PUPPY = 565
____exports.CollectibleType[____exports.CollectibleType.BLOOD_PUPPY] = "BLOOD_PUPPY"
____exports.CollectibleType.DREAM_CATCHER = 566
____exports.CollectibleType[____exports.CollectibleType.DREAM_CATCHER] = "DREAM_CATCHER"
____exports.CollectibleType.PASCHAL_CANDLE = 567
____exports.CollectibleType[____exports.CollectibleType.PASCHAL_CANDLE] = "PASCHAL_CANDLE"
____exports.CollectibleType.DIVINE_INTERVENTION = 568
____exports.CollectibleType[____exports.CollectibleType.DIVINE_INTERVENTION] = "DIVINE_INTERVENTION"
____exports.CollectibleType.BLOOD_OATH = 569
____exports.CollectibleType[____exports.CollectibleType.BLOOD_OATH] = "BLOOD_OATH"
____exports.CollectibleType.PLAYDOUGH_COOKIE = 570
____exports.CollectibleType[____exports.CollectibleType.PLAYDOUGH_COOKIE] = "PLAYDOUGH_COOKIE"
____exports.CollectibleType.ORPHAN_SOCKS = 571
____exports.CollectibleType[____exports.CollectibleType.ORPHAN_SOCKS] = "ORPHAN_SOCKS"
____exports.CollectibleType.EYE_OF_THE_OCCULT = 572
____exports.CollectibleType[____exports.CollectibleType.EYE_OF_THE_OCCULT] = "EYE_OF_THE_OCCULT"
____exports.CollectibleType.IMMACULATE_HEART = 573
____exports.CollectibleType[____exports.CollectibleType.IMMACULATE_HEART] = "IMMACULATE_HEART"
____exports.CollectibleType.MONSTRANCE = 574
____exports.CollectibleType[____exports.CollectibleType.MONSTRANCE] = "MONSTRANCE"
____exports.CollectibleType.INTRUDER = 575
____exports.CollectibleType[____exports.CollectibleType.INTRUDER] = "INTRUDER"
____exports.CollectibleType.DIRTY_MIND = 576
____exports.CollectibleType[____exports.CollectibleType.DIRTY_MIND] = "DIRTY_MIND"
____exports.CollectibleType.DAMOCLES = 577
____exports.CollectibleType[____exports.CollectibleType.DAMOCLES] = "DAMOCLES"
____exports.CollectibleType.FREE_LEMONADE = 578
____exports.CollectibleType[____exports.CollectibleType.FREE_LEMONADE] = "FREE_LEMONADE"
____exports.CollectibleType.SPIRIT_SWORD = 579
____exports.CollectibleType[____exports.CollectibleType.SPIRIT_SWORD] = "SPIRIT_SWORD"
____exports.CollectibleType.RED_KEY = 580
____exports.CollectibleType[____exports.CollectibleType.RED_KEY] = "RED_KEY"
____exports.CollectibleType.PSY_FLY = 581
____exports.CollectibleType[____exports.CollectibleType.PSY_FLY] = "PSY_FLY"
____exports.CollectibleType.WAVY_CAP = 582
____exports.CollectibleType[____exports.CollectibleType.WAVY_CAP] = "WAVY_CAP"
____exports.CollectibleType.ROCKET_IN_A_JAR = 583
____exports.CollectibleType[____exports.CollectibleType.ROCKET_IN_A_JAR] = "ROCKET_IN_A_JAR"
____exports.CollectibleType.BOOK_OF_VIRTUES = 584
____exports.CollectibleType[____exports.CollectibleType.BOOK_OF_VIRTUES] = "BOOK_OF_VIRTUES"
____exports.CollectibleType.ALABASTER_BOX = 585
____exports.CollectibleType[____exports.CollectibleType.ALABASTER_BOX] = "ALABASTER_BOX"
____exports.CollectibleType.STAIRWAY = 586
____exports.CollectibleType[____exports.CollectibleType.STAIRWAY] = "STAIRWAY"
____exports.CollectibleType.SOL = 588
____exports.CollectibleType[____exports.CollectibleType.SOL] = "SOL"
____exports.CollectibleType.LUNA = 589
____exports.CollectibleType[____exports.CollectibleType.LUNA] = "LUNA"
____exports.CollectibleType.MERCURIUS = 590
____exports.CollectibleType[____exports.CollectibleType.MERCURIUS] = "MERCURIUS"
____exports.CollectibleType.VENUS = 591
____exports.CollectibleType[____exports.CollectibleType.VENUS] = "VENUS"
____exports.CollectibleType.TERRA = 592
____exports.CollectibleType[____exports.CollectibleType.TERRA] = "TERRA"
____exports.CollectibleType.MARS = 593
____exports.CollectibleType[____exports.CollectibleType.MARS] = "MARS"
____exports.CollectibleType.JUPITER = 594
____exports.CollectibleType[____exports.CollectibleType.JUPITER] = "JUPITER"
____exports.CollectibleType.SATURNUS = 595
____exports.CollectibleType[____exports.CollectibleType.SATURNUS] = "SATURNUS"
____exports.CollectibleType.URANUS = 596
____exports.CollectibleType[____exports.CollectibleType.URANUS] = "URANUS"
____exports.CollectibleType.NEPTUNUS = 597
____exports.CollectibleType[____exports.CollectibleType.NEPTUNUS] = "NEPTUNUS"
____exports.CollectibleType.PLUTO = 598
____exports.CollectibleType[____exports.CollectibleType.PLUTO] = "PLUTO"
____exports.CollectibleType.VOODOO_HEAD = 599
____exports.CollectibleType[____exports.CollectibleType.VOODOO_HEAD] = "VOODOO_HEAD"
____exports.CollectibleType.EYE_DROPS = 600
____exports.CollectibleType[____exports.CollectibleType.EYE_DROPS] = "EYE_DROPS"
____exports.CollectibleType.ACT_OF_CONTRITION = 601
____exports.CollectibleType[____exports.CollectibleType.ACT_OF_CONTRITION] = "ACT_OF_CONTRITION"
____exports.CollectibleType.MEMBER_CARD = 602
____exports.CollectibleType[____exports.CollectibleType.MEMBER_CARD] = "MEMBER_CARD"
____exports.CollectibleType.BATTERY_PACK = 603
____exports.CollectibleType[____exports.CollectibleType.BATTERY_PACK] = "BATTERY_PACK"
____exports.CollectibleType.MOMS_BRACELET = 604
____exports.CollectibleType[____exports.CollectibleType.MOMS_BRACELET] = "MOMS_BRACELET"
____exports.CollectibleType.SCOOPER = 605
____exports.CollectibleType[____exports.CollectibleType.SCOOPER] = "SCOOPER"
____exports.CollectibleType.OCULAR_RIFT = 606
____exports.CollectibleType[____exports.CollectibleType.OCULAR_RIFT] = "OCULAR_RIFT"
____exports.CollectibleType.BOILED_BABY = 607
____exports.CollectibleType[____exports.CollectibleType.BOILED_BABY] = "BOILED_BABY"
____exports.CollectibleType.FREEZER_BABY = 608
____exports.CollectibleType[____exports.CollectibleType.FREEZER_BABY] = "FREEZER_BABY"
____exports.CollectibleType.ETERNAL_D6 = 609
____exports.CollectibleType[____exports.CollectibleType.ETERNAL_D6] = "ETERNAL_D6"
____exports.CollectibleType.BIRD_CAGE = 610
____exports.CollectibleType[____exports.CollectibleType.BIRD_CAGE] = "BIRD_CAGE"
____exports.CollectibleType.LARYNX = 611
____exports.CollectibleType[____exports.CollectibleType.LARYNX] = "LARYNX"
____exports.CollectibleType.LOST_SOUL = 612
____exports.CollectibleType[____exports.CollectibleType.LOST_SOUL] = "LOST_SOUL"
____exports.CollectibleType.BLOOD_BOMBS = 614
____exports.CollectibleType[____exports.CollectibleType.BLOOD_BOMBS] = "BLOOD_BOMBS"
____exports.CollectibleType.LIL_DUMPY = 615
____exports.CollectibleType[____exports.CollectibleType.LIL_DUMPY] = "LIL_DUMPY"
____exports.CollectibleType.BIRDS_EYE = 616
____exports.CollectibleType[____exports.CollectibleType.BIRDS_EYE] = "BIRDS_EYE"
____exports.CollectibleType.LODESTONE = 617
____exports.CollectibleType[____exports.CollectibleType.LODESTONE] = "LODESTONE"
____exports.CollectibleType.ROTTEN_TOMATO = 618
____exports.CollectibleType[____exports.CollectibleType.ROTTEN_TOMATO] = "ROTTEN_TOMATO"
____exports.CollectibleType.BIRTHRIGHT = 619
____exports.CollectibleType[____exports.CollectibleType.BIRTHRIGHT] = "BIRTHRIGHT"
____exports.CollectibleType.RED_STEW = 621
____exports.CollectibleType[____exports.CollectibleType.RED_STEW] = "RED_STEW"
____exports.CollectibleType.GENESIS = 622
____exports.CollectibleType[____exports.CollectibleType.GENESIS] = "GENESIS"
____exports.CollectibleType.SHARP_KEY = 623
____exports.CollectibleType[____exports.CollectibleType.SHARP_KEY] = "SHARP_KEY"
____exports.CollectibleType.BOOSTER_PACK = 624
____exports.CollectibleType[____exports.CollectibleType.BOOSTER_PACK] = "BOOSTER_PACK"
____exports.CollectibleType.MEGA_MUSH = 625
____exports.CollectibleType[____exports.CollectibleType.MEGA_MUSH] = "MEGA_MUSH"
____exports.CollectibleType.KNIFE_PIECE_1 = 626
____exports.CollectibleType[____exports.CollectibleType.KNIFE_PIECE_1] = "KNIFE_PIECE_1"
____exports.CollectibleType.KNIFE_PIECE_2 = 627
____exports.CollectibleType[____exports.CollectibleType.KNIFE_PIECE_2] = "KNIFE_PIECE_2"
____exports.CollectibleType.DEATH_CERTIFICATE = 628
____exports.CollectibleType[____exports.CollectibleType.DEATH_CERTIFICATE] = "DEATH_CERTIFICATE"
____exports.CollectibleType.BOT_FLY = 629
____exports.CollectibleType[____exports.CollectibleType.BOT_FLY] = "BOT_FLY"
____exports.CollectibleType.MEAT_CLEAVER = 631
____exports.CollectibleType[____exports.CollectibleType.MEAT_CLEAVER] = "MEAT_CLEAVER"
____exports.CollectibleType.EVIL_CHARM = 632
____exports.CollectibleType[____exports.CollectibleType.EVIL_CHARM] = "EVIL_CHARM"
____exports.CollectibleType.DOGMA = 633
____exports.CollectibleType[____exports.CollectibleType.DOGMA] = "DOGMA"
____exports.CollectibleType.PURGATORY = 634
____exports.CollectibleType[____exports.CollectibleType.PURGATORY] = "PURGATORY"
____exports.CollectibleType.STITCHES = 635
____exports.CollectibleType[____exports.CollectibleType.STITCHES] = "STITCHES"
____exports.CollectibleType.R_KEY = 636
____exports.CollectibleType[____exports.CollectibleType.R_KEY] = "R_KEY"
____exports.CollectibleType.KNOCKOUT_DROPS = 637
____exports.CollectibleType[____exports.CollectibleType.KNOCKOUT_DROPS] = "KNOCKOUT_DROPS"
____exports.CollectibleType.ERASER = 638
____exports.CollectibleType[____exports.CollectibleType.ERASER] = "ERASER"
____exports.CollectibleType.YUCK_HEART = 639
____exports.CollectibleType[____exports.CollectibleType.YUCK_HEART] = "YUCK_HEART"
____exports.CollectibleType.URN_OF_SOULS = 640
____exports.CollectibleType[____exports.CollectibleType.URN_OF_SOULS] = "URN_OF_SOULS"
____exports.CollectibleType.AKELDAMA = 641
____exports.CollectibleType[____exports.CollectibleType.AKELDAMA] = "AKELDAMA"
____exports.CollectibleType.MAGIC_SKIN = 642
____exports.CollectibleType[____exports.CollectibleType.MAGIC_SKIN] = "MAGIC_SKIN"
____exports.CollectibleType.REVELATION = 643
____exports.CollectibleType[____exports.CollectibleType.REVELATION] = "REVELATION"
____exports.CollectibleType.CONSOLATION_PRIZE = 644
____exports.CollectibleType[____exports.CollectibleType.CONSOLATION_PRIZE] = "CONSOLATION_PRIZE"
____exports.CollectibleType.TINYTOMA = 645
____exports.CollectibleType[____exports.CollectibleType.TINYTOMA] = "TINYTOMA"
____exports.CollectibleType.BRIMSTONE_BOMBS = 646
____exports.CollectibleType[____exports.CollectibleType.BRIMSTONE_BOMBS] = "BRIMSTONE_BOMBS"
____exports.CollectibleType.FOUR_FIVE_VOLT = 647
____exports.CollectibleType[____exports.CollectibleType.FOUR_FIVE_VOLT] = "FOUR_FIVE_VOLT"
____exports.CollectibleType.FRUITY_PLUM = 649
____exports.CollectibleType[____exports.CollectibleType.FRUITY_PLUM] = "FRUITY_PLUM"
____exports.CollectibleType.PLUM_FLUTE = 650
____exports.CollectibleType[____exports.CollectibleType.PLUM_FLUTE] = "PLUM_FLUTE"
____exports.CollectibleType.STAR_OF_BETHLEHEM = 651
____exports.CollectibleType[____exports.CollectibleType.STAR_OF_BETHLEHEM] = "STAR_OF_BETHLEHEM"
____exports.CollectibleType.CUBE_BABY = 652
____exports.CollectibleType[____exports.CollectibleType.CUBE_BABY] = "CUBE_BABY"
____exports.CollectibleType.VADE_RETRO = 653
____exports.CollectibleType[____exports.CollectibleType.VADE_RETRO] = "VADE_RETRO"
____exports.CollectibleType.FALSE_PHD = 654
____exports.CollectibleType[____exports.CollectibleType.FALSE_PHD] = "FALSE_PHD"
____exports.CollectibleType.SPIN_TO_WIN = 655
____exports.CollectibleType[____exports.CollectibleType.SPIN_TO_WIN] = "SPIN_TO_WIN"
____exports.CollectibleType.DAMOCLES_PASSIVE = 656
____exports.CollectibleType[____exports.CollectibleType.DAMOCLES_PASSIVE] = "DAMOCLES_PASSIVE"
____exports.CollectibleType.VASCULITIS = 657
____exports.CollectibleType[____exports.CollectibleType.VASCULITIS] = "VASCULITIS"
____exports.CollectibleType.GIANT_CELL = 658
____exports.CollectibleType[____exports.CollectibleType.GIANT_CELL] = "GIANT_CELL"
____exports.CollectibleType.TROPICAMIDE = 659
____exports.CollectibleType[____exports.CollectibleType.TROPICAMIDE] = "TROPICAMIDE"
____exports.CollectibleType.CARD_READING = 660
____exports.CollectibleType[____exports.CollectibleType.CARD_READING] = "CARD_READING"
____exports.CollectibleType.QUINTS = 661
____exports.CollectibleType[____exports.CollectibleType.QUINTS] = "QUINTS"
____exports.CollectibleType.TOOTH_AND_NAIL = 663
____exports.CollectibleType[____exports.CollectibleType.TOOTH_AND_NAIL] = "TOOTH_AND_NAIL"
____exports.CollectibleType.BINGE_EATER = 664
____exports.CollectibleType[____exports.CollectibleType.BINGE_EATER] = "BINGE_EATER"
____exports.CollectibleType.GUPPYS_EYE = 665
____exports.CollectibleType[____exports.CollectibleType.GUPPYS_EYE] = "GUPPYS_EYE"
____exports.CollectibleType.STRAWMAN = 667
____exports.CollectibleType[____exports.CollectibleType.STRAWMAN] = "STRAWMAN"
____exports.CollectibleType.DADS_NOTE = 668
____exports.CollectibleType[____exports.CollectibleType.DADS_NOTE] = "DADS_NOTE"
____exports.CollectibleType.SAUSAGE = 669
____exports.CollectibleType[____exports.CollectibleType.SAUSAGE] = "SAUSAGE"
____exports.CollectibleType.OPTIONS = 670
____exports.CollectibleType[____exports.CollectibleType.OPTIONS] = "OPTIONS"
____exports.CollectibleType.CANDY_HEART = 671
____exports.CollectibleType[____exports.CollectibleType.CANDY_HEART] = "CANDY_HEART"
____exports.CollectibleType.POUND_OF_FLESH = 672
____exports.CollectibleType[____exports.CollectibleType.POUND_OF_FLESH] = "POUND_OF_FLESH"
____exports.CollectibleType.REDEMPTION = 673
____exports.CollectibleType[____exports.CollectibleType.REDEMPTION] = "REDEMPTION"
____exports.CollectibleType.SPIRIT_SHACKLES = 674
____exports.CollectibleType[____exports.CollectibleType.SPIRIT_SHACKLES] = "SPIRIT_SHACKLES"
____exports.CollectibleType.CRACKED_ORB = 675
____exports.CollectibleType[____exports.CollectibleType.CRACKED_ORB] = "CRACKED_ORB"
____exports.CollectibleType.EMPTY_HEART = 676
____exports.CollectibleType[____exports.CollectibleType.EMPTY_HEART] = "EMPTY_HEART"
____exports.CollectibleType.ASTRAL_PROJECTION = 677
____exports.CollectibleType[____exports.CollectibleType.ASTRAL_PROJECTION] = "ASTRAL_PROJECTION"
____exports.CollectibleType.C_SECTION = 678
____exports.CollectibleType[____exports.CollectibleType.C_SECTION] = "C_SECTION"
____exports.CollectibleType.LIL_ABADDON = 679
____exports.CollectibleType[____exports.CollectibleType.LIL_ABADDON] = "LIL_ABADDON"
____exports.CollectibleType.MONTEZUMAS_REVENGE = 680
____exports.CollectibleType[____exports.CollectibleType.MONTEZUMAS_REVENGE] = "MONTEZUMAS_REVENGE"
____exports.CollectibleType.LIL_PORTAL = 681
____exports.CollectibleType[____exports.CollectibleType.LIL_PORTAL] = "LIL_PORTAL"
____exports.CollectibleType.WORM_FRIEND = 682
____exports.CollectibleType[____exports.CollectibleType.WORM_FRIEND] = "WORM_FRIEND"
____exports.CollectibleType.BONE_SPURS = 683
____exports.CollectibleType[____exports.CollectibleType.BONE_SPURS] = "BONE_SPURS"
____exports.CollectibleType.HUNGRY_SOUL = 684
____exports.CollectibleType[____exports.CollectibleType.HUNGRY_SOUL] = "HUNGRY_SOUL"
____exports.CollectibleType.JAR_OF_WISPS = 685
____exports.CollectibleType[____exports.CollectibleType.JAR_OF_WISPS] = "JAR_OF_WISPS"
____exports.CollectibleType.SOUL_LOCKET = 686
____exports.CollectibleType[____exports.CollectibleType.SOUL_LOCKET] = "SOUL_LOCKET"
____exports.CollectibleType.FRIEND_FINDER = 687
____exports.CollectibleType[____exports.CollectibleType.FRIEND_FINDER] = "FRIEND_FINDER"
____exports.CollectibleType.INNER_CHILD = 688
____exports.CollectibleType[____exports.CollectibleType.INNER_CHILD] = "INNER_CHILD"
____exports.CollectibleType.GLITCHED_CROWN = 689
____exports.CollectibleType[____exports.CollectibleType.GLITCHED_CROWN] = "GLITCHED_CROWN"
____exports.CollectibleType.JELLY_BELLY = 690
____exports.CollectibleType[____exports.CollectibleType.JELLY_BELLY] = "JELLY_BELLY"
____exports.CollectibleType.SACRED_ORB = 691
____exports.CollectibleType[____exports.CollectibleType.SACRED_ORB] = "SACRED_ORB"
____exports.CollectibleType.SANGUINE_BOND = 692
____exports.CollectibleType[____exports.CollectibleType.SANGUINE_BOND] = "SANGUINE_BOND"
____exports.CollectibleType.SWARM = 693
____exports.CollectibleType[____exports.CollectibleType.SWARM] = "SWARM"
____exports.CollectibleType.HEARTBREAK = 694
____exports.CollectibleType[____exports.CollectibleType.HEARTBREAK] = "HEARTBREAK"
____exports.CollectibleType.BLOODY_GUST = 695
____exports.CollectibleType[____exports.CollectibleType.BLOODY_GUST] = "BLOODY_GUST"
____exports.CollectibleType.SALVATION = 696
____exports.CollectibleType[____exports.CollectibleType.SALVATION] = "SALVATION"
____exports.CollectibleType.VANISHING_TWIN = 697
____exports.CollectibleType[____exports.CollectibleType.VANISHING_TWIN] = "VANISHING_TWIN"
____exports.CollectibleType.TWISTED_PAIR = 698
____exports.CollectibleType[____exports.CollectibleType.TWISTED_PAIR] = "TWISTED_PAIR"
____exports.CollectibleType.AZAZELS_RAGE = 699
____exports.CollectibleType[____exports.CollectibleType.AZAZELS_RAGE] = "AZAZELS_RAGE"
____exports.CollectibleType.ECHO_CHAMBER = 700
____exports.CollectibleType[____exports.CollectibleType.ECHO_CHAMBER] = "ECHO_CHAMBER"
____exports.CollectibleType.ISAACS_TOMB = 701
____exports.CollectibleType[____exports.CollectibleType.ISAACS_TOMB] = "ISAACS_TOMB"
____exports.CollectibleType.VENGEFUL_SPIRIT = 702
____exports.CollectibleType[____exports.CollectibleType.VENGEFUL_SPIRIT] = "VENGEFUL_SPIRIT"
____exports.CollectibleType.ESAU_JR = 703
____exports.CollectibleType[____exports.CollectibleType.ESAU_JR] = "ESAU_JR"
____exports.CollectibleType.BERSERK = 704
____exports.CollectibleType[____exports.CollectibleType.BERSERK] = "BERSERK"
____exports.CollectibleType.DARK_ARTS = 705
____exports.CollectibleType[____exports.CollectibleType.DARK_ARTS] = "DARK_ARTS"
____exports.CollectibleType.ABYSS = 706
____exports.CollectibleType[____exports.CollectibleType.ABYSS] = "ABYSS"
____exports.CollectibleType.SUPPER = 707
____exports.CollectibleType[____exports.CollectibleType.SUPPER] = "SUPPER"
____exports.CollectibleType.STAPLER = 708
____exports.CollectibleType[____exports.CollectibleType.STAPLER] = "STAPLER"
____exports.CollectibleType.SUPLEX = 709
____exports.CollectibleType[____exports.CollectibleType.SUPLEX] = "SUPLEX"
____exports.CollectibleType.BAG_OF_CRAFTING = 710
____exports.CollectibleType[____exports.CollectibleType.BAG_OF_CRAFTING] = "BAG_OF_CRAFTING"
____exports.CollectibleType.FLIP = 711
____exports.CollectibleType[____exports.CollectibleType.FLIP] = "FLIP"
____exports.CollectibleType.LEMEGETON = 712
____exports.CollectibleType[____exports.CollectibleType.LEMEGETON] = "LEMEGETON"
____exports.CollectibleType.SUMPTORIUM = 713
____exports.CollectibleType[____exports.CollectibleType.SUMPTORIUM] = "SUMPTORIUM"
____exports.CollectibleType.RECALL = 714
____exports.CollectibleType[____exports.CollectibleType.RECALL] = "RECALL"
____exports.CollectibleType.HOLD = 715
____exports.CollectibleType[____exports.CollectibleType.HOLD] = "HOLD"
____exports.CollectibleType.KEEPERS_SACK = 716
____exports.CollectibleType[____exports.CollectibleType.KEEPERS_SACK] = "KEEPERS_SACK"
____exports.CollectibleType.KEEPERS_KIN = 717
____exports.CollectibleType[____exports.CollectibleType.KEEPERS_KIN] = "KEEPERS_KIN"
____exports.CollectibleType.KEEPERS_BOX = 719
____exports.CollectibleType[____exports.CollectibleType.KEEPERS_BOX] = "KEEPERS_BOX"
____exports.CollectibleType.EVERYTHING_JAR = 720
____exports.CollectibleType[____exports.CollectibleType.EVERYTHING_JAR] = "EVERYTHING_JAR"
____exports.CollectibleType.TMTRAINER = 721
____exports.CollectibleType[____exports.CollectibleType.TMTRAINER] = "TMTRAINER"
____exports.CollectibleType.ANIMA_SOLA = 722
____exports.CollectibleType[____exports.CollectibleType.ANIMA_SOLA] = "ANIMA_SOLA"
____exports.CollectibleType.SPINDOWN_DICE = 723
____exports.CollectibleType[____exports.CollectibleType.SPINDOWN_DICE] = "SPINDOWN_DICE"
____exports.CollectibleType.HYPERCOAGULATION = 724
____exports.CollectibleType[____exports.CollectibleType.HYPERCOAGULATION] = "HYPERCOAGULATION"
____exports.CollectibleType.IBS = 725
____exports.CollectibleType[____exports.CollectibleType.IBS] = "IBS"
____exports.CollectibleType.HEMOPTYSIS = 726
____exports.CollectibleType[____exports.CollectibleType.HEMOPTYSIS] = "HEMOPTYSIS"
____exports.CollectibleType.GHOST_BOMBS = 727
____exports.CollectibleType[____exports.CollectibleType.GHOST_BOMBS] = "GHOST_BOMBS"
____exports.CollectibleType.GELLO = 728
____exports.CollectibleType[____exports.CollectibleType.GELLO] = "GELLO"
____exports.CollectibleType.DECAP_ATTACK = 729
____exports.CollectibleType[____exports.CollectibleType.DECAP_ATTACK] = "DECAP_ATTACK"
____exports.CollectibleType.GLASS_EYE = 730
____exports.CollectibleType[____exports.CollectibleType.GLASS_EYE] = "GLASS_EYE"
____exports.CollectibleType.STYE = 731
____exports.CollectibleType[____exports.CollectibleType.STYE] = "STYE"
____exports.CollectibleType.MOMS_RING = 732
____exports.CollectibleType[____exports.CollectibleType.MOMS_RING] = "MOMS_RING"
--- For `EntityType.PICKUP` (5), `PickupVariant.CARD` (300).
-- 
-- This is the sub-type of a card.
-- 
-- This enum was renamed from "Card" to be consistent with the `CollectibleType` and `TrinketType`
-- enums.
-- 
-- This enum is contiguous. (Every value is satisfied between 0 and 97, inclusive.)
____exports.CardType = {}
____exports.CardType.NULL = 0
____exports.CardType[____exports.CardType.NULL] = "NULL"
____exports.CardType.FOOL = 1
____exports.CardType[____exports.CardType.FOOL] = "FOOL"
____exports.CardType.MAGICIAN = 2
____exports.CardType[____exports.CardType.MAGICIAN] = "MAGICIAN"
____exports.CardType.HIGH_PRIESTESS = 3
____exports.CardType[____exports.CardType.HIGH_PRIESTESS] = "HIGH_PRIESTESS"
____exports.CardType.EMPRESS = 4
____exports.CardType[____exports.CardType.EMPRESS] = "EMPRESS"
____exports.CardType.EMPEROR = 5
____exports.CardType[____exports.CardType.EMPEROR] = "EMPEROR"
____exports.CardType.HIEROPHANT = 6
____exports.CardType[____exports.CardType.HIEROPHANT] = "HIEROPHANT"
____exports.CardType.LOVERS = 7
____exports.CardType[____exports.CardType.LOVERS] = "LOVERS"
____exports.CardType.CHARIOT = 8
____exports.CardType[____exports.CardType.CHARIOT] = "CHARIOT"
____exports.CardType.JUSTICE = 9
____exports.CardType[____exports.CardType.JUSTICE] = "JUSTICE"
____exports.CardType.HERMIT = 10
____exports.CardType[____exports.CardType.HERMIT] = "HERMIT"
____exports.CardType.WHEEL_OF_FORTUNE = 11
____exports.CardType[____exports.CardType.WHEEL_OF_FORTUNE] = "WHEEL_OF_FORTUNE"
____exports.CardType.STRENGTH = 12
____exports.CardType[____exports.CardType.STRENGTH] = "STRENGTH"
____exports.CardType.HANGED_MAN = 13
____exports.CardType[____exports.CardType.HANGED_MAN] = "HANGED_MAN"
____exports.CardType.DEATH = 14
____exports.CardType[____exports.CardType.DEATH] = "DEATH"
____exports.CardType.TEMPERANCE = 15
____exports.CardType[____exports.CardType.TEMPERANCE] = "TEMPERANCE"
____exports.CardType.DEVIL = 16
____exports.CardType[____exports.CardType.DEVIL] = "DEVIL"
____exports.CardType.TOWER = 17
____exports.CardType[____exports.CardType.TOWER] = "TOWER"
____exports.CardType.STARS = 18
____exports.CardType[____exports.CardType.STARS] = "STARS"
____exports.CardType.MOON = 19
____exports.CardType[____exports.CardType.MOON] = "MOON"
____exports.CardType.SUN = 20
____exports.CardType[____exports.CardType.SUN] = "SUN"
____exports.CardType.JUDGEMENT = 21
____exports.CardType[____exports.CardType.JUDGEMENT] = "JUDGEMENT"
____exports.CardType.WORLD = 22
____exports.CardType[____exports.CardType.WORLD] = "WORLD"
____exports.CardType.TWO_OF_CLUBS = 23
____exports.CardType[____exports.CardType.TWO_OF_CLUBS] = "TWO_OF_CLUBS"
____exports.CardType.TWO_OF_DIAMONDS = 24
____exports.CardType[____exports.CardType.TWO_OF_DIAMONDS] = "TWO_OF_DIAMONDS"
____exports.CardType.TWO_OF_SPADES = 25
____exports.CardType[____exports.CardType.TWO_OF_SPADES] = "TWO_OF_SPADES"
____exports.CardType.TWO_OF_HEARTS = 26
____exports.CardType[____exports.CardType.TWO_OF_HEARTS] = "TWO_OF_HEARTS"
____exports.CardType.ACE_OF_CLUBS = 27
____exports.CardType[____exports.CardType.ACE_OF_CLUBS] = "ACE_OF_CLUBS"
____exports.CardType.ACE_OF_DIAMONDS = 28
____exports.CardType[____exports.CardType.ACE_OF_DIAMONDS] = "ACE_OF_DIAMONDS"
____exports.CardType.ACE_OF_SPADES = 29
____exports.CardType[____exports.CardType.ACE_OF_SPADES] = "ACE_OF_SPADES"
____exports.CardType.ACE_OF_HEARTS = 30
____exports.CardType[____exports.CardType.ACE_OF_HEARTS] = "ACE_OF_HEARTS"
____exports.CardType.JOKER = 31
____exports.CardType[____exports.CardType.JOKER] = "JOKER"
____exports.CardType.RUNE_HAGALAZ = 32
____exports.CardType[____exports.CardType.RUNE_HAGALAZ] = "RUNE_HAGALAZ"
____exports.CardType.RUNE_JERA = 33
____exports.CardType[____exports.CardType.RUNE_JERA] = "RUNE_JERA"
____exports.CardType.RUNE_EHWAZ = 34
____exports.CardType[____exports.CardType.RUNE_EHWAZ] = "RUNE_EHWAZ"
____exports.CardType.RUNE_DAGAZ = 35
____exports.CardType[____exports.CardType.RUNE_DAGAZ] = "RUNE_DAGAZ"
____exports.CardType.RUNE_ANSUZ = 36
____exports.CardType[____exports.CardType.RUNE_ANSUZ] = "RUNE_ANSUZ"
____exports.CardType.RUNE_PERTHRO = 37
____exports.CardType[____exports.CardType.RUNE_PERTHRO] = "RUNE_PERTHRO"
____exports.CardType.RUNE_BERKANO = 38
____exports.CardType[____exports.CardType.RUNE_BERKANO] = "RUNE_BERKANO"
____exports.CardType.RUNE_ALGIZ = 39
____exports.CardType[____exports.CardType.RUNE_ALGIZ] = "RUNE_ALGIZ"
____exports.CardType.RUNE_BLANK = 40
____exports.CardType[____exports.CardType.RUNE_BLANK] = "RUNE_BLANK"
____exports.CardType.RUNE_BLACK = 41
____exports.CardType[____exports.CardType.RUNE_BLACK] = "RUNE_BLACK"
____exports.CardType.CHAOS = 42
____exports.CardType[____exports.CardType.CHAOS] = "CHAOS"
____exports.CardType.CREDIT = 43
____exports.CardType[____exports.CardType.CREDIT] = "CREDIT"
____exports.CardType.RULES = 44
____exports.CardType[____exports.CardType.RULES] = "RULES"
____exports.CardType.AGAINST_HUMANITY = 45
____exports.CardType[____exports.CardType.AGAINST_HUMANITY] = "AGAINST_HUMANITY"
____exports.CardType.SUICIDE_KING = 46
____exports.CardType[____exports.CardType.SUICIDE_KING] = "SUICIDE_KING"
____exports.CardType.GET_OUT_OF_JAIL_FREE = 47
____exports.CardType[____exports.CardType.GET_OUT_OF_JAIL_FREE] = "GET_OUT_OF_JAIL_FREE"
____exports.CardType.QUESTION_MARK = 48
____exports.CardType[____exports.CardType.QUESTION_MARK] = "QUESTION_MARK"
____exports.CardType.DICE_SHARD = 49
____exports.CardType[____exports.CardType.DICE_SHARD] = "DICE_SHARD"
____exports.CardType.EMERGENCY_CONTACT = 50
____exports.CardType[____exports.CardType.EMERGENCY_CONTACT] = "EMERGENCY_CONTACT"
____exports.CardType.HOLY = 51
____exports.CardType[____exports.CardType.HOLY] = "HOLY"
____exports.CardType.HUGE_GROWTH = 52
____exports.CardType[____exports.CardType.HUGE_GROWTH] = "HUGE_GROWTH"
____exports.CardType.ANCIENT_RECALL = 53
____exports.CardType[____exports.CardType.ANCIENT_RECALL] = "ANCIENT_RECALL"
____exports.CardType.ERA_WALK = 54
____exports.CardType[____exports.CardType.ERA_WALK] = "ERA_WALK"
____exports.CardType.RUNE_SHARD = 55
____exports.CardType[____exports.CardType.RUNE_SHARD] = "RUNE_SHARD"
____exports.CardType.REVERSE_FOOL = 56
____exports.CardType[____exports.CardType.REVERSE_FOOL] = "REVERSE_FOOL"
____exports.CardType.REVERSE_MAGICIAN = 57
____exports.CardType[____exports.CardType.REVERSE_MAGICIAN] = "REVERSE_MAGICIAN"
____exports.CardType.REVERSE_HIGH_PRIESTESS = 58
____exports.CardType[____exports.CardType.REVERSE_HIGH_PRIESTESS] = "REVERSE_HIGH_PRIESTESS"
____exports.CardType.REVERSE_EMPRESS = 59
____exports.CardType[____exports.CardType.REVERSE_EMPRESS] = "REVERSE_EMPRESS"
____exports.CardType.REVERSE_EMPEROR = 60
____exports.CardType[____exports.CardType.REVERSE_EMPEROR] = "REVERSE_EMPEROR"
____exports.CardType.REVERSE_HIEROPHANT = 61
____exports.CardType[____exports.CardType.REVERSE_HIEROPHANT] = "REVERSE_HIEROPHANT"
____exports.CardType.REVERSE_LOVERS = 62
____exports.CardType[____exports.CardType.REVERSE_LOVERS] = "REVERSE_LOVERS"
____exports.CardType.REVERSE_CHARIOT = 63
____exports.CardType[____exports.CardType.REVERSE_CHARIOT] = "REVERSE_CHARIOT"
____exports.CardType.REVERSE_JUSTICE = 64
____exports.CardType[____exports.CardType.REVERSE_JUSTICE] = "REVERSE_JUSTICE"
____exports.CardType.REVERSE_HERMIT = 65
____exports.CardType[____exports.CardType.REVERSE_HERMIT] = "REVERSE_HERMIT"
____exports.CardType.REVERSE_WHEEL_OF_FORTUNE = 66
____exports.CardType[____exports.CardType.REVERSE_WHEEL_OF_FORTUNE] = "REVERSE_WHEEL_OF_FORTUNE"
____exports.CardType.REVERSE_STRENGTH = 67
____exports.CardType[____exports.CardType.REVERSE_STRENGTH] = "REVERSE_STRENGTH"
____exports.CardType.REVERSE_HANGED_MAN = 68
____exports.CardType[____exports.CardType.REVERSE_HANGED_MAN] = "REVERSE_HANGED_MAN"
____exports.CardType.REVERSE_DEATH = 69
____exports.CardType[____exports.CardType.REVERSE_DEATH] = "REVERSE_DEATH"
____exports.CardType.REVERSE_TEMPERANCE = 70
____exports.CardType[____exports.CardType.REVERSE_TEMPERANCE] = "REVERSE_TEMPERANCE"
____exports.CardType.REVERSE_DEVIL = 71
____exports.CardType[____exports.CardType.REVERSE_DEVIL] = "REVERSE_DEVIL"
____exports.CardType.REVERSE_TOWER = 72
____exports.CardType[____exports.CardType.REVERSE_TOWER] = "REVERSE_TOWER"
____exports.CardType.REVERSE_STARS = 73
____exports.CardType[____exports.CardType.REVERSE_STARS] = "REVERSE_STARS"
____exports.CardType.REVERSE_MOON = 74
____exports.CardType[____exports.CardType.REVERSE_MOON] = "REVERSE_MOON"
____exports.CardType.REVERSE_SUN = 75
____exports.CardType[____exports.CardType.REVERSE_SUN] = "REVERSE_SUN"
____exports.CardType.REVERSE_JUDGEMENT = 76
____exports.CardType[____exports.CardType.REVERSE_JUDGEMENT] = "REVERSE_JUDGEMENT"
____exports.CardType.REVERSE_WORLD = 77
____exports.CardType[____exports.CardType.REVERSE_WORLD] = "REVERSE_WORLD"
____exports.CardType.CRACKED_KEY = 78
____exports.CardType[____exports.CardType.CRACKED_KEY] = "CRACKED_KEY"
____exports.CardType.QUEEN_OF_HEARTS = 79
____exports.CardType[____exports.CardType.QUEEN_OF_HEARTS] = "QUEEN_OF_HEARTS"
____exports.CardType.WILD = 80
____exports.CardType[____exports.CardType.WILD] = "WILD"
____exports.CardType.SOUL_OF_ISAAC = 81
____exports.CardType[____exports.CardType.SOUL_OF_ISAAC] = "SOUL_OF_ISAAC"
____exports.CardType.SOUL_OF_MAGDALENE = 82
____exports.CardType[____exports.CardType.SOUL_OF_MAGDALENE] = "SOUL_OF_MAGDALENE"
____exports.CardType.SOUL_OF_CAIN = 83
____exports.CardType[____exports.CardType.SOUL_OF_CAIN] = "SOUL_OF_CAIN"
____exports.CardType.SOUL_OF_JUDAS = 84
____exports.CardType[____exports.CardType.SOUL_OF_JUDAS] = "SOUL_OF_JUDAS"
____exports.CardType.SOUL_OF_BLUE_BABY = 85
____exports.CardType[____exports.CardType.SOUL_OF_BLUE_BABY] = "SOUL_OF_BLUE_BABY"
____exports.CardType.SOUL_OF_EVE = 86
____exports.CardType[____exports.CardType.SOUL_OF_EVE] = "SOUL_OF_EVE"
____exports.CardType.SOUL_OF_SAMSON = 87
____exports.CardType[____exports.CardType.SOUL_OF_SAMSON] = "SOUL_OF_SAMSON"
____exports.CardType.SOUL_OF_AZAZEL = 88
____exports.CardType[____exports.CardType.SOUL_OF_AZAZEL] = "SOUL_OF_AZAZEL"
____exports.CardType.SOUL_OF_LAZARUS = 89
____exports.CardType[____exports.CardType.SOUL_OF_LAZARUS] = "SOUL_OF_LAZARUS"
____exports.CardType.SOUL_OF_EDEN = 90
____exports.CardType[____exports.CardType.SOUL_OF_EDEN] = "SOUL_OF_EDEN"
____exports.CardType.SOUL_OF_LOST = 91
____exports.CardType[____exports.CardType.SOUL_OF_LOST] = "SOUL_OF_LOST"
____exports.CardType.SOUL_OF_LILITH = 92
____exports.CardType[____exports.CardType.SOUL_OF_LILITH] = "SOUL_OF_LILITH"
____exports.CardType.SOUL_OF_KEEPER = 93
____exports.CardType[____exports.CardType.SOUL_OF_KEEPER] = "SOUL_OF_KEEPER"
____exports.CardType.SOUL_OF_APOLLYON = 94
____exports.CardType[____exports.CardType.SOUL_OF_APOLLYON] = "SOUL_OF_APOLLYON"
____exports.CardType.SOUL_OF_FORGOTTEN = 95
____exports.CardType[____exports.CardType.SOUL_OF_FORGOTTEN] = "SOUL_OF_FORGOTTEN"
____exports.CardType.SOUL_OF_BETHANY = 96
____exports.CardType[____exports.CardType.SOUL_OF_BETHANY] = "SOUL_OF_BETHANY"
____exports.CardType.SOUL_OF_JACOB_AND_ESAU = 97
____exports.CardType[____exports.CardType.SOUL_OF_JACOB_AND_ESAU] = "SOUL_OF_JACOB_AND_ESAU"
--- For `EntityType.PICKUP` (5), `PickupVariant.TRINKET` (350).
-- 
-- This is the sub-type of a trinket.
-- 
-- This enum is not contiguous. In other words, the enum ranges from `TrinketType.NULL` (0) to
-- `TrinketType.SIGIL_OF_BAPHOMET` (189), but there is no corresponding `TrinketType` with a value
-- of 47.
____exports.TrinketType = {}
____exports.TrinketType.NULL = 0
____exports.TrinketType[____exports.TrinketType.NULL] = "NULL"
____exports.TrinketType.SWALLOWED_PENNY = 1
____exports.TrinketType[____exports.TrinketType.SWALLOWED_PENNY] = "SWALLOWED_PENNY"
____exports.TrinketType.PETRIFIED_POOP = 2
____exports.TrinketType[____exports.TrinketType.PETRIFIED_POOP] = "PETRIFIED_POOP"
____exports.TrinketType.AAA_BATTERY = 3
____exports.TrinketType[____exports.TrinketType.AAA_BATTERY] = "AAA_BATTERY"
____exports.TrinketType.BROKEN_REMOTE = 4
____exports.TrinketType[____exports.TrinketType.BROKEN_REMOTE] = "BROKEN_REMOTE"
____exports.TrinketType.PURPLE_HEART = 5
____exports.TrinketType[____exports.TrinketType.PURPLE_HEART] = "PURPLE_HEART"
____exports.TrinketType.BROKEN_MAGNET = 6
____exports.TrinketType[____exports.TrinketType.BROKEN_MAGNET] = "BROKEN_MAGNET"
____exports.TrinketType.ROSARY_BEAD = 7
____exports.TrinketType[____exports.TrinketType.ROSARY_BEAD] = "ROSARY_BEAD"
____exports.TrinketType.CARTRIDGE = 8
____exports.TrinketType[____exports.TrinketType.CARTRIDGE] = "CARTRIDGE"
____exports.TrinketType.PULSE_WORM = 9
____exports.TrinketType[____exports.TrinketType.PULSE_WORM] = "PULSE_WORM"
____exports.TrinketType.WIGGLE_WORM = 10
____exports.TrinketType[____exports.TrinketType.WIGGLE_WORM] = "WIGGLE_WORM"
____exports.TrinketType.RING_WORM = 11
____exports.TrinketType[____exports.TrinketType.RING_WORM] = "RING_WORM"
____exports.TrinketType.FLAT_WORM = 12
____exports.TrinketType[____exports.TrinketType.FLAT_WORM] = "FLAT_WORM"
____exports.TrinketType.STORE_CREDIT = 13
____exports.TrinketType[____exports.TrinketType.STORE_CREDIT] = "STORE_CREDIT"
____exports.TrinketType.CALLUS = 14
____exports.TrinketType[____exports.TrinketType.CALLUS] = "CALLUS"
____exports.TrinketType.LUCKY_ROCK = 15
____exports.TrinketType[____exports.TrinketType.LUCKY_ROCK] = "LUCKY_ROCK"
____exports.TrinketType.MOMS_TOENAIL = 16
____exports.TrinketType[____exports.TrinketType.MOMS_TOENAIL] = "MOMS_TOENAIL"
____exports.TrinketType.BLACK_LIPSTICK = 17
____exports.TrinketType[____exports.TrinketType.BLACK_LIPSTICK] = "BLACK_LIPSTICK"
____exports.TrinketType.BIBLE_TRACT = 18
____exports.TrinketType[____exports.TrinketType.BIBLE_TRACT] = "BIBLE_TRACT"
____exports.TrinketType.PAPER_CLIP = 19
____exports.TrinketType[____exports.TrinketType.PAPER_CLIP] = "PAPER_CLIP"
____exports.TrinketType.MONKEY_PAW = 20
____exports.TrinketType[____exports.TrinketType.MONKEY_PAW] = "MONKEY_PAW"
____exports.TrinketType.MYSTERIOUS_PAPER = 21
____exports.TrinketType[____exports.TrinketType.MYSTERIOUS_PAPER] = "MYSTERIOUS_PAPER"
____exports.TrinketType.DAEMONS_TAIL = 22
____exports.TrinketType[____exports.TrinketType.DAEMONS_TAIL] = "DAEMONS_TAIL"
____exports.TrinketType.MISSING_POSTER = 23
____exports.TrinketType[____exports.TrinketType.MISSING_POSTER] = "MISSING_POSTER"
____exports.TrinketType.BUTT_PENNY = 24
____exports.TrinketType[____exports.TrinketType.BUTT_PENNY] = "BUTT_PENNY"
____exports.TrinketType.MYSTERIOUS_CANDY = 25
____exports.TrinketType[____exports.TrinketType.MYSTERIOUS_CANDY] = "MYSTERIOUS_CANDY"
____exports.TrinketType.HOOK_WORM = 26
____exports.TrinketType[____exports.TrinketType.HOOK_WORM] = "HOOK_WORM"
____exports.TrinketType.WHIP_WORM = 27
____exports.TrinketType[____exports.TrinketType.WHIP_WORM] = "WHIP_WORM"
____exports.TrinketType.BROKEN_ANKH = 28
____exports.TrinketType[____exports.TrinketType.BROKEN_ANKH] = "BROKEN_ANKH"
____exports.TrinketType.FISH_HEAD = 29
____exports.TrinketType[____exports.TrinketType.FISH_HEAD] = "FISH_HEAD"
____exports.TrinketType.PINKY_EYE = 30
____exports.TrinketType[____exports.TrinketType.PINKY_EYE] = "PINKY_EYE"
____exports.TrinketType.PUSH_PIN = 31
____exports.TrinketType[____exports.TrinketType.PUSH_PIN] = "PUSH_PIN"
____exports.TrinketType.LIBERTY_CAP = 32
____exports.TrinketType[____exports.TrinketType.LIBERTY_CAP] = "LIBERTY_CAP"
____exports.TrinketType.UMBILICAL_CORD = 33
____exports.TrinketType[____exports.TrinketType.UMBILICAL_CORD] = "UMBILICAL_CORD"
____exports.TrinketType.CHILDS_HEART = 34
____exports.TrinketType[____exports.TrinketType.CHILDS_HEART] = "CHILDS_HEART"
____exports.TrinketType.CURVED_HORN = 35
____exports.TrinketType[____exports.TrinketType.CURVED_HORN] = "CURVED_HORN"
____exports.TrinketType.RUSTED_KEY = 36
____exports.TrinketType[____exports.TrinketType.RUSTED_KEY] = "RUSTED_KEY"
____exports.TrinketType.GOAT_HOOF = 37
____exports.TrinketType[____exports.TrinketType.GOAT_HOOF] = "GOAT_HOOF"
____exports.TrinketType.MOMS_PEARL = 38
____exports.TrinketType[____exports.TrinketType.MOMS_PEARL] = "MOMS_PEARL"
____exports.TrinketType.CANCER = 39
____exports.TrinketType[____exports.TrinketType.CANCER] = "CANCER"
____exports.TrinketType.RED_PATCH = 40
____exports.TrinketType[____exports.TrinketType.RED_PATCH] = "RED_PATCH"
____exports.TrinketType.MATCH_STICK = 41
____exports.TrinketType[____exports.TrinketType.MATCH_STICK] = "MATCH_STICK"
____exports.TrinketType.LUCKY_TOE = 42
____exports.TrinketType[____exports.TrinketType.LUCKY_TOE] = "LUCKY_TOE"
____exports.TrinketType.CURSED_SKULL = 43
____exports.TrinketType[____exports.TrinketType.CURSED_SKULL] = "CURSED_SKULL"
____exports.TrinketType.SAFETY_CAP = 44
____exports.TrinketType[____exports.TrinketType.SAFETY_CAP] = "SAFETY_CAP"
____exports.TrinketType.ACE_OF_SPADES = 45
____exports.TrinketType[____exports.TrinketType.ACE_OF_SPADES] = "ACE_OF_SPADES"
____exports.TrinketType.ISAACS_FORK = 46
____exports.TrinketType[____exports.TrinketType.ISAACS_FORK] = "ISAACS_FORK"
____exports.TrinketType.MISSING_PAGE = 48
____exports.TrinketType[____exports.TrinketType.MISSING_PAGE] = "MISSING_PAGE"
____exports.TrinketType.BLOODY_PENNY = 49
____exports.TrinketType[____exports.TrinketType.BLOODY_PENNY] = "BLOODY_PENNY"
____exports.TrinketType.BURNT_PENNY = 50
____exports.TrinketType[____exports.TrinketType.BURNT_PENNY] = "BURNT_PENNY"
____exports.TrinketType.FLAT_PENNY = 51
____exports.TrinketType[____exports.TrinketType.FLAT_PENNY] = "FLAT_PENNY"
____exports.TrinketType.COUNTERFEIT_PENNY = 52
____exports.TrinketType[____exports.TrinketType.COUNTERFEIT_PENNY] = "COUNTERFEIT_PENNY"
____exports.TrinketType.TICK = 53
____exports.TrinketType[____exports.TrinketType.TICK] = "TICK"
____exports.TrinketType.ISAACS_HEAD = 54
____exports.TrinketType[____exports.TrinketType.ISAACS_HEAD] = "ISAACS_HEAD"
____exports.TrinketType.MAGGYS_FAITH = 55
____exports.TrinketType[____exports.TrinketType.MAGGYS_FAITH] = "MAGGYS_FAITH"
____exports.TrinketType.JUDAS_TONGUE = 56
____exports.TrinketType[____exports.TrinketType.JUDAS_TONGUE] = "JUDAS_TONGUE"
____exports.TrinketType.BLUE_BABYS_SOUL = 57
____exports.TrinketType[____exports.TrinketType.BLUE_BABYS_SOUL] = "BLUE_BABYS_SOUL"
____exports.TrinketType.SAMSONS_LOCK = 58
____exports.TrinketType[____exports.TrinketType.SAMSONS_LOCK] = "SAMSONS_LOCK"
____exports.TrinketType.CAINS_EYE = 59
____exports.TrinketType[____exports.TrinketType.CAINS_EYE] = "CAINS_EYE"
____exports.TrinketType.EVES_BIRD_FOOT = 60
____exports.TrinketType[____exports.TrinketType.EVES_BIRD_FOOT] = "EVES_BIRD_FOOT"
____exports.TrinketType.LEFT_HAND = 61
____exports.TrinketType[____exports.TrinketType.LEFT_HAND] = "LEFT_HAND"
____exports.TrinketType.SHINY_ROCK = 62
____exports.TrinketType[____exports.TrinketType.SHINY_ROCK] = "SHINY_ROCK"
____exports.TrinketType.SAFETY_SCISSORS = 63
____exports.TrinketType[____exports.TrinketType.SAFETY_SCISSORS] = "SAFETY_SCISSORS"
____exports.TrinketType.RAINBOW_WORM = 64
____exports.TrinketType[____exports.TrinketType.RAINBOW_WORM] = "RAINBOW_WORM"
____exports.TrinketType.TAPE_WORM = 65
____exports.TrinketType[____exports.TrinketType.TAPE_WORM] = "TAPE_WORM"
____exports.TrinketType.LAZY_WORM = 66
____exports.TrinketType[____exports.TrinketType.LAZY_WORM] = "LAZY_WORM"
____exports.TrinketType.CRACKED_DICE = 67
____exports.TrinketType[____exports.TrinketType.CRACKED_DICE] = "CRACKED_DICE"
____exports.TrinketType.SUPER_MAGNET = 68
____exports.TrinketType[____exports.TrinketType.SUPER_MAGNET] = "SUPER_MAGNET"
____exports.TrinketType.FADED_POLAROID = 69
____exports.TrinketType[____exports.TrinketType.FADED_POLAROID] = "FADED_POLAROID"
____exports.TrinketType.LOUSE = 70
____exports.TrinketType[____exports.TrinketType.LOUSE] = "LOUSE"
____exports.TrinketType.BOBS_BLADDER = 71
____exports.TrinketType[____exports.TrinketType.BOBS_BLADDER] = "BOBS_BLADDER"
____exports.TrinketType.WATCH_BATTERY = 72
____exports.TrinketType[____exports.TrinketType.WATCH_BATTERY] = "WATCH_BATTERY"
____exports.TrinketType.BLASTING_CAP = 73
____exports.TrinketType[____exports.TrinketType.BLASTING_CAP] = "BLASTING_CAP"
____exports.TrinketType.STUD_FINDER = 74
____exports.TrinketType[____exports.TrinketType.STUD_FINDER] = "STUD_FINDER"
____exports.TrinketType.ERROR = 75
____exports.TrinketType[____exports.TrinketType.ERROR] = "ERROR"
____exports.TrinketType.POKER_CHIP = 76
____exports.TrinketType[____exports.TrinketType.POKER_CHIP] = "POKER_CHIP"
____exports.TrinketType.BLISTER = 77
____exports.TrinketType[____exports.TrinketType.BLISTER] = "BLISTER"
____exports.TrinketType.SECOND_HAND = 78
____exports.TrinketType[____exports.TrinketType.SECOND_HAND] = "SECOND_HAND"
____exports.TrinketType.ENDLESS_NAMELESS = 79
____exports.TrinketType[____exports.TrinketType.ENDLESS_NAMELESS] = "ENDLESS_NAMELESS"
____exports.TrinketType.BLACK_FEATHER = 80
____exports.TrinketType[____exports.TrinketType.BLACK_FEATHER] = "BLACK_FEATHER"
____exports.TrinketType.BLIND_RAGE = 81
____exports.TrinketType[____exports.TrinketType.BLIND_RAGE] = "BLIND_RAGE"
____exports.TrinketType.GOLDEN_HORSE_SHOE = 82
____exports.TrinketType[____exports.TrinketType.GOLDEN_HORSE_SHOE] = "GOLDEN_HORSE_SHOE"
____exports.TrinketType.STORE_KEY = 83
____exports.TrinketType[____exports.TrinketType.STORE_KEY] = "STORE_KEY"
____exports.TrinketType.RIB_OF_GREED = 84
____exports.TrinketType[____exports.TrinketType.RIB_OF_GREED] = "RIB_OF_GREED"
____exports.TrinketType.KARMA = 85
____exports.TrinketType[____exports.TrinketType.KARMA] = "KARMA"
____exports.TrinketType.LIL_LARVA = 86
____exports.TrinketType[____exports.TrinketType.LIL_LARVA] = "LIL_LARVA"
____exports.TrinketType.MOMS_LOCKET = 87
____exports.TrinketType[____exports.TrinketType.MOMS_LOCKET] = "MOMS_LOCKET"
____exports.TrinketType.NO = 88
____exports.TrinketType[____exports.TrinketType.NO] = "NO"
____exports.TrinketType.CHILD_LEASH = 89
____exports.TrinketType[____exports.TrinketType.CHILD_LEASH] = "CHILD_LEASH"
____exports.TrinketType.BROWN_CAP = 90
____exports.TrinketType[____exports.TrinketType.BROWN_CAP] = "BROWN_CAP"
____exports.TrinketType.MECONIUM = 91
____exports.TrinketType[____exports.TrinketType.MECONIUM] = "MECONIUM"
____exports.TrinketType.CRACKED_CROWN = 92
____exports.TrinketType[____exports.TrinketType.CRACKED_CROWN] = "CRACKED_CROWN"
____exports.TrinketType.USED_DIAPER = 93
____exports.TrinketType[____exports.TrinketType.USED_DIAPER] = "USED_DIAPER"
____exports.TrinketType.FISH_TAIL = 94
____exports.TrinketType[____exports.TrinketType.FISH_TAIL] = "FISH_TAIL"
____exports.TrinketType.BLACK_TOOTH = 95
____exports.TrinketType[____exports.TrinketType.BLACK_TOOTH] = "BLACK_TOOTH"
____exports.TrinketType.OUROBOROS_WORM = 96
____exports.TrinketType[____exports.TrinketType.OUROBOROS_WORM] = "OUROBOROS_WORM"
____exports.TrinketType.TONSIL = 97
____exports.TrinketType[____exports.TrinketType.TONSIL] = "TONSIL"
____exports.TrinketType.NOSE_GOBLIN = 98
____exports.TrinketType[____exports.TrinketType.NOSE_GOBLIN] = "NOSE_GOBLIN"
____exports.TrinketType.SUPER_BALL = 99
____exports.TrinketType[____exports.TrinketType.SUPER_BALL] = "SUPER_BALL"
____exports.TrinketType.VIBRANT_BULB = 100
____exports.TrinketType[____exports.TrinketType.VIBRANT_BULB] = "VIBRANT_BULB"
____exports.TrinketType.DIM_BULB = 101
____exports.TrinketType[____exports.TrinketType.DIM_BULB] = "DIM_BULB"
____exports.TrinketType.FRAGMENTED_CARD = 102
____exports.TrinketType[____exports.TrinketType.FRAGMENTED_CARD] = "FRAGMENTED_CARD"
____exports.TrinketType.EQUALITY = 103
____exports.TrinketType[____exports.TrinketType.EQUALITY] = "EQUALITY"
____exports.TrinketType.WISH_BONE = 104
____exports.TrinketType[____exports.TrinketType.WISH_BONE] = "WISH_BONE"
____exports.TrinketType.BAG_LUNCH = 105
____exports.TrinketType[____exports.TrinketType.BAG_LUNCH] = "BAG_LUNCH"
____exports.TrinketType.LOST_CORK = 106
____exports.TrinketType[____exports.TrinketType.LOST_CORK] = "LOST_CORK"
____exports.TrinketType.CROW_HEART = 107
____exports.TrinketType[____exports.TrinketType.CROW_HEART] = "CROW_HEART"
____exports.TrinketType.WALNUT = 108
____exports.TrinketType[____exports.TrinketType.WALNUT] = "WALNUT"
____exports.TrinketType.DUCT_TAPE = 109
____exports.TrinketType[____exports.TrinketType.DUCT_TAPE] = "DUCT_TAPE"
____exports.TrinketType.SILVER_DOLLAR = 110
____exports.TrinketType[____exports.TrinketType.SILVER_DOLLAR] = "SILVER_DOLLAR"
____exports.TrinketType.BLOODY_CROWN = 111
____exports.TrinketType[____exports.TrinketType.BLOODY_CROWN] = "BLOODY_CROWN"
____exports.TrinketType.PAY_TO_WIN = 112
____exports.TrinketType[____exports.TrinketType.PAY_TO_WIN] = "PAY_TO_WIN"
____exports.TrinketType.LOCUST_OF_WRATH = 113
____exports.TrinketType[____exports.TrinketType.LOCUST_OF_WRATH] = "LOCUST_OF_WRATH"
____exports.TrinketType.LOCUST_OF_PESTILENCE = 114
____exports.TrinketType[____exports.TrinketType.LOCUST_OF_PESTILENCE] = "LOCUST_OF_PESTILENCE"
____exports.TrinketType.LOCUST_OF_FAMINE = 115
____exports.TrinketType[____exports.TrinketType.LOCUST_OF_FAMINE] = "LOCUST_OF_FAMINE"
____exports.TrinketType.LOCUST_OF_DEATH = 116
____exports.TrinketType[____exports.TrinketType.LOCUST_OF_DEATH] = "LOCUST_OF_DEATH"
____exports.TrinketType.LOCUST_OF_CONQUEST = 117
____exports.TrinketType[____exports.TrinketType.LOCUST_OF_CONQUEST] = "LOCUST_OF_CONQUEST"
____exports.TrinketType.BAT_WING = 118
____exports.TrinketType[____exports.TrinketType.BAT_WING] = "BAT_WING"
____exports.TrinketType.STEM_CELL = 119
____exports.TrinketType[____exports.TrinketType.STEM_CELL] = "STEM_CELL"
____exports.TrinketType.HAIRPIN = 120
____exports.TrinketType[____exports.TrinketType.HAIRPIN] = "HAIRPIN"
____exports.TrinketType.WOODEN_CROSS = 121
____exports.TrinketType[____exports.TrinketType.WOODEN_CROSS] = "WOODEN_CROSS"
____exports.TrinketType.BUTTER = 122
____exports.TrinketType[____exports.TrinketType.BUTTER] = "BUTTER"
____exports.TrinketType.FILIGREE_FEATHERS = 123
____exports.TrinketType[____exports.TrinketType.FILIGREE_FEATHERS] = "FILIGREE_FEATHERS"
____exports.TrinketType.DOOR_STOP = 124
____exports.TrinketType[____exports.TrinketType.DOOR_STOP] = "DOOR_STOP"
____exports.TrinketType.EXTENSION_CORD = 125
____exports.TrinketType[____exports.TrinketType.EXTENSION_CORD] = "EXTENSION_CORD"
____exports.TrinketType.ROTTEN_PENNY = 126
____exports.TrinketType[____exports.TrinketType.ROTTEN_PENNY] = "ROTTEN_PENNY"
____exports.TrinketType.BABY_BENDER = 127
____exports.TrinketType[____exports.TrinketType.BABY_BENDER] = "BABY_BENDER"
____exports.TrinketType.FINGER_BONE = 128
____exports.TrinketType[____exports.TrinketType.FINGER_BONE] = "FINGER_BONE"
____exports.TrinketType.JAW_BREAKER = 129
____exports.TrinketType[____exports.TrinketType.JAW_BREAKER] = "JAW_BREAKER"
____exports.TrinketType.CHEWED_PEN = 130
____exports.TrinketType[____exports.TrinketType.CHEWED_PEN] = "CHEWED_PEN"
____exports.TrinketType.BLESSED_PENNY = 131
____exports.TrinketType[____exports.TrinketType.BLESSED_PENNY] = "BLESSED_PENNY"
____exports.TrinketType.BROKEN_SYRINGE = 132
____exports.TrinketType[____exports.TrinketType.BROKEN_SYRINGE] = "BROKEN_SYRINGE"
____exports.TrinketType.SHORT_FUSE = 133
____exports.TrinketType[____exports.TrinketType.SHORT_FUSE] = "SHORT_FUSE"
____exports.TrinketType.GIGANTE_BEAN = 134
____exports.TrinketType[____exports.TrinketType.GIGANTE_BEAN] = "GIGANTE_BEAN"
____exports.TrinketType.LIGHTER = 135
____exports.TrinketType[____exports.TrinketType.LIGHTER] = "LIGHTER"
____exports.TrinketType.BROKEN_PADLOCK = 136
____exports.TrinketType[____exports.TrinketType.BROKEN_PADLOCK] = "BROKEN_PADLOCK"
____exports.TrinketType.MYOSOTIS = 137
____exports.TrinketType[____exports.TrinketType.MYOSOTIS] = "MYOSOTIS"
____exports.TrinketType.M = 138
____exports.TrinketType[____exports.TrinketType.M] = "M"
____exports.TrinketType.TEARDROP_CHARM = 139
____exports.TrinketType[____exports.TrinketType.TEARDROP_CHARM] = "TEARDROP_CHARM"
____exports.TrinketType.APPLE_OF_SODOM = 140
____exports.TrinketType[____exports.TrinketType.APPLE_OF_SODOM] = "APPLE_OF_SODOM"
____exports.TrinketType.FORGOTTEN_LULLABY = 141
____exports.TrinketType[____exports.TrinketType.FORGOTTEN_LULLABY] = "FORGOTTEN_LULLABY"
____exports.TrinketType.BETHS_FAITH = 142
____exports.TrinketType[____exports.TrinketType.BETHS_FAITH] = "BETHS_FAITH"
____exports.TrinketType.OLD_CAPACITOR = 143
____exports.TrinketType[____exports.TrinketType.OLD_CAPACITOR] = "OLD_CAPACITOR"
____exports.TrinketType.BRAIN_WORM = 144
____exports.TrinketType[____exports.TrinketType.BRAIN_WORM] = "BRAIN_WORM"
____exports.TrinketType.PERFECTION = 145
____exports.TrinketType[____exports.TrinketType.PERFECTION] = "PERFECTION"
____exports.TrinketType.DEVILS_CROWN = 146
____exports.TrinketType[____exports.TrinketType.DEVILS_CROWN] = "DEVILS_CROWN"
____exports.TrinketType.CHARGED_PENNY = 147
____exports.TrinketType[____exports.TrinketType.CHARGED_PENNY] = "CHARGED_PENNY"
____exports.TrinketType.FRIENDSHIP_NECKLACE = 148
____exports.TrinketType[____exports.TrinketType.FRIENDSHIP_NECKLACE] = "FRIENDSHIP_NECKLACE"
____exports.TrinketType.PANIC_BUTTON = 149
____exports.TrinketType[____exports.TrinketType.PANIC_BUTTON] = "PANIC_BUTTON"
____exports.TrinketType.BLUE_KEY = 150
____exports.TrinketType[____exports.TrinketType.BLUE_KEY] = "BLUE_KEY"
____exports.TrinketType.FLAT_FILE = 151
____exports.TrinketType[____exports.TrinketType.FLAT_FILE] = "FLAT_FILE"
____exports.TrinketType.TELESCOPE_LENS = 152
____exports.TrinketType[____exports.TrinketType.TELESCOPE_LENS] = "TELESCOPE_LENS"
____exports.TrinketType.MOMS_LOCK = 153
____exports.TrinketType[____exports.TrinketType.MOMS_LOCK] = "MOMS_LOCK"
____exports.TrinketType.DICE_BAG = 154
____exports.TrinketType[____exports.TrinketType.DICE_BAG] = "DICE_BAG"
____exports.TrinketType.HOLY_CROWN = 155
____exports.TrinketType[____exports.TrinketType.HOLY_CROWN] = "HOLY_CROWN"
____exports.TrinketType.MOTHERS_KISS = 156
____exports.TrinketType[____exports.TrinketType.MOTHERS_KISS] = "MOTHERS_KISS"
____exports.TrinketType.TORN_CARD = 157
____exports.TrinketType[____exports.TrinketType.TORN_CARD] = "TORN_CARD"
____exports.TrinketType.TORN_POCKET = 158
____exports.TrinketType[____exports.TrinketType.TORN_POCKET] = "TORN_POCKET"
____exports.TrinketType.GILDED_KEY = 159
____exports.TrinketType[____exports.TrinketType.GILDED_KEY] = "GILDED_KEY"
____exports.TrinketType.LUCKY_SACK = 160
____exports.TrinketType[____exports.TrinketType.LUCKY_SACK] = "LUCKY_SACK"
____exports.TrinketType.WICKED_CROWN = 161
____exports.TrinketType[____exports.TrinketType.WICKED_CROWN] = "WICKED_CROWN"
____exports.TrinketType.AZAZELS_STUMP = 162
____exports.TrinketType[____exports.TrinketType.AZAZELS_STUMP] = "AZAZELS_STUMP"
____exports.TrinketType.DINGLE_BERRY = 163
____exports.TrinketType[____exports.TrinketType.DINGLE_BERRY] = "DINGLE_BERRY"
____exports.TrinketType.RING_CAP = 164
____exports.TrinketType[____exports.TrinketType.RING_CAP] = "RING_CAP"
____exports.TrinketType.NUH_UH = 165
____exports.TrinketType[____exports.TrinketType.NUH_UH] = "NUH_UH"
____exports.TrinketType.MODELING_CLAY = 166
____exports.TrinketType[____exports.TrinketType.MODELING_CLAY] = "MODELING_CLAY"
____exports.TrinketType.POLISHED_BONE = 167
____exports.TrinketType[____exports.TrinketType.POLISHED_BONE] = "POLISHED_BONE"
____exports.TrinketType.HOLLOW_HEART = 168
____exports.TrinketType[____exports.TrinketType.HOLLOW_HEART] = "HOLLOW_HEART"
____exports.TrinketType.KIDS_DRAWING = 169
____exports.TrinketType[____exports.TrinketType.KIDS_DRAWING] = "KIDS_DRAWING"
____exports.TrinketType.CRYSTAL_KEY = 170
____exports.TrinketType[____exports.TrinketType.CRYSTAL_KEY] = "CRYSTAL_KEY"
____exports.TrinketType.KEEPERS_BARGAIN = 171
____exports.TrinketType[____exports.TrinketType.KEEPERS_BARGAIN] = "KEEPERS_BARGAIN"
____exports.TrinketType.CURSED_PENNY = 172
____exports.TrinketType[____exports.TrinketType.CURSED_PENNY] = "CURSED_PENNY"
____exports.TrinketType.YOUR_SOUL = 173
____exports.TrinketType[____exports.TrinketType.YOUR_SOUL] = "YOUR_SOUL"
____exports.TrinketType.NUMBER_MAGNET = 174
____exports.TrinketType[____exports.TrinketType.NUMBER_MAGNET] = "NUMBER_MAGNET"
____exports.TrinketType.STRANGE_KEY = 175
____exports.TrinketType[____exports.TrinketType.STRANGE_KEY] = "STRANGE_KEY"
____exports.TrinketType.LIL_CLOT = 176
____exports.TrinketType[____exports.TrinketType.LIL_CLOT] = "LIL_CLOT"
____exports.TrinketType.TEMPORARY_TATTOO = 177
____exports.TrinketType[____exports.TrinketType.TEMPORARY_TATTOO] = "TEMPORARY_TATTOO"
____exports.TrinketType.SWALLOWED_M80 = 178
____exports.TrinketType[____exports.TrinketType.SWALLOWED_M80] = "SWALLOWED_M80"
____exports.TrinketType.RC_REMOTE = 179
____exports.TrinketType[____exports.TrinketType.RC_REMOTE] = "RC_REMOTE"
____exports.TrinketType.FOUND_SOUL = 180
____exports.TrinketType[____exports.TrinketType.FOUND_SOUL] = "FOUND_SOUL"
____exports.TrinketType.EXPANSION_PACK = 181
____exports.TrinketType[____exports.TrinketType.EXPANSION_PACK] = "EXPANSION_PACK"
____exports.TrinketType.BETHS_ESSENCE = 182
____exports.TrinketType[____exports.TrinketType.BETHS_ESSENCE] = "BETHS_ESSENCE"
____exports.TrinketType.TWINS = 183
____exports.TrinketType[____exports.TrinketType.TWINS] = "TWINS"
____exports.TrinketType.ADOPTION_PAPERS = 184
____exports.TrinketType[____exports.TrinketType.ADOPTION_PAPERS] = "ADOPTION_PAPERS"
____exports.TrinketType.CRICKET_LEG = 185
____exports.TrinketType[____exports.TrinketType.CRICKET_LEG] = "CRICKET_LEG"
____exports.TrinketType.APOLLYONS_BEST_FRIEND = 186
____exports.TrinketType[____exports.TrinketType.APOLLYONS_BEST_FRIEND] = "APOLLYONS_BEST_FRIEND"
____exports.TrinketType.BROKEN_GLASSES = 187
____exports.TrinketType[____exports.TrinketType.BROKEN_GLASSES] = "BROKEN_GLASSES"
____exports.TrinketType.ICE_CUBE = 188
____exports.TrinketType[____exports.TrinketType.ICE_CUBE] = "ICE_CUBE"
____exports.TrinketType.SIGIL_OF_BAPHOMET = 189
____exports.TrinketType[____exports.TrinketType.SIGIL_OF_BAPHOMET] = "SIGIL_OF_BAPHOMET"
--- For `EntityType.PICKUP` (5), `PickupVariant.BED` (380).
____exports.BedSubType = {}
____exports.BedSubType.ISAAC = 0
____exports.BedSubType[____exports.BedSubType.ISAAC] = "ISAAC"
____exports.BedSubType.MOM = 10
____exports.BedSubType[____exports.BedSubType.MOM] = "MOM"
--- For `EntityType.LASER` (7).
____exports.LaserSubType = {}
____exports.LaserSubType.LINEAR = 0
____exports.LaserSubType[____exports.LaserSubType.LINEAR] = "LINEAR"
____exports.LaserSubType.RING_LUDOVICO = 1
____exports.LaserSubType[____exports.LaserSubType.RING_LUDOVICO] = "RING_LUDOVICO"
____exports.LaserSubType.RING_PROJECTILE = 2
____exports.LaserSubType[____exports.LaserSubType.RING_PROJECTILE] = "RING_PROJECTILE"
____exports.LaserSubType.RING_FOLLOW_PARENT = 3
____exports.LaserSubType[____exports.LaserSubType.RING_FOLLOW_PARENT] = "RING_FOLLOW_PARENT"
____exports.LaserSubType.NO_IMPACT = 4
____exports.LaserSubType[____exports.LaserSubType.NO_IMPACT] = "NO_IMPACT"
--- For `EntityType.GAPER` (10), `GaperVariant.ROTTEN_GAPER` (3).
____exports.RottenGaperSubType = {}
____exports.RottenGaperSubType.V1 = 0
____exports.RottenGaperSubType[____exports.RottenGaperSubType.V1] = "V1"
____exports.RottenGaperSubType.V2 = 1
____exports.RottenGaperSubType[____exports.RottenGaperSubType.V2] = "V2"
____exports.RottenGaperSubType.V3 = 2
____exports.RottenGaperSubType[____exports.RottenGaperSubType.V3] = "V3"
____exports.RottenGaperSubType.V4 = 3
____exports.RottenGaperSubType[____exports.RottenGaperSubType.V4] = "V4"
____exports.RottenGaperSubType.V5 = 4
____exports.RottenGaperSubType[____exports.RottenGaperSubType.V5] = "V5"
____exports.RottenGaperSubType.V6 = 5
____exports.RottenGaperSubType[____exports.RottenGaperSubType.V6] = "V6"
--- For `EntityType.LARRY_JR` (19), `LarryJrVariant.LARRY_JR` (0).
____exports.LarryJrSubType = {}
____exports.LarryJrSubType.NORMAL = 0
____exports.LarryJrSubType[____exports.LarryJrSubType.NORMAL] = "NORMAL"
____exports.LarryJrSubType.GREEN = 1
____exports.LarryJrSubType[____exports.LarryJrSubType.GREEN] = "GREEN"
____exports.LarryJrSubType.BLUE = 2
____exports.LarryJrSubType[____exports.LarryJrSubType.BLUE] = "BLUE"
--- For `EntityType.LARRY_JR` (19), `LarryJrVariant.HOLLOW` (1).
____exports.HollowSubType = {}
____exports.HollowSubType.NORMAL = 0
____exports.HollowSubType[____exports.HollowSubType.NORMAL] = "NORMAL"
____exports.HollowSubType.GREEN = 1
____exports.HollowSubType[____exports.HollowSubType.GREEN] = "GREEN"
____exports.HollowSubType.BLACK = 2
____exports.HollowSubType[____exports.HollowSubType.BLACK] = "BLACK"
____exports.HollowSubType.YELLOW = 3
____exports.HollowSubType[____exports.HollowSubType.YELLOW] = "YELLOW"
--- For `EntityType.MONSTRO` (20), variant 0.
____exports.MonstroSubType = {}
____exports.MonstroSubType.NORMAL = 0
____exports.MonstroSubType[____exports.MonstroSubType.NORMAL] = "NORMAL"
____exports.MonstroSubType.RED = 1
____exports.MonstroSubType[____exports.MonstroSubType.RED] = "RED"
____exports.MonstroSubType.GREY = 2
____exports.MonstroSubType[____exports.MonstroSubType.GREY] = "GREY"
--- For `EntityType.CHARGER` (23), `ChargerVariant.CHARGER` (0).
____exports.ChargerSubType = {}
____exports.ChargerSubType.CHARGER = 0
____exports.ChargerSubType[____exports.ChargerSubType.CHARGER] = "CHARGER"
____exports.ChargerSubType.MY_SHADOW = 1
____exports.ChargerSubType[____exports.ChargerSubType.MY_SHADOW] = "MY_SHADOW"
--- For `EntityType.BOOM_FLY` (25), `BoomFlyVariant.DRAGON_FLY` (3).
____exports.DragonFlySubType = {}
____exports.DragonFlySubType.NORMAL = 0
____exports.DragonFlySubType[____exports.DragonFlySubType.NORMAL] = "NORMAL"
____exports.DragonFlySubType.X = 1
____exports.DragonFlySubType[____exports.DragonFlySubType.X] = "X"
--- For `EntityType.CHUB` (28), `ChubVariant.CHUB (0)`.
____exports.ChubSubType = {}
____exports.ChubSubType.NORMAL = 0
____exports.ChubSubType[____exports.ChubSubType.NORMAL] = "NORMAL"
____exports.ChubSubType.BLUE = 1
____exports.ChubSubType[____exports.ChubSubType.BLUE] = "BLUE"
____exports.ChubSubType.ORANGE = 2
____exports.ChubSubType[____exports.ChubSubType.ORANGE] = "ORANGE"
--- For `EntityType.CHUB` (28), `ChubVariant.CARRION_QUEEN (2)`.
____exports.CarrionQueenSubType = {}
____exports.CarrionQueenSubType.NORMAL = 0
____exports.CarrionQueenSubType[____exports.CarrionQueenSubType.NORMAL] = "NORMAL"
____exports.CarrionQueenSubType.PINK = 1
____exports.CarrionQueenSubType[____exports.CarrionQueenSubType.PINK] = "PINK"
--- For `EntityType.GURDY` (36), variant 0.
____exports.GurdySubType = {}
____exports.GurdySubType.NORMAL = 0
____exports.GurdySubType[____exports.GurdySubType.NORMAL] = "NORMAL"
____exports.GurdySubType.GREEN = 1
____exports.GurdySubType[____exports.GurdySubType.GREEN] = "GREEN"
--- For `EntityType.BABY` (37), variant `BabyVariant.ANGELIC_BABY`.
____exports.AngelicBabySubType = {}
____exports.AngelicBabySubType.NORMAL = 0
____exports.AngelicBabySubType[____exports.AngelicBabySubType.NORMAL] = "NORMAL"
____exports.AngelicBabySubType.SMALL = 1
____exports.AngelicBabySubType[____exports.AngelicBabySubType.SMALL] = "SMALL"
--- For `EntityType.MONSTRO_2` (43), `Monstro2Variant.MONSTRO_2` (0).
____exports.Monstro2SubType = {}
____exports.Monstro2SubType.NORMAL = 0
____exports.Monstro2SubType[____exports.Monstro2SubType.NORMAL] = "NORMAL"
____exports.Monstro2SubType.RED = 1
____exports.Monstro2SubType[____exports.Monstro2SubType.RED] = "RED"
--- For `EntityType.MOM` (43), `MomVariant.MOM` (0).
____exports.MomSubType = {}
____exports.MomSubType.NORMAL = 0
____exports.MomSubType[____exports.MomSubType.NORMAL] = "NORMAL"
____exports.MomSubType.BLUE = 1
____exports.MomSubType[____exports.MomSubType.BLUE] = "BLUE"
____exports.MomSubType.RED = 2
____exports.MomSubType[____exports.MomSubType.RED] = "RED"
--- For `EntityType.PIN` (62), `PinVariant.PIN` (0).
____exports.PinSubType = {}
____exports.PinSubType.NORMAL = 0
____exports.PinSubType[____exports.PinSubType.NORMAL] = "NORMAL"
____exports.PinSubType.GREY = 1
____exports.PinSubType[____exports.PinSubType.GREY] = "GREY"
--- For `EntityType.PIN` (62), `PinVariant.FRAIL` (2).
____exports.FrailSubType = {}
____exports.FrailSubType.NORMAL = 0
____exports.FrailSubType[____exports.FrailSubType.NORMAL] = "NORMAL"
____exports.FrailSubType.BLACK = 1
____exports.FrailSubType[____exports.FrailSubType.BLACK] = "BLACK"
--- For `EntityType.FAMINE` (63), variant 0.
____exports.FamineSubType = {}
____exports.FamineSubType.NORMAL = 0
____exports.FamineSubType[____exports.FamineSubType.NORMAL] = "NORMAL"
____exports.FamineSubType.BLUE = 1
____exports.FamineSubType[____exports.FamineSubType.BLUE] = "BLUE"
--- For `EntityType.PESTILENCE` (64), variant 0.
____exports.PestilenceSubType = {}
____exports.PestilenceSubType.NORMAL = 0
____exports.PestilenceSubType[____exports.PestilenceSubType.NORMAL] = "NORMAL"
____exports.PestilenceSubType.GREY = 1
____exports.PestilenceSubType[____exports.PestilenceSubType.GREY] = "GREY"
--- For `EntityType.WAR` (65), `WarVariant.WAR` (0).
____exports.WarSubType = {}
____exports.WarSubType.NORMAL = 0
____exports.WarSubType[____exports.WarSubType.NORMAL] = "NORMAL"
____exports.WarSubType.GREY = 1
____exports.WarSubType[____exports.WarSubType.GREY] = "GREY"
--- For `EntityType.DEATH` (66), variant 0.
____exports.DeathSubType = {}
____exports.DeathSubType.NORMAL = 0
____exports.DeathSubType[____exports.DeathSubType.NORMAL] = "NORMAL"
____exports.DeathSubType.BLACK = 1
____exports.DeathSubType[____exports.DeathSubType.BLACK] = "BLACK"
--- For `EntityType.DUKE_OF_FLIES` (67), variant `DukeOfFliesVariant.DUKE_OF_FLIES` (0).
____exports.DukeOfFliesSubType = {}
____exports.DukeOfFliesSubType.NORMAL = 0
____exports.DukeOfFliesSubType[____exports.DukeOfFliesSubType.NORMAL] = "NORMAL"
____exports.DukeOfFliesSubType.GREEN = 1
____exports.DukeOfFliesSubType[____exports.DukeOfFliesSubType.GREEN] = "GREEN"
____exports.DukeOfFliesSubType.ORANGE = 2
____exports.DukeOfFliesSubType[____exports.DukeOfFliesSubType.ORANGE] = "ORANGE"
--- For `EntityType.DUKE_OF_FLIES` (67), variant `DukeOfFliesVariant.HUSK` (1).
____exports.HuskSubType = {}
____exports.HuskSubType.NORMAL = 0
____exports.HuskSubType[____exports.HuskSubType.NORMAL] = "NORMAL"
____exports.HuskSubType.BLACK = 1
____exports.HuskSubType[____exports.HuskSubType.BLACK] = "BLACK"
____exports.HuskSubType.RED = 2
____exports.HuskSubType[____exports.HuskSubType.RED] = "RED"
--- For `EntityType.PEEP` (68), variant `PeepVariant.PEEP` (0).
____exports.PeepSubType = {}
____exports.PeepSubType.NORMAL = 0
____exports.PeepSubType[____exports.PeepSubType.NORMAL] = "NORMAL"
____exports.PeepSubType.YELLOW = 1
____exports.PeepSubType[____exports.PeepSubType.YELLOW] = "YELLOW"
____exports.PeepSubType.CYAN = 2
____exports.PeepSubType[____exports.PeepSubType.CYAN] = "CYAN"
--- For `EntityType.PEEP` (68), variant `PeepVariant.BLOAT` (1).
____exports.BloatSubType = {}
____exports.BloatSubType.NORMAL = 0
____exports.BloatSubType[____exports.BloatSubType.NORMAL] = "NORMAL"
____exports.BloatSubType.GREEN = 1
____exports.BloatSubType[____exports.BloatSubType.GREEN] = "GREEN"
--- For `EntityType.FISTULA_BIG` (71), `EntityType.FISTULA_MEDIUM` (72), and
-- `EntityType.FISTULA_SMALL` (73). (All use variant `FistulaVariant.FISTULA` (0).
____exports.FistulaSubType = {}
____exports.FistulaSubType.NORMAL = 0
____exports.FistulaSubType[____exports.FistulaSubType.NORMAL] = "NORMAL"
____exports.FistulaSubType.GREY = 1
____exports.FistulaSubType[____exports.FistulaSubType.GREY] = "GREY"
--- For `EntityType.GEMINI` (79), variant `GeminiVariant.GEMINI` (0).
____exports.GeminiSubType = {}
____exports.GeminiSubType.NORMAL = 0
____exports.GeminiSubType[____exports.GeminiSubType.NORMAL] = "NORMAL"
____exports.GeminiSubType.GREEN = 1
____exports.GeminiSubType[____exports.GeminiSubType.GREEN] = "GREEN"
____exports.GeminiSubType.BLUE = 2
____exports.GeminiSubType[____exports.GeminiSubType.BLUE] = "BLUE"
--- For `EntityType.GURDY_JR` (99), variant 0.
____exports.GurdyJrSubType = {}
____exports.GurdyJrSubType.NORMAL = 0
____exports.GurdyJrSubType[____exports.GurdyJrSubType.NORMAL] = "NORMAL"
____exports.GurdyJrSubType.BLUE = 1
____exports.GurdyJrSubType[____exports.GurdyJrSubType.BLUE] = "BLUE"
____exports.GurdyJrSubType.YELLOW = 2
____exports.GurdyJrSubType[____exports.GurdyJrSubType.YELLOW] = "YELLOW"
--- For `EntityType.WIDOW` (100), `WidowVariant.WIDOW` (0).
____exports.WidowSubType = {}
____exports.WidowSubType.NORMAL = 0
____exports.WidowSubType[____exports.WidowSubType.NORMAL] = "NORMAL"
____exports.WidowSubType.BLACK = 1
____exports.WidowSubType[____exports.WidowSubType.BLACK] = "BLACK"
____exports.WidowSubType.PINK = 2
____exports.WidowSubType[____exports.WidowSubType.PINK] = "PINK"
--- For `EntityType.GURGLING` (100), `GurglingVariant.GURGLING_BOSS` (1).
____exports.GurglingSubType = {}
____exports.GurglingSubType.NORMAL = 0
____exports.GurglingSubType[____exports.GurglingSubType.NORMAL] = "NORMAL"
____exports.GurglingSubType.YELLOW = 1
____exports.GurglingSubType[____exports.GurglingSubType.YELLOW] = "YELLOW"
____exports.GurglingSubType.BLACK = 2
____exports.GurglingSubType[____exports.GurglingSubType.BLACK] = "BLACK"
--- For `EntityType.CONSTANT_STONE_SHOOTER` (202),
-- `ConstantStoneShooterVariant.CONSTANT_STONE_SHOOTER` (0).
-- 
-- This is the same as the `Direction` enum.
____exports.ConstantStoneShooterSubType = {}
____exports.ConstantStoneShooterSubType.LEFT = 0
____exports.ConstantStoneShooterSubType[____exports.ConstantStoneShooterSubType.LEFT] = "LEFT"
____exports.ConstantStoneShooterSubType.UP = 1
____exports.ConstantStoneShooterSubType[____exports.ConstantStoneShooterSubType.UP] = "UP"
____exports.ConstantStoneShooterSubType.RIGHT = 2
____exports.ConstantStoneShooterSubType[____exports.ConstantStoneShooterSubType.RIGHT] = "RIGHT"
____exports.ConstantStoneShooterSubType.DOWN = 3
____exports.ConstantStoneShooterSubType[____exports.ConstantStoneShooterSubType.DOWN] = "DOWN"
--- For `EntityType.HAUNT` (260), `HauntVariant.HAUNT` (0).
____exports.HauntSubType = {}
____exports.HauntSubType.NORMAL = 0
____exports.HauntSubType[____exports.HauntSubType.NORMAL] = "NORMAL"
____exports.HauntSubType.BLACK = 1
____exports.HauntSubType[____exports.HauntSubType.BLACK] = "BLACK"
____exports.HauntSubType.PINK = 2
____exports.HauntSubType[____exports.HauntSubType.PINK] = "PINK"
--- For `EntityType.DINGLE` (261), `DingleVariant.DINGLE` (0).
____exports.DingleSubType = {}
____exports.DingleSubType.NORMAL = 0
____exports.DingleSubType[____exports.DingleSubType.NORMAL] = "NORMAL"
____exports.DingleSubType.RED = 1
____exports.DingleSubType[____exports.DingleSubType.RED] = "RED"
____exports.DingleSubType.BLACK = 2
____exports.DingleSubType[____exports.DingleSubType.BLACK] = "BLACK"
--- For `EntityType.MEGA_MAW` (262), variant 0.
____exports.MegaMawSubType = {}
____exports.MegaMawSubType.NORMAL = 0
____exports.MegaMawSubType[____exports.MegaMawSubType.NORMAL] = "NORMAL"
____exports.MegaMawSubType.RED = 1
____exports.MegaMawSubType[____exports.MegaMawSubType.RED] = "RED"
____exports.MegaMawSubType.BLACK = 2
____exports.MegaMawSubType[____exports.MegaMawSubType.BLACK] = "BLACK"
--- For `EntityType.GATE` (263), variant 0.
____exports.GateSubType = {}
____exports.GateSubType.NORMAL = 0
____exports.GateSubType[____exports.GateSubType.NORMAL] = "NORMAL"
____exports.GateSubType.RED = 1
____exports.GateSubType[____exports.GateSubType.RED] = "RED"
____exports.GateSubType.BLACK = 2
____exports.GateSubType[____exports.GateSubType.BLACK] = "BLACK"
--- For `EntityType.MEGA_FATTY` (264), variant 0.
____exports.MegaFattySubType = {}
____exports.MegaFattySubType.NORMAL = 0
____exports.MegaFattySubType[____exports.MegaFattySubType.NORMAL] = "NORMAL"
____exports.MegaFattySubType.RED = 1
____exports.MegaFattySubType[____exports.MegaFattySubType.RED] = "RED"
____exports.MegaFattySubType.BROWN = 2
____exports.MegaFattySubType[____exports.MegaFattySubType.BROWN] = "BROWN"
--- For `EntityType.CAGE` (265), variant 0.
____exports.CageSubType = {}
____exports.CageSubType.NORMAL = 0
____exports.CageSubType[____exports.CageSubType.NORMAL] = "NORMAL"
____exports.CageSubType.GREEN = 1
____exports.CageSubType[____exports.CageSubType.GREEN] = "GREEN"
____exports.CageSubType.PINK = 2
____exports.CageSubType[____exports.CageSubType.PINK] = "PINK"
--- For `EntityType.POLYCEPHALUS` (269), `PolycephalusVariant.POLYCEPHALUS` (0).
____exports.PolycephalusSubType = {}
____exports.PolycephalusSubType.NORMAL = 0
____exports.PolycephalusSubType[____exports.PolycephalusSubType.NORMAL] = "NORMAL"
____exports.PolycephalusSubType.RED = 1
____exports.PolycephalusSubType[____exports.PolycephalusSubType.RED] = "RED"
____exports.PolycephalusSubType.PINK = 2
____exports.PolycephalusSubType[____exports.PolycephalusSubType.PINK] = "PINK"
--- For `EntityType.LEPER` (310), variant 0.
____exports.LeperSubType = {}
____exports.LeperSubType.STAGE_1 = 0
____exports.LeperSubType[____exports.LeperSubType.STAGE_1] = "STAGE_1"
____exports.LeperSubType.STAGE_2 = 1
____exports.LeperSubType[____exports.LeperSubType.STAGE_2] = "STAGE_2"
____exports.LeperSubType.STAGE_3 = 2
____exports.LeperSubType[____exports.LeperSubType.STAGE_3] = "STAGE_3"
____exports.LeperSubType.STAGE_4 = 3
____exports.LeperSubType[____exports.LeperSubType.STAGE_4] = "STAGE_4"
--- For `EntityType.STAIN` (401), variant 0.
____exports.StainSubType = {}
____exports.StainSubType.NORMAL = 0
____exports.StainSubType[____exports.StainSubType.NORMAL] = "NORMAL"
____exports.StainSubType.GREY = 1
____exports.StainSubType[____exports.StainSubType.GREY] = "GREY"
--- For `EntityType.BROWNIE` (402), variant 0.
____exports.BrownieSubType = {}
____exports.BrownieSubType.NORMAL = 0
____exports.BrownieSubType[____exports.BrownieSubType.NORMAL] = "NORMAL"
____exports.BrownieSubType.BLACK = 1
____exports.BrownieSubType[____exports.BrownieSubType.BLACK] = "BLACK"
--- For `EntityType.FORSAKEN` (403), variant 0.
____exports.ForsakenSubType = {}
____exports.ForsakenSubType.NORMAL = 0
____exports.ForsakenSubType[____exports.ForsakenSubType.NORMAL] = "NORMAL"
____exports.ForsakenSubType.BLACK = 1
____exports.ForsakenSubType[____exports.ForsakenSubType.BLACK] = "BLACK"
--- For `EntityType.LITTLE_HORN` (404), variant 0.
____exports.LittleHornSubType = {}
____exports.LittleHornSubType.NORMAL = 0
____exports.LittleHornSubType[____exports.LittleHornSubType.NORMAL] = "NORMAL"
____exports.LittleHornSubType.ORANGE = 1
____exports.LittleHornSubType[____exports.LittleHornSubType.ORANGE] = "ORANGE"
____exports.LittleHornSubType.BLACK = 2
____exports.LittleHornSubType[____exports.LittleHornSubType.BLACK] = "BLACK"
--- For `EntityType.RAG_MAN` (405), variant 0.
____exports.RagManSubType = {}
____exports.RagManSubType.NORMAL = 0
____exports.RagManSubType[____exports.RagManSubType.NORMAL] = "NORMAL"
____exports.RagManSubType.RED = 1
____exports.RagManSubType[____exports.RagManSubType.RED] = "RED"
____exports.RagManSubType.BLACK = 2
____exports.RagManSubType[____exports.RagManSubType.BLACK] = "BLACK"
--- For `EntityType.QUAKE_GRIMACE` (804), variant 0.
-- 
-- This is the same as the `Direction` enum.
____exports.QuakeGrimaceSubType = {}
____exports.QuakeGrimaceSubType.LEFT = 0
____exports.QuakeGrimaceSubType[____exports.QuakeGrimaceSubType.LEFT] = "LEFT"
____exports.QuakeGrimaceSubType.UP = 1
____exports.QuakeGrimaceSubType[____exports.QuakeGrimaceSubType.UP] = "UP"
____exports.QuakeGrimaceSubType.RIGHT = 2
____exports.QuakeGrimaceSubType[____exports.QuakeGrimaceSubType.RIGHT] = "RIGHT"
____exports.QuakeGrimaceSubType.DOWN = 3
____exports.QuakeGrimaceSubType[____exports.QuakeGrimaceSubType.DOWN] = "DOWN"
--- For `EntityType.DEEP_GAPER` (811), variant 0.
____exports.DeepGaperSubType = {}
____exports.DeepGaperSubType.V1 = 0
____exports.DeepGaperSubType[____exports.DeepGaperSubType.V1] = "V1"
____exports.DeepGaperSubType.V2 = 1
____exports.DeepGaperSubType[____exports.DeepGaperSubType.V2] = "V2"
____exports.DeepGaperSubType.V3 = 2
____exports.DeepGaperSubType[____exports.DeepGaperSubType.V3] = "V3"
____exports.DeepGaperSubType.V4 = 3
____exports.DeepGaperSubType[____exports.DeepGaperSubType.V4] = "V4"
____exports.DeepGaperSubType.V5 = 4
____exports.DeepGaperSubType[____exports.DeepGaperSubType.V5] = "V5"
____exports.DeepGaperSubType.V6 = 5
____exports.DeepGaperSubType[____exports.DeepGaperSubType.V6] = "V6"
____exports.DeepGaperSubType.V7 = 6
____exports.DeepGaperSubType[____exports.DeepGaperSubType.V7] = "V7"
--- For `EntityType.MORNINGSTAR` (863), variant 0.
____exports.MorningStarSubType = {}
____exports.MorningStarSubType.RANDOM = 0
____exports.MorningStarSubType[____exports.MorningStarSubType.RANDOM] = "RANDOM"
____exports.MorningStarSubType.NORMAL = 1
____exports.MorningStarSubType[____exports.MorningStarSubType.NORMAL] = "NORMAL"
____exports.MorningStarSubType.ALTERNATE = 2
____exports.MorningStarSubType[____exports.MorningStarSubType.ALTERNATE] = "ALTERNATE"
--- For `EntityType.DARK_ESAU` (866), variant 0.
____exports.DarkEsauSubType = {}
____exports.DarkEsauSubType.DARK = 0
____exports.DarkEsauSubType[____exports.DarkEsauSubType.DARK] = "DARK"
____exports.DarkEsauSubType.DARKER = 1
____exports.DarkEsauSubType[____exports.DarkEsauSubType.DARKER] = "DARKER"
--- For `EntityType.MAZE_ROAMER` (890), variant 0.
____exports.MazeRoamerSubType = {}
____exports.MazeRoamerSubType.NORMAL = 0
____exports.MazeRoamerSubType[____exports.MazeRoamerSubType.NORMAL] = "NORMAL"
____exports.MazeRoamerSubType.MIRRORED = 1
____exports.MazeRoamerSubType[____exports.MazeRoamerSubType.MIRRORED] = "MIRRORED"
--- For `EntityType.MOTHER` (912), `MotherVariant.MOTHER_1` (0).
____exports.MotherSubType = {}
____exports.MotherSubType.PHASE_1 = 0
____exports.MotherSubType[____exports.MotherSubType.PHASE_1] = "PHASE_1"
____exports.MotherSubType.PHASE_2 = 1
____exports.MotherSubType[____exports.MotherSubType.PHASE_2] = "PHASE_2"
____exports.MotherSubType.LEFT_ARM = 2
____exports.MotherSubType[____exports.MotherSubType.LEFT_ARM] = "LEFT_ARM"
____exports.MotherSubType.RIGHT_ARM = 3
____exports.MotherSubType[____exports.MotherSubType.RIGHT_ARM] = "RIGHT_ARM"
____exports.MotherSubType.DISAPPEAR = 4
____exports.MotherSubType[____exports.MotherSubType.DISAPPEAR] = "DISAPPEAR"
--- For `EntityType.MOTHER` (912), `MotherVariant.BALL` (100).
____exports.MotherBallSubType = {}
____exports.MotherBallSubType.LARGE = 0
____exports.MotherBallSubType[____exports.MotherBallSubType.LARGE] = "LARGE"
____exports.MotherBallSubType.MEDIUM = 1
____exports.MotherBallSubType[____exports.MotherBallSubType.MEDIUM] = "MEDIUM"
____exports.MotherBallSubType.SMALL = 2
____exports.MotherBallSubType[____exports.MotherBallSubType.SMALL] = "SMALL"
--- For `EntityType.EFFECT` (1000), `EffectVariant.BLOOD_EXPLOSION` (2).
____exports.BloodExplosionSubType = {}
____exports.BloodExplosionSubType.MEDIUM_WITH_LEFTOVER_BLOOD = 0
____exports.BloodExplosionSubType[____exports.BloodExplosionSubType.MEDIUM_WITH_LEFTOVER_BLOOD] = "MEDIUM_WITH_LEFTOVER_BLOOD"
____exports.BloodExplosionSubType.SMALL = 1
____exports.BloodExplosionSubType[____exports.BloodExplosionSubType.SMALL] = "SMALL"
____exports.BloodExplosionSubType.MEDIUM = 2
____exports.BloodExplosionSubType[____exports.BloodExplosionSubType.MEDIUM] = "MEDIUM"
____exports.BloodExplosionSubType.LARGE = 3
____exports.BloodExplosionSubType[____exports.BloodExplosionSubType.LARGE] = "LARGE"
____exports.BloodExplosionSubType.GIANT = 4
____exports.BloodExplosionSubType[____exports.BloodExplosionSubType.GIANT] = "GIANT"
____exports.BloodExplosionSubType.SWIRL = 5
____exports.BloodExplosionSubType[____exports.BloodExplosionSubType.SWIRL] = "SWIRL"
--- For `EntityType.EFFECT` (1000), `EffectVariant.BLOOD_PARTICLE` (5).
____exports.GibSubType = {}
____exports.GibSubType.BLOOD = 0
____exports.GibSubType[____exports.GibSubType.BLOOD] = "BLOOD"
____exports.GibSubType.BONE = 1
____exports.GibSubType[____exports.GibSubType.BONE] = "BONE"
____exports.GibSubType.GUT = 2
____exports.GibSubType[____exports.GibSubType.GUT] = "GUT"
____exports.GibSubType.EYE = 3
____exports.GibSubType[____exports.GibSubType.EYE] = "EYE"
--- For `EntityType.EFFECT` (1000), `EffectVariant.POOF_1` (15).
____exports.PoofSubType = {}
____exports.PoofSubType.NORMAL = 0
____exports.PoofSubType[____exports.PoofSubType.NORMAL] = "NORMAL"
____exports.PoofSubType.SMALL = 1
____exports.PoofSubType[____exports.PoofSubType.SMALL] = "SMALL"
____exports.PoofSubType.LARGE = 3
____exports.PoofSubType[____exports.PoofSubType.LARGE] = "LARGE"
--- For `EntityType.EFFECT` (1000), `EffectVariant.HEAVEN_LIGHT_DOOR` (39).
____exports.HeavenLightDoorSubType = {}
____exports.HeavenLightDoorSubType.HEAVEN_DOOR = 0
____exports.HeavenLightDoorSubType[____exports.HeavenLightDoorSubType.HEAVEN_DOOR] = "HEAVEN_DOOR"
____exports.HeavenLightDoorSubType.MOONLIGHT = 1
____exports.HeavenLightDoorSubType[____exports.HeavenLightDoorSubType.MOONLIGHT] = "MOONLIGHT"
--- For `EntityType.EFFECT` (1000), `EffectVariant.CARPET` (74).
____exports.CarpetSubType = {}
____exports.CarpetSubType.ISAACS_CARPET = 0
____exports.CarpetSubType[____exports.CarpetSubType.ISAACS_CARPET] = "ISAACS_CARPET"
____exports.CarpetSubType.MOMS_CARPET_1 = 1
____exports.CarpetSubType[____exports.CarpetSubType.MOMS_CARPET_1] = "MOMS_CARPET_1"
____exports.CarpetSubType.MOMS_CARPET_2 = 2
____exports.CarpetSubType[____exports.CarpetSubType.MOMS_CARPET_2] = "MOMS_CARPET_2"
--- For `EntityType.EFFECT` (1000), `EffectVariant.DICE_FLOOR` (76).
____exports.DiceFloorSubType = {}
____exports.DiceFloorSubType.ONE_PIP = 0
____exports.DiceFloorSubType[____exports.DiceFloorSubType.ONE_PIP] = "ONE_PIP"
____exports.DiceFloorSubType.TWO_PIP = 1
____exports.DiceFloorSubType[____exports.DiceFloorSubType.TWO_PIP] = "TWO_PIP"
____exports.DiceFloorSubType.THREE_PIP = 2
____exports.DiceFloorSubType[____exports.DiceFloorSubType.THREE_PIP] = "THREE_PIP"
____exports.DiceFloorSubType.FOUR_PIP = 3
____exports.DiceFloorSubType[____exports.DiceFloorSubType.FOUR_PIP] = "FOUR_PIP"
____exports.DiceFloorSubType.FIVE_PIP = 4
____exports.DiceFloorSubType[____exports.DiceFloorSubType.FIVE_PIP] = "FIVE_PIP"
____exports.DiceFloorSubType.SIX_PIP = 5
____exports.DiceFloorSubType[____exports.DiceFloorSubType.SIX_PIP] = "SIX_PIP"
--- For `EntityType.EFFECT` (1000), `EffectVariant.TALL_LADDER` (156).
____exports.TallLadderSubType = {}
____exports.TallLadderSubType.TALL_LADDER = 0
____exports.TallLadderSubType[____exports.TallLadderSubType.TALL_LADDER] = "TALL_LADDER"
____exports.TallLadderSubType.STAIRWAY = 1
____exports.TallLadderSubType[____exports.TallLadderSubType.STAIRWAY] = "STAIRWAY"
--- For `EntityType.EFFECT` (1000), `EffectVariant.PORTAL_TELEPORT` (161).
____exports.PortalTeleportSubType = {}
____exports.PortalTeleportSubType.TREASURE_ROOM = 0
____exports.PortalTeleportSubType[____exports.PortalTeleportSubType.TREASURE_ROOM] = "TREASURE_ROOM"
____exports.PortalTeleportSubType.BOSS_ROOM = 1
____exports.PortalTeleportSubType[____exports.PortalTeleportSubType.BOSS_ROOM] = "BOSS_ROOM"
____exports.PortalTeleportSubType.SECRET_ROOM = 2
____exports.PortalTeleportSubType[____exports.PortalTeleportSubType.SECRET_ROOM] = "SECRET_ROOM"
____exports.PortalTeleportSubType.RANDOM_ROOM = 3
____exports.PortalTeleportSubType[____exports.PortalTeleportSubType.RANDOM_ROOM] = "RANDOM_ROOM"
--- For `EntityType.EFFECT` (1000), `EffectVariant.PURGATORY` (189).
____exports.PurgatorySubType = {}
____exports.PurgatorySubType.RIFT = 0
____exports.PurgatorySubType[____exports.PurgatorySubType.RIFT] = "RIFT"
____exports.PurgatorySubType.GHOST = 1
____exports.PurgatorySubType[____exports.PurgatorySubType.GHOST] = "GHOST"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.collections.roomSubTypes"] = function(...) 
local ____exports = {}
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.SHOP` (2).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file.
____exports.ShopSubType = {}
____exports.ShopSubType.LEVEL_1 = 0
____exports.ShopSubType[____exports.ShopSubType.LEVEL_1] = "LEVEL_1"
____exports.ShopSubType.LEVEL_2 = 1
____exports.ShopSubType[____exports.ShopSubType.LEVEL_2] = "LEVEL_2"
____exports.ShopSubType.LEVEL_3 = 2
____exports.ShopSubType[____exports.ShopSubType.LEVEL_3] = "LEVEL_3"
____exports.ShopSubType.LEVEL_4 = 3
____exports.ShopSubType[____exports.ShopSubType.LEVEL_4] = "LEVEL_4"
____exports.ShopSubType.LEVEL_5 = 4
____exports.ShopSubType[____exports.ShopSubType.LEVEL_5] = "LEVEL_5"
____exports.ShopSubType.RARE_GOOD = 10
____exports.ShopSubType[____exports.ShopSubType.RARE_GOOD] = "RARE_GOOD"
____exports.ShopSubType.RARE_BAD = 11
____exports.ShopSubType[____exports.ShopSubType.RARE_BAD] = "RARE_BAD"
____exports.ShopSubType.TAINTED_KEEPER_LEVEL_1 = 100
____exports.ShopSubType[____exports.ShopSubType.TAINTED_KEEPER_LEVEL_1] = "TAINTED_KEEPER_LEVEL_1"
____exports.ShopSubType.TAINTED_KEEPER_LEVEL_2 = 101
____exports.ShopSubType[____exports.ShopSubType.TAINTED_KEEPER_LEVEL_2] = "TAINTED_KEEPER_LEVEL_2"
____exports.ShopSubType.TAINTED_KEEPER_LEVEL_3 = 102
____exports.ShopSubType[____exports.ShopSubType.TAINTED_KEEPER_LEVEL_3] = "TAINTED_KEEPER_LEVEL_3"
____exports.ShopSubType.TAINTED_KEEPER_LEVEL_4 = 103
____exports.ShopSubType[____exports.ShopSubType.TAINTED_KEEPER_LEVEL_4] = "TAINTED_KEEPER_LEVEL_4"
____exports.ShopSubType.TAINTED_KEEPER_LEVEL_5 = 104
____exports.ShopSubType[____exports.ShopSubType.TAINTED_KEEPER_LEVEL_5] = "TAINTED_KEEPER_LEVEL_5"
____exports.ShopSubType.TAINTED_KEEPER_RARE_GOOD = 110
____exports.ShopSubType[____exports.ShopSubType.TAINTED_KEEPER_RARE_GOOD] = "TAINTED_KEEPER_RARE_GOOD"
____exports.ShopSubType.TAINTED_KEEPER_RARE_BAD = 111
____exports.ShopSubType[____exports.ShopSubType.TAINTED_KEEPER_RARE_BAD] = "TAINTED_KEEPER_RARE_BAD"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.TREASURE` (4).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file and elsewhere.
____exports.TreasureRoomSubType = {}
____exports.TreasureRoomSubType.NORMAL = 0
____exports.TreasureRoomSubType[____exports.TreasureRoomSubType.NORMAL] = "NORMAL"
____exports.TreasureRoomSubType.MORE_OPTIONS = 1
____exports.TreasureRoomSubType[____exports.TreasureRoomSubType.MORE_OPTIONS] = "MORE_OPTIONS"
____exports.TreasureRoomSubType.PAY_TO_WIN = 2
____exports.TreasureRoomSubType[____exports.TreasureRoomSubType.PAY_TO_WIN] = "PAY_TO_WIN"
____exports.TreasureRoomSubType.MORE_OPTIONS_AND_PAY_TO_WIN = 3
____exports.TreasureRoomSubType[____exports.TreasureRoomSubType.MORE_OPTIONS_AND_PAY_TO_WIN] = "MORE_OPTIONS_AND_PAY_TO_WIN"
____exports.TreasureRoomSubType.KNIFE_PIECE = 34
____exports.TreasureRoomSubType[____exports.TreasureRoomSubType.KNIFE_PIECE] = "KNIFE_PIECE"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.BOSS` (5).
-- 
-- This matches the "bossID" attribute in the "entities2.xml" file. It also matches the sub-type in
-- the "00.special rooms.stb" file.
-- 
-- The enum is named `BossID` instead of `BossRoomSubType` in order to match the `Entity.GetBossID`,
-- `Room.GetBossID` and `Room.GetSecondBossID` methods.
-- 
-- There is no BossID with a value of 0 because this is the default return value for "no boss ID"
-- when using the `Room.GetBossID` method.
-- 
-- This enum is contiguous. (Every value is satisfied between 1 and 102, inclusive.)
-- 
-- Also see the `MinibossID` enum.
____exports.BossID = {}
____exports.BossID.MONSTRO = 1
____exports.BossID[____exports.BossID.MONSTRO] = "MONSTRO"
____exports.BossID.LARRY_JR = 2
____exports.BossID[____exports.BossID.LARRY_JR] = "LARRY_JR"
____exports.BossID.CHUB = 3
____exports.BossID[____exports.BossID.CHUB] = "CHUB"
____exports.BossID.GURDY = 4
____exports.BossID[____exports.BossID.GURDY] = "GURDY"
____exports.BossID.MONSTRO_2 = 5
____exports.BossID[____exports.BossID.MONSTRO_2] = "MONSTRO_2"
____exports.BossID.MOM = 6
____exports.BossID[____exports.BossID.MOM] = "MOM"
____exports.BossID.SCOLEX = 7
____exports.BossID[____exports.BossID.SCOLEX] = "SCOLEX"
____exports.BossID.MOMS_HEART = 8
____exports.BossID[____exports.BossID.MOMS_HEART] = "MOMS_HEART"
____exports.BossID.FAMINE = 9
____exports.BossID[____exports.BossID.FAMINE] = "FAMINE"
____exports.BossID.PESTILENCE = 10
____exports.BossID[____exports.BossID.PESTILENCE] = "PESTILENCE"
____exports.BossID.WAR = 11
____exports.BossID[____exports.BossID.WAR] = "WAR"
____exports.BossID.DEATH = 12
____exports.BossID[____exports.BossID.DEATH] = "DEATH"
____exports.BossID.DUKE_OF_FLIES = 13
____exports.BossID[____exports.BossID.DUKE_OF_FLIES] = "DUKE_OF_FLIES"
____exports.BossID.PEEP = 14
____exports.BossID[____exports.BossID.PEEP] = "PEEP"
____exports.BossID.LOKI = 15
____exports.BossID[____exports.BossID.LOKI] = "LOKI"
____exports.BossID.BLASTOCYST = 16
____exports.BossID[____exports.BossID.BLASTOCYST] = "BLASTOCYST"
____exports.BossID.GEMINI = 17
____exports.BossID[____exports.BossID.GEMINI] = "GEMINI"
____exports.BossID.FISTULA = 18
____exports.BossID[____exports.BossID.FISTULA] = "FISTULA"
____exports.BossID.GISH = 19
____exports.BossID[____exports.BossID.GISH] = "GISH"
____exports.BossID.STEVEN = 20
____exports.BossID[____exports.BossID.STEVEN] = "STEVEN"
____exports.BossID.CHAD = 21
____exports.BossID[____exports.BossID.CHAD] = "CHAD"
____exports.BossID.HEADLESS_HORSEMAN = 22
____exports.BossID[____exports.BossID.HEADLESS_HORSEMAN] = "HEADLESS_HORSEMAN"
____exports.BossID.FALLEN = 23
____exports.BossID[____exports.BossID.FALLEN] = "FALLEN"
____exports.BossID.SATAN = 24
____exports.BossID[____exports.BossID.SATAN] = "SATAN"
____exports.BossID.IT_LIVES = 25
____exports.BossID[____exports.BossID.IT_LIVES] = "IT_LIVES"
____exports.BossID.HOLLOW = 26
____exports.BossID[____exports.BossID.HOLLOW] = "HOLLOW"
____exports.BossID.CARRION_QUEEN = 27
____exports.BossID[____exports.BossID.CARRION_QUEEN] = "CARRION_QUEEN"
____exports.BossID.GURDY_JR = 28
____exports.BossID[____exports.BossID.GURDY_JR] = "GURDY_JR"
____exports.BossID.HUSK = 29
____exports.BossID[____exports.BossID.HUSK] = "HUSK"
____exports.BossID.BLOAT = 30
____exports.BossID[____exports.BossID.BLOAT] = "BLOAT"
____exports.BossID.LOKII = 31
____exports.BossID[____exports.BossID.LOKII] = "LOKII"
____exports.BossID.BLIGHTED_OVUM = 32
____exports.BossID[____exports.BossID.BLIGHTED_OVUM] = "BLIGHTED_OVUM"
____exports.BossID.TERATOMA = 33
____exports.BossID[____exports.BossID.TERATOMA] = "TERATOMA"
____exports.BossID.WIDOW = 34
____exports.BossID[____exports.BossID.WIDOW] = "WIDOW"
____exports.BossID.MASK_OF_INFAMY = 35
____exports.BossID[____exports.BossID.MASK_OF_INFAMY] = "MASK_OF_INFAMY"
____exports.BossID.WRETCHED = 36
____exports.BossID[____exports.BossID.WRETCHED] = "WRETCHED"
____exports.BossID.PIN = 37
____exports.BossID[____exports.BossID.PIN] = "PIN"
____exports.BossID.CONQUEST = 38
____exports.BossID[____exports.BossID.CONQUEST] = "CONQUEST"
____exports.BossID.ISAAC = 39
____exports.BossID[____exports.BossID.ISAAC] = "ISAAC"
____exports.BossID.BLUE_BABY = 40
____exports.BossID[____exports.BossID.BLUE_BABY] = "BLUE_BABY"
____exports.BossID.DADDY_LONG_LEGS = 41
____exports.BossID[____exports.BossID.DADDY_LONG_LEGS] = "DADDY_LONG_LEGS"
____exports.BossID.TRIACHNID = 42
____exports.BossID[____exports.BossID.TRIACHNID] = "TRIACHNID"
____exports.BossID.HAUNT = 43
____exports.BossID[____exports.BossID.HAUNT] = "HAUNT"
____exports.BossID.DINGLE = 44
____exports.BossID[____exports.BossID.DINGLE] = "DINGLE"
____exports.BossID.MEGA_MAW = 45
____exports.BossID[____exports.BossID.MEGA_MAW] = "MEGA_MAW"
____exports.BossID.GATE = 46
____exports.BossID[____exports.BossID.GATE] = "GATE"
____exports.BossID.MEGA_FATTY = 47
____exports.BossID[____exports.BossID.MEGA_FATTY] = "MEGA_FATTY"
____exports.BossID.CAGE = 48
____exports.BossID[____exports.BossID.CAGE] = "CAGE"
____exports.BossID.MAMA_GURDY = 49
____exports.BossID[____exports.BossID.MAMA_GURDY] = "MAMA_GURDY"
____exports.BossID.DARK_ONE = 50
____exports.BossID[____exports.BossID.DARK_ONE] = "DARK_ONE"
____exports.BossID.ADVERSARY = 51
____exports.BossID[____exports.BossID.ADVERSARY] = "ADVERSARY"
____exports.BossID.POLYCEPHALUS = 52
____exports.BossID[____exports.BossID.POLYCEPHALUS] = "POLYCEPHALUS"
____exports.BossID.MR_FRED = 53
____exports.BossID[____exports.BossID.MR_FRED] = "MR_FRED"
____exports.BossID.LAMB = 54
____exports.BossID[____exports.BossID.LAMB] = "LAMB"
____exports.BossID.MEGA_SATAN = 55
____exports.BossID[____exports.BossID.MEGA_SATAN] = "MEGA_SATAN"
____exports.BossID.GURGLING = 56
____exports.BossID[____exports.BossID.GURGLING] = "GURGLING"
____exports.BossID.STAIN = 57
____exports.BossID[____exports.BossID.STAIN] = "STAIN"
____exports.BossID.BROWNIE = 58
____exports.BossID[____exports.BossID.BROWNIE] = "BROWNIE"
____exports.BossID.FORSAKEN = 59
____exports.BossID[____exports.BossID.FORSAKEN] = "FORSAKEN"
____exports.BossID.LITTLE_HORN = 60
____exports.BossID[____exports.BossID.LITTLE_HORN] = "LITTLE_HORN"
____exports.BossID.RAG_MAN = 61
____exports.BossID[____exports.BossID.RAG_MAN] = "RAG_MAN"
____exports.BossID.ULTRA_GREED = 62
____exports.BossID[____exports.BossID.ULTRA_GREED] = "ULTRA_GREED"
____exports.BossID.HUSH = 63
____exports.BossID[____exports.BossID.HUSH] = "HUSH"
____exports.BossID.DANGLE = 64
____exports.BossID[____exports.BossID.DANGLE] = "DANGLE"
____exports.BossID.TURDLING = 65
____exports.BossID[____exports.BossID.TURDLING] = "TURDLING"
____exports.BossID.FRAIL = 66
____exports.BossID[____exports.BossID.FRAIL] = "FRAIL"
____exports.BossID.RAG_MEGA = 67
____exports.BossID[____exports.BossID.RAG_MEGA] = "RAG_MEGA"
____exports.BossID.SISTERS_VIS = 68
____exports.BossID[____exports.BossID.SISTERS_VIS] = "SISTERS_VIS"
____exports.BossID.BIG_HORN = 69
____exports.BossID[____exports.BossID.BIG_HORN] = "BIG_HORN"
____exports.BossID.DELIRIUM = 70
____exports.BossID[____exports.BossID.DELIRIUM] = "DELIRIUM"
____exports.BossID.ULTRA_GREEDIER = 71
____exports.BossID[____exports.BossID.ULTRA_GREEDIER] = "ULTRA_GREEDIER"
____exports.BossID.MATRIARCH = 72
____exports.BossID[____exports.BossID.MATRIARCH] = "MATRIARCH"
____exports.BossID.PILE = 73
____exports.BossID[____exports.BossID.PILE] = "PILE"
____exports.BossID.REAP_CREEP = 74
____exports.BossID[____exports.BossID.REAP_CREEP] = "REAP_CREEP"
____exports.BossID.LIL_BLUB = 75
____exports.BossID[____exports.BossID.LIL_BLUB] = "LIL_BLUB"
____exports.BossID.WORMWOOD = 76
____exports.BossID[____exports.BossID.WORMWOOD] = "WORMWOOD"
____exports.BossID.RAINMAKER = 77
____exports.BossID[____exports.BossID.RAINMAKER] = "RAINMAKER"
____exports.BossID.VISAGE = 78
____exports.BossID[____exports.BossID.VISAGE] = "VISAGE"
____exports.BossID.SIREN = 79
____exports.BossID[____exports.BossID.SIREN] = "SIREN"
____exports.BossID.TUFF_TWINS = 80
____exports.BossID[____exports.BossID.TUFF_TWINS] = "TUFF_TWINS"
____exports.BossID.HERETIC = 81
____exports.BossID[____exports.BossID.HERETIC] = "HERETIC"
____exports.BossID.HORNFEL = 82
____exports.BossID[____exports.BossID.HORNFEL] = "HORNFEL"
____exports.BossID.GREAT_GIDEON = 83
____exports.BossID[____exports.BossID.GREAT_GIDEON] = "GREAT_GIDEON"
____exports.BossID.BABY_PLUM = 84
____exports.BossID[____exports.BossID.BABY_PLUM] = "BABY_PLUM"
____exports.BossID.SCOURGE = 85
____exports.BossID[____exports.BossID.SCOURGE] = "SCOURGE"
____exports.BossID.CHIMERA = 86
____exports.BossID[____exports.BossID.CHIMERA] = "CHIMERA"
____exports.BossID.ROTGUT = 87
____exports.BossID[____exports.BossID.ROTGUT] = "ROTGUT"
____exports.BossID.MOTHER = 88
____exports.BossID[____exports.BossID.MOTHER] = "MOTHER"
____exports.BossID.MAUSOLEUM_MOM = 89
____exports.BossID[____exports.BossID.MAUSOLEUM_MOM] = "MAUSOLEUM_MOM"
____exports.BossID.MAUSOLEUM_MOMS_HEART = 90
____exports.BossID[____exports.BossID.MAUSOLEUM_MOMS_HEART] = "MAUSOLEUM_MOMS_HEART"
____exports.BossID.MIN_MIN = 91
____exports.BossID[____exports.BossID.MIN_MIN] = "MIN_MIN"
____exports.BossID.CLOG = 92
____exports.BossID[____exports.BossID.CLOG] = "CLOG"
____exports.BossID.SINGE = 93
____exports.BossID[____exports.BossID.SINGE] = "SINGE"
____exports.BossID.BUMBINO = 94
____exports.BossID[____exports.BossID.BUMBINO] = "BUMBINO"
____exports.BossID.COLOSTOMIA = 95
____exports.BossID[____exports.BossID.COLOSTOMIA] = "COLOSTOMIA"
____exports.BossID.SHELL = 96
____exports.BossID[____exports.BossID.SHELL] = "SHELL"
____exports.BossID.TURDLET = 97
____exports.BossID[____exports.BossID.TURDLET] = "TURDLET"
____exports.BossID.RAGLICH = 98
____exports.BossID[____exports.BossID.RAGLICH] = "RAGLICH"
____exports.BossID.DOGMA = 99
____exports.BossID[____exports.BossID.DOGMA] = "DOGMA"
____exports.BossID.BEAST = 100
____exports.BossID[____exports.BossID.BEAST] = "BEAST"
____exports.BossID.HORNY_BOYS = 101
____exports.BossID[____exports.BossID.HORNY_BOYS] = "HORNY_BOYS"
____exports.BossID.CLUTCH = 102
____exports.BossID[____exports.BossID.CLUTCH] = "CLUTCH"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.MINI_BOSS` (6).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file.
-- 
-- The enum is named `MinibossID` instead of` MinibossRoomSubType` in order to match the `BossID`
-- enum.
-- 
-- Also see the `BossID` enum.
____exports.MinibossID = {}
____exports.MinibossID.SLOTH = 0
____exports.MinibossID[____exports.MinibossID.SLOTH] = "SLOTH"
____exports.MinibossID.LUST = 1
____exports.MinibossID[____exports.MinibossID.LUST] = "LUST"
____exports.MinibossID.WRATH = 2
____exports.MinibossID[____exports.MinibossID.WRATH] = "WRATH"
____exports.MinibossID.GLUTTONY = 3
____exports.MinibossID[____exports.MinibossID.GLUTTONY] = "GLUTTONY"
____exports.MinibossID.GREED = 4
____exports.MinibossID[____exports.MinibossID.GREED] = "GREED"
____exports.MinibossID.ENVY = 5
____exports.MinibossID[____exports.MinibossID.ENVY] = "ENVY"
____exports.MinibossID.PRIDE = 6
____exports.MinibossID[____exports.MinibossID.PRIDE] = "PRIDE"
____exports.MinibossID.SUPER_SLOTH = 7
____exports.MinibossID[____exports.MinibossID.SUPER_SLOTH] = "SUPER_SLOTH"
____exports.MinibossID.SUPER_LUST = 8
____exports.MinibossID[____exports.MinibossID.SUPER_LUST] = "SUPER_LUST"
____exports.MinibossID.SUPER_WRATH = 9
____exports.MinibossID[____exports.MinibossID.SUPER_WRATH] = "SUPER_WRATH"
____exports.MinibossID.SUPER_GLUTTONY = 10
____exports.MinibossID[____exports.MinibossID.SUPER_GLUTTONY] = "SUPER_GLUTTONY"
____exports.MinibossID.SUPER_GREED = 11
____exports.MinibossID[____exports.MinibossID.SUPER_GREED] = "SUPER_GREED"
____exports.MinibossID.SUPER_ENVY = 12
____exports.MinibossID[____exports.MinibossID.SUPER_ENVY] = "SUPER_ENVY"
____exports.MinibossID.SUPER_PRIDE = 13
____exports.MinibossID[____exports.MinibossID.SUPER_PRIDE] = "SUPER_PRIDE"
____exports.MinibossID.ULTRA_PRIDE = 14
____exports.MinibossID[____exports.MinibossID.ULTRA_PRIDE] = "ULTRA_PRIDE"
____exports.MinibossID.KRAMPUS = 15
____exports.MinibossID[____exports.MinibossID.KRAMPUS] = "KRAMPUS"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.CURSE` (10).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file.
____exports.CurseRoomSubType = {}
____exports.CurseRoomSubType.NORMAL = 0
____exports.CurseRoomSubType[____exports.CurseRoomSubType.NORMAL] = "NORMAL"
____exports.CurseRoomSubType.VOODOO_HEAD = 1
____exports.CurseRoomSubType[____exports.CurseRoomSubType.VOODOO_HEAD] = "VOODOO_HEAD"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.CHALLENGE` (11).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file and elsewhere.
____exports.ChallengeRoomSubType = {}
____exports.ChallengeRoomSubType.NORMAL = 0
____exports.ChallengeRoomSubType[____exports.ChallengeRoomSubType.NORMAL] = "NORMAL"
____exports.ChallengeRoomSubType.BOSS = 1
____exports.ChallengeRoomSubType[____exports.ChallengeRoomSubType.BOSS] = "BOSS"
____exports.ChallengeRoomSubType.NORMAL_WAVE = 10
____exports.ChallengeRoomSubType[____exports.ChallengeRoomSubType.NORMAL_WAVE] = "NORMAL_WAVE"
____exports.ChallengeRoomSubType.BOSS_WAVE = 11
____exports.ChallengeRoomSubType[____exports.ChallengeRoomSubType.BOSS_WAVE] = "BOSS_WAVE"
____exports.ChallengeRoomSubType.GREAT_GIDEON_WAVE = 12
____exports.ChallengeRoomSubType[____exports.ChallengeRoomSubType.GREAT_GIDEON_WAVE] = "GREAT_GIDEON_WAVE"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.LIBRARY` (12).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file.
____exports.LibrarySubType = {}
____exports.LibrarySubType.LEVEL_1 = 0
____exports.LibrarySubType[____exports.LibrarySubType.LEVEL_1] = "LEVEL_1"
____exports.LibrarySubType.LEVEL_2 = 1
____exports.LibrarySubType[____exports.LibrarySubType.LEVEL_2] = "LEVEL_2"
____exports.LibrarySubType.LEVEL_3 = 2
____exports.LibrarySubType[____exports.LibrarySubType.LEVEL_3] = "LEVEL_3"
____exports.LibrarySubType.LEVEL_4 = 3
____exports.LibrarySubType[____exports.LibrarySubType.LEVEL_4] = "LEVEL_4"
____exports.LibrarySubType.LEVEL_5 = 4
____exports.LibrarySubType[____exports.LibrarySubType.LEVEL_5] = "LEVEL_5"
____exports.LibrarySubType.EXTRA_GOOD = 10
____exports.LibrarySubType[____exports.LibrarySubType.EXTRA_GOOD] = "EXTRA_GOOD"
____exports.LibrarySubType.EXTRA_BAD = 11
____exports.LibrarySubType[____exports.LibrarySubType.EXTRA_BAD] = "EXTRA_BAD"
____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_1 = 100
____exports.LibrarySubType[____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_1] = "TAINTED_KEEPER_LEVEL_1"
____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_2 = 101
____exports.LibrarySubType[____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_2] = "TAINTED_KEEPER_LEVEL_2"
____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_3 = 102
____exports.LibrarySubType[____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_3] = "TAINTED_KEEPER_LEVEL_3"
____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_4 = 103
____exports.LibrarySubType[____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_4] = "TAINTED_KEEPER_LEVEL_4"
____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_5 = 104
____exports.LibrarySubType[____exports.LibrarySubType.TAINTED_KEEPER_LEVEL_5] = "TAINTED_KEEPER_LEVEL_5"
____exports.LibrarySubType.TAINTED_KEEPER_EXTRA_GOOD = 110
____exports.LibrarySubType[____exports.LibrarySubType.TAINTED_KEEPER_EXTRA_GOOD] = "TAINTED_KEEPER_EXTRA_GOOD"
____exports.LibrarySubType.TAINTED_KEEPER_EXTRA_BAD = 111
____exports.LibrarySubType[____exports.LibrarySubType.TAINTED_KEEPER_EXTRA_BAD] = "TAINTED_KEEPER_EXTRA_BAD"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.DEVIL` (14).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file.
____exports.DevilRoomSubType = {}
____exports.DevilRoomSubType.NORMAL = 0
____exports.DevilRoomSubType[____exports.DevilRoomSubType.NORMAL] = "NORMAL"
____exports.DevilRoomSubType.NUMBER_SIX_TRINKET = 1
____exports.DevilRoomSubType[____exports.DevilRoomSubType.NUMBER_SIX_TRINKET] = "NUMBER_SIX_TRINKET"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.ANGEL` (15).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file.
____exports.AngelRoomSubType = {}
____exports.AngelRoomSubType.NORMAL = 0
____exports.AngelRoomSubType[____exports.AngelRoomSubType.NORMAL] = "NORMAL"
____exports.AngelRoomSubType.SHOP = 1
____exports.AngelRoomSubType[____exports.AngelRoomSubType.SHOP] = "SHOP"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.DUNGEON` (16).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file and elsewhere.
____exports.DungeonSubType = {}
____exports.DungeonSubType.NORMAL = 0
____exports.DungeonSubType[____exports.DungeonSubType.NORMAL] = "NORMAL"
____exports.DungeonSubType.GIDEONS_GRAVE = 1
____exports.DungeonSubType[____exports.DungeonSubType.GIDEONS_GRAVE] = "GIDEONS_GRAVE"
____exports.DungeonSubType.ROTGUT_MAGGOT = 2
____exports.DungeonSubType[____exports.DungeonSubType.ROTGUT_MAGGOT] = "ROTGUT_MAGGOT"
____exports.DungeonSubType.ROTGUT_HEART = 3
____exports.DungeonSubType[____exports.DungeonSubType.ROTGUT_HEART] = "ROTGUT_HEART"
____exports.DungeonSubType.BEAST_ROOM = 4
____exports.DungeonSubType[____exports.DungeonSubType.BEAST_ROOM] = "BEAST_ROOM"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.CLEAN_BEDROOM` (18).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file.
____exports.IsaacsRoomSubType = {}
____exports.IsaacsRoomSubType.NORMAL = 0
____exports.IsaacsRoomSubType[____exports.IsaacsRoomSubType.NORMAL] = "NORMAL"
____exports.IsaacsRoomSubType.GENESIS = 99
____exports.IsaacsRoomSubType[____exports.IsaacsRoomSubType.GENESIS] = "GENESIS"
--- For `StageID.SPECIAL_ROOMS` (0), `RoomType.SECRET_EXIT` (27).
-- 
-- This matches the sub-type in the "00.special rooms.stb" file.
____exports.SecretExitSubType = {}
____exports.SecretExitSubType.DOWNPOUR = 1
____exports.SecretExitSubType[____exports.SecretExitSubType.DOWNPOUR] = "DOWNPOUR"
____exports.SecretExitSubType.MINES = 2
____exports.SecretExitSubType[____exports.SecretExitSubType.MINES] = "MINES"
____exports.SecretExitSubType.MAUSOLEUM = 3
____exports.SecretExitSubType[____exports.SecretExitSubType.MAUSOLEUM] = "MAUSOLEUM"
--- For `StageID.DOWNPOUR` (27) and `StageID.DROSS` (28), `RoomType.DEFAULT` (1).
-- 
-- This matches the sub-type in the "27.downpour.stb" and "28.dross.stb" files.
____exports.DownpourRoomSubType = {}
____exports.DownpourRoomSubType.NORMAL = 0
____exports.DownpourRoomSubType[____exports.DownpourRoomSubType.NORMAL] = "NORMAL"
____exports.DownpourRoomSubType.WHITE_FIRE = 1
____exports.DownpourRoomSubType[____exports.DownpourRoomSubType.WHITE_FIRE] = "WHITE_FIRE"
____exports.DownpourRoomSubType.MIRROR = 34
____exports.DownpourRoomSubType[____exports.DownpourRoomSubType.MIRROR] = "MIRROR"
--- For `StageID.MINES` (29) and `StageID.ASHPIT` (30), `RoomType.DEFAULT` (1).
-- 
-- This matches the sub-type in the "29.mines.stb" and "30.ashpit.stb" files.
____exports.MinesRoomSubType = {}
____exports.MinesRoomSubType.NORMAL = 0
____exports.MinesRoomSubType[____exports.MinesRoomSubType.NORMAL] = "NORMAL"
____exports.MinesRoomSubType.BUTTON_ROOM = 1
____exports.MinesRoomSubType[____exports.MinesRoomSubType.BUTTON_ROOM] = "BUTTON_ROOM"
____exports.MinesRoomSubType.MINESHAFT_ENTRANCE = 10
____exports.MinesRoomSubType[____exports.MinesRoomSubType.MINESHAFT_ENTRANCE] = "MINESHAFT_ENTRANCE"
____exports.MinesRoomSubType.MINESHAFT_LOBBY = 11
____exports.MinesRoomSubType[____exports.MinesRoomSubType.MINESHAFT_LOBBY] = "MINESHAFT_LOBBY"
____exports.MinesRoomSubType.MINESHAFT_KNIFE_PIECE = 20
____exports.MinesRoomSubType[____exports.MinesRoomSubType.MINESHAFT_KNIFE_PIECE] = "MINESHAFT_KNIFE_PIECE"
____exports.MinesRoomSubType.MINESHAFT_ROOM_PRE_CHASE = 30
____exports.MinesRoomSubType[____exports.MinesRoomSubType.MINESHAFT_ROOM_PRE_CHASE] = "MINESHAFT_ROOM_PRE_CHASE"
____exports.MinesRoomSubType.MINESHAFT_ROOM_POST_CHASE = 31
____exports.MinesRoomSubType[____exports.MinesRoomSubType.MINESHAFT_ROOM_POST_CHASE] = "MINESHAFT_ROOM_POST_CHASE"
--- For `StageID.HOME` (35), `RoomType.DEFAULT` (1).
-- 
-- This matches the sub-type in the "35.home.stb" file.
____exports.HomeRoomSubType = {}
____exports.HomeRoomSubType.ISAACS_BEDROOM = 0
____exports.HomeRoomSubType[____exports.HomeRoomSubType.ISAACS_BEDROOM] = "ISAACS_BEDROOM"
____exports.HomeRoomSubType.HALLWAY = 1
____exports.HomeRoomSubType[____exports.HomeRoomSubType.HALLWAY] = "HALLWAY"
____exports.HomeRoomSubType.MOMS_BEDROOM = 2
____exports.HomeRoomSubType[____exports.HomeRoomSubType.MOMS_BEDROOM] = "MOMS_BEDROOM"
____exports.HomeRoomSubType.LIVING_ROOM = 3
____exports.HomeRoomSubType[____exports.HomeRoomSubType.LIVING_ROOM] = "LIVING_ROOM"
____exports.HomeRoomSubType.CLOSET_RIGHT = 10
____exports.HomeRoomSubType[____exports.HomeRoomSubType.CLOSET_RIGHT] = "CLOSET_RIGHT"
____exports.HomeRoomSubType.CLOSET_LEFT = 11
____exports.HomeRoomSubType[____exports.HomeRoomSubType.CLOSET_LEFT] = "CLOSET_LEFT"
____exports.HomeRoomSubType.DEATH_CERTIFICATE_ENTRANCE = 33
____exports.HomeRoomSubType[____exports.HomeRoomSubType.DEATH_CERTIFICATE_ENTRANCE] = "DEATH_CERTIFICATE_ENTRANCE"
____exports.HomeRoomSubType.DEATH_CERTIFICATE_ITEMS = 34
____exports.HomeRoomSubType[____exports.HomeRoomSubType.DEATH_CERTIFICATE_ITEMS] = "DEATH_CERTIFICATE_ITEMS"
--- For `StageID.BACKWARDS` (36), `RoomType.DEFAULT` (1).
-- 
-- This matches the sub-type in the "36.backwards.stb" file.
____exports.BackwardsRoomSubType = {}
____exports.BackwardsRoomSubType.EXIT = 0
____exports.BackwardsRoomSubType[____exports.BackwardsRoomSubType.EXIT] = "EXIT"
____exports.BackwardsRoomSubType.BASEMENT = 1
____exports.BackwardsRoomSubType[____exports.BackwardsRoomSubType.BASEMENT] = "BASEMENT"
____exports.BackwardsRoomSubType.CAVES = 4
____exports.BackwardsRoomSubType[____exports.BackwardsRoomSubType.CAVES] = "CAVES"
____exports.BackwardsRoomSubType.DEPTHS = 7
____exports.BackwardsRoomSubType[____exports.BackwardsRoomSubType.DEPTHS] = "DEPTHS"
____exports.BackwardsRoomSubType.DOWNPOUR = 27
____exports.BackwardsRoomSubType[____exports.BackwardsRoomSubType.DOWNPOUR] = "DOWNPOUR"
____exports.BackwardsRoomSubType.MINES = 29
____exports.BackwardsRoomSubType[____exports.BackwardsRoomSubType.MINES] = "MINES"
____exports.BackwardsRoomSubType.MAUSOLEUM = 31
____exports.BackwardsRoomSubType[____exports.BackwardsRoomSubType.MAUSOLEUM] = "MAUSOLEUM"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.collections.npcStates"] = function(...) 
local ____exports = {}
--- EntityType.FAMILIAR (3), FamiliarVariant.LOST_SOUL (211).
____exports.LostSoulState = {}
____exports.LostSoulState.ALIVE = 1
____exports.LostSoulState[____exports.LostSoulState.ALIVE] = "ALIVE"
____exports.LostSoulState.DEAD = 4
____exports.LostSoulState[____exports.LostSoulState.DEAD] = "DEAD"
--- For `EntityType.FAMINE` (63).
____exports.FamineState = {}
____exports.FamineState.MOVE = 4
____exports.FamineState[____exports.FamineState.MOVE] = "MOVE"
____exports.FamineState.HORIZONTAL_CHARGE = 8
____exports.FamineState[____exports.FamineState.HORIZONTAL_CHARGE] = "HORIZONTAL_CHARGE"
____exports.FamineState.PHASE_2 = 9
____exports.FamineState[____exports.FamineState.PHASE_2] = "PHASE_2"
____exports.FamineState.SUMMON = 13
____exports.FamineState[____exports.FamineState.SUMMON] = "SUMMON"
--- For `EntityType.PESTILENCE` (64).
____exports.PestilenceState = {}
____exports.PestilenceState.MOVE = 4
____exports.PestilenceState[____exports.PestilenceState.MOVE] = "MOVE"
____exports.PestilenceState.ATTACK_IPECAC = 8
____exports.PestilenceState[____exports.PestilenceState.ATTACK_IPECAC] = "ATTACK_IPECAC"
____exports.PestilenceState.SUMMON = 13
____exports.PestilenceState[____exports.PestilenceState.SUMMON] = "SUMMON"
--- For `EntityType.WAR` (65), `WarVariant.WAR (0).
____exports.WarState = {}
____exports.WarState.MOVE = 4
____exports.WarState[____exports.WarState.MOVE] = "MOVE"
____exports.WarState.JUMP_AND_SPAWN_TROLL_BOMBS = 6
____exports.WarState[____exports.WarState.JUMP_AND_SPAWN_TROLL_BOMBS] = "JUMP_AND_SPAWN_TROLL_BOMBS"
____exports.WarState.HORIZONTAL_CHARGE = 9
____exports.WarState[____exports.WarState.HORIZONTAL_CHARGE] = "HORIZONTAL_CHARGE"
--- For `EntityType.WAR` (65), `WarVariant.CONQUEST (1).
____exports.ConquestState = {}
____exports.ConquestState.MOVE = 4
____exports.ConquestState[____exports.ConquestState.MOVE] = "MOVE"
____exports.ConquestState.JUMP_AND_SPAWN_BEAMS = 6
____exports.ConquestState[____exports.ConquestState.JUMP_AND_SPAWN_BEAMS] = "JUMP_AND_SPAWN_BEAMS"
____exports.ConquestState.TEAR_ATTACK = 8
____exports.ConquestState[____exports.ConquestState.TEAR_ATTACK] = "TEAR_ATTACK"
____exports.ConquestState.HORIZONTAL_CHARGE = 9
____exports.ConquestState[____exports.ConquestState.HORIZONTAL_CHARGE] = "HORIZONTAL_CHARGE"
--- For `EntityType.WAR` (65), `WarVariant.WAR_WITHOUT_HORSE (2).
____exports.WarWithoutHorseState = {}
____exports.WarWithoutHorseState.MOVE = 4
____exports.WarWithoutHorseState[____exports.WarWithoutHorseState.MOVE] = "MOVE"
____exports.WarWithoutHorseState.SIT = 8
____exports.WarWithoutHorseState[____exports.WarWithoutHorseState.SIT] = "SIT"
--- For `EntityType.DEATH` (66).
____exports.DeathState = {}
____exports.DeathState.APPEAR = 1
____exports.DeathState[____exports.DeathState.APPEAR] = "APPEAR"
____exports.DeathState.SCYTHE_APPEAR = 3
____exports.DeathState[____exports.DeathState.SCYTHE_APPEAR] = "SCYTHE_APPEAR"
____exports.DeathState.MOVE = 4
____exports.DeathState[____exports.DeathState.MOVE] = "MOVE"
____exports.DeathState.JUMP_OFF_HORSE = 7
____exports.DeathState[____exports.DeathState.JUMP_OFF_HORSE] = "JUMP_OFF_HORSE"
____exports.DeathState.SLOW_ATTACK = 8
____exports.DeathState[____exports.DeathState.SLOW_ATTACK] = "SLOW_ATTACK"
____exports.DeathState.SUMMON_KNIGHTS = 13
____exports.DeathState[____exports.DeathState.SUMMON_KNIGHTS] = "SUMMON_KNIGHTS"
____exports.DeathState.SUMMON_SCYTHES = 14
____exports.DeathState[____exports.DeathState.SUMMON_SCYTHES] = "SUMMON_SCYTHES"
--- For `EntityType.DADDY_LONG_LEGS` (101).
____exports.DaddyLongLegsState = {}
____exports.DaddyLongLegsState.SLAM_WITH_PROJECTILE_BURST = 4
____exports.DaddyLongLegsState[____exports.DaddyLongLegsState.SLAM_WITH_PROJECTILE_BURST] = "SLAM_WITH_PROJECTILE_BURST"
____exports.DaddyLongLegsState.STOMP_ATTACK_LEG = 7
____exports.DaddyLongLegsState[____exports.DaddyLongLegsState.STOMP_ATTACK_LEG] = "STOMP_ATTACK_LEG"
____exports.DaddyLongLegsState.SPITTING_SPIDERS_ATTACK = 8
____exports.DaddyLongLegsState[____exports.DaddyLongLegsState.SPITTING_SPIDERS_ATTACK] = "SPITTING_SPIDERS_ATTACK"
____exports.DaddyLongLegsState.MULTI_STOMP_ATTACK_MAIN = 9
____exports.DaddyLongLegsState[____exports.DaddyLongLegsState.MULTI_STOMP_ATTACK_MAIN] = "MULTI_STOMP_ATTACK_MAIN"
--- For `EntityType.BIG_HORN` (411), `BigHornVariant.BIG_HORN` (0).
____exports.BigHornState = {}
____exports.BigHornState.IDLE = 3
____exports.BigHornState[____exports.BigHornState.IDLE] = "IDLE"
____exports.BigHornState.HEAD_GOING_UP_OR_GOING_DOWN_INTO_HOLE = 4
____exports.BigHornState[____exports.BigHornState.HEAD_GOING_UP_OR_GOING_DOWN_INTO_HOLE] = "HEAD_GOING_UP_OR_GOING_DOWN_INTO_HOLE"
____exports.BigHornState.HAND_GOING_DOWN_INTO_HOLE = 5
____exports.BigHornState[____exports.BigHornState.HAND_GOING_DOWN_INTO_HOLE] = "HAND_GOING_DOWN_INTO_HOLE"
____exports.BigHornState.HAND_SLAM_ATTACK = 8
____exports.BigHornState[____exports.BigHornState.HAND_SLAM_ATTACK] = "HAND_SLAM_ATTACK"
____exports.BigHornState.HAND_THROW_TROLL_BOMB_ATTACK = 9
____exports.BigHornState[____exports.BigHornState.HAND_THROW_TROLL_BOMB_ATTACK] = "HAND_THROW_TROLL_BOMB_ATTACK"
____exports.BigHornState.HAND_THROW_TRIPLE_TROLL_BOMB_ATTACK = 10
____exports.BigHornState[____exports.BigHornState.HAND_THROW_TRIPLE_TROLL_BOMB_ATTACK] = "HAND_THROW_TRIPLE_TROLL_BOMB_ATTACK"
____exports.BigHornState.HEAD_BALL_ATTACK = 13
____exports.BigHornState[____exports.BigHornState.HEAD_BALL_ATTACK] = "HEAD_BALL_ATTACK"
--- For `EntityType.REAP_CREEP` (900).
____exports.ReapCreepState = {}
____exports.ReapCreepState.CRAWLING_FROM_SIDE_TO_SIDE = 3
____exports.ReapCreepState[____exports.ReapCreepState.CRAWLING_FROM_SIDE_TO_SIDE] = "CRAWLING_FROM_SIDE_TO_SIDE"
____exports.ReapCreepState.JUMPING_TO_TOP_WALL = 6
____exports.ReapCreepState[____exports.ReapCreepState.JUMPING_TO_TOP_WALL] = "JUMPING_TO_TOP_WALL"
____exports.ReapCreepState.WALL_SLAM_ATTACK = 7
____exports.ReapCreepState[____exports.ReapCreepState.WALL_SLAM_ATTACK] = "WALL_SLAM_ATTACK"
____exports.ReapCreepState.PROJECTILE_SPIT_LINE_ATTACK = 8
____exports.ReapCreepState[____exports.ReapCreepState.PROJECTILE_SPIT_LINE_ATTACK] = "PROJECTILE_SPIT_LINE_ATTACK"
____exports.ReapCreepState.PROJECTILE_SPIT_BURST_ATTACK = 9
____exports.ReapCreepState[____exports.ReapCreepState.PROJECTILE_SPIT_BURST_ATTACK] = "PROJECTILE_SPIT_BURST_ATTACK"
____exports.ReapCreepState.BRIMSTONE_ATTACK = 10
____exports.ReapCreepState[____exports.ReapCreepState.BRIMSTONE_ATTACK] = "BRIMSTONE_ATTACK"
____exports.ReapCreepState.SPAWNING_WALL_SPIDERS = 13
____exports.ReapCreepState[____exports.ReapCreepState.SPAWNING_WALL_SPIDERS] = "SPAWNING_WALL_SPIDERS"
____exports.ReapCreepState.SPAWNING_SPIDERS = 14
____exports.ReapCreepState[____exports.ReapCreepState.SPAWNING_SPIDERS] = "SPAWNING_SPIDERS"
____exports.ReapCreepState.TRANSFORMING_TO_NEXT_PHASE = 16
____exports.ReapCreepState[____exports.ReapCreepState.TRANSFORMING_TO_NEXT_PHASE] = "TRANSFORMING_TO_NEXT_PHASE"
--- For `EntityType.COLOSTOMIA` (917).
____exports.ColostomiaState = {}
____exports.ColostomiaState.IDLE_PHASE_1 = 3
____exports.ColostomiaState[____exports.ColostomiaState.IDLE_PHASE_1] = "IDLE_PHASE_1"
____exports.ColostomiaState.IDLE_PHASE_2 = 4
____exports.ColostomiaState[____exports.ColostomiaState.IDLE_PHASE_2] = "IDLE_PHASE_2"
____exports.ColostomiaState.JUMP_ATTACK_WITH_PROJECTILE_SPLASH = 6
____exports.ColostomiaState[____exports.ColostomiaState.JUMP_ATTACK_WITH_PROJECTILE_SPLASH] = "JUMP_ATTACK_WITH_PROJECTILE_SPLASH"
____exports.ColostomiaState.CHARGE_SLIDE = 8
____exports.ColostomiaState[____exports.ColostomiaState.CHARGE_SLIDE] = "CHARGE_SLIDE"
____exports.ColostomiaState.SPIT_POOP_BOMB = 9
____exports.ColostomiaState[____exports.ColostomiaState.SPIT_POOP_BOMB] = "SPIT_POOP_BOMB"
____exports.ColostomiaState.SPIT_TWO_POOP_BOMBS = 10
____exports.ColostomiaState[____exports.ColostomiaState.SPIT_TWO_POOP_BOMBS] = "SPIT_TWO_POOP_BOMBS"
____exports.ColostomiaState.FART_ATTACK = 11
____exports.ColostomiaState[____exports.ColostomiaState.FART_ATTACK] = "FART_ATTACK"
____exports.ColostomiaState.TRANSITION_TO_PHASE_2 = 16
____exports.ColostomiaState[____exports.ColostomiaState.TRANSITION_TO_PHASE_2] = "TRANSITION_TO_PHASE_2"
--- For `EntityType.ULTRA_GREED` (406), `UltraGreedVariant.ULTRA_GREED` (0).
____exports.UltraGreedState = {}
____exports.UltraGreedState.HANGING = 2
____exports.UltraGreedState[____exports.UltraGreedState.HANGING] = "HANGING"
____exports.UltraGreedState.IDLE = 3
____exports.UltraGreedState[____exports.UltraGreedState.IDLE] = "IDLE"
____exports.UltraGreedState.MOVE = 4
____exports.UltraGreedState[____exports.UltraGreedState.MOVE] = "MOVE"
____exports.UltraGreedState.GOLD_STATUE_BREAKING_OUT = 16
____exports.UltraGreedState[____exports.UltraGreedState.GOLD_STATUE_BREAKING_OUT] = "GOLD_STATUE_BREAKING_OUT"
____exports.UltraGreedState.EYES_SPINNING = 100
____exports.UltraGreedState[____exports.UltraGreedState.EYES_SPINNING] = "EYES_SPINNING"
____exports.UltraGreedState.STOMPING = 200
____exports.UltraGreedState[____exports.UltraGreedState.STOMPING] = "STOMPING"
____exports.UltraGreedState.BLOCKING_WITH_ARMS = 400
____exports.UltraGreedState[____exports.UltraGreedState.BLOCKING_WITH_ARMS] = "BLOCKING_WITH_ARMS"
____exports.UltraGreedState.SPIN_ATTACK = 510
____exports.UltraGreedState[____exports.UltraGreedState.SPIN_ATTACK] = "SPIN_ATTACK"
____exports.UltraGreedState.SHOOT_4_COINS = 600
____exports.UltraGreedState[____exports.UltraGreedState.SHOOT_4_COINS] = "SHOOT_4_COINS"
____exports.UltraGreedState.DYING = 9000
____exports.UltraGreedState[____exports.UltraGreedState.DYING] = "DYING"
____exports.UltraGreedState.GOLD_STATUE = 9001
____exports.UltraGreedState[____exports.UltraGreedState.GOLD_STATUE] = "GOLD_STATUE"
--- For `EntityType.ULTRA_GREED` (406), `UltraGreedVariant.ULTRA_GREEDIER` (1).
____exports.UltraGreedierState = {}
____exports.UltraGreedierState.IDLE = 3
____exports.UltraGreedierState[____exports.UltraGreedierState.IDLE] = "IDLE"
____exports.UltraGreedierState.MOVE = 4
____exports.UltraGreedierState[____exports.UltraGreedierState.MOVE] = "MOVE"
____exports.UltraGreedierState.JUMP = 6
____exports.UltraGreedierState[____exports.UltraGreedierState.JUMP] = "JUMP"
____exports.UltraGreedierState.STOMPING = 200
____exports.UltraGreedierState[____exports.UltraGreedierState.STOMPING] = "STOMPING"
____exports.UltraGreedierState.SHOOT_4_COINS = 600
____exports.UltraGreedierState[____exports.UltraGreedierState.SHOOT_4_COINS] = "SHOOT_4_COINS"
____exports.UltraGreedierState.FIST_POUND = 700
____exports.UltraGreedierState[____exports.UltraGreedierState.FIST_POUND] = "FIST_POUND"
____exports.UltraGreedierState.FIST_POUND_TRIPLE = 710
____exports.UltraGreedierState[____exports.UltraGreedierState.FIST_POUND_TRIPLE] = "FIST_POUND_TRIPLE"
____exports.UltraGreedierState.DYING = 9000
____exports.UltraGreedierState[____exports.UltraGreedierState.DYING] = "DYING"
____exports.UltraGreedierState.POST_EXPLOSION = 9001
____exports.UltraGreedierState[____exports.UltraGreedierState.POST_EXPLOSION] = "POST_EXPLOSION"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.collections.gridEntityVariants"] = function(...) 
local ____exports = {}
--- For `GridEntityType.ROCK` (2).
-- 
-- Note that this does not always apply to `GridEntityRock`, since that class can be equal to other
-- grid entity types.
____exports.RockVariant = {}
____exports.RockVariant.NORMAL = 0
____exports.RockVariant[____exports.RockVariant.NORMAL] = "NORMAL"
____exports.RockVariant.EVENT = 1
____exports.RockVariant[____exports.RockVariant.EVENT] = "EVENT"
--- For GridEntityType.ROCK_ALT (6), RockAltType.URN.
-- 
-- Note that you are unable to spawn specific urn variants. The game will pick a random variant
-- regardless of which one you select.
____exports.UrnVariant = {}
____exports.UrnVariant.NORMAL = 0
____exports.UrnVariant[____exports.UrnVariant.NORMAL] = "NORMAL"
____exports.UrnVariant.CHIPPED_TOP_LEFT = 1
____exports.UrnVariant[____exports.UrnVariant.CHIPPED_TOP_LEFT] = "CHIPPED_TOP_LEFT"
____exports.UrnVariant.NARROW = 2
____exports.UrnVariant[____exports.UrnVariant.NARROW] = "NARROW"
--- For GridEntityType.ROCK_ALT (6), RockAltType.MUSHROOM.
-- 
-- Note that you are unable to spawn specific mushroom variants. The game will pick a random variant
-- regardless of which one you select.
____exports.MushroomVariant = {}
____exports.MushroomVariant.NORMAL = 0
____exports.MushroomVariant[____exports.MushroomVariant.NORMAL] = "NORMAL"
____exports.MushroomVariant.CHIPPED_TOP_RIGHT = 1
____exports.MushroomVariant[____exports.MushroomVariant.CHIPPED_TOP_RIGHT] = "CHIPPED_TOP_RIGHT"
____exports.MushroomVariant.NARROW = 2
____exports.MushroomVariant[____exports.MushroomVariant.NARROW] = "NARROW"
--- For GridEntityType.ROCK_ALT (6), RockAltType.SKULL.
-- 
-- Note that you are unable to spawn specific skull variants. The game will pick a random variant
-- regardless of which one you select.
____exports.SkullVariant = {}
____exports.SkullVariant.NORMAL = 0
____exports.SkullVariant[____exports.SkullVariant.NORMAL] = "NORMAL"
____exports.SkullVariant.FACING_RIGHT = 1
____exports.SkullVariant[____exports.SkullVariant.FACING_RIGHT] = "FACING_RIGHT"
____exports.SkullVariant.FACING_LEFT = 2
____exports.SkullVariant[____exports.SkullVariant.FACING_LEFT] = "FACING_LEFT"
--- For GridEntityType.ROCK_ALT (6), RockAltType.POLYP.
-- 
-- Note that you are unable to spawn specific polyp variants. The game will pick a random variant
-- regardless of which one you select.
____exports.PolypVariant = {}
____exports.PolypVariant.NORMAL = 0
____exports.PolypVariant[____exports.PolypVariant.NORMAL] = "NORMAL"
____exports.PolypVariant.MANY_FINGERS = 1
____exports.PolypVariant[____exports.PolypVariant.MANY_FINGERS] = "MANY_FINGERS"
____exports.PolypVariant.FLIPPED_AND_SHIFTED_UPWARDS = 2
____exports.PolypVariant[____exports.PolypVariant.FLIPPED_AND_SHIFTED_UPWARDS] = "FLIPPED_AND_SHIFTED_UPWARDS"
--- For GridEntityType.ROCK_ALT (6), RockAltType.BUCKET.
-- 
-- Note that you are unable to spawn specific bucket variants. The game will pick a random variant
-- regardless of which one you select.
____exports.BucketVariant = {}
____exports.BucketVariant.EMPTY = 0
____exports.BucketVariant[____exports.BucketVariant.EMPTY] = "EMPTY"
____exports.BucketVariant.FULL = 1
____exports.BucketVariant[____exports.BucketVariant.FULL] = "FULL"
____exports.BucketVariant.EMPTY_AND_SHIFTED_UPWARDS = 2
____exports.BucketVariant[____exports.BucketVariant.EMPTY_AND_SHIFTED_UPWARDS] = "EMPTY_AND_SHIFTED_UPWARDS"
--- For `GridEntityType.PIT` (7).
____exports.PitVariant = {}
____exports.PitVariant.NORMAL = 0
____exports.PitVariant[____exports.PitVariant.NORMAL] = "NORMAL"
____exports.PitVariant.FISSURE_SPAWNER = 16
____exports.PitVariant[____exports.PitVariant.FISSURE_SPAWNER] = "FISSURE_SPAWNER"
--- For `GridEntityType.FIREPLACE` (13).
-- 
-- This only partially corresponds to the `FireplaceVariant` for non-grid entities. (Spawning a grid
-- entity fireplace with a variant higher than 1 will result in a normal fireplace.)
____exports.FireplaceGridEntityVariant = {}
____exports.FireplaceGridEntityVariant.NORMAL = 0
____exports.FireplaceGridEntityVariant[____exports.FireplaceGridEntityVariant.NORMAL] = "NORMAL"
____exports.FireplaceGridEntityVariant.RED = 1
____exports.FireplaceGridEntityVariant[____exports.FireplaceGridEntityVariant.RED] = "RED"
--- For `GridEntityType.POOP` (14).
____exports.PoopGridEntityVariant = {}
____exports.PoopGridEntityVariant.NORMAL = 0
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.NORMAL] = "NORMAL"
____exports.PoopGridEntityVariant.RED = 1
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.RED] = "RED"
____exports.PoopGridEntityVariant.CORNY = 2
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.CORNY] = "CORNY"
____exports.PoopGridEntityVariant.GOLDEN = 3
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.GOLDEN] = "GOLDEN"
____exports.PoopGridEntityVariant.RAINBOW = 4
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.RAINBOW] = "RAINBOW"
____exports.PoopGridEntityVariant.BLACK = 5
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.BLACK] = "BLACK"
____exports.PoopGridEntityVariant.WHITE = 6
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.WHITE] = "WHITE"
____exports.PoopGridEntityVariant.GIANT_TOP_LEFT = 7
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.GIANT_TOP_LEFT] = "GIANT_TOP_LEFT"
____exports.PoopGridEntityVariant.GIANT_TOP_RIGHT = 8
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.GIANT_TOP_RIGHT] = "GIANT_TOP_RIGHT"
____exports.PoopGridEntityVariant.GIANT_BOTTOM_LEFT = 9
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.GIANT_BOTTOM_LEFT] = "GIANT_BOTTOM_LEFT"
____exports.PoopGridEntityVariant.GIANT_BOTTOM_RIGHT = 10
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.GIANT_BOTTOM_RIGHT] = "GIANT_BOTTOM_RIGHT"
____exports.PoopGridEntityVariant.CHARMING = 11
____exports.PoopGridEntityVariant[____exports.PoopGridEntityVariant.CHARMING] = "CHARMING"
--- For `GridEntityType.DOOR` (16).
____exports.DoorVariant = {}
____exports.DoorVariant.UNSPECIFIED = 0
____exports.DoorVariant[____exports.DoorVariant.UNSPECIFIED] = "UNSPECIFIED"
____exports.DoorVariant.LOCKED = 1
____exports.DoorVariant[____exports.DoorVariant.LOCKED] = "LOCKED"
____exports.DoorVariant.LOCKED_DOUBLE = 2
____exports.DoorVariant[____exports.DoorVariant.LOCKED_DOUBLE] = "LOCKED_DOUBLE"
____exports.DoorVariant.LOCKED_CRACKED = 3
____exports.DoorVariant[____exports.DoorVariant.LOCKED_CRACKED] = "LOCKED_CRACKED"
____exports.DoorVariant.LOCKED_BARRED = 4
____exports.DoorVariant[____exports.DoorVariant.LOCKED_BARRED] = "LOCKED_BARRED"
____exports.DoorVariant.LOCKED_KEY_FAMILIAR = 5
____exports.DoorVariant[____exports.DoorVariant.LOCKED_KEY_FAMILIAR] = "LOCKED_KEY_FAMILIAR"
____exports.DoorVariant.LOCKED_GREED = 6
____exports.DoorVariant[____exports.DoorVariant.LOCKED_GREED] = "LOCKED_GREED"
____exports.DoorVariant.HIDDEN = 7
____exports.DoorVariant[____exports.DoorVariant.HIDDEN] = "HIDDEN"
____exports.DoorVariant.UNLOCKED = 8
____exports.DoorVariant[____exports.DoorVariant.UNLOCKED] = "UNLOCKED"
--- For `GridEntityType.TRAPDOOR` (17).
____exports.TrapdoorVariant = {}
____exports.TrapdoorVariant.NORMAL = 0
____exports.TrapdoorVariant[____exports.TrapdoorVariant.NORMAL] = "NORMAL"
____exports.TrapdoorVariant.VOID_PORTAL = 1
____exports.TrapdoorVariant[____exports.TrapdoorVariant.VOID_PORTAL] = "VOID_PORTAL"
--- For `GridEntityType.CRAWL_SPACE` (18).
____exports.CrawlSpaceVariant = {}
____exports.CrawlSpaceVariant.NORMAL = 0
____exports.CrawlSpaceVariant[____exports.CrawlSpaceVariant.NORMAL] = "NORMAL"
____exports.CrawlSpaceVariant.GREAT_GIDEON = 1
____exports.CrawlSpaceVariant[____exports.CrawlSpaceVariant.GREAT_GIDEON] = "GREAT_GIDEON"
____exports.CrawlSpaceVariant.SECRET_SHOP = 2
____exports.CrawlSpaceVariant[____exports.CrawlSpaceVariant.SECRET_SHOP] = "SECRET_SHOP"
____exports.CrawlSpaceVariant.PASSAGE_TO_BEGINNING_OF_FLOOR = 3
____exports.CrawlSpaceVariant[____exports.CrawlSpaceVariant.PASSAGE_TO_BEGINNING_OF_FLOOR] = "PASSAGE_TO_BEGINNING_OF_FLOOR"
____exports.CrawlSpaceVariant.NULL = 4
____exports.CrawlSpaceVariant[____exports.CrawlSpaceVariant.NULL] = "NULL"
--- For `GridEntityType.PRESSURE_PLATE` (20).
____exports.PressurePlateVariant = {}
____exports.PressurePlateVariant.PRESSURE_PLATE = 0
____exports.PressurePlateVariant[____exports.PressurePlateVariant.PRESSURE_PLATE] = "PRESSURE_PLATE"
____exports.PressurePlateVariant.REWARD_PLATE = 1
____exports.PressurePlateVariant[____exports.PressurePlateVariant.REWARD_PLATE] = "REWARD_PLATE"
____exports.PressurePlateVariant.GREED_PLATE = 2
____exports.PressurePlateVariant[____exports.PressurePlateVariant.GREED_PLATE] = "GREED_PLATE"
____exports.PressurePlateVariant.RAIL_PLATE = 3
____exports.PressurePlateVariant[____exports.PressurePlateVariant.RAIL_PLATE] = "RAIL_PLATE"
____exports.PressurePlateVariant.KILL_ALL_ENEMIES_PLATE = 9
____exports.PressurePlateVariant[____exports.PressurePlateVariant.KILL_ALL_ENEMIES_PLATE] = "KILL_ALL_ENEMIES_PLATE"
____exports.PressurePlateVariant.SPAWN_ROCKS_PLATE = 10
____exports.PressurePlateVariant[____exports.PressurePlateVariant.SPAWN_ROCKS_PLATE] = "SPAWN_ROCKS_PLATE"
--- For `GridEntityType.STATUE` (21).
____exports.StatueVariant = {}
____exports.StatueVariant.DEVIL = 0
____exports.StatueVariant[____exports.StatueVariant.DEVIL] = "DEVIL"
____exports.StatueVariant.ANGEL = 1
____exports.StatueVariant[____exports.StatueVariant.ANGEL] = "ANGEL"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.collections.gridEntityStates"] = function(...) 
local ____exports = {}
--- Used by the following grid entity types:
-- - GridEntityType.ROCK (2)
-- - GridEntityType.ROCK_TINTED (4)
-- - GridEntityType.ROCK_BOMB (5)
-- - GridEntityType.ROCK_ALT (6)
-- - GridEntityType.STATUE (21) (only for Angel Statues)
-- - GridEntityType.ROCK_SS (22)
-- - GridEntityType.ROCK_SPIKED (25)
-- - GridEntityType.ROCK_ALT2 (26)
-- - GridEntityType.ROCK_GOLD (27)
____exports.RockState = {}
____exports.RockState.UNBROKEN = 1
____exports.RockState[____exports.RockState.UNBROKEN] = "UNBROKEN"
____exports.RockState.BROKEN = 2
____exports.RockState[____exports.RockState.BROKEN] = "BROKEN"
____exports.RockState.EXPLODING = 3
____exports.RockState[____exports.RockState.EXPLODING] = "EXPLODING"
____exports.RockState.HALF_BROKEN = 4
____exports.RockState[____exports.RockState.HALF_BROKEN] = "HALF_BROKEN"
--- For `GridEntityType.PIT` (7).
____exports.PitState = {}
____exports.PitState.NORMAL = 0
____exports.PitState[____exports.PitState.NORMAL] = "NORMAL"
____exports.PitState.FILLED = 1
____exports.PitState[____exports.PitState.FILLED] = "FILLED"
--- For `GridEntityType.SPIKES_ON_OFF` (9).
____exports.SpikesOnOffState = {}
____exports.SpikesOnOffState.ON = 0
____exports.SpikesOnOffState[____exports.SpikesOnOffState.ON] = "ON"
____exports.SpikesOnOffState.OFF = 1
____exports.SpikesOnOffState[____exports.SpikesOnOffState.OFF] = "OFF"
--- For `GridEntityType.SPIDERWEB` (10).
____exports.SpiderWebState = {}
____exports.SpiderWebState.UNBROKEN = 0
____exports.SpiderWebState[____exports.SpiderWebState.UNBROKEN] = "UNBROKEN"
____exports.SpiderWebState.BROKEN = 1
____exports.SpiderWebState[____exports.SpiderWebState.BROKEN] = "BROKEN"
--- For `GridEntityType.LOCK` (11).
____exports.LockState = {}
____exports.LockState.LOCKED = 0
____exports.LockState[____exports.LockState.LOCKED] = "LOCKED"
____exports.LockState.UNLOCKED = 1
____exports.LockState[____exports.LockState.UNLOCKED] = "UNLOCKED"
--- For `GridEntityType.TNT` (12).
-- 
-- The health of a TNT barrel is represented by its state. It starts at 0 and climbs upwards in
-- increments of 1. Once the state reaches 4, the barrel explodes, and remains at state 4.
-- 
-- Breaking a TNT barrel usually takes 4 tears. However, it is possible to take less than that if
-- the players damage is high enough. (High damage causes the tear to do two or more increments at
-- once.)
____exports.TNTState = {}
____exports.TNTState.UNDAMAGED = 0
____exports.TNTState[____exports.TNTState.UNDAMAGED] = "UNDAMAGED"
____exports.TNTState.ONE_QUARTER_DAMAGED = 1
____exports.TNTState[____exports.TNTState.ONE_QUARTER_DAMAGED] = "ONE_QUARTER_DAMAGED"
____exports.TNTState.TWO_QUARTERS_DAMAGED = 2
____exports.TNTState[____exports.TNTState.TWO_QUARTERS_DAMAGED] = "TWO_QUARTERS_DAMAGED"
____exports.TNTState.THREE_QUARTERS_DAMAGED = 3
____exports.TNTState[____exports.TNTState.THREE_QUARTERS_DAMAGED] = "THREE_QUARTERS_DAMAGED"
____exports.TNTState.EXPLODED = 4
____exports.TNTState[____exports.TNTState.EXPLODED] = "EXPLODED"
--- For `GridEntityType.POOP` (14).
-- 
-- The health of a poop is represented by its state. It starts at 0 and climbs upwards in increments
-- of 250. Once the state reaches 1000, the poop is completely broken.
-- 
-- Breaking a poop usually takes 4 tears. However, it is possible to take less than that if the
-- players damage is high enough. (High damage causes the tear to do two or more increments at
-- once.)
-- 
-- Giga Poops increment by 20 instead of 250. Thus, they take around 50 tears to destroy.
____exports.PoopState = {}
____exports.PoopState.UNDAMAGED = 0
____exports.PoopState[____exports.PoopState.UNDAMAGED] = "UNDAMAGED"
____exports.PoopState.ONE_QUARTER_DAMAGED = 250
____exports.PoopState[____exports.PoopState.ONE_QUARTER_DAMAGED] = "ONE_QUARTER_DAMAGED"
____exports.PoopState.TWO_QUARTERS_DAMAGED = 500
____exports.PoopState[____exports.PoopState.TWO_QUARTERS_DAMAGED] = "TWO_QUARTERS_DAMAGED"
____exports.PoopState.THREE_QUARTERS_DAMAGED = 750
____exports.PoopState[____exports.PoopState.THREE_QUARTERS_DAMAGED] = "THREE_QUARTERS_DAMAGED"
____exports.PoopState.COMPLETELY_DESTROYED = 1000
____exports.PoopState[____exports.PoopState.COMPLETELY_DESTROYED] = "COMPLETELY_DESTROYED"
--- For `GridEntityType.DOOR` (16).
____exports.DoorState = {}
____exports.DoorState.INIT = 0
____exports.DoorState[____exports.DoorState.INIT] = "INIT"
____exports.DoorState.CLOSED = 1
____exports.DoorState[____exports.DoorState.CLOSED] = "CLOSED"
____exports.DoorState.OPEN = 2
____exports.DoorState[____exports.DoorState.OPEN] = "OPEN"
____exports.DoorState.ONE_CHAIN = 3
____exports.DoorState[____exports.DoorState.ONE_CHAIN] = "ONE_CHAIN"
____exports.DoorState.HALF_CRACKED = 4
____exports.DoorState[____exports.DoorState.HALF_CRACKED] = "HALF_CRACKED"
--- For `GridEntityType.TRAPDOOR` (17).
____exports.TrapdoorState = {}
____exports.TrapdoorState.CLOSED = 0
____exports.TrapdoorState[____exports.TrapdoorState.CLOSED] = "CLOSED"
____exports.TrapdoorState.OPEN = 1
____exports.TrapdoorState[____exports.TrapdoorState.OPEN] = "OPEN"
--- For `GridEntityType.CRAWL_SPACE` (18).
____exports.CrawlSpaceState = {}
____exports.CrawlSpaceState.CLOSED = 0
____exports.CrawlSpaceState[____exports.CrawlSpaceState.CLOSED] = "CLOSED"
____exports.CrawlSpaceState.OPEN = 1
____exports.CrawlSpaceState[____exports.CrawlSpaceState.OPEN] = "OPEN"
--- For `GridEntityType.PRESSURE_PLATE` (20).
____exports.PressurePlateState = {}
____exports.PressurePlateState.UNPRESSED = 0
____exports.PressurePlateState[____exports.PressurePlateState.UNPRESSED] = "UNPRESSED"
____exports.PressurePlateState.STATE_1_UNKNOWN = 1
____exports.PressurePlateState[____exports.PressurePlateState.STATE_1_UNKNOWN] = "STATE_1_UNKNOWN"
____exports.PressurePlateState.STATE_2_UNKNOWN = 2
____exports.PressurePlateState[____exports.PressurePlateState.STATE_2_UNKNOWN] = "STATE_2_UNKNOWN"
____exports.PressurePlateState.PRESSURE_PLATE_PRESSED = 3
____exports.PressurePlateState[____exports.PressurePlateState.PRESSURE_PLATE_PRESSED] = "PRESSURE_PLATE_PRESSED"
____exports.PressurePlateState.REWARD_PLATE_PRESSED = 4
____exports.PressurePlateState[____exports.PressurePlateState.REWARD_PLATE_PRESSED] = "REWARD_PLATE_PRESSED"
--- For `GridEntityType.TELEPORTER` (23).
____exports.TeleporterState = {}
____exports.TeleporterState.NORMAL = 0
____exports.TeleporterState[____exports.TeleporterState.NORMAL] = "NORMAL"
____exports.TeleporterState.ACTIVATED = 1
____exports.TeleporterState[____exports.TeleporterState.ACTIVATED] = "ACTIVATED"
____exports.TeleporterState.DISABLED = 2
____exports.TeleporterState[____exports.TeleporterState.DISABLED] = "DISABLED"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.WeaponType"] = function(...) 
local ____exports = {}
____exports.WeaponType = {}
____exports.WeaponType.TEARS = 1
____exports.WeaponType[____exports.WeaponType.TEARS] = "TEARS"
____exports.WeaponType.BRIMSTONE = 2
____exports.WeaponType[____exports.WeaponType.BRIMSTONE] = "BRIMSTONE"
____exports.WeaponType.LASER = 3
____exports.WeaponType[____exports.WeaponType.LASER] = "LASER"
____exports.WeaponType.KNIFE = 4
____exports.WeaponType[____exports.WeaponType.KNIFE] = "KNIFE"
____exports.WeaponType.BOMBS = 5
____exports.WeaponType[____exports.WeaponType.BOMBS] = "BOMBS"
____exports.WeaponType.ROCKETS = 6
____exports.WeaponType[____exports.WeaponType.ROCKETS] = "ROCKETS"
____exports.WeaponType.MONSTROS_LUNG = 7
____exports.WeaponType[____exports.WeaponType.MONSTROS_LUNG] = "MONSTROS_LUNG"
____exports.WeaponType.LUDOVICO_TECHNIQUE = 8
____exports.WeaponType[____exports.WeaponType.LUDOVICO_TECHNIQUE] = "LUDOVICO_TECHNIQUE"
____exports.WeaponType.TECH_X = 9
____exports.WeaponType[____exports.WeaponType.TECH_X] = "TECH_X"
____exports.WeaponType.BONE = 10
____exports.WeaponType[____exports.WeaponType.BONE] = "BONE"
____exports.WeaponType.NOTCHED_AXE = 11
____exports.WeaponType[____exports.WeaponType.NOTCHED_AXE] = "NOTCHED_AXE"
____exports.WeaponType.URN_OF_SOULS = 12
____exports.WeaponType[____exports.WeaponType.URN_OF_SOULS] = "URN_OF_SOULS"
____exports.WeaponType.SPIRIT_SWORD = 13
____exports.WeaponType[____exports.WeaponType.SPIRIT_SWORD] = "SPIRIT_SWORD"
____exports.WeaponType.FETUS = 14
____exports.WeaponType[____exports.WeaponType.FETUS] = "FETUS"
____exports.WeaponType.UMBILICAL_WHIP = 15
____exports.WeaponType[____exports.WeaponType.UMBILICAL_WHIP] = "UMBILICAL_WHIP"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.TrinketSlot"] = function(...) 
local ____exports = {}
____exports.TrinketSlot = {}
____exports.TrinketSlot.SLOT_1 = 0
____exports.TrinketSlot[____exports.TrinketSlot.SLOT_1] = "SLOT_1"
____exports.TrinketSlot.SLOT_2 = 1
____exports.TrinketSlot[____exports.TrinketSlot.SLOT_2] = "SLOT_2"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.StageType"] = function(...) 
local ____exports = {}
____exports.StageType = {}
____exports.StageType.ORIGINAL = 0
____exports.StageType[____exports.StageType.ORIGINAL] = "ORIGINAL"
____exports.StageType.WRATH_OF_THE_LAMB = 1
____exports.StageType[____exports.StageType.WRATH_OF_THE_LAMB] = "WRATH_OF_THE_LAMB"
____exports.StageType.AFTERBIRTH = 2
____exports.StageType[____exports.StageType.AFTERBIRTH] = "AFTERBIRTH"
____exports.StageType.GREED_MODE = 3
____exports.StageType[____exports.StageType.GREED_MODE] = "GREED_MODE"
____exports.StageType.REPENTANCE = 4
____exports.StageType[____exports.StageType.REPENTANCE] = "REPENTANCE"
____exports.StageType.REPENTANCE_B = 5
____exports.StageType[____exports.StageType.REPENTANCE_B] = "REPENTANCE_B"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.StageTransition"] = function(...) 
local ____exports = {}
____exports.StageTransition = {}
____exports.StageTransition.DISAPPEAR = 0
____exports.StageTransition[____exports.StageTransition.DISAPPEAR] = "DISAPPEAR"
____exports.StageTransition.NONE = 1
____exports.StageTransition[____exports.StageTransition.NONE] = "NONE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.StageID"] = function(...) 
local ____exports = {}
--- Corresponds to the filename used in the XML/STB file for the room.
-- 
-- This enum is contiguous. (Every value is satisfied between 0 and 36, inclusive.)
____exports.StageID = {}
____exports.StageID.SPECIAL_ROOMS = 0
____exports.StageID[____exports.StageID.SPECIAL_ROOMS] = "SPECIAL_ROOMS"
____exports.StageID.BASEMENT = 1
____exports.StageID[____exports.StageID.BASEMENT] = "BASEMENT"
____exports.StageID.CELLAR = 2
____exports.StageID[____exports.StageID.CELLAR] = "CELLAR"
____exports.StageID.BURNING_BASEMENT = 3
____exports.StageID[____exports.StageID.BURNING_BASEMENT] = "BURNING_BASEMENT"
____exports.StageID.CAVES = 4
____exports.StageID[____exports.StageID.CAVES] = "CAVES"
____exports.StageID.CATACOMBS = 5
____exports.StageID[____exports.StageID.CATACOMBS] = "CATACOMBS"
____exports.StageID.FLOODED_CAVES = 6
____exports.StageID[____exports.StageID.FLOODED_CAVES] = "FLOODED_CAVES"
____exports.StageID.DEPTHS = 7
____exports.StageID[____exports.StageID.DEPTHS] = "DEPTHS"
____exports.StageID.NECROPOLIS = 8
____exports.StageID[____exports.StageID.NECROPOLIS] = "NECROPOLIS"
____exports.StageID.DANK_DEPTHS = 9
____exports.StageID[____exports.StageID.DANK_DEPTHS] = "DANK_DEPTHS"
____exports.StageID.WOMB = 10
____exports.StageID[____exports.StageID.WOMB] = "WOMB"
____exports.StageID.UTERO = 11
____exports.StageID[____exports.StageID.UTERO] = "UTERO"
____exports.StageID.SCARRED_WOMB = 12
____exports.StageID[____exports.StageID.SCARRED_WOMB] = "SCARRED_WOMB"
____exports.StageID.BLUE_WOMB = 13
____exports.StageID[____exports.StageID.BLUE_WOMB] = "BLUE_WOMB"
____exports.StageID.SHEOL = 14
____exports.StageID[____exports.StageID.SHEOL] = "SHEOL"
____exports.StageID.CATHEDRAL = 15
____exports.StageID[____exports.StageID.CATHEDRAL] = "CATHEDRAL"
____exports.StageID.DARK_ROOM = 16
____exports.StageID[____exports.StageID.DARK_ROOM] = "DARK_ROOM"
____exports.StageID.CHEST = 17
____exports.StageID[____exports.StageID.CHEST] = "CHEST"
____exports.StageID.SPECIAL_ROOMS_GREED_MODE = 18
____exports.StageID[____exports.StageID.SPECIAL_ROOMS_GREED_MODE] = "SPECIAL_ROOMS_GREED_MODE"
____exports.StageID.BASEMENT_GREED_MODE = 19
____exports.StageID[____exports.StageID.BASEMENT_GREED_MODE] = "BASEMENT_GREED_MODE"
____exports.StageID.CAVES_GREED_MODE = 20
____exports.StageID[____exports.StageID.CAVES_GREED_MODE] = "CAVES_GREED_MODE"
____exports.StageID.DEPTHS_GREED_MODE = 21
____exports.StageID[____exports.StageID.DEPTHS_GREED_MODE] = "DEPTHS_GREED_MODE"
____exports.StageID.WOMB_GREED_MODE = 22
____exports.StageID[____exports.StageID.WOMB_GREED_MODE] = "WOMB_GREED_MODE"
____exports.StageID.SHEOL_GREED_MODE = 23
____exports.StageID[____exports.StageID.SHEOL_GREED_MODE] = "SHEOL_GREED_MODE"
____exports.StageID.SHOP_GREED_MODE = 24
____exports.StageID[____exports.StageID.SHOP_GREED_MODE] = "SHOP_GREED_MODE"
____exports.StageID.ULTRA_GREED_GREED_MODE = 25
____exports.StageID[____exports.StageID.ULTRA_GREED_GREED_MODE] = "ULTRA_GREED_GREED_MODE"
____exports.StageID.VOID = 26
____exports.StageID[____exports.StageID.VOID] = "VOID"
____exports.StageID.DOWNPOUR = 27
____exports.StageID[____exports.StageID.DOWNPOUR] = "DOWNPOUR"
____exports.StageID.DROSS = 28
____exports.StageID[____exports.StageID.DROSS] = "DROSS"
____exports.StageID.MINES = 29
____exports.StageID[____exports.StageID.MINES] = "MINES"
____exports.StageID.ASHPIT = 30
____exports.StageID[____exports.StageID.ASHPIT] = "ASHPIT"
____exports.StageID.MAUSOLEUM = 31
____exports.StageID[____exports.StageID.MAUSOLEUM] = "MAUSOLEUM"
____exports.StageID.GEHENNA = 32
____exports.StageID[____exports.StageID.GEHENNA] = "GEHENNA"
____exports.StageID.CORPSE = 33
____exports.StageID[____exports.StageID.CORPSE] = "CORPSE"
____exports.StageID.MORTIS = 34
____exports.StageID[____exports.StageID.MORTIS] = "MORTIS"
____exports.StageID.HOME = 35
____exports.StageID[____exports.StageID.HOME] = "HOME"
____exports.StageID.BACKWARDS = 36
____exports.StageID[____exports.StageID.BACKWARDS] = "BACKWARDS"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.SoundEffect"] = function(...) 
local ____exports = {}
____exports.SoundEffect = {}
____exports.SoundEffect.NULL = 0
____exports.SoundEffect[____exports.SoundEffect.NULL] = "NULL"
____exports.SoundEffect.ONE_UP = 1
____exports.SoundEffect[____exports.SoundEffect.ONE_UP] = "ONE_UP"
____exports.SoundEffect.BIRD_FLAP = 2
____exports.SoundEffect[____exports.SoundEffect.BIRD_FLAP] = "BIRD_FLAP"
____exports.SoundEffect.BLOBBY_WIGGLE = 3
____exports.SoundEffect[____exports.SoundEffect.BLOBBY_WIGGLE] = "BLOBBY_WIGGLE"
____exports.SoundEffect.INSECT_SWARM_LOOP = 4
____exports.SoundEffect[____exports.SoundEffect.INSECT_SWARM_LOOP] = "INSECT_SWARM_LOOP"
____exports.SoundEffect.BLOOD_LASER = 5
____exports.SoundEffect[____exports.SoundEffect.BLOOD_LASER] = "BLOOD_LASER"
____exports.SoundEffect.BLOOD_LASER_SMALL = 6
____exports.SoundEffect[____exports.SoundEffect.BLOOD_LASER_SMALL] = "BLOOD_LASER_SMALL"
____exports.SoundEffect.BLOOD_LASER_LARGE = 7
____exports.SoundEffect[____exports.SoundEffect.BLOOD_LASER_LARGE] = "BLOOD_LASER_LARGE"
____exports.SoundEffect.BOOK_PAGE_TURN_12 = 8
____exports.SoundEffect[____exports.SoundEffect.BOOK_PAGE_TURN_12] = "BOOK_PAGE_TURN_12"
____exports.SoundEffect.BOSS_BUG_HISS = 9
____exports.SoundEffect[____exports.SoundEffect.BOSS_BUG_HISS] = "BOSS_BUG_HISS"
____exports.SoundEffect.BLOOD_LASER_LARGER = 10
____exports.SoundEffect[____exports.SoundEffect.BLOOD_LASER_LARGER] = "BLOOD_LASER_LARGER"
____exports.SoundEffect.BOSS_GURGLE_ROAR = 11
____exports.SoundEffect[____exports.SoundEffect.BOSS_GURGLE_ROAR] = "BOSS_GURGLE_ROAR"
____exports.SoundEffect.BOSS_LITE_GURGLE = 12
____exports.SoundEffect[____exports.SoundEffect.BOSS_LITE_GURGLE] = "BOSS_LITE_GURGLE"
____exports.SoundEffect.BOSS_LITE_HISS = 13
____exports.SoundEffect[____exports.SoundEffect.BOSS_LITE_HISS] = "BOSS_LITE_HISS"
____exports.SoundEffect.BOSS_LITE_ROAR = 14
____exports.SoundEffect[____exports.SoundEffect.BOSS_LITE_ROAR] = "BOSS_LITE_ROAR"
____exports.SoundEffect.BOSS_LITE_SLOPPY_ROAR = 15
____exports.SoundEffect[____exports.SoundEffect.BOSS_LITE_SLOPPY_ROAR] = "BOSS_LITE_SLOPPY_ROAR"
____exports.SoundEffect.BOSS_SPIT_BLOB_BARF = 16
____exports.SoundEffect[____exports.SoundEffect.BOSS_SPIT_BLOB_BARF] = "BOSS_SPIT_BLOB_BARF"
____exports.SoundEffect.PAPER_IN = 17
____exports.SoundEffect[____exports.SoundEffect.PAPER_IN] = "PAPER_IN"
____exports.SoundEffect.PAPER_OUT = 18
____exports.SoundEffect[____exports.SoundEffect.PAPER_OUT] = "PAPER_OUT"
____exports.SoundEffect.CHEST_DROP = 21
____exports.SoundEffect[____exports.SoundEffect.CHEST_DROP] = "CHEST_DROP"
____exports.SoundEffect.CHEST_OPEN = 22
____exports.SoundEffect[____exports.SoundEffect.CHEST_OPEN] = "CHEST_OPEN"
____exports.SoundEffect.CHOIR_UNLOCK = 23
____exports.SoundEffect[____exports.SoundEffect.CHOIR_UNLOCK] = "CHOIR_UNLOCK"
____exports.SoundEffect.COIN_SLOT = 24
____exports.SoundEffect[____exports.SoundEffect.COIN_SLOT] = "COIN_SLOT"
____exports.SoundEffect.CUTE_GRUNT = 25
____exports.SoundEffect[____exports.SoundEffect.CUTE_GRUNT] = "CUTE_GRUNT"
____exports.SoundEffect.DEATH_BURST_BONE = 27
____exports.SoundEffect[____exports.SoundEffect.DEATH_BURST_BONE] = "DEATH_BURST_BONE"
____exports.SoundEffect.DEATH_BURST_LARGE = 28
____exports.SoundEffect[____exports.SoundEffect.DEATH_BURST_LARGE] = "DEATH_BURST_LARGE"
____exports.SoundEffect.DEATH_REVERSE = 29
____exports.SoundEffect[____exports.SoundEffect.DEATH_REVERSE] = "DEATH_REVERSE"
____exports.SoundEffect.DEATH_BURST_SMALL = 30
____exports.SoundEffect[____exports.SoundEffect.DEATH_BURST_SMALL] = "DEATH_BURST_SMALL"
____exports.SoundEffect.DEATH_CARD = 33
____exports.SoundEffect[____exports.SoundEffect.DEATH_CARD] = "DEATH_CARD"
____exports.SoundEffect.DEVIL_CARD = 34
____exports.SoundEffect[____exports.SoundEffect.DEVIL_CARD] = "DEVIL_CARD"
____exports.SoundEffect.DOOR_HEAVY_CLOSE = 35
____exports.SoundEffect[____exports.SoundEffect.DOOR_HEAVY_CLOSE] = "DOOR_HEAVY_CLOSE"
____exports.SoundEffect.DOOR_HEAVY_OPEN = 36
____exports.SoundEffect[____exports.SoundEffect.DOOR_HEAVY_OPEN] = "DOOR_HEAVY_OPEN"
____exports.SoundEffect.FART = 37
____exports.SoundEffect[____exports.SoundEffect.FART] = "FART"
____exports.SoundEffect.FETUS_JUMP = 38
____exports.SoundEffect[____exports.SoundEffect.FETUS_JUMP] = "FETUS_JUMP"
____exports.SoundEffect.FETUS_LAND = 40
____exports.SoundEffect[____exports.SoundEffect.FETUS_LAND] = "FETUS_LAND"
____exports.SoundEffect.FIRE_DEATH_HISS = 43
____exports.SoundEffect[____exports.SoundEffect.FIRE_DEATH_HISS] = "FIRE_DEATH_HISS"
____exports.SoundEffect.FLOATY_BABY_ROAR = 44
____exports.SoundEffect[____exports.SoundEffect.FLOATY_BABY_ROAR] = "FLOATY_BABY_ROAR"
____exports.SoundEffect.COIN_INSERT = 45
____exports.SoundEffect[____exports.SoundEffect.COIN_INSERT] = "COIN_INSERT"
____exports.SoundEffect.METAL_DOOR_CLOSE = 46
____exports.SoundEffect[____exports.SoundEffect.METAL_DOOR_CLOSE] = "METAL_DOOR_CLOSE"
____exports.SoundEffect.METAL_DOOR_OPEN = 47
____exports.SoundEffect[____exports.SoundEffect.METAL_DOOR_OPEN] = "METAL_DOOR_OPEN"
____exports.SoundEffect.FOREST_BOSS_STOMPS = 48
____exports.SoundEffect[____exports.SoundEffect.FOREST_BOSS_STOMPS] = "FOREST_BOSS_STOMPS"
____exports.SoundEffect.SCYTHE_BREAK = 49
____exports.SoundEffect[____exports.SoundEffect.SCYTHE_BREAK] = "SCYTHE_BREAK"
____exports.SoundEffect.STONE_WALKER = 50
____exports.SoundEffect[____exports.SoundEffect.STONE_WALKER] = "STONE_WALKER"
____exports.SoundEffect.GAS_CAN_POUR = 51
____exports.SoundEffect[____exports.SoundEffect.GAS_CAN_POUR] = "GAS_CAN_POUR"
____exports.SoundEffect.HELL_BOSS_GROUND_POUND = 52
____exports.SoundEffect[____exports.SoundEffect.HELL_BOSS_GROUND_POUND] = "HELL_BOSS_GROUND_POUND"
____exports.SoundEffect.GLASS_BREAK = 53
____exports.SoundEffect[____exports.SoundEffect.GLASS_BREAK] = "GLASS_BREAK"
____exports.SoundEffect.HOLY = 54
____exports.SoundEffect[____exports.SoundEffect.HOLY] = "HOLY"
____exports.SoundEffect.ISAAC_HURT_GRUNT = 55
____exports.SoundEffect[____exports.SoundEffect.ISAAC_HURT_GRUNT] = "ISAAC_HURT_GRUNT"
____exports.SoundEffect.CHILD_HAPPY_ROAR_SHORT = 56
____exports.SoundEffect[____exports.SoundEffect.CHILD_HAPPY_ROAR_SHORT] = "CHILD_HAPPY_ROAR_SHORT"
____exports.SoundEffect.CHILD_ANGRY_ROAR = 57
____exports.SoundEffect[____exports.SoundEffect.CHILD_ANGRY_ROAR] = "CHILD_ANGRY_ROAR"
____exports.SoundEffect.KEY_PICKUP_GAUNTLET = 58
____exports.SoundEffect[____exports.SoundEffect.KEY_PICKUP_GAUNTLET] = "KEY_PICKUP_GAUNTLET"
____exports.SoundEffect.KEY_DROP = 59
____exports.SoundEffect[____exports.SoundEffect.KEY_DROP] = "KEY_DROP"
____exports.SoundEffect.BABY_HURT = 60
____exports.SoundEffect[____exports.SoundEffect.BABY_HURT] = "BABY_HURT"
____exports.SoundEffect.MAGGOT_BURST_OUT = 64
____exports.SoundEffect[____exports.SoundEffect.MAGGOT_BURST_OUT] = "MAGGOT_BURST_OUT"
____exports.SoundEffect.MAGGOT_ENTER_GROUND = 66
____exports.SoundEffect[____exports.SoundEffect.MAGGOT_ENTER_GROUND] = "MAGGOT_ENTER_GROUND"
____exports.SoundEffect.MEAT_FEET_SLOW = 68
____exports.SoundEffect[____exports.SoundEffect.MEAT_FEET_SLOW] = "MEAT_FEET_SLOW"
____exports.SoundEffect.MEAT_IMPACTS = 69
____exports.SoundEffect[____exports.SoundEffect.MEAT_IMPACTS] = "MEAT_IMPACTS"
____exports.SoundEffect.MEAT_IMPACTS_OLD = 70
____exports.SoundEffect[____exports.SoundEffect.MEAT_IMPACTS_OLD] = "MEAT_IMPACTS_OLD"
____exports.SoundEffect.MEAT_JUMPS = 72
____exports.SoundEffect[____exports.SoundEffect.MEAT_JUMPS] = "MEAT_JUMPS"
____exports.SoundEffect.MEATY_DEATHS = 77
____exports.SoundEffect[____exports.SoundEffect.MEATY_DEATHS] = "MEATY_DEATHS"
____exports.SoundEffect.POT_BREAK_2 = 78
____exports.SoundEffect[____exports.SoundEffect.POT_BREAK_2] = "POT_BREAK_2"
____exports.SoundEffect.MUSHROOM_POOF_2 = 79
____exports.SoundEffect[____exports.SoundEffect.MUSHROOM_POOF_2] = "MUSHROOM_POOF_2"
____exports.SoundEffect.BLACK_POOF = 80
____exports.SoundEffect[____exports.SoundEffect.BLACK_POOF] = "BLACK_POOF"
____exports.SoundEffect.STATIC = 81
____exports.SoundEffect[____exports.SoundEffect.STATIC] = "STATIC"
____exports.SoundEffect.MOM_VOX_DEATH = 82
____exports.SoundEffect[____exports.SoundEffect.MOM_VOX_DEATH] = "MOM_VOX_DEATH"
____exports.SoundEffect.MOM_VOX_EVIL_LAUGH = 84
____exports.SoundEffect[____exports.SoundEffect.MOM_VOX_EVIL_LAUGH] = "MOM_VOX_EVIL_LAUGH"
____exports.SoundEffect.MOM_VOX_FILTERED_DEATH_1 = 85
____exports.SoundEffect[____exports.SoundEffect.MOM_VOX_FILTERED_DEATH_1] = "MOM_VOX_FILTERED_DEATH_1"
____exports.SoundEffect.MOM_VOX_FILTERED_EVIL_LAUGH = 86
____exports.SoundEffect[____exports.SoundEffect.MOM_VOX_FILTERED_EVIL_LAUGH] = "MOM_VOX_FILTERED_EVIL_LAUGH"
____exports.SoundEffect.MOM_VOX_FILTERED_HURT = 87
____exports.SoundEffect[____exports.SoundEffect.MOM_VOX_FILTERED_HURT] = "MOM_VOX_FILTERED_HURT"
____exports.SoundEffect.MOM_VOX_FILTERED_ISAAC = 90
____exports.SoundEffect[____exports.SoundEffect.MOM_VOX_FILTERED_ISAAC] = "MOM_VOX_FILTERED_ISAAC"
____exports.SoundEffect.MOM_VOX_GRUNT = 93
____exports.SoundEffect[____exports.SoundEffect.MOM_VOX_GRUNT] = "MOM_VOX_GRUNT"
____exports.SoundEffect.MOM_VOX_HURT = 97
____exports.SoundEffect[____exports.SoundEffect.MOM_VOX_HURT] = "MOM_VOX_HURT"
____exports.SoundEffect.MOM_VOX_ISAAC = 101
____exports.SoundEffect[____exports.SoundEffect.MOM_VOX_ISAAC] = "MOM_VOX_ISAAC"
____exports.SoundEffect.MONSTER_GRUNT_0 = 104
____exports.SoundEffect[____exports.SoundEffect.MONSTER_GRUNT_0] = "MONSTER_GRUNT_0"
____exports.SoundEffect.MONSTER_GRUNT_1 = 106
____exports.SoundEffect[____exports.SoundEffect.MONSTER_GRUNT_1] = "MONSTER_GRUNT_1"
____exports.SoundEffect.MONSTER_GRUNT_2 = 108
____exports.SoundEffect[____exports.SoundEffect.MONSTER_GRUNT_2] = "MONSTER_GRUNT_2"
____exports.SoundEffect.MONSTER_GRUNT_4 = 112
____exports.SoundEffect[____exports.SoundEffect.MONSTER_GRUNT_4] = "MONSTER_GRUNT_4"
____exports.SoundEffect.MONSTER_GRUNT_5 = 114
____exports.SoundEffect[____exports.SoundEffect.MONSTER_GRUNT_5] = "MONSTER_GRUNT_5"
____exports.SoundEffect.MONSTER_ROAR_0 = 115
____exports.SoundEffect[____exports.SoundEffect.MONSTER_ROAR_0] = "MONSTER_ROAR_0"
____exports.SoundEffect.MONSTER_ROAR_1 = 116
____exports.SoundEffect[____exports.SoundEffect.MONSTER_ROAR_1] = "MONSTER_ROAR_1"
____exports.SoundEffect.MONSTER_ROAR_2 = 117
____exports.SoundEffect[____exports.SoundEffect.MONSTER_ROAR_2] = "MONSTER_ROAR_2"
____exports.SoundEffect.MONSTER_ROAR_3 = 118
____exports.SoundEffect[____exports.SoundEffect.MONSTER_ROAR_3] = "MONSTER_ROAR_3"
____exports.SoundEffect.MONSTER_YELL_A = 119
____exports.SoundEffect[____exports.SoundEffect.MONSTER_YELL_A] = "MONSTER_YELL_A"
____exports.SoundEffect.MONSTER_YELL_B = 122
____exports.SoundEffect[____exports.SoundEffect.MONSTER_YELL_B] = "MONSTER_YELL_B"
____exports.SoundEffect.POWER_UP_1 = 128
____exports.SoundEffect[____exports.SoundEffect.POWER_UP_1] = "POWER_UP_1"
____exports.SoundEffect.POWER_UP_2 = 129
____exports.SoundEffect[____exports.SoundEffect.POWER_UP_2] = "POWER_UP_2"
____exports.SoundEffect.POWER_UP_3 = 130
____exports.SoundEffect[____exports.SoundEffect.POWER_UP_3] = "POWER_UP_3"
____exports.SoundEffect.POWER_UP_SPEWER = 132
____exports.SoundEffect[____exports.SoundEffect.POWER_UP_SPEWER] = "POWER_UP_SPEWER"
____exports.SoundEffect.RED_LIGHTNING_ZAP = 133
____exports.SoundEffect[____exports.SoundEffect.RED_LIGHTNING_ZAP] = "RED_LIGHTNING_ZAP"
____exports.SoundEffect.RED_LIGHTNING_ZAP_WEAK = 134
____exports.SoundEffect[____exports.SoundEffect.RED_LIGHTNING_ZAP_WEAK] = "RED_LIGHTNING_ZAP_WEAK"
____exports.SoundEffect.RED_LIGHTNING_ZAP_STRONG = 135
____exports.SoundEffect[____exports.SoundEffect.RED_LIGHTNING_ZAP_STRONG] = "RED_LIGHTNING_ZAP_STRONG"
____exports.SoundEffect.RED_LIGHTNING_ZAP_BURST = 136
____exports.SoundEffect[____exports.SoundEffect.RED_LIGHTNING_ZAP_BURST] = "RED_LIGHTNING_ZAP_BURST"
____exports.SoundEffect.ROCK_CRUMBLE = 137
____exports.SoundEffect[____exports.SoundEffect.ROCK_CRUMBLE] = "ROCK_CRUMBLE"
____exports.SoundEffect.POT_BREAK = 138
____exports.SoundEffect[____exports.SoundEffect.POT_BREAK] = "POT_BREAK"
____exports.SoundEffect.MUSHROOM_POOF = 139
____exports.SoundEffect[____exports.SoundEffect.MUSHROOM_POOF] = "MUSHROOM_POOF"
____exports.SoundEffect.ROCKET_BLAST_DEATH = 141
____exports.SoundEffect[____exports.SoundEffect.ROCKET_BLAST_DEATH] = "ROCKET_BLAST_DEATH"
____exports.SoundEffect.SMB_LARGE_CHEWS_4 = 142
____exports.SoundEffect[____exports.SoundEffect.SMB_LARGE_CHEWS_4] = "SMB_LARGE_CHEWS_4"
____exports.SoundEffect.SCARED_WHIMPER = 143
____exports.SoundEffect[____exports.SoundEffect.SCARED_WHIMPER] = "SCARED_WHIMPER"
____exports.SoundEffect.SHAKEY_KID_ROAR = 146
____exports.SoundEffect[____exports.SoundEffect.SHAKEY_KID_ROAR] = "SHAKEY_KID_ROAR"
____exports.SoundEffect.SINK_DRAIN_GURGLE = 149
____exports.SoundEffect[____exports.SoundEffect.SINK_DRAIN_GURGLE] = "SINK_DRAIN_GURGLE"
____exports.SoundEffect.TEAR_IMPACTS = 150
____exports.SoundEffect[____exports.SoundEffect.TEAR_IMPACTS] = "TEAR_IMPACTS"
____exports.SoundEffect.TEARS_FIRE = 153
____exports.SoundEffect[____exports.SoundEffect.TEARS_FIRE] = "TEARS_FIRE"
____exports.SoundEffect.UNLOCK_DOOR = 156
____exports.SoundEffect[____exports.SoundEffect.UNLOCK_DOOR] = "UNLOCK_DOOR"
____exports.SoundEffect.VAMP_GULP = 157
____exports.SoundEffect[____exports.SoundEffect.VAMP_GULP] = "VAMP_GULP"
____exports.SoundEffect.WHEEZY_COUGH = 158
____exports.SoundEffect[____exports.SoundEffect.WHEEZY_COUGH] = "WHEEZY_COUGH"
____exports.SoundEffect.SPIDER_COUGH = 159
____exports.SoundEffect[____exports.SoundEffect.SPIDER_COUGH] = "SPIDER_COUGH"
____exports.SoundEffect.PORTAL_OPEN = 160
____exports.SoundEffect[____exports.SoundEffect.PORTAL_OPEN] = "PORTAL_OPEN"
____exports.SoundEffect.PORTAL_LOOP = 161
____exports.SoundEffect[____exports.SoundEffect.PORTAL_LOOP] = "PORTAL_LOOP"
____exports.SoundEffect.PORTAL_SPAWN = 162
____exports.SoundEffect[____exports.SoundEffect.PORTAL_SPAWN] = "PORTAL_SPAWN"
____exports.SoundEffect.TAR_LOOP = 163
____exports.SoundEffect[____exports.SoundEffect.TAR_LOOP] = "TAR_LOOP"
____exports.SoundEffect.ZOMBIE_WALKER_KID = 165
____exports.SoundEffect[____exports.SoundEffect.ZOMBIE_WALKER_KID] = "ZOMBIE_WALKER_KID"
____exports.SoundEffect.ANIMAL_SQUISH = 166
____exports.SoundEffect[____exports.SoundEffect.ANIMAL_SQUISH] = "ANIMAL_SQUISH"
____exports.SoundEffect.ANGRY_GURGLE = 167
____exports.SoundEffect[____exports.SoundEffect.ANGRY_GURGLE] = "ANGRY_GURGLE"
____exports.SoundEffect.BAND_AID_PICK_UP = 169
____exports.SoundEffect[____exports.SoundEffect.BAND_AID_PICK_UP] = "BAND_AID_PICK_UP"
____exports.SoundEffect.BATTERY_CHARGE = 170
____exports.SoundEffect[____exports.SoundEffect.BATTERY_CHARGE] = "BATTERY_CHARGE"
____exports.SoundEffect.BEEP = 171
____exports.SoundEffect[____exports.SoundEffect.BEEP] = "BEEP"
____exports.SoundEffect.LIGHT_BOLT = 172
____exports.SoundEffect[____exports.SoundEffect.LIGHT_BOLT] = "LIGHT_BOLT"
____exports.SoundEffect.LIGHT_BOLT_CHARGE = 173
____exports.SoundEffect[____exports.SoundEffect.LIGHT_BOLT_CHARGE] = "LIGHT_BOLT_CHARGE"
____exports.SoundEffect.BLOOD_BANK_TOUCHED = 174
____exports.SoundEffect[____exports.SoundEffect.BLOOD_BANK_TOUCHED] = "BLOOD_BANK_TOUCHED"
____exports.SoundEffect.PINKING_SHEARS = 175
____exports.SoundEffect[____exports.SoundEffect.PINKING_SHEARS] = "PINKING_SHEARS"
____exports.SoundEffect.BLOOD_SHOOT = 178
____exports.SoundEffect[____exports.SoundEffect.BLOOD_SHOOT] = "BLOOD_SHOOT"
____exports.SoundEffect.BOIL_HATCH = 181
____exports.SoundEffect[____exports.SoundEffect.BOIL_HATCH] = "BOIL_HATCH"
____exports.SoundEffect.BOSS_1_EXPLOSIONS = 182
____exports.SoundEffect[____exports.SoundEffect.BOSS_1_EXPLOSIONS] = "BOSS_1_EXPLOSIONS"
____exports.SoundEffect.EXPLOSION_WEAK = 183
____exports.SoundEffect[____exports.SoundEffect.EXPLOSION_WEAK] = "EXPLOSION_WEAK"
____exports.SoundEffect.EXPLOSION_STRONG = 184
____exports.SoundEffect[____exports.SoundEffect.EXPLOSION_STRONG] = "EXPLOSION_STRONG"
____exports.SoundEffect.BOSS_2_BUBBLES = 185
____exports.SoundEffect[____exports.SoundEffect.BOSS_2_BUBBLES] = "BOSS_2_BUBBLES"
____exports.SoundEffect.EXPLOSION_DEBRIS = 186
____exports.SoundEffect[____exports.SoundEffect.EXPLOSION_DEBRIS] = "EXPLOSION_DEBRIS"
____exports.SoundEffect.BOSS_2_INTRO_ERROR_BUZZ = 187
____exports.SoundEffect[____exports.SoundEffect.BOSS_2_INTRO_ERROR_BUZZ] = "BOSS_2_INTRO_ERROR_BUZZ"
____exports.SoundEffect.CASTLE_PORTCULLIS = 190
____exports.SoundEffect[____exports.SoundEffect.CASTLE_PORTCULLIS] = "CASTLE_PORTCULLIS"
____exports.SoundEffect.CHARACTER_SELECT_LEFT = 194
____exports.SoundEffect[____exports.SoundEffect.CHARACTER_SELECT_LEFT] = "CHARACTER_SELECT_LEFT"
____exports.SoundEffect.CHARACTER_SELECT_RIGHT = 195
____exports.SoundEffect[____exports.SoundEffect.CHARACTER_SELECT_RIGHT] = "CHARACTER_SELECT_RIGHT"
____exports.SoundEffect.DERP = 197
____exports.SoundEffect[____exports.SoundEffect.DERP] = "DERP"
____exports.SoundEffect.DIME_DROP = 198
____exports.SoundEffect[____exports.SoundEffect.DIME_DROP] = "DIME_DROP"
____exports.SoundEffect.DIME_PICKUP = 199
____exports.SoundEffect[____exports.SoundEffect.DIME_PICKUP] = "DIME_PICKUP"
____exports.SoundEffect.LUCKY_PICKUP = 200
____exports.SoundEffect[____exports.SoundEffect.LUCKY_PICKUP] = "LUCKY_PICKUP"
____exports.SoundEffect.FETUS_FEET = 201
____exports.SoundEffect[____exports.SoundEffect.FETUS_FEET] = "FETUS_FEET"
____exports.SoundEffect.GOLDEN_KEY = 204
____exports.SoundEffect[____exports.SoundEffect.GOLDEN_KEY] = "GOLDEN_KEY"
____exports.SoundEffect.GOO_ATTACH = 205
____exports.SoundEffect[____exports.SoundEffect.GOO_ATTACH] = "GOO_ATTACH"
____exports.SoundEffect.GOO_DEATH = 207
____exports.SoundEffect[____exports.SoundEffect.GOO_DEATH] = "GOO_DEATH"
____exports.SoundEffect.HAND_LASERS = 211
____exports.SoundEffect[____exports.SoundEffect.HAND_LASERS] = "HAND_LASERS"
____exports.SoundEffect.HEART_IN = 212
____exports.SoundEffect[____exports.SoundEffect.HEART_IN] = "HEART_IN"
____exports.SoundEffect.HEART_OUT = 213
____exports.SoundEffect[____exports.SoundEffect.HEART_OUT] = "HEART_OUT"
____exports.SoundEffect.HELL_PORTAL_1 = 214
____exports.SoundEffect[____exports.SoundEffect.HELL_PORTAL_1] = "HELL_PORTAL_1"
____exports.SoundEffect.HELL_PORTAL_2 = 215
____exports.SoundEffect[____exports.SoundEffect.HELL_PORTAL_2] = "HELL_PORTAL_2"
____exports.SoundEffect.ISAAC_DIES = 217
____exports.SoundEffect[____exports.SoundEffect.ISAAC_DIES] = "ISAAC_DIES"
____exports.SoundEffect.ITEM_RECHARGE = 218
____exports.SoundEffect[____exports.SoundEffect.ITEM_RECHARGE] = "ITEM_RECHARGE"
____exports.SoundEffect.KISS_LIPS = 219
____exports.SoundEffect[____exports.SoundEffect.KISS_LIPS] = "KISS_LIPS"
____exports.SoundEffect.LEECH = 221
____exports.SoundEffect[____exports.SoundEffect.LEECH] = "LEECH"
____exports.SoundEffect.MAGGOT_CHARGE = 224
____exports.SoundEffect[____exports.SoundEffect.MAGGOT_CHARGE] = "MAGGOT_CHARGE"
____exports.SoundEffect.MEAT_HEAD_SHOOT = 226
____exports.SoundEffect[____exports.SoundEffect.MEAT_HEAD_SHOOT] = "MEAT_HEAD_SHOOT"
____exports.SoundEffect.METAL_BLOCK_BREAK = 229
____exports.SoundEffect[____exports.SoundEffect.METAL_BLOCK_BREAK] = "METAL_BLOCK_BREAK"
____exports.SoundEffect.NICKEL_DROP = 231
____exports.SoundEffect[____exports.SoundEffect.NICKEL_DROP] = "NICKEL_DROP"
____exports.SoundEffect.NICKEL_PICKUP = 232
____exports.SoundEffect[____exports.SoundEffect.NICKEL_PICKUP] = "NICKEL_PICKUP"
____exports.SoundEffect.PENNY_DROP = 233
____exports.SoundEffect[____exports.SoundEffect.PENNY_DROP] = "PENNY_DROP"
____exports.SoundEffect.PENNY_PICKUP = 234
____exports.SoundEffect[____exports.SoundEffect.PENNY_PICKUP] = "PENNY_PICKUP"
____exports.SoundEffect.PLOP = 237
____exports.SoundEffect[____exports.SoundEffect.PLOP] = "PLOP"
____exports.SoundEffect.SATAN_APPEAR = 238
____exports.SoundEffect[____exports.SoundEffect.SATAN_APPEAR] = "SATAN_APPEAR"
____exports.SoundEffect.SATAN_BLAST = 239
____exports.SoundEffect[____exports.SoundEffect.SATAN_BLAST] = "SATAN_BLAST"
____exports.SoundEffect.SATAN_CHARGE_UP = 240
____exports.SoundEffect[____exports.SoundEffect.SATAN_CHARGE_UP] = "SATAN_CHARGE_UP"
____exports.SoundEffect.SATAN_GROW = 241
____exports.SoundEffect[____exports.SoundEffect.SATAN_GROW] = "SATAN_GROW"
____exports.SoundEffect.SATAN_HURT = 242
____exports.SoundEffect[____exports.SoundEffect.SATAN_HURT] = "SATAN_HURT"
____exports.SoundEffect.SATAN_RISE_UP = 243
____exports.SoundEffect[____exports.SoundEffect.SATAN_RISE_UP] = "SATAN_RISE_UP"
____exports.SoundEffect.SATAN_SPIT = 245
____exports.SoundEffect[____exports.SoundEffect.SATAN_SPIT] = "SATAN_SPIT"
____exports.SoundEffect.SATAN_STOMP = 246
____exports.SoundEffect[____exports.SoundEffect.SATAN_STOMP] = "SATAN_STOMP"
____exports.SoundEffect.SCAMPER = 249
____exports.SoundEffect[____exports.SoundEffect.SCAMPER] = "SCAMPER"
____exports.SoundEffect.SHELL_GAME = 252
____exports.SoundEffect[____exports.SoundEffect.SHELL_GAME] = "SHELL_GAME"
____exports.SoundEffect.SLOT_SPAWN = 255
____exports.SoundEffect[____exports.SoundEffect.SLOT_SPAWN] = "SLOT_SPAWN"
____exports.SoundEffect.SPLATTER = 258
____exports.SoundEffect[____exports.SoundEffect.SPLATTER] = "SPLATTER"
____exports.SoundEffect.STEAM_HALF_SEC = 261
____exports.SoundEffect[____exports.SoundEffect.STEAM_HALF_SEC] = "STEAM_HALF_SEC"
____exports.SoundEffect.STONE_SHOOT = 262
____exports.SoundEffect[____exports.SoundEffect.STONE_SHOOT] = "STONE_SHOOT"
____exports.SoundEffect.WEIRD_WORM_SPIT = 263
____exports.SoundEffect[____exports.SoundEffect.WEIRD_WORM_SPIT] = "WEIRD_WORM_SPIT"
____exports.SoundEffect.SUMMON_SOUND = 265
____exports.SoundEffect[____exports.SoundEffect.SUMMON_SOUND] = "SUMMON_SOUND"
____exports.SoundEffect.SUPER_HOLY = 266
____exports.SoundEffect[____exports.SoundEffect.SUPER_HOLY] = "SUPER_HOLY"
____exports.SoundEffect.THUMBS_DOWN = 267
____exports.SoundEffect[____exports.SoundEffect.THUMBS_DOWN] = "THUMBS_DOWN"
____exports.SoundEffect.THUMBS_UP = 268
____exports.SoundEffect[____exports.SoundEffect.THUMBS_UP] = "THUMBS_UP"
____exports.SoundEffect.FIRE_BURN = 269
____exports.SoundEffect[____exports.SoundEffect.FIRE_BURN] = "FIRE_BURN"
____exports.SoundEffect.HAPPY_RAINBOW = 270
____exports.SoundEffect[____exports.SoundEffect.HAPPY_RAINBOW] = "HAPPY_RAINBOW"
____exports.SoundEffect.LASER_RING = 271
____exports.SoundEffect[____exports.SoundEffect.LASER_RING] = "LASER_RING"
____exports.SoundEffect.LASER_RING_WEAK = 272
____exports.SoundEffect[____exports.SoundEffect.LASER_RING_WEAK] = "LASER_RING_WEAK"
____exports.SoundEffect.LASER_RING_STRONG = 273
____exports.SoundEffect[____exports.SoundEffect.LASER_RING_STRONG] = "LASER_RING_STRONG"
____exports.SoundEffect.CASH_REGISTER = 274
____exports.SoundEffect[____exports.SoundEffect.CASH_REGISTER] = "CASH_REGISTER"
____exports.SoundEffect.ANGEL_WING = 275
____exports.SoundEffect[____exports.SoundEffect.ANGEL_WING] = "ANGEL_WING"
____exports.SoundEffect.ANGEL_BEAM = 276
____exports.SoundEffect[____exports.SoundEffect.ANGEL_BEAM] = "ANGEL_BEAM"
____exports.SoundEffect.HOLY_MANTLE = 277
____exports.SoundEffect[____exports.SoundEffect.HOLY_MANTLE] = "HOLY_MANTLE"
____exports.SoundEffect.MEGA_BLAST_START = 278
____exports.SoundEffect[____exports.SoundEffect.MEGA_BLAST_START] = "MEGA_BLAST_START"
____exports.SoundEffect.MEGA_BLAST_LOOP = 279
____exports.SoundEffect[____exports.SoundEffect.MEGA_BLAST_LOOP] = "MEGA_BLAST_LOOP"
____exports.SoundEffect.MEGA_BLAST_END = 280
____exports.SoundEffect[____exports.SoundEffect.MEGA_BLAST_END] = "MEGA_BLAST_END"
____exports.SoundEffect.BLOOD_LASER_LOOP = 281
____exports.SoundEffect[____exports.SoundEffect.BLOOD_LASER_LOOP] = "BLOOD_LASER_LOOP"
____exports.SoundEffect.MENU_SCROLL = 282
____exports.SoundEffect[____exports.SoundEffect.MENU_SCROLL] = "MENU_SCROLL"
____exports.SoundEffect.MENU_NOTE_APPEAR = 283
____exports.SoundEffect[____exports.SoundEffect.MENU_NOTE_APPEAR] = "MENU_NOTE_APPEAR"
____exports.SoundEffect.MENU_NOTE_HIDE = 284
____exports.SoundEffect[____exports.SoundEffect.MENU_NOTE_HIDE] = "MENU_NOTE_HIDE"
____exports.SoundEffect.MENU_CHARACTER_SELECT = 285
____exports.SoundEffect[____exports.SoundEffect.MENU_CHARACTER_SELECT] = "MENU_CHARACTER_SELECT"
____exports.SoundEffect.SUMMON_POOF = 286
____exports.SoundEffect[____exports.SoundEffect.SUMMON_POOF] = "SUMMON_POOF"
____exports.SoundEffect.BOO_MAD = 300
____exports.SoundEffect[____exports.SoundEffect.BOO_MAD] = "BOO_MAD"
____exports.SoundEffect.FART_GURG = 301
____exports.SoundEffect[____exports.SoundEffect.FART_GURG] = "FART_GURG"
____exports.SoundEffect.FAT_GRUNT = 302
____exports.SoundEffect[____exports.SoundEffect.FAT_GRUNT] = "FAT_GRUNT"
____exports.SoundEffect.FAT_WIGGLE = 303
____exports.SoundEffect[____exports.SoundEffect.FAT_WIGGLE] = "FAT_WIGGLE"
____exports.SoundEffect.FIRE_RUSH = 304
____exports.SoundEffect[____exports.SoundEffect.FIRE_RUSH] = "FIRE_RUSH"
____exports.SoundEffect.GHOST_ROAR = 305
____exports.SoundEffect[____exports.SoundEffect.GHOST_ROAR] = "GHOST_ROAR"
____exports.SoundEffect.GHOST_SHOOT = 306
____exports.SoundEffect[____exports.SoundEffect.GHOST_SHOOT] = "GHOST_SHOOT"
____exports.SoundEffect.GROWL = 307
____exports.SoundEffect[____exports.SoundEffect.GROWL] = "GROWL"
____exports.SoundEffect.GURG_BARF = 308
____exports.SoundEffect[____exports.SoundEffect.GURG_BARF] = "GURG_BARF"
____exports.SoundEffect.INHALE = 309
____exports.SoundEffect[____exports.SoundEffect.INHALE] = "INHALE"
____exports.SoundEffect.LOW_INHALE = 310
____exports.SoundEffect[____exports.SoundEffect.LOW_INHALE] = "LOW_INHALE"
____exports.SoundEffect.MEGA_PUKE = 311
____exports.SoundEffect[____exports.SoundEffect.MEGA_PUKE] = "MEGA_PUKE"
____exports.SoundEffect.MOUTH_FULL = 312
____exports.SoundEffect[____exports.SoundEffect.MOUTH_FULL] = "MOUTH_FULL"
____exports.SoundEffect.MULTI_SCREAM = 313
____exports.SoundEffect[____exports.SoundEffect.MULTI_SCREAM] = "MULTI_SCREAM"
____exports.SoundEffect.SKIN_PULL = 314
____exports.SoundEffect[____exports.SoundEffect.SKIN_PULL] = "SKIN_PULL"
____exports.SoundEffect.WHISTLE = 315
____exports.SoundEffect[____exports.SoundEffect.WHISTLE] = "WHISTLE"
____exports.SoundEffect.DEVIL_ROOM_DEAL = 316
____exports.SoundEffect[____exports.SoundEffect.DEVIL_ROOM_DEAL] = "DEVIL_ROOM_DEAL"
____exports.SoundEffect.SPIDER_SPIT_ROAR = 317
____exports.SoundEffect[____exports.SoundEffect.SPIDER_SPIT_ROAR] = "SPIDER_SPIT_ROAR"
____exports.SoundEffect.WORM_SPIT = 318
____exports.SoundEffect[____exports.SoundEffect.WORM_SPIT] = "WORM_SPIT"
____exports.SoundEffect.LITTLE_SPIT = 319
____exports.SoundEffect[____exports.SoundEffect.LITTLE_SPIT] = "LITTLE_SPIT"
____exports.SoundEffect.SATAN_ROOM_APPEAR = 320
____exports.SoundEffect[____exports.SoundEffect.SATAN_ROOM_APPEAR] = "SATAN_ROOM_APPEAR"
____exports.SoundEffect.HEARTBEAT = 321
____exports.SoundEffect[____exports.SoundEffect.HEARTBEAT] = "HEARTBEAT"
____exports.SoundEffect.HEARTBEAT_FASTER = 322
____exports.SoundEffect[____exports.SoundEffect.HEARTBEAT_FASTER] = "HEARTBEAT_FASTER"
____exports.SoundEffect.HEARTBEAT_FASTEST = 323
____exports.SoundEffect[____exports.SoundEffect.HEARTBEAT_FASTEST] = "HEARTBEAT_FASTEST"
____exports.SoundEffect.FORTY_EIGHT_HOUR_ENERGY = 324
____exports.SoundEffect[____exports.SoundEffect.FORTY_EIGHT_HOUR_ENERGY] = "FORTY_EIGHT_HOUR_ENERGY"
____exports.SoundEffect.ALGIZ = 325
____exports.SoundEffect[____exports.SoundEffect.ALGIZ] = "ALGIZ"
____exports.SoundEffect.AMNESIA = 326
____exports.SoundEffect[____exports.SoundEffect.AMNESIA] = "AMNESIA"
____exports.SoundEffect.ANZUS = 327
____exports.SoundEffect[____exports.SoundEffect.ANZUS] = "ANZUS"
____exports.SoundEffect.BAD_GAS = 328
____exports.SoundEffect[____exports.SoundEffect.BAD_GAS] = "BAD_GAS"
____exports.SoundEffect.BAD_TRIP = 329
____exports.SoundEffect[____exports.SoundEffect.BAD_TRIP] = "BAD_TRIP"
____exports.SoundEffect.BALLS_OF_STEEL = 330
____exports.SoundEffect[____exports.SoundEffect.BALLS_OF_STEEL] = "BALLS_OF_STEEL"
____exports.SoundEffect.BERKANO = 331
____exports.SoundEffect[____exports.SoundEffect.BERKANO] = "BERKANO"
____exports.SoundEffect.BOMBS_ARE_KEY = 332
____exports.SoundEffect[____exports.SoundEffect.BOMBS_ARE_KEY] = "BOMBS_ARE_KEY"
____exports.SoundEffect.CARD_AGAINST_HUMANITY = 333
____exports.SoundEffect[____exports.SoundEffect.CARD_AGAINST_HUMANITY] = "CARD_AGAINST_HUMANITY"
____exports.SoundEffect.CHAOS_CARD = 334
____exports.SoundEffect[____exports.SoundEffect.CHAOS_CARD] = "CHAOS_CARD"
____exports.SoundEffect.CREDIT_CARD = 335
____exports.SoundEffect[____exports.SoundEffect.CREDIT_CARD] = "CREDIT_CARD"
____exports.SoundEffect.DAGAZ = 336
____exports.SoundEffect[____exports.SoundEffect.DAGAZ] = "DAGAZ"
____exports.SoundEffect.DEATH = 337
____exports.SoundEffect[____exports.SoundEffect.DEATH] = "DEATH"
____exports.SoundEffect.EHWAZ = 338
____exports.SoundEffect[____exports.SoundEffect.EHWAZ] = "EHWAZ"
____exports.SoundEffect.EXPLOSIVE_DIARRHEA = 339
____exports.SoundEffect[____exports.SoundEffect.EXPLOSIVE_DIARRHEA] = "EXPLOSIVE_DIARRHEA"
____exports.SoundEffect.FULL_HP = 340
____exports.SoundEffect[____exports.SoundEffect.FULL_HP] = "FULL_HP"
____exports.SoundEffect.HAGALAZ = 341
____exports.SoundEffect[____exports.SoundEffect.HAGALAZ] = "HAGALAZ"
____exports.SoundEffect.HP_DOWN = 342
____exports.SoundEffect[____exports.SoundEffect.HP_DOWN] = "HP_DOWN"
____exports.SoundEffect.HP_UP = 343
____exports.SoundEffect[____exports.SoundEffect.HP_UP] = "HP_UP"
____exports.SoundEffect.HEMATEMESIS = 344
____exports.SoundEffect[____exports.SoundEffect.HEMATEMESIS] = "HEMATEMESIS"
____exports.SoundEffect.I_FOUND_PILLS = 345
____exports.SoundEffect[____exports.SoundEffect.I_FOUND_PILLS] = "I_FOUND_PILLS"
____exports.SoundEffect.JERA = 346
____exports.SoundEffect[____exports.SoundEffect.JERA] = "JERA"
____exports.SoundEffect.JOKER = 347
____exports.SoundEffect[____exports.SoundEffect.JOKER] = "JOKER"
____exports.SoundEffect.JUDGEMENT = 348
____exports.SoundEffect[____exports.SoundEffect.JUDGEMENT] = "JUDGEMENT"
____exports.SoundEffect.JUSTICE = 349
____exports.SoundEffect[____exports.SoundEffect.JUSTICE] = "JUSTICE"
____exports.SoundEffect.LEMON_PARTY = 350
____exports.SoundEffect[____exports.SoundEffect.LEMON_PARTY] = "LEMON_PARTY"
____exports.SoundEffect.LUCK_DOWN = 351
____exports.SoundEffect[____exports.SoundEffect.LUCK_DOWN] = "LUCK_DOWN"
____exports.SoundEffect.LUCK_UP = 352
____exports.SoundEffect[____exports.SoundEffect.LUCK_UP] = "LUCK_UP"
____exports.SoundEffect.PARALYSIS = 353
____exports.SoundEffect[____exports.SoundEffect.PARALYSIS] = "PARALYSIS"
____exports.SoundEffect.PERTHRO = 354
____exports.SoundEffect[____exports.SoundEffect.PERTHRO] = "PERTHRO"
____exports.SoundEffect.PHEROMONES = 355
____exports.SoundEffect[____exports.SoundEffect.PHEROMONES] = "PHEROMONES"
____exports.SoundEffect.PRETTY_FLY = 356
____exports.SoundEffect[____exports.SoundEffect.PRETTY_FLY] = "PRETTY_FLY"
____exports.SoundEffect.PUBERTY = 357
____exports.SoundEffect[____exports.SoundEffect.PUBERTY] = "PUBERTY"
____exports.SoundEffect.R_U_A_WIZARD = 358
____exports.SoundEffect[____exports.SoundEffect.R_U_A_WIZARD] = "R_U_A_WIZARD"
____exports.SoundEffect.RANGE_DOWN = 359
____exports.SoundEffect[____exports.SoundEffect.RANGE_DOWN] = "RANGE_DOWN"
____exports.SoundEffect.RANGE_UP = 360
____exports.SoundEffect[____exports.SoundEffect.RANGE_UP] = "RANGE_UP"
____exports.SoundEffect.RULES_CARD = 361
____exports.SoundEffect[____exports.SoundEffect.RULES_CARD] = "RULES_CARD"
____exports.SoundEffect.I_CAN_SEE_FOREVER = 362
____exports.SoundEffect[____exports.SoundEffect.I_CAN_SEE_FOREVER] = "I_CAN_SEE_FOREVER"
____exports.SoundEffect.SPEED_DOWN = 363
____exports.SoundEffect[____exports.SoundEffect.SPEED_DOWN] = "SPEED_DOWN"
____exports.SoundEffect.SPEED_UP = 364
____exports.SoundEffect[____exports.SoundEffect.SPEED_UP] = "SPEED_UP"
____exports.SoundEffect.STRENGTH = 365
____exports.SoundEffect[____exports.SoundEffect.STRENGTH] = "STRENGTH"
____exports.SoundEffect.SUICIDE_KING = 366
____exports.SoundEffect[____exports.SoundEffect.SUICIDE_KING] = "SUICIDE_KING"
____exports.SoundEffect.TEARS_DOWN = 367
____exports.SoundEffect[____exports.SoundEffect.TEARS_DOWN] = "TEARS_DOWN"
____exports.SoundEffect.TEARS_UP = 368
____exports.SoundEffect[____exports.SoundEffect.TEARS_UP] = "TEARS_UP"
____exports.SoundEffect.TELEPILLS = 369
____exports.SoundEffect[____exports.SoundEffect.TELEPILLS] = "TELEPILLS"
____exports.SoundEffect.TEMPERANCE = 370
____exports.SoundEffect[____exports.SoundEffect.TEMPERANCE] = "TEMPERANCE"
____exports.SoundEffect.CHARIOT = 371
____exports.SoundEffect[____exports.SoundEffect.CHARIOT] = "CHARIOT"
____exports.SoundEffect.DEVIL = 372
____exports.SoundEffect[____exports.SoundEffect.DEVIL] = "DEVIL"
____exports.SoundEffect.EMPEROR = 373
____exports.SoundEffect[____exports.SoundEffect.EMPEROR] = "EMPEROR"
____exports.SoundEffect.EMPRESS = 374
____exports.SoundEffect[____exports.SoundEffect.EMPRESS] = "EMPRESS"
____exports.SoundEffect.FOOL = 375
____exports.SoundEffect[____exports.SoundEffect.FOOL] = "FOOL"
____exports.SoundEffect.HANGED_MAN = 376
____exports.SoundEffect[____exports.SoundEffect.HANGED_MAN] = "HANGED_MAN"
____exports.SoundEffect.HERMIT = 377
____exports.SoundEffect[____exports.SoundEffect.HERMIT] = "HERMIT"
____exports.SoundEffect.HIEROPHANT = 378
____exports.SoundEffect[____exports.SoundEffect.HIEROPHANT] = "HIEROPHANT"
____exports.SoundEffect.HIGH_PRIESTESS = 379
____exports.SoundEffect[____exports.SoundEffect.HIGH_PRIESTESS] = "HIGH_PRIESTESS"
____exports.SoundEffect.LOVERS = 380
____exports.SoundEffect[____exports.SoundEffect.LOVERS] = "LOVERS"
____exports.SoundEffect.MAGICIAN = 381
____exports.SoundEffect[____exports.SoundEffect.MAGICIAN] = "MAGICIAN"
____exports.SoundEffect.MOON = 382
____exports.SoundEffect[____exports.SoundEffect.MOON] = "MOON"
____exports.SoundEffect.STARS = 383
____exports.SoundEffect[____exports.SoundEffect.STARS] = "STARS"
____exports.SoundEffect.SUN = 384
____exports.SoundEffect[____exports.SoundEffect.SUN] = "SUN"
____exports.SoundEffect.TOWER = 385
____exports.SoundEffect[____exports.SoundEffect.TOWER] = "TOWER"
____exports.SoundEffect.WORLD = 386
____exports.SoundEffect[____exports.SoundEffect.WORLD] = "WORLD"
____exports.SoundEffect.TWO_OF_CLUBS = 387
____exports.SoundEffect[____exports.SoundEffect.TWO_OF_CLUBS] = "TWO_OF_CLUBS"
____exports.SoundEffect.TWO_OF_DIAMONDS = 388
____exports.SoundEffect[____exports.SoundEffect.TWO_OF_DIAMONDS] = "TWO_OF_DIAMONDS"
____exports.SoundEffect.TWO_OF_HEARTS = 389
____exports.SoundEffect[____exports.SoundEffect.TWO_OF_HEARTS] = "TWO_OF_HEARTS"
____exports.SoundEffect.TWO_OF_SPADES = 390
____exports.SoundEffect[____exports.SoundEffect.TWO_OF_SPADES] = "TWO_OF_SPADES"
____exports.SoundEffect.WHEEL_OF_FORTUNE = 391
____exports.SoundEffect[____exports.SoundEffect.WHEEL_OF_FORTUNE] = "WHEEL_OF_FORTUNE"
____exports.SoundEffect.RAGMAN_1 = 392
____exports.SoundEffect[____exports.SoundEffect.RAGMAN_1] = "RAGMAN_1"
____exports.SoundEffect.RAGMAN_2 = 393
____exports.SoundEffect[____exports.SoundEffect.RAGMAN_2] = "RAGMAN_2"
____exports.SoundEffect.RAGMAN_3 = 394
____exports.SoundEffect[____exports.SoundEffect.RAGMAN_3] = "RAGMAN_3"
____exports.SoundEffect.RAGMAN_4 = 395
____exports.SoundEffect[____exports.SoundEffect.RAGMAN_4] = "RAGMAN_4"
____exports.SoundEffect.FLUSH = 396
____exports.SoundEffect[____exports.SoundEffect.FLUSH] = "FLUSH"
____exports.SoundEffect.WATER_DROP = 397
____exports.SoundEffect[____exports.SoundEffect.WATER_DROP] = "WATER_DROP"
____exports.SoundEffect.WET_FEET = 398
____exports.SoundEffect[____exports.SoundEffect.WET_FEET] = "WET_FEET"
____exports.SoundEffect.ADDICTED = 399
____exports.SoundEffect[____exports.SoundEffect.ADDICTED] = "ADDICTED"
____exports.SoundEffect.DICE_SHARD = 400
____exports.SoundEffect[____exports.SoundEffect.DICE_SHARD] = "DICE_SHARD"
____exports.SoundEffect.EMERGENCY = 401
____exports.SoundEffect[____exports.SoundEffect.EMERGENCY] = "EMERGENCY"
____exports.SoundEffect.INFESTED_EXCLAMATION = 402
____exports.SoundEffect[____exports.SoundEffect.INFESTED_EXCLAMATION] = "INFESTED_EXCLAMATION"
____exports.SoundEffect.INFESTED_QUESTION = 403
____exports.SoundEffect[____exports.SoundEffect.INFESTED_QUESTION] = "INFESTED_QUESTION"
____exports.SoundEffect.GET_OUT_OF_JAIL_CARD = 404
____exports.SoundEffect[____exports.SoundEffect.GET_OUT_OF_JAIL_CARD] = "GET_OUT_OF_JAIL_CARD"
____exports.SoundEffect.LARGER = 405
____exports.SoundEffect[____exports.SoundEffect.LARGER] = "LARGER"
____exports.SoundEffect.PERCS = 406
____exports.SoundEffect[____exports.SoundEffect.PERCS] = "PERCS"
____exports.SoundEffect.POWER_PILL = 407
____exports.SoundEffect[____exports.SoundEffect.POWER_PILL] = "POWER_PILL"
____exports.SoundEffect.QUESTION_MARK = 408
____exports.SoundEffect[____exports.SoundEffect.QUESTION_MARK] = "QUESTION_MARK"
____exports.SoundEffect.RELAX = 409
____exports.SoundEffect[____exports.SoundEffect.RELAX] = "RELAX"
____exports.SoundEffect.RETRO = 410
____exports.SoundEffect[____exports.SoundEffect.RETRO] = "RETRO"
____exports.SoundEffect.SMALL = 411
____exports.SoundEffect[____exports.SoundEffect.SMALL] = "SMALL"
____exports.SoundEffect.QUESTION_MARKS = 412
____exports.SoundEffect[____exports.SoundEffect.QUESTION_MARKS] = "QUESTION_MARKS"
____exports.SoundEffect.DANGLE_WHISTLE = 413
____exports.SoundEffect[____exports.SoundEffect.DANGLE_WHISTLE] = "DANGLE_WHISTLE"
____exports.SoundEffect.LITTLE_HORN_COUGH = 414
____exports.SoundEffect[____exports.SoundEffect.LITTLE_HORN_COUGH] = "LITTLE_HORN_COUGH"
____exports.SoundEffect.LITTLE_HORN_GRUNT_1 = 415
____exports.SoundEffect[____exports.SoundEffect.LITTLE_HORN_GRUNT_1] = "LITTLE_HORN_GRUNT_1"
____exports.SoundEffect.LITTLE_HORN_GRUNT_2 = 416
____exports.SoundEffect[____exports.SoundEffect.LITTLE_HORN_GRUNT_2] = "LITTLE_HORN_GRUNT_2"
____exports.SoundEffect.FORSAKEN_LAUGH = 417
____exports.SoundEffect[____exports.SoundEffect.FORSAKEN_LAUGH] = "FORSAKEN_LAUGH"
____exports.SoundEffect.FORSAKEN_SCREAM = 418
____exports.SoundEffect[____exports.SoundEffect.FORSAKEN_SCREAM] = "FORSAKEN_SCREAM"
____exports.SoundEffect.STAIN_BURST = 419
____exports.SoundEffect[____exports.SoundEffect.STAIN_BURST] = "STAIN_BURST"
____exports.SoundEffect.BROWNIE_LAUGH = 420
____exports.SoundEffect[____exports.SoundEffect.BROWNIE_LAUGH] = "BROWNIE_LAUGH"
____exports.SoundEffect.HUSH_ROAR = 421
____exports.SoundEffect[____exports.SoundEffect.HUSH_ROAR] = "HUSH_ROAR"
____exports.SoundEffect.HUSH_GROWL = 422
____exports.SoundEffect[____exports.SoundEffect.HUSH_GROWL] = "HUSH_GROWL"
____exports.SoundEffect.HUSH_LOW_ROAR = 423
____exports.SoundEffect[____exports.SoundEffect.HUSH_LOW_ROAR] = "HUSH_LOW_ROAR"
____exports.SoundEffect.FRAIL_CHARGE = 424
____exports.SoundEffect[____exports.SoundEffect.FRAIL_CHARGE] = "FRAIL_CHARGE"
____exports.SoundEffect.HUSH_CHARGE = 425
____exports.SoundEffect[____exports.SoundEffect.HUSH_CHARGE] = "HUSH_CHARGE"
____exports.SoundEffect.MAW_OF_VOID = 426
____exports.SoundEffect[____exports.SoundEffect.MAW_OF_VOID] = "MAW_OF_VOID"
____exports.SoundEffect.ULTRA_GREED_COIN_DESTROY = 427
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_COIN_DESTROY] = "ULTRA_GREED_COIN_DESTROY"
____exports.SoundEffect.ULTRA_GREED_COINS_FALLING = 428
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_COINS_FALLING] = "ULTRA_GREED_COINS_FALLING"
____exports.SoundEffect.ULTRA_GREED_DEATH_SCREAM = 429
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_DEATH_SCREAM] = "ULTRA_GREED_DEATH_SCREAM"
____exports.SoundEffect.ULTRA_GREED_TURN_GOLD_1 = 430
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_TURN_GOLD_1] = "ULTRA_GREED_TURN_GOLD_1"
____exports.SoundEffect.ULTRA_GREED_TURN_GOLD_2 = 431
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_TURN_GOLD_2] = "ULTRA_GREED_TURN_GOLD_2"
____exports.SoundEffect.ULTRA_GREED_ROAR_1 = 432
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_ROAR_1] = "ULTRA_GREED_ROAR_1"
____exports.SoundEffect.ULTRA_GREED_ROAR_2 = 433
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_ROAR_2] = "ULTRA_GREED_ROAR_2"
____exports.SoundEffect.ULTRA_GREED_SPIT = 434
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_SPIT] = "ULTRA_GREED_SPIT"
____exports.SoundEffect.ULTRA_GREED_PULL_SLOT = 435
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_PULL_SLOT] = "ULTRA_GREED_PULL_SLOT"
____exports.SoundEffect.ULTRA_GREED_SLOT_SPIN_LOOP = 436
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_SLOT_SPIN_LOOP] = "ULTRA_GREED_SLOT_SPIN_LOOP"
____exports.SoundEffect.ULTRA_GREED_SLOT_STOP = 437
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_SLOT_STOP] = "ULTRA_GREED_SLOT_STOP"
____exports.SoundEffect.ULTRA_GREED_SLOT_WIN_LOOP_END = 438
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_SLOT_WIN_LOOP_END] = "ULTRA_GREED_SLOT_WIN_LOOP_END"
____exports.SoundEffect.ULTRA_GREED_SLOT_WIN_LOOP = 439
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_SLOT_WIN_LOOP] = "ULTRA_GREED_SLOT_WIN_LOOP"
____exports.SoundEffect.ULTRA_GREED_SPINNING = 440
____exports.SoundEffect[____exports.SoundEffect.ULTRA_GREED_SPINNING] = "ULTRA_GREED_SPINNING"
____exports.SoundEffect.DOG_BARK = 441
____exports.SoundEffect[____exports.SoundEffect.DOG_BARK] = "DOG_BARK"
____exports.SoundEffect.DOG_HOWL = 442
____exports.SoundEffect[____exports.SoundEffect.DOG_HOWL] = "DOG_HOWL"
____exports.SoundEffect.X_LAX = 443
____exports.SoundEffect[____exports.SoundEffect.X_LAX] = "X_LAX"
____exports.SoundEffect.WRONG = 444
____exports.SoundEffect[____exports.SoundEffect.WRONG] = "WRONG"
____exports.SoundEffect.VURP = 445
____exports.SoundEffect[____exports.SoundEffect.VURP] = "VURP"
____exports.SoundEffect.SUNSHINE = 446
____exports.SoundEffect[____exports.SoundEffect.SUNSHINE] = "SUNSHINE"
____exports.SoundEffect.ACE_OF_SPADES = 447
____exports.SoundEffect[____exports.SoundEffect.ACE_OF_SPADES] = "ACE_OF_SPADES"
____exports.SoundEffect.HORF = 448
____exports.SoundEffect[____exports.SoundEffect.HORF] = "HORF"
____exports.SoundEffect.HOLY_CARD = 449
____exports.SoundEffect[____exports.SoundEffect.HOLY_CARD] = "HOLY_CARD"
____exports.SoundEffect.ACE_OF_HEARTS = 450
____exports.SoundEffect[____exports.SoundEffect.ACE_OF_HEARTS] = "ACE_OF_HEARTS"
____exports.SoundEffect.GULP = 451
____exports.SoundEffect[____exports.SoundEffect.GULP] = "GULP"
____exports.SoundEffect.FRIENDS = 452
____exports.SoundEffect[____exports.SoundEffect.FRIENDS] = "FRIENDS"
____exports.SoundEffect.EXCITED = 453
____exports.SoundEffect[____exports.SoundEffect.EXCITED] = "EXCITED"
____exports.SoundEffect.DROWSY = 454
____exports.SoundEffect[____exports.SoundEffect.DROWSY] = "DROWSY"
____exports.SoundEffect.ACE_OF_DIAMONDS = 455
____exports.SoundEffect[____exports.SoundEffect.ACE_OF_DIAMONDS] = "ACE_OF_DIAMONDS"
____exports.SoundEffect.ACE_OF_CLUBS = 456
____exports.SoundEffect[____exports.SoundEffect.ACE_OF_CLUBS] = "ACE_OF_CLUBS"
____exports.SoundEffect.BLACK_RUNE = 457
____exports.SoundEffect[____exports.SoundEffect.BLACK_RUNE] = "BLACK_RUNE"
____exports.SoundEffect.PING_PONG = 458
____exports.SoundEffect[____exports.SoundEffect.PING_PONG] = "PING_PONG"
____exports.SoundEffect.SPEWER = 459
____exports.SoundEffect[____exports.SoundEffect.SPEWER] = "SPEWER"
____exports.SoundEffect.MOM_FOOTSTEPS = 460
____exports.SoundEffect[____exports.SoundEffect.MOM_FOOTSTEPS] = "MOM_FOOTSTEPS"
____exports.SoundEffect.BONE_HEART = 461
____exports.SoundEffect[____exports.SoundEffect.BONE_HEART] = "BONE_HEART"
____exports.SoundEffect.BONE_SNAP = 462
____exports.SoundEffect[____exports.SoundEffect.BONE_SNAP] = "BONE_SNAP"
____exports.SoundEffect.SHOVEL_DROP = 463
____exports.SoundEffect[____exports.SoundEffect.SHOVEL_DROP] = "SHOVEL_DROP"
____exports.SoundEffect.SHOVEL_DIG = 464
____exports.SoundEffect[____exports.SoundEffect.SHOVEL_DIG] = "SHOVEL_DIG"
____exports.SoundEffect.GOLD_HEART = 465
____exports.SoundEffect[____exports.SoundEffect.GOLD_HEART] = "GOLD_HEART"
____exports.SoundEffect.GOLD_HEART_DROP = 466
____exports.SoundEffect[____exports.SoundEffect.GOLD_HEART_DROP] = "GOLD_HEART_DROP"
____exports.SoundEffect.BONE_DROP = 467
____exports.SoundEffect[____exports.SoundEffect.BONE_DROP] = "BONE_DROP"
____exports.SoundEffect.UNHOLY = 468
____exports.SoundEffect[____exports.SoundEffect.UNHOLY] = "UNHOLY"
____exports.SoundEffect.BUTTON_PRESS = 469
____exports.SoundEffect[____exports.SoundEffect.BUTTON_PRESS] = "BUTTON_PRESS"
____exports.SoundEffect.GOLDEN_BOMB = 470
____exports.SoundEffect[____exports.SoundEffect.GOLDEN_BOMB] = "GOLDEN_BOMB"
____exports.SoundEffect.CANDLE_LIGHT = 471
____exports.SoundEffect[____exports.SoundEffect.CANDLE_LIGHT] = "CANDLE_LIGHT"
____exports.SoundEffect.THUNDER = 472
____exports.SoundEffect[____exports.SoundEffect.THUNDER] = "THUNDER"
____exports.SoundEffect.WATER_FLOW_LOOP = 473
____exports.SoundEffect[____exports.SoundEffect.WATER_FLOW_LOOP] = "WATER_FLOW_LOOP"
____exports.SoundEffect.BOSS_2_DIVE = 474
____exports.SoundEffect[____exports.SoundEffect.BOSS_2_DIVE] = "BOSS_2_DIVE"
____exports.SoundEffect.BOSS_2_INTRO_PIPES_TURNON = 475
____exports.SoundEffect[____exports.SoundEffect.BOSS_2_INTRO_PIPES_TURNON] = "BOSS_2_INTRO_PIPES_TURNON"
____exports.SoundEffect.WATER_FLOW_LARGE = 476
____exports.SoundEffect[____exports.SoundEffect.WATER_FLOW_LARGE] = "WATER_FLOW_LARGE"
____exports.SoundEffect.DEMON_HIT = 477
____exports.SoundEffect[____exports.SoundEffect.DEMON_HIT] = "DEMON_HIT"
____exports.SoundEffect.PUNCH = 478
____exports.SoundEffect[____exports.SoundEffect.PUNCH] = "PUNCH"
____exports.SoundEffect.FLUTE = 479
____exports.SoundEffect[____exports.SoundEffect.FLUTE] = "FLUTE"
____exports.SoundEffect.LAVA_LOOP = 480
____exports.SoundEffect[____exports.SoundEffect.LAVA_LOOP] = "LAVA_LOOP"
____exports.SoundEffect.WOOD_PLANK_BREAK = 481
____exports.SoundEffect[____exports.SoundEffect.WOOD_PLANK_BREAK] = "WOOD_PLANK_BREAK"
____exports.SoundEffect.BULLET_SHOT = 482
____exports.SoundEffect[____exports.SoundEffect.BULLET_SHOT] = "BULLET_SHOT"
____exports.SoundEffect.FLAME_BURST = 483
____exports.SoundEffect[____exports.SoundEffect.FLAME_BURST] = "FLAME_BURST"
____exports.SoundEffect.INFLATE = 484
____exports.SoundEffect[____exports.SoundEffect.INFLATE] = "INFLATE"
____exports.SoundEffect.CLAP = 485
____exports.SoundEffect[____exports.SoundEffect.CLAP] = "CLAP"
____exports.SoundEffect.BOSS_2_INTRO_WATER_EXPLOSION = 486
____exports.SoundEffect[____exports.SoundEffect.BOSS_2_INTRO_WATER_EXPLOSION] = "BOSS_2_INTRO_WATER_EXPLOSION"
____exports.SoundEffect.STONE_IMPACT = 487
____exports.SoundEffect[____exports.SoundEffect.STONE_IMPACT] = "STONE_IMPACT"
____exports.SoundEffect.BOSS_2_WATER_THRASHING = 488
____exports.SoundEffect[____exports.SoundEffect.BOSS_2_WATER_THRASHING] = "BOSS_2_WATER_THRASHING"
____exports.SoundEffect.FART_MEGA = 489
____exports.SoundEffect[____exports.SoundEffect.FART_MEGA] = "FART_MEGA"
____exports.SoundEffect.MATCHSTICK = 490
____exports.SoundEffect[____exports.SoundEffect.MATCHSTICK] = "MATCHSTICK"
____exports.SoundEffect.FORTUNE_COOKIE = 491
____exports.SoundEffect[____exports.SoundEffect.FORTUNE_COOKIE] = "FORTUNE_COOKIE"
____exports.SoundEffect.BULB_FLASH = 492
____exports.SoundEffect[____exports.SoundEffect.BULB_FLASH] = "BULB_FLASH"
____exports.SoundEffect.BATTERY_DISCHARGE = 493
____exports.SoundEffect[____exports.SoundEffect.BATTERY_DISCHARGE] = "BATTERY_DISCHARGE"
____exports.SoundEffect.WHIP = 494
____exports.SoundEffect[____exports.SoundEffect.WHIP] = "WHIP"
____exports.SoundEffect.WHIP_HIT = 495
____exports.SoundEffect[____exports.SoundEffect.WHIP_HIT] = "WHIP_HIT"
____exports.SoundEffect.FREEZE = 496
____exports.SoundEffect[____exports.SoundEffect.FREEZE] = "FREEZE"
____exports.SoundEffect.ROTTEN_HEART = 497
____exports.SoundEffect[____exports.SoundEffect.ROTTEN_HEART] = "ROTTEN_HEART"
____exports.SoundEffect.FREEZE_SHATTER = 498
____exports.SoundEffect[____exports.SoundEffect.FREEZE_SHATTER] = "FREEZE_SHATTER"
____exports.SoundEffect.BONE_BOUNCE = 499
____exports.SoundEffect[____exports.SoundEffect.BONE_BOUNCE] = "BONE_BOUNCE"
____exports.SoundEffect.BONE_BREAK = 500
____exports.SoundEffect[____exports.SoundEffect.BONE_BREAK] = "BONE_BREAK"
____exports.SoundEffect.BISHOP_HIT = 501
____exports.SoundEffect[____exports.SoundEffect.BISHOP_HIT] = "BISHOP_HIT"
____exports.SoundEffect.CHAIN_LOOP = 503
____exports.SoundEffect[____exports.SoundEffect.CHAIN_LOOP] = "CHAIN_LOOP"
____exports.SoundEffect.CHAIN_BREAK = 504
____exports.SoundEffect[____exports.SoundEffect.CHAIN_BREAK] = "CHAIN_BREAK"
____exports.SoundEffect.MINECART_LOOP = 505
____exports.SoundEffect[____exports.SoundEffect.MINECART_LOOP] = "MINECART_LOOP"
____exports.SoundEffect.TOOTH_AND_NAIL = 506
____exports.SoundEffect[____exports.SoundEffect.TOOTH_AND_NAIL] = "TOOTH_AND_NAIL"
____exports.SoundEffect.TOOTH_AND_NAIL_TICK = 507
____exports.SoundEffect[____exports.SoundEffect.TOOTH_AND_NAIL_TICK] = "TOOTH_AND_NAIL_TICK"
____exports.SoundEffect.STATIC_BUILDUP = 508
____exports.SoundEffect[____exports.SoundEffect.STATIC_BUILDUP] = "STATIC_BUILDUP"
____exports.SoundEffect.BIG_LEECH = 510
____exports.SoundEffect[____exports.SoundEffect.BIG_LEECH] = "BIG_LEECH"
____exports.SoundEffect.REVERSE_EXPLOSION = 511
____exports.SoundEffect[____exports.SoundEffect.REVERSE_EXPLOSION] = "REVERSE_EXPLOSION"
____exports.SoundEffect.REVERSE_FOOL = 512
____exports.SoundEffect[____exports.SoundEffect.REVERSE_FOOL] = "REVERSE_FOOL"
____exports.SoundEffect.REVERSE_MAGICIAN = 513
____exports.SoundEffect[____exports.SoundEffect.REVERSE_MAGICIAN] = "REVERSE_MAGICIAN"
____exports.SoundEffect.REVERSE_HIGH_PRIESTESS = 514
____exports.SoundEffect[____exports.SoundEffect.REVERSE_HIGH_PRIESTESS] = "REVERSE_HIGH_PRIESTESS"
____exports.SoundEffect.REVERSE_EMPRESS = 515
____exports.SoundEffect[____exports.SoundEffect.REVERSE_EMPRESS] = "REVERSE_EMPRESS"
____exports.SoundEffect.REVERSE_EMPEROR = 516
____exports.SoundEffect[____exports.SoundEffect.REVERSE_EMPEROR] = "REVERSE_EMPEROR"
____exports.SoundEffect.REVERSE_HIEROPHANT = 517
____exports.SoundEffect[____exports.SoundEffect.REVERSE_HIEROPHANT] = "REVERSE_HIEROPHANT"
____exports.SoundEffect.REVERSE_LOVERS = 518
____exports.SoundEffect[____exports.SoundEffect.REVERSE_LOVERS] = "REVERSE_LOVERS"
____exports.SoundEffect.REVERSE_CHARIOT = 519
____exports.SoundEffect[____exports.SoundEffect.REVERSE_CHARIOT] = "REVERSE_CHARIOT"
____exports.SoundEffect.REVERSE_JUSTICE = 520
____exports.SoundEffect[____exports.SoundEffect.REVERSE_JUSTICE] = "REVERSE_JUSTICE"
____exports.SoundEffect.REVERSE_HERMIT = 521
____exports.SoundEffect[____exports.SoundEffect.REVERSE_HERMIT] = "REVERSE_HERMIT"
____exports.SoundEffect.REVERSE_WHEEL_OF_FORTUNE = 522
____exports.SoundEffect[____exports.SoundEffect.REVERSE_WHEEL_OF_FORTUNE] = "REVERSE_WHEEL_OF_FORTUNE"
____exports.SoundEffect.REVERSE_STRENGTH = 523
____exports.SoundEffect[____exports.SoundEffect.REVERSE_STRENGTH] = "REVERSE_STRENGTH"
____exports.SoundEffect.REVERSE_HANGED_MAN = 524
____exports.SoundEffect[____exports.SoundEffect.REVERSE_HANGED_MAN] = "REVERSE_HANGED_MAN"
____exports.SoundEffect.REVERSE_DEATH = 525
____exports.SoundEffect[____exports.SoundEffect.REVERSE_DEATH] = "REVERSE_DEATH"
____exports.SoundEffect.REVERSE_TEMPERANCE = 526
____exports.SoundEffect[____exports.SoundEffect.REVERSE_TEMPERANCE] = "REVERSE_TEMPERANCE"
____exports.SoundEffect.REVERSE_DEVIL = 527
____exports.SoundEffect[____exports.SoundEffect.REVERSE_DEVIL] = "REVERSE_DEVIL"
____exports.SoundEffect.REVERSE_TOWER = 528
____exports.SoundEffect[____exports.SoundEffect.REVERSE_TOWER] = "REVERSE_TOWER"
____exports.SoundEffect.REVERSE_STARS = 529
____exports.SoundEffect[____exports.SoundEffect.REVERSE_STARS] = "REVERSE_STARS"
____exports.SoundEffect.REVERSE_MOON = 530
____exports.SoundEffect[____exports.SoundEffect.REVERSE_MOON] = "REVERSE_MOON"
____exports.SoundEffect.REVERSE_SUN = 531
____exports.SoundEffect[____exports.SoundEffect.REVERSE_SUN] = "REVERSE_SUN"
____exports.SoundEffect.REVERSE_JUDGEMENT = 532
____exports.SoundEffect[____exports.SoundEffect.REVERSE_JUDGEMENT] = "REVERSE_JUDGEMENT"
____exports.SoundEffect.REVERSE_WORLD = 533
____exports.SoundEffect[____exports.SoundEffect.REVERSE_WORLD] = "REVERSE_WORLD"
____exports.SoundEffect.FLAMETHROWER_START = 534
____exports.SoundEffect[____exports.SoundEffect.FLAMETHROWER_START] = "FLAMETHROWER_START"
____exports.SoundEffect.FLAMETHROWER_LOOP = 535
____exports.SoundEffect[____exports.SoundEffect.FLAMETHROWER_LOOP] = "FLAMETHROWER_LOOP"
____exports.SoundEffect.FLAMETHROWER_END = 536
____exports.SoundEffect[____exports.SoundEffect.FLAMETHROWER_END] = "FLAMETHROWER_END"
____exports.SoundEffect.ROCKET_LAUNCH = 537
____exports.SoundEffect[____exports.SoundEffect.ROCKET_LAUNCH] = "ROCKET_LAUNCH"
____exports.SoundEffect.SWORD_SPIN = 538
____exports.SoundEffect[____exports.SoundEffect.SWORD_SPIN] = "SWORD_SPIN"
____exports.SoundEffect.BABY_BRIM = 539
____exports.SoundEffect[____exports.SoundEffect.BABY_BRIM] = "BABY_BRIM"
____exports.SoundEffect.KNIFE_PULL = 540
____exports.SoundEffect[____exports.SoundEffect.KNIFE_PULL] = "KNIFE_PULL"
____exports.SoundEffect.DOGMA_APPEAR_SCREAM = 541
____exports.SoundEffect[____exports.SoundEffect.DOGMA_APPEAR_SCREAM] = "DOGMA_APPEAR_SCREAM"
____exports.SoundEffect.DOGMA_DEATH = 542
____exports.SoundEffect[____exports.SoundEffect.DOGMA_DEATH] = "DOGMA_DEATH"
____exports.SoundEffect.DOGMA_BLACK_HOLE_CHARGE = 543
____exports.SoundEffect[____exports.SoundEffect.DOGMA_BLACK_HOLE_CHARGE] = "DOGMA_BLACK_HOLE_CHARGE"
____exports.SoundEffect.DOGMA_BLACK_HOLE_SHOOT = 544
____exports.SoundEffect[____exports.SoundEffect.DOGMA_BLACK_HOLE_SHOOT] = "DOGMA_BLACK_HOLE_SHOOT"
____exports.SoundEffect.DOGMA_BLACK_HOLE_OPEN = 545
____exports.SoundEffect[____exports.SoundEffect.DOGMA_BLACK_HOLE_OPEN] = "DOGMA_BLACK_HOLE_OPEN"
____exports.SoundEffect.DOGMA_BLACK_HOLE_CLOSE = 546
____exports.SoundEffect[____exports.SoundEffect.DOGMA_BLACK_HOLE_CLOSE] = "DOGMA_BLACK_HOLE_CLOSE"
____exports.SoundEffect.DOGMA_BRIMSTONE_CHARGE = 547
____exports.SoundEffect[____exports.SoundEffect.DOGMA_BRIMSTONE_CHARGE] = "DOGMA_BRIMSTONE_CHARGE"
____exports.SoundEffect.DOGMA_BRIMSTONE_SHOOT = 548
____exports.SoundEffect[____exports.SoundEffect.DOGMA_BRIMSTONE_SHOOT] = "DOGMA_BRIMSTONE_SHOOT"
____exports.SoundEffect.DOGMA_GODHEAD = 549
____exports.SoundEffect[____exports.SoundEffect.DOGMA_GODHEAD] = "DOGMA_GODHEAD"
____exports.SoundEffect.DOGMA_JACOBS = 550
____exports.SoundEffect[____exports.SoundEffect.DOGMA_JACOBS] = "DOGMA_JACOBS"
____exports.SoundEffect.DOGMA_JACOBS_ZAP = 551
____exports.SoundEffect[____exports.SoundEffect.DOGMA_JACOBS_ZAP] = "DOGMA_JACOBS_ZAP"
____exports.SoundEffect.DOGMA_SCREAM = 552
____exports.SoundEffect[____exports.SoundEffect.DOGMA_SCREAM] = "DOGMA_SCREAM"
____exports.SoundEffect.DOGMA_PREACHER = 553
____exports.SoundEffect[____exports.SoundEffect.DOGMA_PREACHER] = "DOGMA_PREACHER"
____exports.SoundEffect.DOGMA_RING_START = 554
____exports.SoundEffect[____exports.SoundEffect.DOGMA_RING_START] = "DOGMA_RING_START"
____exports.SoundEffect.DOGMA_RING_LOOP = 555
____exports.SoundEffect[____exports.SoundEffect.DOGMA_RING_LOOP] = "DOGMA_RING_LOOP"
____exports.SoundEffect.DOGMA_FEATHER_SPRAY = 556
____exports.SoundEffect[____exports.SoundEffect.DOGMA_FEATHER_SPRAY] = "DOGMA_FEATHER_SPRAY"
____exports.SoundEffect.DOGMA_JACOBS_DOT = 557
____exports.SoundEffect[____exports.SoundEffect.DOGMA_JACOBS_DOT] = "DOGMA_JACOBS_DOT"
____exports.SoundEffect.DOGMA_BLACK_HOLE_LOOP = 558
____exports.SoundEffect[____exports.SoundEffect.DOGMA_BLACK_HOLE_LOOP] = "DOGMA_BLACK_HOLE_LOOP"
____exports.SoundEffect.DOGMA_ANGEL_TRANSFORM = 559
____exports.SoundEffect[____exports.SoundEffect.DOGMA_ANGEL_TRANSFORM] = "DOGMA_ANGEL_TRANSFORM"
____exports.SoundEffect.DOGMA_ANGEL_TRANSFORM_END = 560
____exports.SoundEffect[____exports.SoundEffect.DOGMA_ANGEL_TRANSFORM_END] = "DOGMA_ANGEL_TRANSFORM_END"
____exports.SoundEffect.DOGMA_LIGHT_APPEAR = 561
____exports.SoundEffect[____exports.SoundEffect.DOGMA_LIGHT_APPEAR] = "DOGMA_LIGHT_APPEAR"
____exports.SoundEffect.DOGMA_LIGHT_BALL_THROW = 562
____exports.SoundEffect[____exports.SoundEffect.DOGMA_LIGHT_BALL_THROW] = "DOGMA_LIGHT_BALL_THROW"
____exports.SoundEffect.DOGMA_LIGHT_RAY_CHARGE = 563
____exports.SoundEffect[____exports.SoundEffect.DOGMA_LIGHT_RAY_CHARGE] = "DOGMA_LIGHT_RAY_CHARGE"
____exports.SoundEffect.DOGMA_LIGHT_RAY_FIRE = 564
____exports.SoundEffect[____exports.SoundEffect.DOGMA_LIGHT_RAY_FIRE] = "DOGMA_LIGHT_RAY_FIRE"
____exports.SoundEffect.DOGMA_SPIN_ATTACK = 565
____exports.SoundEffect[____exports.SoundEffect.DOGMA_SPIN_ATTACK] = "DOGMA_SPIN_ATTACK"
____exports.SoundEffect.DOGMA_WING_FLAP = 566
____exports.SoundEffect[____exports.SoundEffect.DOGMA_WING_FLAP] = "DOGMA_WING_FLAP"
____exports.SoundEffect.DOGMA_TV_BREAK = 567
____exports.SoundEffect[____exports.SoundEffect.DOGMA_TV_BREAK] = "DOGMA_TV_BREAK"
____exports.SoundEffect.DIVINE_INTERVENTION = 568
____exports.SoundEffect[____exports.SoundEffect.DIVINE_INTERVENTION] = "DIVINE_INTERVENTION"
____exports.SoundEffect.MENU_FLIP_LIGHT = 569
____exports.SoundEffect[____exports.SoundEffect.MENU_FLIP_LIGHT] = "MENU_FLIP_LIGHT"
____exports.SoundEffect.MENU_FLIP_DARK = 570
____exports.SoundEffect[____exports.SoundEffect.MENU_FLIP_DARK] = "MENU_FLIP_DARK"
____exports.SoundEffect.MENU_RIP = 571
____exports.SoundEffect[____exports.SoundEffect.MENU_RIP] = "MENU_RIP"
____exports.SoundEffect.URN_OPEN = 572
____exports.SoundEffect[____exports.SoundEffect.URN_OPEN] = "URN_OPEN"
____exports.SoundEffect.URN_CLOSE = 573
____exports.SoundEffect[____exports.SoundEffect.URN_CLOSE] = "URN_CLOSE"
____exports.SoundEffect.RECALL = 574
____exports.SoundEffect[____exports.SoundEffect.RECALL] = "RECALL"
____exports.SoundEffect.LARYNX_SCREAM_LO = 575
____exports.SoundEffect[____exports.SoundEffect.LARYNX_SCREAM_LO] = "LARYNX_SCREAM_LO"
____exports.SoundEffect.LARYNX_SCREAM_MED = 576
____exports.SoundEffect[____exports.SoundEffect.LARYNX_SCREAM_MED] = "LARYNX_SCREAM_MED"
____exports.SoundEffect.LARYNX_SCREAM_HI = 577
____exports.SoundEffect[____exports.SoundEffect.LARYNX_SCREAM_HI] = "LARYNX_SCREAM_HI"
____exports.SoundEffect.GROUND_TREMOR = 578
____exports.SoundEffect[____exports.SoundEffect.GROUND_TREMOR] = "GROUND_TREMOR"
____exports.SoundEffect.SOUL_PICKUP = 579
____exports.SoundEffect[____exports.SoundEffect.SOUL_PICKUP] = "SOUL_PICKUP"
____exports.SoundEffect.BALL_AND_CHAIN_LOOP = 580
____exports.SoundEffect[____exports.SoundEffect.BALL_AND_CHAIN_LOOP] = "BALL_AND_CHAIN_LOOP"
____exports.SoundEffect.BALL_AND_CHAIN_HIT = 581
____exports.SoundEffect[____exports.SoundEffect.BALL_AND_CHAIN_HIT] = "BALL_AND_CHAIN_HIT"
____exports.SoundEffect.LAZARUS_FLIP_DEAD = 582
____exports.SoundEffect[____exports.SoundEffect.LAZARUS_FLIP_DEAD] = "LAZARUS_FLIP_DEAD"
____exports.SoundEffect.LAZARUS_FLIP_ALIVE = 583
____exports.SoundEffect[____exports.SoundEffect.LAZARUS_FLIP_ALIVE] = "LAZARUS_FLIP_ALIVE"
____exports.SoundEffect.RECALL_FINISH = 584
____exports.SoundEffect[____exports.SoundEffect.RECALL_FINISH] = "RECALL_FINISH"
____exports.SoundEffect.ROCKET_LAUNCH_SHORT = 585
____exports.SoundEffect[____exports.SoundEffect.ROCKET_LAUNCH_SHORT] = "ROCKET_LAUNCH_SHORT"
____exports.SoundEffect.ROCKET_LAUNCH_TINY = 586
____exports.SoundEffect[____exports.SoundEffect.ROCKET_LAUNCH_TINY] = "ROCKET_LAUNCH_TINY"
____exports.SoundEffect.ROCKET_EXPLOSION = 587
____exports.SoundEffect[____exports.SoundEffect.ROCKET_EXPLOSION] = "ROCKET_EXPLOSION"
____exports.SoundEffect.JELLY_BOUNCE = 588
____exports.SoundEffect[____exports.SoundEffect.JELLY_BOUNCE] = "JELLY_BOUNCE"
____exports.SoundEffect.POOP_LASER = 589
____exports.SoundEffect[____exports.SoundEffect.POOP_LASER] = "POOP_LASER"
____exports.SoundEffect.POISON_WARN = 590
____exports.SoundEffect[____exports.SoundEffect.POISON_WARN] = "POISON_WARN"
____exports.SoundEffect.POISON_HURT = 591
____exports.SoundEffect[____exports.SoundEffect.POISON_HURT] = "POISON_HURT"
____exports.SoundEffect.BERSERK_START = 592
____exports.SoundEffect[____exports.SoundEffect.BERSERK_START] = "BERSERK_START"
____exports.SoundEffect.BERSERK_TICK = 593
____exports.SoundEffect[____exports.SoundEffect.BERSERK_TICK] = "BERSERK_TICK"
____exports.SoundEffect.BERSERK_END = 594
____exports.SoundEffect[____exports.SoundEffect.BERSERK_END] = "BERSERK_END"
____exports.SoundEffect.EDEN_GLITCH = 595
____exports.SoundEffect[____exports.SoundEffect.EDEN_GLITCH] = "EDEN_GLITCH"
____exports.SoundEffect.RAILROAD_TRACK_RAISE = 596
____exports.SoundEffect[____exports.SoundEffect.RAILROAD_TRACK_RAISE] = "RAILROAD_TRACK_RAISE"
____exports.SoundEffect.RAILROAD_TRACK_RAISE_FAR = 597
____exports.SoundEffect[____exports.SoundEffect.RAILROAD_TRACK_RAISE_FAR] = "RAILROAD_TRACK_RAISE_FAR"
____exports.SoundEffect.MOM_AND_DAD_1 = 598
____exports.SoundEffect[____exports.SoundEffect.MOM_AND_DAD_1] = "MOM_AND_DAD_1"
____exports.SoundEffect.MOM_AND_DAD_2 = 599
____exports.SoundEffect[____exports.SoundEffect.MOM_AND_DAD_2] = "MOM_AND_DAD_2"
____exports.SoundEffect.MOM_AND_DAD_3 = 600
____exports.SoundEffect[____exports.SoundEffect.MOM_AND_DAD_3] = "MOM_AND_DAD_3"
____exports.SoundEffect.MOM_AND_DAD_4 = 601
____exports.SoundEffect[____exports.SoundEffect.MOM_AND_DAD_4] = "MOM_AND_DAD_4"
____exports.SoundEffect.THUMBS_UP_AMPLIFIED = 602
____exports.SoundEffect[____exports.SoundEffect.THUMBS_UP_AMPLIFIED] = "THUMBS_UP_AMPLIFIED"
____exports.SoundEffect.THUMBS_DOWN_AMPLIFIED = 603
____exports.SoundEffect[____exports.SoundEffect.THUMBS_DOWN_AMPLIFIED] = "THUMBS_DOWN_AMPLIFIED"
____exports.SoundEffect.POWER_UP_SPEWER_AMPLIFIED = 604
____exports.SoundEffect[____exports.SoundEffect.POWER_UP_SPEWER_AMPLIFIED] = "POWER_UP_SPEWER_AMPLIFIED"
____exports.SoundEffect.POOP_ITEM_THROW = 605
____exports.SoundEffect[____exports.SoundEffect.POOP_ITEM_THROW] = "POOP_ITEM_THROW"
____exports.SoundEffect.POOP_ITEM_STORE = 606
____exports.SoundEffect[____exports.SoundEffect.POOP_ITEM_STORE] = "POOP_ITEM_STORE"
____exports.SoundEffect.POOP_ITEM_HOLD = 607
____exports.SoundEffect[____exports.SoundEffect.POOP_ITEM_HOLD] = "POOP_ITEM_HOLD"
____exports.SoundEffect.MIRROR_ENTER = 608
____exports.SoundEffect[____exports.SoundEffect.MIRROR_ENTER] = "MIRROR_ENTER"
____exports.SoundEffect.MIRROR_EXIT = 609
____exports.SoundEffect[____exports.SoundEffect.MIRROR_EXIT] = "MIRROR_EXIT"
____exports.SoundEffect.MIRROR_BREAK = 610
____exports.SoundEffect[____exports.SoundEffect.MIRROR_BREAK] = "MIRROR_BREAK"
____exports.SoundEffect.ANIMA_TRAP = 611
____exports.SoundEffect[____exports.SoundEffect.ANIMA_TRAP] = "ANIMA_TRAP"
____exports.SoundEffect.ANIMA_RATTLE = 612
____exports.SoundEffect[____exports.SoundEffect.ANIMA_RATTLE] = "ANIMA_RATTLE"
____exports.SoundEffect.ANIMA_BREAK = 613
____exports.SoundEffect[____exports.SoundEffect.ANIMA_BREAK] = "ANIMA_BREAK"
____exports.SoundEffect.VAMP_DOUBLE = 614
____exports.SoundEffect[____exports.SoundEffect.VAMP_DOUBLE] = "VAMP_DOUBLE"
____exports.SoundEffect.FLASHBACK = 615
____exports.SoundEffect[____exports.SoundEffect.FLASHBACK] = "FLASHBACK"
____exports.SoundEffect.DARK_ESAU_OPEN = 616
____exports.SoundEffect[____exports.SoundEffect.DARK_ESAU_OPEN] = "DARK_ESAU_OPEN"
____exports.SoundEffect.DARK_ESAU_DEATH_OPEN = 617
____exports.SoundEffect[____exports.SoundEffect.DARK_ESAU_DEATH_OPEN] = "DARK_ESAU_DEATH_OPEN"
____exports.SoundEffect.MOTHER_DEATH_1 = 618
____exports.SoundEffect[____exports.SoundEffect.MOTHER_DEATH_1] = "MOTHER_DEATH_1"
____exports.SoundEffect.MOTHER_DEATH_2 = 619
____exports.SoundEffect[____exports.SoundEffect.MOTHER_DEATH_2] = "MOTHER_DEATH_2"
____exports.SoundEffect.MOTHER_FIST_POUND_1 = 620
____exports.SoundEffect[____exports.SoundEffect.MOTHER_FIST_POUND_1] = "MOTHER_FIST_POUND_1"
____exports.SoundEffect.MOTHER_FIST_POUND_2 = 621
____exports.SoundEffect[____exports.SoundEffect.MOTHER_FIST_POUND_2] = "MOTHER_FIST_POUND_2"
____exports.SoundEffect.MOTHER_FIST_POUND_3 = 622
____exports.SoundEffect[____exports.SoundEffect.MOTHER_FIST_POUND_3] = "MOTHER_FIST_POUND_3"
____exports.SoundEffect.MOTHER_FISTULA = 623
____exports.SoundEffect[____exports.SoundEffect.MOTHER_FISTULA] = "MOTHER_FISTULA"
____exports.SoundEffect.MOTHER_APPEAR_1 = 624
____exports.SoundEffect[____exports.SoundEffect.MOTHER_APPEAR_1] = "MOTHER_APPEAR_1"
____exports.SoundEffect.MOTHER_APPEAR_2 = 625
____exports.SoundEffect[____exports.SoundEffect.MOTHER_APPEAR_2] = "MOTHER_APPEAR_2"
____exports.SoundEffect.MOTHER_KNIFE_START = 626
____exports.SoundEffect[____exports.SoundEffect.MOTHER_KNIFE_START] = "MOTHER_KNIFE_START"
____exports.SoundEffect.MOTHER_KNIFE_THROW = 627
____exports.SoundEffect[____exports.SoundEffect.MOTHER_KNIFE_THROW] = "MOTHER_KNIFE_THROW"
____exports.SoundEffect.MOTHER_SUMMON_ISAACS_START = 628
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SUMMON_ISAACS_START] = "MOTHER_SUMMON_ISAACS_START"
____exports.SoundEffect.MOTHER_SUMMON_ISAACS_END = 629
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SUMMON_ISAACS_END] = "MOTHER_SUMMON_ISAACS_END"
____exports.SoundEffect.MOTHER_HAND_BOIL_START = 630
____exports.SoundEffect[____exports.SoundEffect.MOTHER_HAND_BOIL_START] = "MOTHER_HAND_BOIL_START"
____exports.SoundEffect.MOTHER_GRUNT_1 = 631
____exports.SoundEffect[____exports.SoundEffect.MOTHER_GRUNT_1] = "MOTHER_GRUNT_1"
____exports.SoundEffect.MOTHER_GRUNT_5 = 632
____exports.SoundEffect[____exports.SoundEffect.MOTHER_GRUNT_5] = "MOTHER_GRUNT_5"
____exports.SoundEffect.MOTHER_GRUNT_6 = 633
____exports.SoundEffect[____exports.SoundEffect.MOTHER_GRUNT_6] = "MOTHER_GRUNT_6"
____exports.SoundEffect.MOTHER_GRUNT_7 = 634
____exports.SoundEffect[____exports.SoundEffect.MOTHER_GRUNT_7] = "MOTHER_GRUNT_7"
____exports.SoundEffect.MOTHER_LAUGH = 635
____exports.SoundEffect[____exports.SoundEffect.MOTHER_LAUGH] = "MOTHER_LAUGH"
____exports.SoundEffect.MOTHER_SPIN_START = 636
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SPIN_START] = "MOTHER_SPIN_START"
____exports.SoundEffect.MOTHER_WALL_SHOT_START = 637
____exports.SoundEffect[____exports.SoundEffect.MOTHER_WALL_SHOT_START] = "MOTHER_WALL_SHOT_START"
____exports.SoundEffect.MOTHER_MISC = 638
____exports.SoundEffect[____exports.SoundEffect.MOTHER_MISC] = "MOTHER_MISC"
____exports.SoundEffect.MOTHER_SHOOT = 639
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SHOOT] = "MOTHER_SHOOT"
____exports.SoundEffect.MOTHER_SUCTION = 640
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SUCTION] = "MOTHER_SUCTION"
____exports.SoundEffect.MOTHER_ISAAC_RISE = 641
____exports.SoundEffect[____exports.SoundEffect.MOTHER_ISAAC_RISE] = "MOTHER_ISAAC_RISE"
____exports.SoundEffect.MOTHER_ISAAC_HIT = 642
____exports.SoundEffect[____exports.SoundEffect.MOTHER_ISAAC_HIT] = "MOTHER_ISAAC_HIT"
____exports.SoundEffect.MOTHER_WRIST_SWELL = 643
____exports.SoundEffect[____exports.SoundEffect.MOTHER_WRIST_SWELL] = "MOTHER_WRIST_SWELL"
____exports.SoundEffect.MOTHER_WRIST_EXPLODE = 644
____exports.SoundEffect[____exports.SoundEffect.MOTHER_WRIST_EXPLODE] = "MOTHER_WRIST_EXPLODE"
____exports.SoundEffect.MOTHER_DEATH_MELT = 645
____exports.SoundEffect[____exports.SoundEffect.MOTHER_DEATH_MELT] = "MOTHER_DEATH_MELT"
____exports.SoundEffect.MOTHER_ANGER_SHAKE = 646
____exports.SoundEffect[____exports.SoundEffect.MOTHER_ANGER_SHAKE] = "MOTHER_ANGER_SHAKE"
____exports.SoundEffect.MOTHER_CHARGE_1 = 647
____exports.SoundEffect[____exports.SoundEffect.MOTHER_CHARGE_1] = "MOTHER_CHARGE_1"
____exports.SoundEffect.MOTHER_CHARGE_2 = 648
____exports.SoundEffect[____exports.SoundEffect.MOTHER_CHARGE_2] = "MOTHER_CHARGE_2"
____exports.SoundEffect.MOTHER_LAND_SMASH = 649
____exports.SoundEffect[____exports.SoundEffect.MOTHER_LAND_SMASH] = "MOTHER_LAND_SMASH"
____exports.SoundEffect.ISAAC_ROAR = 650
____exports.SoundEffect[____exports.SoundEffect.ISAAC_ROAR] = "ISAAC_ROAR"
____exports.SoundEffect.FAMINE_APPEAR = 651
____exports.SoundEffect[____exports.SoundEffect.FAMINE_APPEAR] = "FAMINE_APPEAR"
____exports.SoundEffect.FAMINE_DEATH_1 = 652
____exports.SoundEffect[____exports.SoundEffect.FAMINE_DEATH_1] = "FAMINE_DEATH_1"
____exports.SoundEffect.FAMINE_DEATH_2 = 653
____exports.SoundEffect[____exports.SoundEffect.FAMINE_DEATH_2] = "FAMINE_DEATH_2"
____exports.SoundEffect.FAMINE_DASH_START = 654
____exports.SoundEffect[____exports.SoundEffect.FAMINE_DASH_START] = "FAMINE_DASH_START"
____exports.SoundEffect.FAMINE_DASH = 655
____exports.SoundEffect[____exports.SoundEffect.FAMINE_DASH] = "FAMINE_DASH"
____exports.SoundEffect.FAMINE_SHOOT = 656
____exports.SoundEffect[____exports.SoundEffect.FAMINE_SHOOT] = "FAMINE_SHOOT"
____exports.SoundEffect.FAMINE_BURST = 657
____exports.SoundEffect[____exports.SoundEffect.FAMINE_BURST] = "FAMINE_BURST"
____exports.SoundEffect.FAMINE_GURGLE = 658
____exports.SoundEffect[____exports.SoundEffect.FAMINE_GURGLE] = "FAMINE_GURGLE"
____exports.SoundEffect.PESTILENCE_MAGGOT_START = 659
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_MAGGOT_START] = "PESTILENCE_MAGGOT_START"
____exports.SoundEffect.PESTILENCE_MAGGOT_SHOOT_1 = 660
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_MAGGOT_SHOOT_1] = "PESTILENCE_MAGGOT_SHOOT_1"
____exports.SoundEffect.PESTILENCE_MAGGOT_RETURN = 661
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_MAGGOT_RETURN] = "PESTILENCE_MAGGOT_RETURN"
____exports.SoundEffect.PESTILENCE_BODY_SHOOT = 662
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_BODY_SHOOT] = "PESTILENCE_BODY_SHOOT"
____exports.SoundEffect.PESTILENCE_HEAD_DEATH = 663
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_HEAD_DEATH] = "PESTILENCE_HEAD_DEATH"
____exports.SoundEffect.PESTILENCE_DEATH = 664
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_DEATH] = "PESTILENCE_DEATH"
____exports.SoundEffect.PESTILENCE_COUGH = 665
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_COUGH] = "PESTILENCE_COUGH"
____exports.SoundEffect.PESTILENCE_BARF = 666
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_BARF] = "PESTILENCE_BARF"
____exports.SoundEffect.PESTILENCE_APPEAR = 667
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_APPEAR] = "PESTILENCE_APPEAR"
____exports.SoundEffect.PESTILENCE_HEAD_EXPLODE = 668
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_HEAD_EXPLODE] = "PESTILENCE_HEAD_EXPLODE"
____exports.SoundEffect.PESTILENCE_MAGGOT_ENTER = 669
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_MAGGOT_ENTER] = "PESTILENCE_MAGGOT_ENTER"
____exports.SoundEffect.PESTILENCE_MAGGOT_POP_OUT = 670
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_MAGGOT_POP_OUT] = "PESTILENCE_MAGGOT_POP_OUT"
____exports.SoundEffect.PESTILENCE_MAGGOT_SHOOT_2 = 671
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_MAGGOT_SHOOT_2] = "PESTILENCE_MAGGOT_SHOOT_2"
____exports.SoundEffect.PESTILENCE_NECK_PUKE = 672
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_NECK_PUKE] = "PESTILENCE_NECK_PUKE"
____exports.SoundEffect.PESTILENCE_PUKE_START = 673
____exports.SoundEffect[____exports.SoundEffect.PESTILENCE_PUKE_START] = "PESTILENCE_PUKE_START"
____exports.SoundEffect.WAR_APPEAR = 674
____exports.SoundEffect[____exports.SoundEffect.WAR_APPEAR] = "WAR_APPEAR"
____exports.SoundEffect.WAR_APPEAR_LAVA = 675
____exports.SoundEffect[____exports.SoundEffect.WAR_APPEAR_LAVA] = "WAR_APPEAR_LAVA"
____exports.SoundEffect.WAR_BOMB_TOSS = 676
____exports.SoundEffect[____exports.SoundEffect.WAR_BOMB_TOSS] = "WAR_BOMB_TOSS"
____exports.SoundEffect.WAR_DASH_START = 677
____exports.SoundEffect[____exports.SoundEffect.WAR_DASH_START] = "WAR_DASH_START"
____exports.SoundEffect.WAR_DASH = 678
____exports.SoundEffect[____exports.SoundEffect.WAR_DASH] = "WAR_DASH"
____exports.SoundEffect.WAR_HORSE_DEATH = 679
____exports.SoundEffect[____exports.SoundEffect.WAR_HORSE_DEATH] = "WAR_HORSE_DEATH"
____exports.SoundEffect.WAR_DEATH = 680
____exports.SoundEffect[____exports.SoundEffect.WAR_DEATH] = "WAR_DEATH"
____exports.SoundEffect.WAR_FIRE_SCREAM = 681
____exports.SoundEffect[____exports.SoundEffect.WAR_FIRE_SCREAM] = "WAR_FIRE_SCREAM"
____exports.SoundEffect.WAR_GRAB_PLAYER = 682
____exports.SoundEffect[____exports.SoundEffect.WAR_GRAB_PLAYER] = "WAR_GRAB_PLAYER"
____exports.SoundEffect.WAR_BOMB_HOLD = 683
____exports.SoundEffect[____exports.SoundEffect.WAR_BOMB_HOLD] = "WAR_BOMB_HOLD"
____exports.SoundEffect.WAR_BOMB_PULL_OUT = 684
____exports.SoundEffect[____exports.SoundEffect.WAR_BOMB_PULL_OUT] = "WAR_BOMB_PULL_OUT"
____exports.SoundEffect.WAR_CHASE = 685
____exports.SoundEffect[____exports.SoundEffect.WAR_CHASE] = "WAR_CHASE"
____exports.SoundEffect.WAR_BOMB_TICK = 686
____exports.SoundEffect[____exports.SoundEffect.WAR_BOMB_TICK] = "WAR_BOMB_TICK"
____exports.SoundEffect.WAR_FLAME = 687
____exports.SoundEffect[____exports.SoundEffect.WAR_FLAME] = "WAR_FLAME"
____exports.SoundEffect.WAR_LAVA_SPLASH = 688
____exports.SoundEffect[____exports.SoundEffect.WAR_LAVA_SPLASH] = "WAR_LAVA_SPLASH"
____exports.SoundEffect.WAR_LAVA_DASH = 689
____exports.SoundEffect[____exports.SoundEffect.WAR_LAVA_DASH] = "WAR_LAVA_DASH"
____exports.SoundEffect.DEATH_DIES = 690
____exports.SoundEffect[____exports.SoundEffect.DEATH_DIES] = "DEATH_DIES"
____exports.SoundEffect.DEATH_DESTROY_SKULLS = 691
____exports.SoundEffect[____exports.SoundEffect.DEATH_DESTROY_SKULLS] = "DEATH_DESTROY_SKULLS"
____exports.SoundEffect.DEATH_GROWL = 692
____exports.SoundEffect[____exports.SoundEffect.DEATH_GROWL] = "DEATH_GROWL"
____exports.SoundEffect.DEATH_SWIPE_START = 693
____exports.SoundEffect[____exports.SoundEffect.DEATH_SWIPE_START] = "DEATH_SWIPE_START"
____exports.SoundEffect.DEATH_SWIPE = 694
____exports.SoundEffect[____exports.SoundEffect.DEATH_SWIPE] = "DEATH_SWIPE"
____exports.SoundEffect.DEATH_SUMMON_SCYTHES = 695
____exports.SoundEffect[____exports.SoundEffect.DEATH_SUMMON_SCYTHES] = "DEATH_SUMMON_SCYTHES"
____exports.SoundEffect.DEATH_SUMMON_SKULLS = 696
____exports.SoundEffect[____exports.SoundEffect.DEATH_SUMMON_SKULLS] = "DEATH_SUMMON_SKULLS"
____exports.SoundEffect.BEAST_DEATH = 697
____exports.SoundEffect[____exports.SoundEffect.BEAST_DEATH] = "BEAST_DEATH"
____exports.SoundEffect.BEAST_LASER = 698
____exports.SoundEffect[____exports.SoundEffect.BEAST_LASER] = "BEAST_LASER"
____exports.SoundEffect.BEAST_BACKGROUND_DIVE = 699
____exports.SoundEffect[____exports.SoundEffect.BEAST_BACKGROUND_DIVE] = "BEAST_BACKGROUND_DIVE"
____exports.SoundEffect.BEAST_FIRE_RING = 700
____exports.SoundEffect[____exports.SoundEffect.BEAST_FIRE_RING] = "BEAST_FIRE_RING"
____exports.SoundEffect.BEAST_GHOST_DASH = 701
____exports.SoundEffect[____exports.SoundEffect.BEAST_GHOST_DASH] = "BEAST_GHOST_DASH"
____exports.SoundEffect.BEAST_GHOST_RISE = 702
____exports.SoundEffect[____exports.SoundEffect.BEAST_GHOST_RISE] = "BEAST_GHOST_RISE"
____exports.SoundEffect.BEAST_LAVA_BALL_SPLASH = 703
____exports.SoundEffect[____exports.SoundEffect.BEAST_LAVA_BALL_SPLASH] = "BEAST_LAVA_BALL_SPLASH"
____exports.SoundEffect.BEAST_LAVA_RISE = 704
____exports.SoundEffect[____exports.SoundEffect.BEAST_LAVA_RISE] = "BEAST_LAVA_RISE"
____exports.SoundEffect.BEAST_SUCTION_LOOP = 705
____exports.SoundEffect[____exports.SoundEffect.BEAST_SUCTION_LOOP] = "BEAST_SUCTION_LOOP"
____exports.SoundEffect.BEAST_FIRE_BARF = 706
____exports.SoundEffect[____exports.SoundEffect.BEAST_FIRE_BARF] = "BEAST_FIRE_BARF"
____exports.SoundEffect.BEAST_GHOST_ROAR = 707
____exports.SoundEffect[____exports.SoundEffect.BEAST_GHOST_ROAR] = "BEAST_GHOST_ROAR"
____exports.SoundEffect.BEAST_INTRO_SCREAM = 708
____exports.SoundEffect[____exports.SoundEffect.BEAST_INTRO_SCREAM] = "BEAST_INTRO_SCREAM"
____exports.SoundEffect.BEAST_SUCTION_END = 709
____exports.SoundEffect[____exports.SoundEffect.BEAST_SUCTION_END] = "BEAST_SUCTION_END"
____exports.SoundEffect.BEAST_SUCTION_START = 710
____exports.SoundEffect[____exports.SoundEffect.BEAST_SUCTION_START] = "BEAST_SUCTION_START"
____exports.SoundEffect.BEAST_SPIT = 711
____exports.SoundEffect[____exports.SoundEffect.BEAST_SPIT] = "BEAST_SPIT"
____exports.SoundEffect.BEAST_SURFACE_GROWL = 712
____exports.SoundEffect[____exports.SoundEffect.BEAST_SURFACE_GROWL] = "BEAST_SURFACE_GROWL"
____exports.SoundEffect.BEAST_SWITCH_SIDES = 713
____exports.SoundEffect[____exports.SoundEffect.BEAST_SWITCH_SIDES] = "BEAST_SWITCH_SIDES"
____exports.SoundEffect.MOTHER_SHADOW_APPEAR = 714
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SHADOW_APPEAR] = "MOTHER_SHADOW_APPEAR"
____exports.SoundEffect.MOTHER_SHADOW_CHARGE_UP = 715
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SHADOW_CHARGE_UP] = "MOTHER_SHADOW_CHARGE_UP"
____exports.SoundEffect.MOTHER_SHADOW_DASH = 716
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SHADOW_DASH] = "MOTHER_SHADOW_DASH"
____exports.SoundEffect.MOTHER_SHADOW_END = 717
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SHADOW_END] = "MOTHER_SHADOW_END"
____exports.SoundEffect.MOTHER_SHADOW_INTRO = 718
____exports.SoundEffect[____exports.SoundEffect.MOTHER_SHADOW_INTRO] = "MOTHER_SHADOW_INTRO"
____exports.SoundEffect.BUMBINO_DEATH = 719
____exports.SoundEffect[____exports.SoundEffect.BUMBINO_DEATH] = "BUMBINO_DEATH"
____exports.SoundEffect.BUMBINO_DIZZY = 720
____exports.SoundEffect[____exports.SoundEffect.BUMBINO_DIZZY] = "BUMBINO_DIZZY"
____exports.SoundEffect.BUMBINO_HIT_WALL = 721
____exports.SoundEffect[____exports.SoundEffect.BUMBINO_HIT_WALL] = "BUMBINO_HIT_WALL"
____exports.SoundEffect.BUMBINO_MISC = 722
____exports.SoundEffect[____exports.SoundEffect.BUMBINO_MISC] = "BUMBINO_MISC"
____exports.SoundEffect.BUMBINO_PUNCH = 723
____exports.SoundEffect[____exports.SoundEffect.BUMBINO_PUNCH] = "BUMBINO_PUNCH"
____exports.SoundEffect.BUMBINO_RAM = 724
____exports.SoundEffect[____exports.SoundEffect.BUMBINO_RAM] = "BUMBINO_RAM"
____exports.SoundEffect.BUMBINO_SLAM = 725
____exports.SoundEffect[____exports.SoundEffect.BUMBINO_SLAM] = "BUMBINO_SLAM"
____exports.SoundEffect.BUMBINO_SNAP_OUT = 726
____exports.SoundEffect[____exports.SoundEffect.BUMBINO_SNAP_OUT] = "BUMBINO_SNAP_OUT"
____exports.SoundEffect.SIREN_SCREAM = 727
____exports.SoundEffect[____exports.SoundEffect.SIREN_SCREAM] = "SIREN_SCREAM"
____exports.SoundEffect.SIREN_SING = 728
____exports.SoundEffect[____exports.SoundEffect.SIREN_SING] = "SIREN_SING"
____exports.SoundEffect.DEATH_SKULL_SUMMON_LOOP = 729
____exports.SoundEffect[____exports.SoundEffect.DEATH_SKULL_SUMMON_LOOP] = "DEATH_SKULL_SUMMON_LOOP"
____exports.SoundEffect.DEATH_SKULL_SUMMON_END = 730
____exports.SoundEffect[____exports.SoundEffect.DEATH_SKULL_SUMMON_END] = "DEATH_SKULL_SUMMON_END"
____exports.SoundEffect.BEAST_DEATH_2 = 731
____exports.SoundEffect[____exports.SoundEffect.BEAST_DEATH_2] = "BEAST_DEATH_2"
____exports.SoundEffect.BEAST_ANGELIC_BLAST = 732
____exports.SoundEffect[____exports.SoundEffect.BEAST_ANGELIC_BLAST] = "BEAST_ANGELIC_BLAST"
____exports.SoundEffect.ANCIENT_RECALL = 733
____exports.SoundEffect[____exports.SoundEffect.ANCIENT_RECALL] = "ANCIENT_RECALL"
____exports.SoundEffect.ERA_WALK = 734
____exports.SoundEffect[____exports.SoundEffect.ERA_WALK] = "ERA_WALK"
____exports.SoundEffect.HUGE_GROWTH = 735
____exports.SoundEffect[____exports.SoundEffect.HUGE_GROWTH] = "HUGE_GROWTH"
____exports.SoundEffect.RUNE_SHARD = 736
____exports.SoundEffect[____exports.SoundEffect.RUNE_SHARD] = "RUNE_SHARD"
____exports.SoundEffect.SHOT_SPEED_DOWN = 737
____exports.SoundEffect[____exports.SoundEffect.SHOT_SPEED_DOWN] = "SHOT_SPEED_DOWN"
____exports.SoundEffect.SHOT_SPEED_UP = 738
____exports.SoundEffect[____exports.SoundEffect.SHOT_SPEED_UP] = "SHOT_SPEED_UP"
____exports.SoundEffect.EXPERIMENTAL_PILL = 739
____exports.SoundEffect[____exports.SoundEffect.EXPERIMENTAL_PILL] = "EXPERIMENTAL_PILL"
____exports.SoundEffect.CRACKED_KEY = 740
____exports.SoundEffect[____exports.SoundEffect.CRACKED_KEY] = "CRACKED_KEY"
____exports.SoundEffect.QUEEN_OF_HEARTS = 741
____exports.SoundEffect[____exports.SoundEffect.QUEEN_OF_HEARTS] = "QUEEN_OF_HEARTS"
____exports.SoundEffect.WILD_CARD = 742
____exports.SoundEffect[____exports.SoundEffect.WILD_CARD] = "WILD_CARD"
____exports.SoundEffect.SOUL_OF_ISAAC = 743
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_ISAAC] = "SOUL_OF_ISAAC"
____exports.SoundEffect.SOUL_OF_MAGDALENE = 744
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_MAGDALENE] = "SOUL_OF_MAGDALENE"
____exports.SoundEffect.SOUL_OF_CAIN = 745
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_CAIN] = "SOUL_OF_CAIN"
____exports.SoundEffect.SOUL_OF_JUDAS = 746
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_JUDAS] = "SOUL_OF_JUDAS"
____exports.SoundEffect.SOUL_OF_XXX = 747
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_XXX] = "SOUL_OF_XXX"
____exports.SoundEffect.SOUL_OF_EVE = 748
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_EVE] = "SOUL_OF_EVE"
____exports.SoundEffect.SOUL_OF_SAMSON = 749
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_SAMSON] = "SOUL_OF_SAMSON"
____exports.SoundEffect.SOUL_OF_AZAZEL = 750
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_AZAZEL] = "SOUL_OF_AZAZEL"
____exports.SoundEffect.SOUL_OF_LAZARUS = 751
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_LAZARUS] = "SOUL_OF_LAZARUS"
____exports.SoundEffect.SOUL_OF_EDEN = 752
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_EDEN] = "SOUL_OF_EDEN"
____exports.SoundEffect.SOUL_OF_THE_LOST = 753
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_THE_LOST] = "SOUL_OF_THE_LOST"
____exports.SoundEffect.SOUL_OF_LILITH = 754
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_LILITH] = "SOUL_OF_LILITH"
____exports.SoundEffect.SOUL_OF_THE_KEEPER = 755
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_THE_KEEPER] = "SOUL_OF_THE_KEEPER"
____exports.SoundEffect.SOUL_OF_APOLLYON = 756
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_APOLLYON] = "SOUL_OF_APOLLYON"
____exports.SoundEffect.SOUL_OF_THE_FORGOTTEN = 757
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_THE_FORGOTTEN] = "SOUL_OF_THE_FORGOTTEN"
____exports.SoundEffect.SOUL_OF_BETHANY = 758
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_BETHANY] = "SOUL_OF_BETHANY"
____exports.SoundEffect.SOUL_OF_JACOB_AND_ESAU = 759
____exports.SoundEffect[____exports.SoundEffect.SOUL_OF_JACOB_AND_ESAU] = "SOUL_OF_JACOB_AND_ESAU"
____exports.SoundEffect.MEGA_BAD_GAS = 760
____exports.SoundEffect[____exports.SoundEffect.MEGA_BAD_GAS] = "MEGA_BAD_GAS"
____exports.SoundEffect.MEGA_BAD_TRIP = 761
____exports.SoundEffect[____exports.SoundEffect.MEGA_BAD_TRIP] = "MEGA_BAD_TRIP"
____exports.SoundEffect.MEGA_BALLS_OF_STEEL = 762
____exports.SoundEffect[____exports.SoundEffect.MEGA_BALLS_OF_STEEL] = "MEGA_BALLS_OF_STEEL"
____exports.SoundEffect.MEGA_BOMBS_ARE_KEY = 763
____exports.SoundEffect[____exports.SoundEffect.MEGA_BOMBS_ARE_KEY] = "MEGA_BOMBS_ARE_KEY"
____exports.SoundEffect.MEGA_EXPLOSIVE_DIARRHEA = 764
____exports.SoundEffect[____exports.SoundEffect.MEGA_EXPLOSIVE_DIARRHEA] = "MEGA_EXPLOSIVE_DIARRHEA"
____exports.SoundEffect.MEGA_FULL_HEALTH = 765
____exports.SoundEffect[____exports.SoundEffect.MEGA_FULL_HEALTH] = "MEGA_FULL_HEALTH"
____exports.SoundEffect.MEGA_HEALTH_UP = 766
____exports.SoundEffect[____exports.SoundEffect.MEGA_HEALTH_UP] = "MEGA_HEALTH_UP"
____exports.SoundEffect.MEGA_HEALTH_DOWN = 767
____exports.SoundEffect[____exports.SoundEffect.MEGA_HEALTH_DOWN] = "MEGA_HEALTH_DOWN"
____exports.SoundEffect.MEGA_I_FOUND_PILLS = 768
____exports.SoundEffect[____exports.SoundEffect.MEGA_I_FOUND_PILLS] = "MEGA_I_FOUND_PILLS"
____exports.SoundEffect.MEGA_PUBERTY = 769
____exports.SoundEffect[____exports.SoundEffect.MEGA_PUBERTY] = "MEGA_PUBERTY"
____exports.SoundEffect.MEGA_PRETTY_FLY = 770
____exports.SoundEffect[____exports.SoundEffect.MEGA_PRETTY_FLY] = "MEGA_PRETTY_FLY"
____exports.SoundEffect.MEGA_RANGE_DOWN = 771
____exports.SoundEffect[____exports.SoundEffect.MEGA_RANGE_DOWN] = "MEGA_RANGE_DOWN"
____exports.SoundEffect.MEGA_RANGE_UP = 772
____exports.SoundEffect[____exports.SoundEffect.MEGA_RANGE_UP] = "MEGA_RANGE_UP"
____exports.SoundEffect.MEGA_SPEED_DOWN = 773
____exports.SoundEffect[____exports.SoundEffect.MEGA_SPEED_DOWN] = "MEGA_SPEED_DOWN"
____exports.SoundEffect.MEGA_SPEED_UP = 774
____exports.SoundEffect[____exports.SoundEffect.MEGA_SPEED_UP] = "MEGA_SPEED_UP"
____exports.SoundEffect.MEGA_TEARS_DOWN = 775
____exports.SoundEffect[____exports.SoundEffect.MEGA_TEARS_DOWN] = "MEGA_TEARS_DOWN"
____exports.SoundEffect.MEGA_TEARS_UP = 776
____exports.SoundEffect[____exports.SoundEffect.MEGA_TEARS_UP] = "MEGA_TEARS_UP"
____exports.SoundEffect.MEGA_LUCK_DOWN = 777
____exports.SoundEffect[____exports.SoundEffect.MEGA_LUCK_DOWN] = "MEGA_LUCK_DOWN"
____exports.SoundEffect.MEGA_LUCK_UP = 778
____exports.SoundEffect[____exports.SoundEffect.MEGA_LUCK_UP] = "MEGA_LUCK_UP"
____exports.SoundEffect.MEGA_TELEPILLS = 779
____exports.SoundEffect[____exports.SoundEffect.MEGA_TELEPILLS] = "MEGA_TELEPILLS"
____exports.SoundEffect.MEGA_FORTY_EIGHT_HOUR_ENERGY = 780
____exports.SoundEffect[____exports.SoundEffect.MEGA_FORTY_EIGHT_HOUR_ENERGY] = "MEGA_FORTY_EIGHT_HOUR_ENERGY"
____exports.SoundEffect.MEGA_HEMATEMESIS = 781
____exports.SoundEffect[____exports.SoundEffect.MEGA_HEMATEMESIS] = "MEGA_HEMATEMESIS"
____exports.SoundEffect.MEGA_PARALYSIS = 782
____exports.SoundEffect[____exports.SoundEffect.MEGA_PARALYSIS] = "MEGA_PARALYSIS"
____exports.SoundEffect.MEGA_I_CAN_SEE_FOREVER = 783
____exports.SoundEffect[____exports.SoundEffect.MEGA_I_CAN_SEE_FOREVER] = "MEGA_I_CAN_SEE_FOREVER"
____exports.SoundEffect.MEGA_PHEROMONES = 784
____exports.SoundEffect[____exports.SoundEffect.MEGA_PHEROMONES] = "MEGA_PHEROMONES"
____exports.SoundEffect.MEGA_AMNESIA = 785
____exports.SoundEffect[____exports.SoundEffect.MEGA_AMNESIA] = "MEGA_AMNESIA"
____exports.SoundEffect.MEGA_LEMON_PARTY = 786
____exports.SoundEffect[____exports.SoundEffect.MEGA_LEMON_PARTY] = "MEGA_LEMON_PARTY"
____exports.SoundEffect.MEGA_R_U_A_WIZARD = 787
____exports.SoundEffect[____exports.SoundEffect.MEGA_R_U_A_WIZARD] = "MEGA_R_U_A_WIZARD"
____exports.SoundEffect.MEGA_PERCS = 788
____exports.SoundEffect[____exports.SoundEffect.MEGA_PERCS] = "MEGA_PERCS"
____exports.SoundEffect.MEGA_ADDICTED = 789
____exports.SoundEffect[____exports.SoundEffect.MEGA_ADDICTED] = "MEGA_ADDICTED"
____exports.SoundEffect.MEGA_RELAX = 790
____exports.SoundEffect[____exports.SoundEffect.MEGA_RELAX] = "MEGA_RELAX"
____exports.SoundEffect.MEGA_QUESTION_MARKS = 791
____exports.SoundEffect[____exports.SoundEffect.MEGA_QUESTION_MARKS] = "MEGA_QUESTION_MARKS"
____exports.SoundEffect.MEGA_ONE_MAKES_YOU_LARGER = 792
____exports.SoundEffect[____exports.SoundEffect.MEGA_ONE_MAKES_YOU_LARGER] = "MEGA_ONE_MAKES_YOU_LARGER"
____exports.SoundEffect.MEGA_ONE_MAKES_YOU_SMALL = 793
____exports.SoundEffect[____exports.SoundEffect.MEGA_ONE_MAKES_YOU_SMALL] = "MEGA_ONE_MAKES_YOU_SMALL"
____exports.SoundEffect.MEGA_INFESTED = 794
____exports.SoundEffect[____exports.SoundEffect.MEGA_INFESTED] = "MEGA_INFESTED"
____exports.SoundEffect.MEGA_INFESTED_1 = 795
____exports.SoundEffect[____exports.SoundEffect.MEGA_INFESTED_1] = "MEGA_INFESTED_1"
____exports.SoundEffect.MEGA_POWER_PILL = 796
____exports.SoundEffect[____exports.SoundEffect.MEGA_POWER_PILL] = "MEGA_POWER_PILL"
____exports.SoundEffect.MEGA_RETRO_VISION = 797
____exports.SoundEffect[____exports.SoundEffect.MEGA_RETRO_VISION] = "MEGA_RETRO_VISION"
____exports.SoundEffect.MEGA_FRIENDS_TIL_THE_END = 798
____exports.SoundEffect[____exports.SoundEffect.MEGA_FRIENDS_TIL_THE_END] = "MEGA_FRIENDS_TIL_THE_END"
____exports.SoundEffect.MEGA_X_LAX = 799
____exports.SoundEffect[____exports.SoundEffect.MEGA_X_LAX] = "MEGA_X_LAX"
____exports.SoundEffect.MEGA_SOMETHINGS_WRONG = 800
____exports.SoundEffect[____exports.SoundEffect.MEGA_SOMETHINGS_WRONG] = "MEGA_SOMETHINGS_WRONG"
____exports.SoundEffect.MEGA_IM_DROWSY = 801
____exports.SoundEffect[____exports.SoundEffect.MEGA_IM_DROWSY] = "MEGA_IM_DROWSY"
____exports.SoundEffect.MEGA_IM_EXCITED = 802
____exports.SoundEffect[____exports.SoundEffect.MEGA_IM_EXCITED] = "MEGA_IM_EXCITED"
____exports.SoundEffect.MEGA_GULP = 803
____exports.SoundEffect[____exports.SoundEffect.MEGA_GULP] = "MEGA_GULP"
____exports.SoundEffect.MEGA_HORF = 804
____exports.SoundEffect[____exports.SoundEffect.MEGA_HORF] = "MEGA_HORF"
____exports.SoundEffect.MEGA_SUNSHINE = 805
____exports.SoundEffect[____exports.SoundEffect.MEGA_SUNSHINE] = "MEGA_SUNSHINE"
____exports.SoundEffect.MEGA_VURP = 806
____exports.SoundEffect[____exports.SoundEffect.MEGA_VURP] = "MEGA_VURP"
____exports.SoundEffect.MEGA_SHOT_SPEED_DOWN = 807
____exports.SoundEffect[____exports.SoundEffect.MEGA_SHOT_SPEED_DOWN] = "MEGA_SHOT_SPEED_DOWN"
____exports.SoundEffect.MEGA_SHOT_SPEED_UP = 808
____exports.SoundEffect[____exports.SoundEffect.MEGA_SHOT_SPEED_UP] = "MEGA_SHOT_SPEED_UP"
____exports.SoundEffect.MEGA_EXPERIMENTAL_PILL = 809
____exports.SoundEffect[____exports.SoundEffect.MEGA_EXPERIMENTAL_PILL] = "MEGA_EXPERIMENTAL_PILL"
____exports.SoundEffect.SIREN_LUNGE = 810
____exports.SoundEffect[____exports.SoundEffect.SIREN_LUNGE] = "SIREN_LUNGE"
____exports.SoundEffect.SIREN_MINION_SMOKE = 811
____exports.SoundEffect[____exports.SoundEffect.SIREN_MINION_SMOKE] = "SIREN_MINION_SMOKE"
____exports.SoundEffect.SIREN_SCREAM_ATTACK = 812
____exports.SoundEffect[____exports.SoundEffect.SIREN_SCREAM_ATTACK] = "SIREN_SCREAM_ATTACK"
____exports.SoundEffect.SIREN_SING_STAB = 813
____exports.SoundEffect[____exports.SoundEffect.SIREN_SING_STAB] = "SIREN_SING_STAB"
____exports.SoundEffect.BEAST_LAVA_BALL_RISE = 814
____exports.SoundEffect[____exports.SoundEffect.BEAST_LAVA_BALL_RISE] = "BEAST_LAVA_BALL_RISE"
____exports.SoundEffect.BEAST_GROWL = 815
____exports.SoundEffect[____exports.SoundEffect.BEAST_GROWL] = "BEAST_GROWL"
____exports.SoundEffect.BEAST_GRUMBLE = 816
____exports.SoundEffect[____exports.SoundEffect.BEAST_GRUMBLE] = "BEAST_GRUMBLE"
____exports.SoundEffect.FAMINE_GRUNT = 817
____exports.SoundEffect[____exports.SoundEffect.FAMINE_GRUNT] = "FAMINE_GRUNT"
____exports.SoundEffect.G_FUEL_1 = 818
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_1] = "G_FUEL_1"
____exports.SoundEffect.G_FUEL_2 = 819
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_2] = "G_FUEL_2"
____exports.SoundEffect.G_FUEL_3 = 820
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_3] = "G_FUEL_3"
____exports.SoundEffect.G_FUEL_4 = 821
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_4] = "G_FUEL_4"
____exports.SoundEffect.G_FUEL_EXPLOSION_SMALL = 822
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_EXPLOSION_SMALL] = "G_FUEL_EXPLOSION_SMALL"
____exports.SoundEffect.G_FUEL_EXPLOSION_BIG = 823
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_EXPLOSION_BIG] = "G_FUEL_EXPLOSION_BIG"
____exports.SoundEffect.G_FUEL_GUNSHOT_MEDIUM = 824
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_GUNSHOT_MEDIUM] = "G_FUEL_GUNSHOT_MEDIUM"
____exports.SoundEffect.G_FUEL_GUNSHOT_SMALL = 825
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_GUNSHOT_SMALL] = "G_FUEL_GUNSHOT_SMALL"
____exports.SoundEffect.G_FUEL_GUNSHOT_LARGE = 826
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_GUNSHOT_LARGE] = "G_FUEL_GUNSHOT_LARGE"
____exports.SoundEffect.G_FUEL_GUNSHOT_SPREAD = 827
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_GUNSHOT_SPREAD] = "G_FUEL_GUNSHOT_SPREAD"
____exports.SoundEffect.G_FUEL_AIR_HORN = 828
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_AIR_HORN] = "G_FUEL_AIR_HORN"
____exports.SoundEffect.G_FUEL_ITEM_APPEAR = 829
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_ITEM_APPEAR] = "G_FUEL_ITEM_APPEAR"
____exports.SoundEffect.G_FUEL_GUNSHOT_MINI = 830
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_GUNSHOT_MINI] = "G_FUEL_GUNSHOT_MINI"
____exports.SoundEffect.G_FUEL_BULLET_RICOCHET = 831
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_BULLET_RICOCHET] = "G_FUEL_BULLET_RICOCHET"
____exports.SoundEffect.G_FUEL_ROCKET_LAUNCHER = 832
____exports.SoundEffect[____exports.SoundEffect.G_FUEL_ROCKET_LAUNCHER] = "G_FUEL_ROCKET_LAUNCHER"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.SortingLayer"] = function(...) 
local ____exports = {}
____exports.SortingLayer = {}
____exports.SortingLayer.BACKGROUND = 0
____exports.SortingLayer[____exports.SortingLayer.BACKGROUND] = "BACKGROUND"
____exports.SortingLayer.DOOR = 1
____exports.SortingLayer[____exports.SortingLayer.DOOR] = "DOOR"
____exports.SortingLayer.NORMAL = 2
____exports.SortingLayer[____exports.SortingLayer.NORMAL] = "NORMAL"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.SkinColor"] = function(...) 
local ____exports = {}
____exports.SkinColor = {}
____exports.SkinColor.PINK = -1
____exports.SkinColor[____exports.SkinColor.PINK] = "PINK"
____exports.SkinColor.WHITE = 0
____exports.SkinColor[____exports.SkinColor.WHITE] = "WHITE"
____exports.SkinColor.BLACK = 1
____exports.SkinColor[____exports.SkinColor.BLACK] = "BLACK"
____exports.SkinColor.BLUE = 2
____exports.SkinColor[____exports.SkinColor.BLUE] = "BLUE"
____exports.SkinColor.RED = 3
____exports.SkinColor[____exports.SkinColor.RED] = "RED"
____exports.SkinColor.GREEN = 4
____exports.SkinColor[____exports.SkinColor.GREEN] = "GREEN"
____exports.SkinColor.GREY = 5
____exports.SkinColor[____exports.SkinColor.GREY] = "GREY"
____exports.SkinColor.SHADOW = 6
____exports.SkinColor[____exports.SkinColor.SHADOW] = "SHADOW"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.SeedEffect"] = function(...) 
local ____exports = {}
____exports.SeedEffect = {}
____exports.SeedEffect.NORMAL = 0
____exports.SeedEffect[____exports.SeedEffect.NORMAL] = "NORMAL"
____exports.SeedEffect.MOVEMENT_PITCH = 1
____exports.SeedEffect[____exports.SeedEffect.MOVEMENT_PITCH] = "MOVEMENT_PITCH"
____exports.SeedEffect.HEALTH_PITCH = 2
____exports.SeedEffect[____exports.SeedEffect.HEALTH_PITCH] = "HEALTH_PITCH"
____exports.SeedEffect.CAMO_ISAAC = 3
____exports.SeedEffect[____exports.SeedEffect.CAMO_ISAAC] = "CAMO_ISAAC"
____exports.SeedEffect.CAMO_ENEMIES = 4
____exports.SeedEffect[____exports.SeedEffect.CAMO_ENEMIES] = "CAMO_ENEMIES"
____exports.SeedEffect.CAMO_PICKUPS = 5
____exports.SeedEffect[____exports.SeedEffect.CAMO_PICKUPS] = "CAMO_PICKUPS"
____exports.SeedEffect.CAMO_EVERYTHING = 6
____exports.SeedEffect[____exports.SeedEffect.CAMO_EVERYTHING] = "CAMO_EVERYTHING"
____exports.SeedEffect.FART_SOUNDS = 7
____exports.SeedEffect[____exports.SeedEffect.FART_SOUNDS] = "FART_SOUNDS"
____exports.SeedEffect.OLD_TV = 8
____exports.SeedEffect[____exports.SeedEffect.OLD_TV] = "OLD_TV"
____exports.SeedEffect.DYSLEXIA = 9
____exports.SeedEffect[____exports.SeedEffect.DYSLEXIA] = "DYSLEXIA"
____exports.SeedEffect.NO_HUD = 10
____exports.SeedEffect[____exports.SeedEffect.NO_HUD] = "NO_HUD"
____exports.SeedEffect.PICKUPS_SLIDE = 11
____exports.SeedEffect[____exports.SeedEffect.PICKUPS_SLIDE] = "PICKUPS_SLIDE"
____exports.SeedEffect.CONTROLS_REVERSED = 12
____exports.SeedEffect[____exports.SeedEffect.CONTROLS_REVERSED] = "CONTROLS_REVERSED"
____exports.SeedEffect.ALL_CHAMPIONS = 13
____exports.SeedEffect[____exports.SeedEffect.ALL_CHAMPIONS] = "ALL_CHAMPIONS"
____exports.SeedEffect.INVISIBLE_ISAAC = 14
____exports.SeedEffect[____exports.SeedEffect.INVISIBLE_ISAAC] = "INVISIBLE_ISAAC"
____exports.SeedEffect.INVISIBLE_ENEMIES = 15
____exports.SeedEffect[____exports.SeedEffect.INVISIBLE_ENEMIES] = "INVISIBLE_ENEMIES"
____exports.SeedEffect.INFINITE_BASEMENT = 16
____exports.SeedEffect[____exports.SeedEffect.INFINITE_BASEMENT] = "INFINITE_BASEMENT"
____exports.SeedEffect.ALWAYS_CHARMED = 17
____exports.SeedEffect[____exports.SeedEffect.ALWAYS_CHARMED] = "ALWAYS_CHARMED"
____exports.SeedEffect.ALWAYS_CONFUSED = 18
____exports.SeedEffect[____exports.SeedEffect.ALWAYS_CONFUSED] = "ALWAYS_CONFUSED"
____exports.SeedEffect.ALWAYS_AFRAID = 19
____exports.SeedEffect[____exports.SeedEffect.ALWAYS_AFRAID] = "ALWAYS_AFRAID"
____exports.SeedEffect.ALWAYS_ALTERNATING_FEAR = 20
____exports.SeedEffect[____exports.SeedEffect.ALWAYS_ALTERNATING_FEAR] = "ALWAYS_ALTERNATING_FEAR"
____exports.SeedEffect.ALWAYS_CHARMED_AND_AFRAID = 21
____exports.SeedEffect[____exports.SeedEffect.ALWAYS_CHARMED_AND_AFRAID] = "ALWAYS_CHARMED_AND_AFRAID"
____exports.SeedEffect.EXTRA_BLOOD = 23
____exports.SeedEffect[____exports.SeedEffect.EXTRA_BLOOD] = "EXTRA_BLOOD"
____exports.SeedEffect.POOP_TRAIL = 24
____exports.SeedEffect[____exports.SeedEffect.POOP_TRAIL] = "POOP_TRAIL"
____exports.SeedEffect.PACIFIST = 25
____exports.SeedEffect[____exports.SeedEffect.PACIFIST] = "PACIFIST"
____exports.SeedEffect.DAMAGE_WHEN_STOPPED = 26
____exports.SeedEffect[____exports.SeedEffect.DAMAGE_WHEN_STOPPED] = "DAMAGE_WHEN_STOPPED"
____exports.SeedEffect.DAMAGE_ON_INTERVAL = 27
____exports.SeedEffect[____exports.SeedEffect.DAMAGE_ON_INTERVAL] = "DAMAGE_ON_INTERVAL"
____exports.SeedEffect.DAMAGE_ON_TIME_LIMIT = 28
____exports.SeedEffect[____exports.SeedEffect.DAMAGE_ON_TIME_LIMIT] = "DAMAGE_ON_TIME_LIMIT"
____exports.SeedEffect.PILLS_NEVER_IDENTIFY = 29
____exports.SeedEffect[____exports.SeedEffect.PILLS_NEVER_IDENTIFY] = "PILLS_NEVER_IDENTIFY"
____exports.SeedEffect.MYSTERY_TAROT_CARDS = 30
____exports.SeedEffect[____exports.SeedEffect.MYSTERY_TAROT_CARDS] = "MYSTERY_TAROT_CARDS"
____exports.SeedEffect.ENEMIES_RESPAWN = 32
____exports.SeedEffect[____exports.SeedEffect.ENEMIES_RESPAWN] = "ENEMIES_RESPAWN"
____exports.SeedEffect.ITEMS_COST_MONEY = 33
____exports.SeedEffect[____exports.SeedEffect.ITEMS_COST_MONEY] = "ITEMS_COST_MONEY"
____exports.SeedEffect.BIG_HEAD = 35
____exports.SeedEffect[____exports.SeedEffect.BIG_HEAD] = "BIG_HEAD"
____exports.SeedEffect.SMALL_HEAD = 36
____exports.SeedEffect[____exports.SeedEffect.SMALL_HEAD] = "SMALL_HEAD"
____exports.SeedEffect.BLACK_ISAAC = 37
____exports.SeedEffect[____exports.SeedEffect.BLACK_ISAAC] = "BLACK_ISAAC"
____exports.SeedEffect.GLOWING_TEARS = 38
____exports.SeedEffect[____exports.SeedEffect.GLOWING_TEARS] = "GLOWING_TEARS"
____exports.SeedEffect.SLOW_MUSIC = 41
____exports.SeedEffect[____exports.SeedEffect.SLOW_MUSIC] = "SLOW_MUSIC"
____exports.SeedEffect.ULTRA_SLOW_MUSIC = 42
____exports.SeedEffect[____exports.SeedEffect.ULTRA_SLOW_MUSIC] = "ULTRA_SLOW_MUSIC"
____exports.SeedEffect.FAST_MUSIC = 43
____exports.SeedEffect[____exports.SeedEffect.FAST_MUSIC] = "FAST_MUSIC"
____exports.SeedEffect.ULTRA_FAST_MUSIC = 44
____exports.SeedEffect[____exports.SeedEffect.ULTRA_FAST_MUSIC] = "ULTRA_FAST_MUSIC"
____exports.SeedEffect.NO_FACE = 46
____exports.SeedEffect[____exports.SeedEffect.NO_FACE] = "NO_FACE"
____exports.SeedEffect.ISAAC_TAKES_HIGH_DAMAGE = 47
____exports.SeedEffect[____exports.SeedEffect.ISAAC_TAKES_HIGH_DAMAGE] = "ISAAC_TAKES_HIGH_DAMAGE"
____exports.SeedEffect.ISAAC_TAKES_MASSIVE_DAMAGE = 48
____exports.SeedEffect[____exports.SeedEffect.ISAAC_TAKES_MASSIVE_DAMAGE] = "ISAAC_TAKES_MASSIVE_DAMAGE"
____exports.SeedEffect.ICE_PHYSICS = 52
____exports.SeedEffect[____exports.SeedEffect.ICE_PHYSICS] = "ICE_PHYSICS"
____exports.SeedEffect.KAPPA = 53
____exports.SeedEffect[____exports.SeedEffect.KAPPA] = "KAPPA"
____exports.SeedEffect.CHRISTMAS = 54
____exports.SeedEffect[____exports.SeedEffect.CHRISTMAS] = "CHRISTMAS"
____exports.SeedEffect.KIDS_MODE = 55
____exports.SeedEffect[____exports.SeedEffect.KIDS_MODE] = "KIDS_MODE"
____exports.SeedEffect.PERMANENT_CURSE_DARKNESS = 56
____exports.SeedEffect[____exports.SeedEffect.PERMANENT_CURSE_DARKNESS] = "PERMANENT_CURSE_DARKNESS"
____exports.SeedEffect.PERMANENT_CURSE_LABYRINTH = 57
____exports.SeedEffect[____exports.SeedEffect.PERMANENT_CURSE_LABYRINTH] = "PERMANENT_CURSE_LABYRINTH"
____exports.SeedEffect.PERMANENT_CURSE_LOST = 58
____exports.SeedEffect[____exports.SeedEffect.PERMANENT_CURSE_LOST] = "PERMANENT_CURSE_LOST"
____exports.SeedEffect.PERMANENT_CURSE_UNKNOWN = 59
____exports.SeedEffect[____exports.SeedEffect.PERMANENT_CURSE_UNKNOWN] = "PERMANENT_CURSE_UNKNOWN"
____exports.SeedEffect.PERMANENT_CURSE_MAZE = 60
____exports.SeedEffect[____exports.SeedEffect.PERMANENT_CURSE_MAZE] = "PERMANENT_CURSE_MAZE"
____exports.SeedEffect.PERMANENT_CURSE_BLIND = 61
____exports.SeedEffect[____exports.SeedEffect.PERMANENT_CURSE_BLIND] = "PERMANENT_CURSE_BLIND"
____exports.SeedEffect.PERMANENT_CURSE_CURSED = 62
____exports.SeedEffect[____exports.SeedEffect.PERMANENT_CURSE_CURSED] = "PERMANENT_CURSE_CURSED"
____exports.SeedEffect.PREVENT_CURSE_DARKNESS = 63
____exports.SeedEffect[____exports.SeedEffect.PREVENT_CURSE_DARKNESS] = "PREVENT_CURSE_DARKNESS"
____exports.SeedEffect.PREVENT_CURSE_LABYRINTH = 64
____exports.SeedEffect[____exports.SeedEffect.PREVENT_CURSE_LABYRINTH] = "PREVENT_CURSE_LABYRINTH"
____exports.SeedEffect.PREVENT_CURSE_LOST = 65
____exports.SeedEffect[____exports.SeedEffect.PREVENT_CURSE_LOST] = "PREVENT_CURSE_LOST"
____exports.SeedEffect.PREVENT_CURSE_UNKNOWN = 66
____exports.SeedEffect[____exports.SeedEffect.PREVENT_CURSE_UNKNOWN] = "PREVENT_CURSE_UNKNOWN"
____exports.SeedEffect.PREVENT_CURSE_MAZE = 67
____exports.SeedEffect[____exports.SeedEffect.PREVENT_CURSE_MAZE] = "PREVENT_CURSE_MAZE"
____exports.SeedEffect.PREVENT_CURSE_BLIND = 68
____exports.SeedEffect[____exports.SeedEffect.PREVENT_CURSE_BLIND] = "PREVENT_CURSE_BLIND"
____exports.SeedEffect.PREVENT_ALL_CURSES = 70
____exports.SeedEffect[____exports.SeedEffect.PREVENT_ALL_CURSES] = "PREVENT_ALL_CURSES"
____exports.SeedEffect.NO_BOSS_ROOM_EXITS = 71
____exports.SeedEffect[____exports.SeedEffect.NO_BOSS_ROOM_EXITS] = "NO_BOSS_ROOM_EXITS"
____exports.SeedEffect.PICKUPS_TIMEOUT = 72
____exports.SeedEffect[____exports.SeedEffect.PICKUPS_TIMEOUT] = "PICKUPS_TIMEOUT"
____exports.SeedEffect.INVINCIBLE = 73
____exports.SeedEffect[____exports.SeedEffect.INVINCIBLE] = "INVINCIBLE"
____exports.SeedEffect.SHOOT_IN_MOVEMENT_DIRECTION = 74
____exports.SeedEffect[____exports.SeedEffect.SHOOT_IN_MOVEMENT_DIRECTION] = "SHOOT_IN_MOVEMENT_DIRECTION"
____exports.SeedEffect.SHOOT_OPPOSITE_MOVEMENT_DIRECTION = 75
____exports.SeedEffect[____exports.SeedEffect.SHOOT_OPPOSITE_MOVEMENT_DIRECTION] = "SHOOT_OPPOSITE_MOVEMENT_DIRECTION"
____exports.SeedEffect.AXIS_ALIGNED_CONTROLS = 76
____exports.SeedEffect[____exports.SeedEffect.AXIS_ALIGNED_CONTROLS] = "AXIS_ALIGNED_CONTROLS"
____exports.SeedEffect.SUPER_HOT = 77
____exports.SeedEffect[____exports.SeedEffect.SUPER_HOT] = "SUPER_HOT"
____exports.SeedEffect.RETRO_VISION = 78
____exports.SeedEffect[____exports.SeedEffect.RETRO_VISION] = "RETRO_VISION"
____exports.SeedEffect.G_FUEL = 79
____exports.SeedEffect[____exports.SeedEffect.G_FUEL] = "G_FUEL"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.RoomType"] = function(...) 
local ____exports = {}
____exports.RoomType = {}
____exports.RoomType.DEFAULT = 1
____exports.RoomType[____exports.RoomType.DEFAULT] = "DEFAULT"
____exports.RoomType.SHOP = 2
____exports.RoomType[____exports.RoomType.SHOP] = "SHOP"
____exports.RoomType.ERROR = 3
____exports.RoomType[____exports.RoomType.ERROR] = "ERROR"
____exports.RoomType.TREASURE = 4
____exports.RoomType[____exports.RoomType.TREASURE] = "TREASURE"
____exports.RoomType.BOSS = 5
____exports.RoomType[____exports.RoomType.BOSS] = "BOSS"
____exports.RoomType.MINI_BOSS = 6
____exports.RoomType[____exports.RoomType.MINI_BOSS] = "MINI_BOSS"
____exports.RoomType.SECRET = 7
____exports.RoomType[____exports.RoomType.SECRET] = "SECRET"
____exports.RoomType.SUPER_SECRET = 8
____exports.RoomType[____exports.RoomType.SUPER_SECRET] = "SUPER_SECRET"
____exports.RoomType.ARCADE = 9
____exports.RoomType[____exports.RoomType.ARCADE] = "ARCADE"
____exports.RoomType.CURSE = 10
____exports.RoomType[____exports.RoomType.CURSE] = "CURSE"
____exports.RoomType.CHALLENGE = 11
____exports.RoomType[____exports.RoomType.CHALLENGE] = "CHALLENGE"
____exports.RoomType.LIBRARY = 12
____exports.RoomType[____exports.RoomType.LIBRARY] = "LIBRARY"
____exports.RoomType.SACRIFICE = 13
____exports.RoomType[____exports.RoomType.SACRIFICE] = "SACRIFICE"
____exports.RoomType.DEVIL = 14
____exports.RoomType[____exports.RoomType.DEVIL] = "DEVIL"
____exports.RoomType.ANGEL = 15
____exports.RoomType[____exports.RoomType.ANGEL] = "ANGEL"
____exports.RoomType.DUNGEON = 16
____exports.RoomType[____exports.RoomType.DUNGEON] = "DUNGEON"
____exports.RoomType.BOSS_RUSH = 17
____exports.RoomType[____exports.RoomType.BOSS_RUSH] = "BOSS_RUSH"
____exports.RoomType.CLEAN_BEDROOM = 18
____exports.RoomType[____exports.RoomType.CLEAN_BEDROOM] = "CLEAN_BEDROOM"
____exports.RoomType.DIRTY_BEDROOM = 19
____exports.RoomType[____exports.RoomType.DIRTY_BEDROOM] = "DIRTY_BEDROOM"
____exports.RoomType.VAULT = 20
____exports.RoomType[____exports.RoomType.VAULT] = "VAULT"
____exports.RoomType.DICE = 21
____exports.RoomType[____exports.RoomType.DICE] = "DICE"
____exports.RoomType.BLACK_MARKET = 22
____exports.RoomType[____exports.RoomType.BLACK_MARKET] = "BLACK_MARKET"
____exports.RoomType.GREED_EXIT = 23
____exports.RoomType[____exports.RoomType.GREED_EXIT] = "GREED_EXIT"
____exports.RoomType.PLANETARIUM = 24
____exports.RoomType[____exports.RoomType.PLANETARIUM] = "PLANETARIUM"
____exports.RoomType.TELEPORTER = 25
____exports.RoomType[____exports.RoomType.TELEPORTER] = "TELEPORTER"
____exports.RoomType.TELEPORTER_EXIT = 26
____exports.RoomType[____exports.RoomType.TELEPORTER_EXIT] = "TELEPORTER_EXIT"
____exports.RoomType.SECRET_EXIT = 27
____exports.RoomType[____exports.RoomType.SECRET_EXIT] = "SECRET_EXIT"
____exports.RoomType.BLUE = 28
____exports.RoomType[____exports.RoomType.BLUE] = "BLUE"
____exports.RoomType.ULTRA_SECRET = 29
____exports.RoomType[____exports.RoomType.ULTRA_SECRET] = "ULTRA_SECRET"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.RoomTransitionAnim"] = function(...) 
local ____exports = {}
____exports.RoomTransitionAnim = {}
____exports.RoomTransitionAnim.WALK = 0
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.WALK] = "WALK"
____exports.RoomTransitionAnim.FADE = 1
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.FADE] = "FADE"
____exports.RoomTransitionAnim.PIXELATION = 2
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.PIXELATION] = "PIXELATION"
____exports.RoomTransitionAnim.TELEPORT = 3
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.TELEPORT] = "TELEPORT"
____exports.RoomTransitionAnim.MAZE = 4
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.MAZE] = "MAZE"
____exports.RoomTransitionAnim.ANKH = 5
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.ANKH] = "ANKH"
____exports.RoomTransitionAnim.DEAD_CAT = 6
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.DEAD_CAT] = "DEAD_CAT"
____exports.RoomTransitionAnim.ONE_UP = 7
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.ONE_UP] = "ONE_UP"
____exports.RoomTransitionAnim.COLLAR = 8
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.COLLAR] = "COLLAR"
____exports.RoomTransitionAnim.JUDAS_SHADOW = 9
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.JUDAS_SHADOW] = "JUDAS_SHADOW"
____exports.RoomTransitionAnim.LAZARUS = 10
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.LAZARUS] = "LAZARUS"
____exports.RoomTransitionAnim.WOMB_TELEPORT = 11
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.WOMB_TELEPORT] = "WOMB_TELEPORT"
____exports.RoomTransitionAnim.GLOWING_HOURGLASS = 12
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.GLOWING_HOURGLASS] = "GLOWING_HOURGLASS"
____exports.RoomTransitionAnim.D7 = 13
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.D7] = "D7"
____exports.RoomTransitionAnim.MISSING_POSTER = 14
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.MISSING_POSTER] = "MISSING_POSTER"
____exports.RoomTransitionAnim.BOSS_FORCED = 15
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.BOSS_FORCED] = "BOSS_FORCED"
____exports.RoomTransitionAnim.PORTAL_TELEPORT = 16
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.PORTAL_TELEPORT] = "PORTAL_TELEPORT"
____exports.RoomTransitionAnim.FORGOTTEN_TELEPORT = 17
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.FORGOTTEN_TELEPORT] = "FORGOTTEN_TELEPORT"
____exports.RoomTransitionAnim.FADE_MIRROR = 18
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.FADE_MIRROR] = "FADE_MIRROR"
____exports.RoomTransitionAnim.MINECART = 19
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.MINECART] = "MINECART"
____exports.RoomTransitionAnim.DEATH_CERTIFICATE = 20
____exports.RoomTransitionAnim[____exports.RoomTransitionAnim.DEATH_CERTIFICATE] = "DEATH_CERTIFICATE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.RoomShape"] = function(...) 
local ____exports = {}
____exports.RoomShape = {}
____exports.RoomShape.SHAPE_1x1 = 1
____exports.RoomShape[____exports.RoomShape.SHAPE_1x1] = "SHAPE_1x1"
____exports.RoomShape.IH = 2
____exports.RoomShape[____exports.RoomShape.IH] = "IH"
____exports.RoomShape.IV = 3
____exports.RoomShape[____exports.RoomShape.IV] = "IV"
____exports.RoomShape.SHAPE_1x2 = 4
____exports.RoomShape[____exports.RoomShape.SHAPE_1x2] = "SHAPE_1x2"
____exports.RoomShape.IIV = 5
____exports.RoomShape[____exports.RoomShape.IIV] = "IIV"
____exports.RoomShape.SHAPE_2x1 = 6
____exports.RoomShape[____exports.RoomShape.SHAPE_2x1] = "SHAPE_2x1"
____exports.RoomShape.IIH = 7
____exports.RoomShape[____exports.RoomShape.IIH] = "IIH"
____exports.RoomShape.SHAPE_2x2 = 8
____exports.RoomShape[____exports.RoomShape.SHAPE_2x2] = "SHAPE_2x2"
____exports.RoomShape.LTL = 9
____exports.RoomShape[____exports.RoomShape.LTL] = "LTL"
____exports.RoomShape.LTR = 10
____exports.RoomShape[____exports.RoomShape.LTR] = "LTR"
____exports.RoomShape.LBL = 11
____exports.RoomShape[____exports.RoomShape.LBL] = "LBL"
____exports.RoomShape.LBR = 12
____exports.RoomShape[____exports.RoomShape.LBR] = "LBR"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.RoomDifficulty"] = function(...) 
local ____exports = {}
--- Each room has an arbitrarily set difficulty of 0, 1, 2, 5, or 10. The floor generation algorithm
-- attempts to generates floors with a combined difficulty of a certain value.
____exports.RoomDifficulty = {}
____exports.RoomDifficulty.ALWAYS_EXCLUDED = 0
____exports.RoomDifficulty[____exports.RoomDifficulty.ALWAYS_EXCLUDED] = "ALWAYS_EXCLUDED"
____exports.RoomDifficulty.VERY_EASY = 1
____exports.RoomDifficulty[____exports.RoomDifficulty.VERY_EASY] = "VERY_EASY"
____exports.RoomDifficulty.EASY = 2
____exports.RoomDifficulty[____exports.RoomDifficulty.EASY] = "EASY"
____exports.RoomDifficulty.MEDIUM = 5
____exports.RoomDifficulty[____exports.RoomDifficulty.MEDIUM] = "MEDIUM"
____exports.RoomDifficulty.HARD = 10
____exports.RoomDifficulty[____exports.RoomDifficulty.HARD] = "HARD"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.RoomDescriptorDisplayType"] = function(...) 
local ____exports = {}
--- Matches the `RoomDescriptor.DISPLAY_*` members of the `RoomDescriptor` class. In IsaacScript, we
-- reimplement this as an enum instead, since it is cleaner.
____exports.RoomDescriptorDisplayType = {}
____exports.RoomDescriptorDisplayType.NONE = 0
____exports.RoomDescriptorDisplayType[____exports.RoomDescriptorDisplayType.NONE] = "NONE"
____exports.RoomDescriptorDisplayType.BOX = 1
____exports.RoomDescriptorDisplayType[____exports.RoomDescriptorDisplayType.BOX] = "BOX"
____exports.RoomDescriptorDisplayType.LOCK = 2
____exports.RoomDescriptorDisplayType[____exports.RoomDescriptorDisplayType.LOCK] = "LOCK"
____exports.RoomDescriptorDisplayType.ICON = 4
____exports.RoomDescriptorDisplayType[____exports.RoomDescriptorDisplayType.ICON] = "ICON"
____exports.RoomDescriptorDisplayType.ALL = 5
____exports.RoomDescriptorDisplayType[____exports.RoomDescriptorDisplayType.ALL] = "ALL"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.RenderMode"] = function(...) 
local ____exports = {}
____exports.RenderMode = {}
____exports.RenderMode.NULL = 0
____exports.RenderMode[____exports.RenderMode.NULL] = "NULL"
____exports.RenderMode.NORMAL = 1
____exports.RenderMode[____exports.RenderMode.NORMAL] = "NORMAL"
____exports.RenderMode.SKIP = 2
____exports.RenderMode[____exports.RenderMode.SKIP] = "SKIP"
____exports.RenderMode.WATER_ABOVE = 3
____exports.RenderMode[____exports.RenderMode.WATER_ABOVE] = "WATER_ABOVE"
____exports.RenderMode.WATER_REFRACT = 4
____exports.RenderMode[____exports.RenderMode.WATER_REFRACT] = "WATER_REFRACT"
____exports.RenderMode.WATER_REFLECT = 5
____exports.RenderMode[____exports.RenderMode.WATER_REFLECT] = "WATER_REFLECT"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ProjectilesMode"] = function(...) 
local ____exports = {}
____exports.ProjectilesMode = {}
____exports.ProjectilesMode.ONE_PROJECTILE = 0
____exports.ProjectilesMode[____exports.ProjectilesMode.ONE_PROJECTILE] = "ONE_PROJECTILE"
____exports.ProjectilesMode.TWO_PROJECTILES = 1
____exports.ProjectilesMode[____exports.ProjectilesMode.TWO_PROJECTILES] = "TWO_PROJECTILES"
____exports.ProjectilesMode.THREE_PROJECTILES = 2
____exports.ProjectilesMode[____exports.ProjectilesMode.THREE_PROJECTILES] = "THREE_PROJECTILES"
____exports.ProjectilesMode.THREE_PROJECTILES_SPREAD = 3
____exports.ProjectilesMode[____exports.ProjectilesMode.THREE_PROJECTILES_SPREAD] = "THREE_PROJECTILES_SPREAD"
____exports.ProjectilesMode.FOUR_PROJECTILES = 4
____exports.ProjectilesMode[____exports.ProjectilesMode.FOUR_PROJECTILES] = "FOUR_PROJECTILES"
____exports.ProjectilesMode.FIVE_PROJECTILES = 5
____exports.ProjectilesMode[____exports.ProjectilesMode.FIVE_PROJECTILES] = "FIVE_PROJECTILES"
____exports.ProjectilesMode.FOUR_PROJECTILES_PLUS_PATTERN = 6
____exports.ProjectilesMode[____exports.ProjectilesMode.FOUR_PROJECTILES_PLUS_PATTERN] = "FOUR_PROJECTILES_PLUS_PATTERN"
____exports.ProjectilesMode.FOUR_PROJECTILES_X_PATTERN = 7
____exports.ProjectilesMode[____exports.ProjectilesMode.FOUR_PROJECTILES_X_PATTERN] = "FOUR_PROJECTILES_X_PATTERN"
____exports.ProjectilesMode.EIGHT_PROJECTILES_STAR_PATTERN = 8
____exports.ProjectilesMode[____exports.ProjectilesMode.EIGHT_PROJECTILES_STAR_PATTERN] = "EIGHT_PROJECTILES_STAR_PATTERN"
____exports.ProjectilesMode.N_PROJECTILES_IN_CIRCLE = 9
____exports.ProjectilesMode[____exports.ProjectilesMode.N_PROJECTILES_IN_CIRCLE] = "N_PROJECTILES_IN_CIRCLE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.PoopSpellType"] = function(...) 
local ____exports = {}
____exports.PoopSpellType = {}
____exports.PoopSpellType.NONE = 0
____exports.PoopSpellType[____exports.PoopSpellType.NONE] = "NONE"
____exports.PoopSpellType.POOP = 1
____exports.PoopSpellType[____exports.PoopSpellType.POOP] = "POOP"
____exports.PoopSpellType.CORNY = 2
____exports.PoopSpellType[____exports.PoopSpellType.CORNY] = "CORNY"
____exports.PoopSpellType.BURNING = 3
____exports.PoopSpellType[____exports.PoopSpellType.BURNING] = "BURNING"
____exports.PoopSpellType.STONE = 4
____exports.PoopSpellType[____exports.PoopSpellType.STONE] = "STONE"
____exports.PoopSpellType.STINKY = 5
____exports.PoopSpellType[____exports.PoopSpellType.STINKY] = "STINKY"
____exports.PoopSpellType.BLACK = 6
____exports.PoopSpellType[____exports.PoopSpellType.BLACK] = "BLACK"
____exports.PoopSpellType.HOLY = 7
____exports.PoopSpellType[____exports.PoopSpellType.HOLY] = "HOLY"
____exports.PoopSpellType.LIQUID = 8
____exports.PoopSpellType[____exports.PoopSpellType.LIQUID] = "LIQUID"
____exports.PoopSpellType.FART = 9
____exports.PoopSpellType[____exports.PoopSpellType.FART] = "FART"
____exports.PoopSpellType.BOMB = 10
____exports.PoopSpellType[____exports.PoopSpellType.BOMB] = "BOMB"
____exports.PoopSpellType.DIARRHEA = 11
____exports.PoopSpellType[____exports.PoopSpellType.DIARRHEA] = "DIARRHEA"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.PocketItemSlot"] = function(...) 
local ____exports = {}
____exports.PocketItemSlot = {}
____exports.PocketItemSlot.SLOT_1 = 0
____exports.PocketItemSlot[____exports.PocketItemSlot.SLOT_1] = "SLOT_1"
____exports.PocketItemSlot.SLOT_2 = 1
____exports.PocketItemSlot[____exports.PocketItemSlot.SLOT_2] = "SLOT_2"
____exports.PocketItemSlot.SLOT_3 = 2
____exports.PocketItemSlot[____exports.PocketItemSlot.SLOT_3] = "SLOT_3"
____exports.PocketItemSlot.SLOT_4 = 3
____exports.PocketItemSlot[____exports.PocketItemSlot.SLOT_4] = "SLOT_4"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.PlayerSpriteLayer"] = function(...) 
local ____exports = {}
--- Corresponds to "resources/gfx/001.000_player.anm2".
____exports.PlayerSpriteLayer = {}
____exports.PlayerSpriteLayer.GLOW = 0
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.GLOW] = "GLOW"
____exports.PlayerSpriteLayer.BODY = 1
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.BODY] = "BODY"
____exports.PlayerSpriteLayer.BODY_0 = 2
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.BODY_0] = "BODY_0"
____exports.PlayerSpriteLayer.BODY_1 = 3
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.BODY_1] = "BODY_1"
____exports.PlayerSpriteLayer.HEAD = 4
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.HEAD] = "HEAD"
____exports.PlayerSpriteLayer.HEAD_0 = 5
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.HEAD_0] = "HEAD_0"
____exports.PlayerSpriteLayer.HEAD_1 = 6
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.HEAD_1] = "HEAD_1"
____exports.PlayerSpriteLayer.HEAD_2 = 7
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.HEAD_2] = "HEAD_2"
____exports.PlayerSpriteLayer.HEAD_3 = 8
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.HEAD_3] = "HEAD_3"
____exports.PlayerSpriteLayer.HEAD_4 = 9
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.HEAD_4] = "HEAD_4"
____exports.PlayerSpriteLayer.HEAD_5 = 10
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.HEAD_5] = "HEAD_5"
____exports.PlayerSpriteLayer.TOP_0 = 11
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.TOP_0] = "TOP_0"
____exports.PlayerSpriteLayer.EXTRA = 12
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.EXTRA] = "EXTRA"
____exports.PlayerSpriteLayer.GHOST = 13
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.GHOST] = "GHOST"
____exports.PlayerSpriteLayer.BACK = 14
____exports.PlayerSpriteLayer[____exports.PlayerSpriteLayer.BACK] = "BACK"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.PlayerItemAnimation"] = function(...) 
local ____exports = {}
--- These are a subset of animations from the "001.000_player.anm2" file.
-- 
-- These are listed in order of their appearance from top to bottom.
____exports.PlayerItemAnimation = {}
____exports.PlayerItemAnimation.PICKUP = "Pickup"
____exports.PlayerItemAnimation.LIFT_ITEM = "LiftItem"
____exports.PlayerItemAnimation.HIDE_ITEM = "HideItem"
____exports.PlayerItemAnimation.USE_ITEM = "UseItem"
____exports.PlayerItemAnimation.PICKUP_WALK_DOWN = "PickupWalkDown"
____exports.PlayerItemAnimation.PICKUP_WALK_LEFT = "PickupWalkLeft"
____exports.PlayerItemAnimation.PICKUP_WALK_UP = "PickupWalkUp"
____exports.PlayerItemAnimation.PICKUP_WALK_RIGHT = "PickupWalkRight"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.PlayerForm"] = function(...) 
local ____exports = {}
--- The possible transformations that the player can have.
____exports.PlayerForm = {}
____exports.PlayerForm.GUPPY = 0
____exports.PlayerForm[____exports.PlayerForm.GUPPY] = "GUPPY"
____exports.PlayerForm.BEELZEBUB = 1
____exports.PlayerForm[____exports.PlayerForm.BEELZEBUB] = "BEELZEBUB"
____exports.PlayerForm.FUN_GUY = 2
____exports.PlayerForm[____exports.PlayerForm.FUN_GUY] = "FUN_GUY"
____exports.PlayerForm.SERAPHIM = 3
____exports.PlayerForm[____exports.PlayerForm.SERAPHIM] = "SERAPHIM"
____exports.PlayerForm.BOB = 4
____exports.PlayerForm[____exports.PlayerForm.BOB] = "BOB"
____exports.PlayerForm.SPUN = 5
____exports.PlayerForm[____exports.PlayerForm.SPUN] = "SPUN"
____exports.PlayerForm.YES_MOTHER = 6
____exports.PlayerForm[____exports.PlayerForm.YES_MOTHER] = "YES_MOTHER"
____exports.PlayerForm.CONJOINED = 7
____exports.PlayerForm[____exports.PlayerForm.CONJOINED] = "CONJOINED"
____exports.PlayerForm.LEVIATHAN = 8
____exports.PlayerForm[____exports.PlayerForm.LEVIATHAN] = "LEVIATHAN"
____exports.PlayerForm.OH_CRAP = 9
____exports.PlayerForm[____exports.PlayerForm.OH_CRAP] = "OH_CRAP"
____exports.PlayerForm.BOOKWORM = 10
____exports.PlayerForm[____exports.PlayerForm.BOOKWORM] = "BOOKWORM"
____exports.PlayerForm.ADULT = 11
____exports.PlayerForm[____exports.PlayerForm.ADULT] = "ADULT"
____exports.PlayerForm.SPIDER_BABY = 12
____exports.PlayerForm[____exports.PlayerForm.SPIDER_BABY] = "SPIDER_BABY"
____exports.PlayerForm.STOMPY = 13
____exports.PlayerForm[____exports.PlayerForm.STOMPY] = "STOMPY"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.PillEffect"] = function(...) 
local ____exports = {}
--- This enum is contiguous. (Every value is satisfied between 0 and 49, inclusive.)
____exports.PillEffect = {}
____exports.PillEffect.BAD_GAS = 0
____exports.PillEffect[____exports.PillEffect.BAD_GAS] = "BAD_GAS"
____exports.PillEffect.BAD_TRIP = 1
____exports.PillEffect[____exports.PillEffect.BAD_TRIP] = "BAD_TRIP"
____exports.PillEffect.BALLS_OF_STEEL = 2
____exports.PillEffect[____exports.PillEffect.BALLS_OF_STEEL] = "BALLS_OF_STEEL"
____exports.PillEffect.BOMBS_ARE_KEYS = 3
____exports.PillEffect[____exports.PillEffect.BOMBS_ARE_KEYS] = "BOMBS_ARE_KEYS"
____exports.PillEffect.EXPLOSIVE_DIARRHEA = 4
____exports.PillEffect[____exports.PillEffect.EXPLOSIVE_DIARRHEA] = "EXPLOSIVE_DIARRHEA"
____exports.PillEffect.FULL_HEALTH = 5
____exports.PillEffect[____exports.PillEffect.FULL_HEALTH] = "FULL_HEALTH"
____exports.PillEffect.HEALTH_DOWN = 6
____exports.PillEffect[____exports.PillEffect.HEALTH_DOWN] = "HEALTH_DOWN"
____exports.PillEffect.HEALTH_UP = 7
____exports.PillEffect[____exports.PillEffect.HEALTH_UP] = "HEALTH_UP"
____exports.PillEffect.I_FOUND_PILLS = 8
____exports.PillEffect[____exports.PillEffect.I_FOUND_PILLS] = "I_FOUND_PILLS"
____exports.PillEffect.PUBERTY = 9
____exports.PillEffect[____exports.PillEffect.PUBERTY] = "PUBERTY"
____exports.PillEffect.PRETTY_FLY = 10
____exports.PillEffect[____exports.PillEffect.PRETTY_FLY] = "PRETTY_FLY"
____exports.PillEffect.RANGE_DOWN = 11
____exports.PillEffect[____exports.PillEffect.RANGE_DOWN] = "RANGE_DOWN"
____exports.PillEffect.RANGE_UP = 12
____exports.PillEffect[____exports.PillEffect.RANGE_UP] = "RANGE_UP"
____exports.PillEffect.SPEED_DOWN = 13
____exports.PillEffect[____exports.PillEffect.SPEED_DOWN] = "SPEED_DOWN"
____exports.PillEffect.SPEED_UP = 14
____exports.PillEffect[____exports.PillEffect.SPEED_UP] = "SPEED_UP"
____exports.PillEffect.TEARS_DOWN = 15
____exports.PillEffect[____exports.PillEffect.TEARS_DOWN] = "TEARS_DOWN"
____exports.PillEffect.TEARS_UP = 16
____exports.PillEffect[____exports.PillEffect.TEARS_UP] = "TEARS_UP"
____exports.PillEffect.LUCK_DOWN = 17
____exports.PillEffect[____exports.PillEffect.LUCK_DOWN] = "LUCK_DOWN"
____exports.PillEffect.LUCK_UP = 18
____exports.PillEffect[____exports.PillEffect.LUCK_UP] = "LUCK_UP"
____exports.PillEffect.TELEPILLS = 19
____exports.PillEffect[____exports.PillEffect.TELEPILLS] = "TELEPILLS"
____exports.PillEffect.FORTY_EIGHT_HOUR_ENERGY = 20
____exports.PillEffect[____exports.PillEffect.FORTY_EIGHT_HOUR_ENERGY] = "FORTY_EIGHT_HOUR_ENERGY"
____exports.PillEffect.HEMATEMESIS = 21
____exports.PillEffect[____exports.PillEffect.HEMATEMESIS] = "HEMATEMESIS"
____exports.PillEffect.PARALYSIS = 22
____exports.PillEffect[____exports.PillEffect.PARALYSIS] = "PARALYSIS"
____exports.PillEffect.I_CAN_SEE_FOREVER = 23
____exports.PillEffect[____exports.PillEffect.I_CAN_SEE_FOREVER] = "I_CAN_SEE_FOREVER"
____exports.PillEffect.PHEROMONES = 24
____exports.PillEffect[____exports.PillEffect.PHEROMONES] = "PHEROMONES"
____exports.PillEffect.AMNESIA = 25
____exports.PillEffect[____exports.PillEffect.AMNESIA] = "AMNESIA"
____exports.PillEffect.LEMON_PARTY = 26
____exports.PillEffect[____exports.PillEffect.LEMON_PARTY] = "LEMON_PARTY"
____exports.PillEffect.R_U_A_WIZARD = 27
____exports.PillEffect[____exports.PillEffect.R_U_A_WIZARD] = "R_U_A_WIZARD"
____exports.PillEffect.PERCS = 28
____exports.PillEffect[____exports.PillEffect.PERCS] = "PERCS"
____exports.PillEffect.ADDICTED = 29
____exports.PillEffect[____exports.PillEffect.ADDICTED] = "ADDICTED"
____exports.PillEffect.RELAX = 30
____exports.PillEffect[____exports.PillEffect.RELAX] = "RELAX"
____exports.PillEffect.QUESTION_MARKS = 31
____exports.PillEffect[____exports.PillEffect.QUESTION_MARKS] = "QUESTION_MARKS"
____exports.PillEffect.ONE_MAKES_YOU_LARGER = 32
____exports.PillEffect[____exports.PillEffect.ONE_MAKES_YOU_LARGER] = "ONE_MAKES_YOU_LARGER"
____exports.PillEffect.ONE_MAKES_YOU_SMALL = 33
____exports.PillEffect[____exports.PillEffect.ONE_MAKES_YOU_SMALL] = "ONE_MAKES_YOU_SMALL"
____exports.PillEffect.INFESTED_EXCLAMATION = 34
____exports.PillEffect[____exports.PillEffect.INFESTED_EXCLAMATION] = "INFESTED_EXCLAMATION"
____exports.PillEffect.INFESTED_QUESTION = 35
____exports.PillEffect[____exports.PillEffect.INFESTED_QUESTION] = "INFESTED_QUESTION"
____exports.PillEffect.POWER = 36
____exports.PillEffect[____exports.PillEffect.POWER] = "POWER"
____exports.PillEffect.RETRO_VISION = 37
____exports.PillEffect[____exports.PillEffect.RETRO_VISION] = "RETRO_VISION"
____exports.PillEffect.FRIENDS_TILL_THE_END = 38
____exports.PillEffect[____exports.PillEffect.FRIENDS_TILL_THE_END] = "FRIENDS_TILL_THE_END"
____exports.PillEffect.X_LAX = 39
____exports.PillEffect[____exports.PillEffect.X_LAX] = "X_LAX"
____exports.PillEffect.SOMETHINGS_WRONG = 40
____exports.PillEffect[____exports.PillEffect.SOMETHINGS_WRONG] = "SOMETHINGS_WRONG"
____exports.PillEffect.IM_DROWSY = 41
____exports.PillEffect[____exports.PillEffect.IM_DROWSY] = "IM_DROWSY"
____exports.PillEffect.IM_EXCITED = 42
____exports.PillEffect[____exports.PillEffect.IM_EXCITED] = "IM_EXCITED"
____exports.PillEffect.GULP = 43
____exports.PillEffect[____exports.PillEffect.GULP] = "GULP"
____exports.PillEffect.HORF = 44
____exports.PillEffect[____exports.PillEffect.HORF] = "HORF"
____exports.PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE = 45
____exports.PillEffect[____exports.PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE] = "FEELS_LIKE_IM_WALKING_ON_SUNSHINE"
____exports.PillEffect.VURP = 46
____exports.PillEffect[____exports.PillEffect.VURP] = "VURP"
____exports.PillEffect.SHOT_SPEED_DOWN = 47
____exports.PillEffect[____exports.PillEffect.SHOT_SPEED_DOWN] = "SHOT_SPEED_DOWN"
____exports.PillEffect.SHOT_SPEED_UP = 48
____exports.PillEffect[____exports.PillEffect.SHOT_SPEED_UP] = "SHOT_SPEED_UP"
____exports.PillEffect.EXPERIMENTAL = 49
____exports.PillEffect[____exports.PillEffect.EXPERIMENTAL] = "EXPERIMENTAL"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.PickupPrice"] = function(...) 
local ____exports = {}
____exports.PickupPrice = {}
____exports.PickupPrice.NULL = 0
____exports.PickupPrice[____exports.PickupPrice.NULL] = "NULL"
____exports.PickupPrice.ONE_HEART = -1
____exports.PickupPrice[____exports.PickupPrice.ONE_HEART] = "ONE_HEART"
____exports.PickupPrice.TWO_HEARTS = -2
____exports.PickupPrice[____exports.PickupPrice.TWO_HEARTS] = "TWO_HEARTS"
____exports.PickupPrice.THREE_SOUL_HEARTS = -3
____exports.PickupPrice[____exports.PickupPrice.THREE_SOUL_HEARTS] = "THREE_SOUL_HEARTS"
____exports.PickupPrice.ONE_HEART_AND_TWO_SOUL_HEARTS = -4
____exports.PickupPrice[____exports.PickupPrice.ONE_HEART_AND_TWO_SOUL_HEARTS] = "ONE_HEART_AND_TWO_SOUL_HEARTS"
____exports.PickupPrice.SPIKES = -5
____exports.PickupPrice[____exports.PickupPrice.SPIKES] = "SPIKES"
____exports.PickupPrice.YOUR_SOUL = -6
____exports.PickupPrice[____exports.PickupPrice.YOUR_SOUL] = "YOUR_SOUL"
____exports.PickupPrice.ONE_SOUL_HEART = -7
____exports.PickupPrice[____exports.PickupPrice.ONE_SOUL_HEART] = "ONE_SOUL_HEART"
____exports.PickupPrice.TWO_SOUL_HEARTS = -8
____exports.PickupPrice[____exports.PickupPrice.TWO_SOUL_HEARTS] = "TWO_SOUL_HEARTS"
____exports.PickupPrice.ONE_HEART_AND_ONE_SOUL_HEART = -9
____exports.PickupPrice[____exports.PickupPrice.ONE_HEART_AND_ONE_SOUL_HEART] = "ONE_HEART_AND_ONE_SOUL_HEART"
____exports.PickupPrice.FREE = -1000
____exports.PickupPrice[____exports.PickupPrice.FREE] = "FREE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.NullItemID"] = function(...) 
local ____exports = {}
____exports.NullItemID = {}
____exports.NullItemID.NULL = -1
____exports.NullItemID[____exports.NullItemID.NULL] = "NULL"
____exports.NullItemID.EXPLOSIVE_DIARRHEA = 0
____exports.NullItemID[____exports.NullItemID.EXPLOSIVE_DIARRHEA] = "EXPLOSIVE_DIARRHEA"
____exports.NullItemID.PUBERTY = 1
____exports.NullItemID[____exports.NullItemID.PUBERTY] = "PUBERTY"
____exports.NullItemID.I_FOUND_PILLS = 2
____exports.NullItemID[____exports.NullItemID.I_FOUND_PILLS] = "I_FOUND_PILLS"
____exports.NullItemID.LORD_OF_THE_FLIES = 3
____exports.NullItemID[____exports.NullItemID.LORD_OF_THE_FLIES] = "LORD_OF_THE_FLIES"
____exports.NullItemID.STATUE = 4
____exports.NullItemID[____exports.NullItemID.STATUE] = "STATUE"
____exports.NullItemID.GUPPY = 5
____exports.NullItemID[____exports.NullItemID.GUPPY] = "GUPPY"
____exports.NullItemID.WIZARD = 6
____exports.NullItemID[____exports.NullItemID.WIZARD] = "WIZARD"
____exports.NullItemID.MAGDALENE = 7
____exports.NullItemID[____exports.NullItemID.MAGDALENE] = "MAGDALENE"
____exports.NullItemID.CAIN = 8
____exports.NullItemID[____exports.NullItemID.CAIN] = "CAIN"
____exports.NullItemID.JUDAS = 9
____exports.NullItemID[____exports.NullItemID.JUDAS] = "JUDAS"
____exports.NullItemID.EVE = 10
____exports.NullItemID[____exports.NullItemID.EVE] = "EVE"
____exports.NullItemID.AZAZEL = 11
____exports.NullItemID[____exports.NullItemID.AZAZEL] = "AZAZEL"
____exports.NullItemID.EDEN = 12
____exports.NullItemID[____exports.NullItemID.EDEN] = "EDEN"
____exports.NullItemID.SAMSON = 13
____exports.NullItemID[____exports.NullItemID.SAMSON] = "SAMSON"
____exports.NullItemID.BLINDFOLD = 14
____exports.NullItemID[____exports.NullItemID.BLINDFOLD] = "BLINDFOLD"
____exports.NullItemID.BLANK_FACE = 15
____exports.NullItemID[____exports.NullItemID.BLANK_FACE] = "BLANK_FACE"
____exports.NullItemID.CHRISTMAS = 16
____exports.NullItemID[____exports.NullItemID.CHRISTMAS] = "CHRISTMAS"
____exports.NullItemID.PURITY_GLOW = 17
____exports.NullItemID[____exports.NullItemID.PURITY_GLOW] = "PURITY_GLOW"
____exports.NullItemID.EMPTY_VESSEL = 18
____exports.NullItemID[____exports.NullItemID.EMPTY_VESSEL] = "EMPTY_VESSEL"
____exports.NullItemID.MAW_MARK = 19
____exports.NullItemID[____exports.NullItemID.MAW_MARK] = "MAW_MARK"
____exports.NullItemID.MUSHROOM = 20
____exports.NullItemID[____exports.NullItemID.MUSHROOM] = "MUSHROOM"
____exports.NullItemID.ANGEL = 21
____exports.NullItemID[____exports.NullItemID.ANGEL] = "ANGEL"
____exports.NullItemID.BOB = 22
____exports.NullItemID[____exports.NullItemID.BOB] = "BOB"
____exports.NullItemID.DRUGS = 23
____exports.NullItemID[____exports.NullItemID.DRUGS] = "DRUGS"
____exports.NullItemID.MOM = 24
____exports.NullItemID[____exports.NullItemID.MOM] = "MOM"
____exports.NullItemID.BABY = 25
____exports.NullItemID[____exports.NullItemID.BABY] = "BABY"
____exports.NullItemID.EVIL_ANGEL = 26
____exports.NullItemID[____exports.NullItemID.EVIL_ANGEL] = "EVIL_ANGEL"
____exports.NullItemID.POOP = 27
____exports.NullItemID[____exports.NullItemID.POOP] = "POOP"
____exports.NullItemID.RELAX = 28
____exports.NullItemID[____exports.NullItemID.RELAX] = "RELAX"
____exports.NullItemID.OVERDOSE = 29
____exports.NullItemID[____exports.NullItemID.OVERDOSE] = "OVERDOSE"
____exports.NullItemID.BOOMERANG = 30
____exports.NullItemID[____exports.NullItemID.BOOMERANG] = "BOOMERANG"
____exports.NullItemID.MEGA_BLAST = 31
____exports.NullItemID[____exports.NullItemID.MEGA_BLAST] = "MEGA_BLAST"
____exports.NullItemID.LAZARUS = 32
____exports.NullItemID[____exports.NullItemID.LAZARUS] = "LAZARUS"
____exports.NullItemID.LAZARUS_2 = 33
____exports.NullItemID[____exports.NullItemID.LAZARUS_2] = "LAZARUS_2"
____exports.NullItemID.LILITH = 34
____exports.NullItemID[____exports.NullItemID.LILITH] = "LILITH"
____exports.NullItemID.IWATA = 35
____exports.NullItemID[____exports.NullItemID.IWATA] = "IWATA"
____exports.NullItemID.APOLLYON = 36
____exports.NullItemID[____exports.NullItemID.APOLLYON] = "APOLLYON"
____exports.NullItemID.BOOKWORM = 37
____exports.NullItemID[____exports.NullItemID.BOOKWORM] = "BOOKWORM"
____exports.NullItemID.ADULTHOOD = 38
____exports.NullItemID[____exports.NullItemID.ADULTHOOD] = "ADULTHOOD"
____exports.NullItemID.SPIDER_BABY = 39
____exports.NullItemID[____exports.NullItemID.SPIDER_BABY] = "SPIDER_BABY"
____exports.NullItemID.BATWING_WINGS = 40
____exports.NullItemID[____exports.NullItemID.BATWING_WINGS] = "BATWING_WINGS"
____exports.NullItemID.HUGE_GROWTH = 41
____exports.NullItemID[____exports.NullItemID.HUGE_GROWTH] = "HUGE_GROWTH"
____exports.NullItemID.ERA_WALK = 42
____exports.NullItemID[____exports.NullItemID.ERA_WALK] = "ERA_WALK"
____exports.NullItemID.SACRIFICIAL_ALTAR = 43
____exports.NullItemID[____exports.NullItemID.SACRIFICIAL_ALTAR] = "SACRIFICIAL_ALTAR"
____exports.NullItemID.FORGOTTEN = 44
____exports.NullItemID[____exports.NullItemID.FORGOTTEN] = "FORGOTTEN"
____exports.NullItemID.BRIMSTONE_2 = 45
____exports.NullItemID[____exports.NullItemID.BRIMSTONE_2] = "BRIMSTONE_2"
____exports.NullItemID.HOLY_CARD = 46
____exports.NullItemID[____exports.NullItemID.HOLY_CARD] = "HOLY_CARD"
____exports.NullItemID.KEEPER = 47
____exports.NullItemID[____exports.NullItemID.KEEPER] = "KEEPER"
____exports.NullItemID.CAMO_BOOST = 48
____exports.NullItemID[____exports.NullItemID.CAMO_BOOST] = "CAMO_BOOST"
____exports.NullItemID.LAZARUS_BOOST = 49
____exports.NullItemID[____exports.NullItemID.LAZARUS_BOOST] = "LAZARUS_BOOST"
____exports.NullItemID.SPIN_TO_WIN = 50
____exports.NullItemID[____exports.NullItemID.SPIN_TO_WIN] = "SPIN_TO_WIN"
____exports.NullItemID.BETHANY = 51
____exports.NullItemID[____exports.NullItemID.BETHANY] = "BETHANY"
____exports.NullItemID.JACOB = 52
____exports.NullItemID[____exports.NullItemID.JACOB] = "JACOB"
____exports.NullItemID.ESAU = 53
____exports.NullItemID[____exports.NullItemID.ESAU] = "ESAU"
____exports.NullItemID.BLOOD_OATH = 54
____exports.NullItemID[____exports.NullItemID.BLOOD_OATH] = "BLOOD_OATH"
____exports.NullItemID.INTRUDER = 55
____exports.NullItemID[____exports.NullItemID.INTRUDER] = "INTRUDER"
____exports.NullItemID.SOL = 56
____exports.NullItemID[____exports.NullItemID.SOL] = "SOL"
____exports.NullItemID.IT_HURTS = 57
____exports.NullItemID[____exports.NullItemID.IT_HURTS] = "IT_HURTS"
____exports.NullItemID.MARS = 58
____exports.NullItemID[____exports.NullItemID.MARS] = "MARS"
____exports.NullItemID.TOOTH_AND_NAIL = 59
____exports.NullItemID[____exports.NullItemID.TOOTH_AND_NAIL] = "TOOTH_AND_NAIL"
____exports.NullItemID.REVERSE_MAGICIAN = 60
____exports.NullItemID[____exports.NullItemID.REVERSE_MAGICIAN] = "REVERSE_MAGICIAN"
____exports.NullItemID.REVERSE_HIGH_PRIESTESS = 61
____exports.NullItemID[____exports.NullItemID.REVERSE_HIGH_PRIESTESS] = "REVERSE_HIGH_PRIESTESS"
____exports.NullItemID.REVERSE_EMPRESS = 62
____exports.NullItemID[____exports.NullItemID.REVERSE_EMPRESS] = "REVERSE_EMPRESS"
____exports.NullItemID.REVERSE_CHARIOT = 63
____exports.NullItemID[____exports.NullItemID.REVERSE_CHARIOT] = "REVERSE_CHARIOT"
____exports.NullItemID.REVERSE_STRENGTH = 64
____exports.NullItemID[____exports.NullItemID.REVERSE_STRENGTH] = "REVERSE_STRENGTH"
____exports.NullItemID.REVERSE_HANGED_MAN = 65
____exports.NullItemID[____exports.NullItemID.REVERSE_HANGED_MAN] = "REVERSE_HANGED_MAN"
____exports.NullItemID.REVERSE_SUN = 66
____exports.NullItemID[____exports.NullItemID.REVERSE_SUN] = "REVERSE_SUN"
____exports.NullItemID.REVERSE_DEVIL = 67
____exports.NullItemID[____exports.NullItemID.REVERSE_DEVIL] = "REVERSE_DEVIL"
____exports.NullItemID.REVERSE_CHARIOT_ALT = 68
____exports.NullItemID[____exports.NullItemID.REVERSE_CHARIOT_ALT] = "REVERSE_CHARIOT_ALT"
____exports.NullItemID.REVERSE_TEMPERANCE = 69
____exports.NullItemID[____exports.NullItemID.REVERSE_TEMPERANCE] = "REVERSE_TEMPERANCE"
____exports.NullItemID.REVERSE_STARS = 70
____exports.NullItemID[____exports.NullItemID.REVERSE_STARS] = "REVERSE_STARS"
____exports.NullItemID.WAVY_CAP_1 = 71
____exports.NullItemID[____exports.NullItemID.WAVY_CAP_1] = "WAVY_CAP_1"
____exports.NullItemID.WAVY_CAP_2 = 72
____exports.NullItemID[____exports.NullItemID.WAVY_CAP_2] = "WAVY_CAP_2"
____exports.NullItemID.WAVY_CAP_3 = 73
____exports.NullItemID[____exports.NullItemID.WAVY_CAP_3] = "WAVY_CAP_3"
____exports.NullItemID.LUNA = 74
____exports.NullItemID[____exports.NullItemID.LUNA] = "LUNA"
____exports.NullItemID.JUPITER_BODY = 75
____exports.NullItemID[____exports.NullItemID.JUPITER_BODY] = "JUPITER_BODY"
____exports.NullItemID.JUPITER_BODY_ANGEL = 76
____exports.NullItemID[____exports.NullItemID.JUPITER_BODY_ANGEL] = "JUPITER_BODY_ANGEL"
____exports.NullItemID.JUPITER_BODY_PONY = 77
____exports.NullItemID[____exports.NullItemID.JUPITER_BODY_PONY] = "JUPITER_BODY_PONY"
____exports.NullItemID.JUPITER_BODY_WHITE_PONY = 78
____exports.NullItemID[____exports.NullItemID.JUPITER_BODY_WHITE_PONY] = "JUPITER_BODY_WHITE_PONY"
____exports.NullItemID.ISAAC_B = 79
____exports.NullItemID[____exports.NullItemID.ISAAC_B] = "ISAAC_B"
____exports.NullItemID.MAGDALENE_B = 80
____exports.NullItemID[____exports.NullItemID.MAGDALENE_B] = "MAGDALENE_B"
____exports.NullItemID.CAIN_B = 81
____exports.NullItemID[____exports.NullItemID.CAIN_B] = "CAIN_B"
____exports.NullItemID.JUDAS_B = 82
____exports.NullItemID[____exports.NullItemID.JUDAS_B] = "JUDAS_B"
____exports.NullItemID.BLUE_BABY_B = 83
____exports.NullItemID[____exports.NullItemID.BLUE_BABY_B] = "BLUE_BABY_B"
____exports.NullItemID.EVE_B = 84
____exports.NullItemID[____exports.NullItemID.EVE_B] = "EVE_B"
____exports.NullItemID.SAMSON_B = 85
____exports.NullItemID[____exports.NullItemID.SAMSON_B] = "SAMSON_B"
____exports.NullItemID.AZAZEL_B = 86
____exports.NullItemID[____exports.NullItemID.AZAZEL_B] = "AZAZEL_B"
____exports.NullItemID.LAZARUS_B = 87
____exports.NullItemID[____exports.NullItemID.LAZARUS_B] = "LAZARUS_B"
____exports.NullItemID.EDEN_B = 88
____exports.NullItemID[____exports.NullItemID.EDEN_B] = "EDEN_B"
____exports.NullItemID.LOST_B = 89
____exports.NullItemID[____exports.NullItemID.LOST_B] = "LOST_B"
____exports.NullItemID.LILITH_B = 90
____exports.NullItemID[____exports.NullItemID.LILITH_B] = "LILITH_B"
____exports.NullItemID.KEEPER_B = 91
____exports.NullItemID[____exports.NullItemID.KEEPER_B] = "KEEPER_B"
____exports.NullItemID.APOLLYON_B = 92
____exports.NullItemID[____exports.NullItemID.APOLLYON_B] = "APOLLYON_B"
____exports.NullItemID.FORGOTTEN_B = 93
____exports.NullItemID[____exports.NullItemID.FORGOTTEN_B] = "FORGOTTEN_B"
____exports.NullItemID.BETHANY_B = 94
____exports.NullItemID[____exports.NullItemID.BETHANY_B] = "BETHANY_B"
____exports.NullItemID.JACOB_B = 95
____exports.NullItemID[____exports.NullItemID.JACOB_B] = "JACOB_B"
____exports.NullItemID.AZAZELS_RAGE_1 = 96
____exports.NullItemID[____exports.NullItemID.AZAZELS_RAGE_1] = "AZAZELS_RAGE_1"
____exports.NullItemID.AZAZELS_RAGE_2 = 97
____exports.NullItemID[____exports.NullItemID.AZAZELS_RAGE_2] = "AZAZELS_RAGE_2"
____exports.NullItemID.AZAZELS_RAGE_3 = 98
____exports.NullItemID[____exports.NullItemID.AZAZELS_RAGE_3] = "AZAZELS_RAGE_3"
____exports.NullItemID.AZAZELS_RAGE_4 = 99
____exports.NullItemID[____exports.NullItemID.AZAZELS_RAGE_4] = "AZAZELS_RAGE_4"
____exports.NullItemID.ESAU_JR = 100
____exports.NullItemID[____exports.NullItemID.ESAU_JR] = "ESAU_JR"
____exports.NullItemID.SPIRIT_SHACKLES_SOUL = 101
____exports.NullItemID[____exports.NullItemID.SPIRIT_SHACKLES_SOUL] = "SPIRIT_SHACKLES_SOUL"
____exports.NullItemID.SPIRIT_SHACKLES_DISABLED = 102
____exports.NullItemID[____exports.NullItemID.SPIRIT_SHACKLES_DISABLED] = "SPIRIT_SHACKLES_DISABLED"
____exports.NullItemID.BERSERK_SAMSON = 103
____exports.NullItemID[____exports.NullItemID.BERSERK_SAMSON] = "BERSERK_SAMSON"
____exports.NullItemID.LAZARUS_2_B = 104
____exports.NullItemID[____exports.NullItemID.LAZARUS_2_B] = "LAZARUS_2_B"
____exports.NullItemID.SOUL_B = 105
____exports.NullItemID[____exports.NullItemID.SOUL_B] = "SOUL_B"
____exports.NullItemID.FORGOTTEN_BOMB = 106
____exports.NullItemID[____exports.NullItemID.FORGOTTEN_BOMB] = "FORGOTTEN_BOMB"
____exports.NullItemID.EXTRA_BIG_FAN = 107
____exports.NullItemID[____exports.NullItemID.EXTRA_BIG_FAN] = "EXTRA_BIG_FAN"
____exports.NullItemID.JACOB_2_B = 108
____exports.NullItemID[____exports.NullItemID.JACOB_2_B] = "JACOB_2_B"
____exports.NullItemID.JACOBS_CURSE = 109
____exports.NullItemID[____exports.NullItemID.JACOBS_CURSE] = "JACOBS_CURSE"
____exports.NullItemID.BLOODY_BABYLON = 110
____exports.NullItemID[____exports.NullItemID.BLOODY_BABYLON] = "BLOODY_BABYLON"
____exports.NullItemID.DARK_ARTS = 111
____exports.NullItemID[____exports.NullItemID.DARK_ARTS] = "DARK_ARTS"
____exports.NullItemID.LOST_CURSE = 112
____exports.NullItemID[____exports.NullItemID.LOST_CURSE] = "LOST_CURSE"
____exports.NullItemID.LAZARUS_SOUL_REVIVE = 113
____exports.NullItemID[____exports.NullItemID.LAZARUS_SOUL_REVIVE] = "LAZARUS_SOUL_REVIVE"
____exports.NullItemID.SOUL_MAGDALENE = 114
____exports.NullItemID[____exports.NullItemID.SOUL_MAGDALENE] = "SOUL_MAGDALENE"
____exports.NullItemID.SOUL_BLUE_BABY = 115
____exports.NullItemID[____exports.NullItemID.SOUL_BLUE_BABY] = "SOUL_BLUE_BABY"
____exports.NullItemID.MIRROR_DEATH = 116
____exports.NullItemID[____exports.NullItemID.MIRROR_DEATH] = "MIRROR_DEATH"
____exports.NullItemID.HEMOPTYSIS = 117
____exports.NullItemID[____exports.NullItemID.HEMOPTYSIS] = "HEMOPTYSIS"
____exports.NullItemID.I_FOUND_HORSE_PILLS = 118
____exports.NullItemID[____exports.NullItemID.I_FOUND_HORSE_PILLS] = "I_FOUND_HORSE_PILLS"
____exports.NullItemID.HORSE_PUBERTY = 119
____exports.NullItemID[____exports.NullItemID.HORSE_PUBERTY] = "HORSE_PUBERTY"
____exports.NullItemID.SOUL_FORGOTTEN = 120
____exports.NullItemID[____exports.NullItemID.SOUL_FORGOTTEN] = "SOUL_FORGOTTEN"
____exports.NullItemID.SOUL_JACOB = 121
____exports.NullItemID[____exports.NullItemID.SOUL_JACOB] = "SOUL_JACOB"
____exports.NullItemID.BETHANY_B_BIRTHRIGHT = 122
____exports.NullItemID[____exports.NullItemID.BETHANY_B_BIRTHRIGHT] = "BETHANY_B_BIRTHRIGHT"
____exports.NullItemID.JUDAS_BIRTHRIGHT = 123
____exports.NullItemID[____exports.NullItemID.JUDAS_BIRTHRIGHT] = "JUDAS_BIRTHRIGHT"
____exports.NullItemID.JUDAS_BIRTHRIGHT_TIMED = 124
____exports.NullItemID[____exports.NullItemID.JUDAS_BIRTHRIGHT_TIMED] = "JUDAS_BIRTHRIGHT_TIMED"
____exports.NullItemID.DOUBLE_GUPPYS_EYE = 125
____exports.NullItemID[____exports.NullItemID.DOUBLE_GUPPYS_EYE] = "DOUBLE_GUPPYS_EYE"
____exports.NullItemID.DOUBLE_GLASS_EYE = 126
____exports.NullItemID[____exports.NullItemID.DOUBLE_GLASS_EYE] = "DOUBLE_GLASS_EYE"
____exports.NullItemID.HEMOPTYSIS_BOOST = 127
____exports.NullItemID[____exports.NullItemID.HEMOPTYSIS_BOOST] = "HEMOPTYSIS_BOOST"
____exports.NullItemID.SOUL_JUDAS = 128
____exports.NullItemID[____exports.NullItemID.SOUL_JUDAS] = "SOUL_JUDAS"
____exports.NullItemID.JUDAS_BIRTHRIGHT_STAGE = 129
____exports.NullItemID[____exports.NullItemID.JUDAS_BIRTHRIGHT_STAGE] = "JUDAS_BIRTHRIGHT_STAGE"
____exports.NullItemID.JUDAS_BIRTHRIGHT_PERMANENT = 130
____exports.NullItemID[____exports.NullItemID.JUDAS_BIRTHRIGHT_PERMANENT] = "JUDAS_BIRTHRIGHT_PERMANENT"
____exports.NullItemID.ESAU_JR_FAMILIAR = 131
____exports.NullItemID[____exports.NullItemID.ESAU_JR_FAMILIAR] = "ESAU_JR_FAMILIAR"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.NPCState"] = function(...) 
local ____exports = {}
____exports.NPCState = {}
____exports.NPCState.INIT = 0
____exports.NPCState[____exports.NPCState.INIT] = "INIT"
____exports.NPCState.APPEAR = 1
____exports.NPCState[____exports.NPCState.APPEAR] = "APPEAR"
____exports.NPCState.APPEAR_CUSTOM = 2
____exports.NPCState[____exports.NPCState.APPEAR_CUSTOM] = "APPEAR_CUSTOM"
____exports.NPCState.IDLE = 3
____exports.NPCState[____exports.NPCState.IDLE] = "IDLE"
____exports.NPCState.MOVE = 4
____exports.NPCState[____exports.NPCState.MOVE] = "MOVE"
____exports.NPCState.SUICIDE = 5
____exports.NPCState[____exports.NPCState.SUICIDE] = "SUICIDE"
____exports.NPCState.JUMP = 6
____exports.NPCState[____exports.NPCState.JUMP] = "JUMP"
____exports.NPCState.STOMP = 7
____exports.NPCState[____exports.NPCState.STOMP] = "STOMP"
____exports.NPCState.ATTACK = 8
____exports.NPCState[____exports.NPCState.ATTACK] = "ATTACK"
____exports.NPCState.ATTACK_2 = 9
____exports.NPCState[____exports.NPCState.ATTACK_2] = "ATTACK_2"
____exports.NPCState.ATTACK_3 = 10
____exports.NPCState[____exports.NPCState.ATTACK_3] = "ATTACK_3"
____exports.NPCState.ATTACK_4 = 11
____exports.NPCState[____exports.NPCState.ATTACK_4] = "ATTACK_4"
____exports.NPCState.ATTACK_5 = 12
____exports.NPCState[____exports.NPCState.ATTACK_5] = "ATTACK_5"
____exports.NPCState.SUMMON = 13
____exports.NPCState[____exports.NPCState.SUMMON] = "SUMMON"
____exports.NPCState.SUMMON_2 = 14
____exports.NPCState[____exports.NPCState.SUMMON_2] = "SUMMON_2"
____exports.NPCState.SUMMON_3 = 15
____exports.NPCState[____exports.NPCState.SUMMON_3] = "SUMMON_3"
____exports.NPCState.SPECIAL = 16
____exports.NPCState[____exports.NPCState.SPECIAL] = "SPECIAL"
____exports.NPCState.UNIQUE_DEATH = 17
____exports.NPCState[____exports.NPCState.UNIQUE_DEATH] = "UNIQUE_DEATH"
____exports.NPCState.DEATH = 18
____exports.NPCState[____exports.NPCState.DEATH] = "DEATH"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.NPCID"] = function(...) 
local ____exports = {}
--- EntityIDs which reference an NPC.
____exports.NPCID = {}
____exports.NPCID.FROWNING_GAPER = "10.0.0"
____exports.NPCID.GAPER = "10.1.0"
____exports.NPCID.FLAMING_GAPER = "10.2.0"
____exports.NPCID.ROTTEN_GAPER = "10.3.0"
____exports.NPCID.ROTTEN_GAPER_2 = "10.3.1"
____exports.NPCID.ROTTEN_GAPER_3 = "10.3.2"
____exports.NPCID.ROTTEN_GAPER_4 = "10.3.3"
____exports.NPCID.ROTTEN_GAPER_5 = "10.3.4"
____exports.NPCID.ROTTEN_GAPER_6 = "10.3.5"
____exports.NPCID.GUSHER = "11.0.0"
____exports.NPCID.PACER = "11.1.0"
____exports.NPCID.HORF = "12.0.0"
____exports.NPCID.FLY = "13.0.0"
____exports.NPCID.POOTER = "14.0.0"
____exports.NPCID.SUPER_POOTER = "14.1.0"
____exports.NPCID.TAINTED_POOTER = "14.2.0"
____exports.NPCID.CLOTTY = "15.0.0"
____exports.NPCID.CLOT = "15.1.0"
____exports.NPCID.I_BLOB = "15.2.0"
____exports.NPCID.GRILLED_CLOTTY = "15.3.0"
____exports.NPCID.MULLIGAN = "16.0.0"
____exports.NPCID.MULLIGOON = "16.1.0"
____exports.NPCID.MULLIBOOM = "16.2.0"
____exports.NPCID.SHOPKEEPER = "17.0.0"
____exports.NPCID.SECRET_ROOM_KEEPER = "17.1.0"
____exports.NPCID.ERROR_ROOM_KEEPER = "17.2.0"
____exports.NPCID.SPECIAL_SHOPKEEPER = "17.3.0"
____exports.NPCID.SPECIAL_SECRET_ROOM_KEEPER = "17.4.0"
____exports.NPCID.ATTACK_FLY = "18.0.0"
____exports.NPCID.LARRY_JR = "19.0.0"
____exports.NPCID.LARRY_JR_GREEN = "19.0.1"
____exports.NPCID.LARRY_JR_BLUE = "19.0.2"
____exports.NPCID.THE_HOLLOW = "19.1.0"
____exports.NPCID.THE_HOLLOW_GREEN = "19.1.1"
____exports.NPCID.THE_HOLLOW_BLACK = "19.1.2"
____exports.NPCID.THE_HOLLOW_YELLOW = "19.1.3"
____exports.NPCID.TUFF_TWIN = "19.2.0"
____exports.NPCID.THE_SHELL = "19.3.0"
____exports.NPCID.MONSTRO = "20.0.0"
____exports.NPCID.MONSTRO_RED = "20.0.1"
____exports.NPCID.MONSTRO_GREY = "20.0.2"
____exports.NPCID.MAGGOT = "21.0.0"
____exports.NPCID.HIVE = "22.0.0"
____exports.NPCID.DROWNED_HIVE = "22.1.0"
____exports.NPCID.HOLY_MULLIGAN = "22.2.0"
____exports.NPCID.TAINTED_MULLIGAN = "22.3.0"
____exports.NPCID.CHARGER = "23.0.0"
____exports.NPCID.MY_SHADOW = "23.0.1"
____exports.NPCID.DROWNED_CHARGER = "23.1.0"
____exports.NPCID.DANK_CHARGER = "23.2.0"
____exports.NPCID.CARRION_PRINCESS = "23.3.0"
____exports.NPCID.GLOBIN = "24.0.0"
____exports.NPCID.GAZING_GLOBIN = "24.1.0"
____exports.NPCID.DANK_GLOBIN = "24.2.0"
____exports.NPCID.CURSED_GLOBIN = "24.3.0"
____exports.NPCID.BOOM_FLY = "25.0.0"
____exports.NPCID.RED_BOOM_FLY = "25.1.0"
____exports.NPCID.DROWNED_BOOM_FLY = "25.2.0"
____exports.NPCID.DRAGON_FLY = "25.3.0"
____exports.NPCID.DRAGON_FLY_X = "25.3.1"
____exports.NPCID.BONE_FLY = "25.4.0"
____exports.NPCID.SICK_BOOM_FLY = "25.5.0"
____exports.NPCID.TAINTED_BOOM_FLY = "25.6.0"
____exports.NPCID.MAW = "26.0.0"
____exports.NPCID.RED_MAW = "26.1.0"
____exports.NPCID.PSYCHIC_MAW = "26.2.0"
____exports.NPCID.HOST = "27.0.0"
____exports.NPCID.RED_HOST = "27.1.0"
____exports.NPCID.HARD_HOST = "27.3.0"
____exports.NPCID.CHUB = "28.0.0"
____exports.NPCID.CHUB_BLUE = "28.0.1"
____exports.NPCID.CHUB_ORANGE = "28.0.2"
____exports.NPCID.CHAD = "28.1.0"
____exports.NPCID.THE_CARRION_QUEEN = "28.2.0"
____exports.NPCID.THE_CARRION_QUEEN_PINK = "28.2.1"
____exports.NPCID.HOPPER = "29.0.0"
____exports.NPCID.TRITE = "29.1.0"
____exports.NPCID.EGGY = "29.2.0"
____exports.NPCID.TAINTED_HOPPER = "29.3.0"
____exports.NPCID.BOIL = "30.0.0"
____exports.NPCID.BOIL_BLUE = "30.0.1"
____exports.NPCID.GUT = "30.1.0"
____exports.NPCID.SACK = "30.2.0"
____exports.NPCID.SPITTY = "31.0.0"
____exports.NPCID.TAINTED_SPITTY = "31.1.0"
____exports.NPCID.BRAIN = "32.0.0"
____exports.NPCID.FIRE_PLACE = "33.0.0"
____exports.NPCID.RED_FIRE_PLACE = "33.1.0"
____exports.NPCID.BLUE_FIRE_PLACE = "33.2.0"
____exports.NPCID.PURPLE_FIRE_PLACE = "33.3.0"
____exports.NPCID.WHITE_FIRE_PLACE = "33.4.0"
____exports.NPCID.MOVEABLE_FIREPLACE = "33.10.0"
____exports.NPCID.COAL = "33.11.0"
____exports.NPCID.COAL_2 = "33.11.1"
____exports.NPCID.COAL_3 = "33.11.2"
____exports.NPCID.COAL_4 = "33.11.3"
____exports.NPCID.MOVEABLE_BLUE_FIREPLACE = "33.12.0"
____exports.NPCID.MOVEABLE_PURPLE_FIREPLACE = "33.13.0"
____exports.NPCID.LEAPER = "34.0.0"
____exports.NPCID.STICKY_LEAPER = "34.1.0"
____exports.NPCID.MR_MAW = "35.0.0"
____exports.NPCID.MR_MAW_HEAD = "35.1.0"
____exports.NPCID.MR_RED_MAW = "35.2.0"
____exports.NPCID.MR_RED_MAW_HEAD = "35.3.0"
____exports.NPCID.MR_MAW_NECK = "35.10.0"
____exports.NPCID.GURDY = "36.0.0"
____exports.NPCID.GURDY_GREEN = "36.0.1"
____exports.NPCID.BABY = "38.0.0"
____exports.NPCID.ANGELIC_BABY = "38.1.0"
____exports.NPCID.ANGELIC_BABY_SMALL = "38.1.1"
____exports.NPCID.ULTRA_PRIDE_BABY = "38.2.0"
____exports.NPCID.WRINKLY_BABY = "38.3.0"
____exports.NPCID.VIS = "39.0.0"
____exports.NPCID.DOUBLE_VIS = "39.1.0"
____exports.NPCID.CHUBBER = "39.2.0"
____exports.NPCID.SCARRED_DOUBLE_VIS = "39.3.0"
____exports.NPCID.CHUBBER_PROJECTILE = "39.22.0"
____exports.NPCID.GUTS = "40.0.0"
____exports.NPCID.SCARRED_GUTS = "40.1.0"
____exports.NPCID.SLOG = "40.2.0"
____exports.NPCID.KNIGHT = "41.0.0"
____exports.NPCID.SELFLESS_KNIGHT = "41.1.0"
____exports.NPCID.LOOSE_KNIGHT = "41.2.0"
____exports.NPCID.BRAINLESS_KNIGHT = "41.3.0"
____exports.NPCID.BLACK_KNIGHT = "41.4.0"
____exports.NPCID.STONE_GRIMACE = "42.0.0"
____exports.NPCID.VOMIT_GRIMACE = "42.1.0"
____exports.NPCID.TRIPLE_GRIMACE = "42.2.0"
____exports.NPCID.MONSTRO_II = "43.0.0"
____exports.NPCID.MONSTRO_II_RED = "43.0.1"
____exports.NPCID.GISH = "43.1.0"
____exports.NPCID.POKY = "44.0.0"
____exports.NPCID.SLIDE = "44.1.0"
____exports.NPCID.MOM = "45.0.0"
____exports.NPCID.MOM_BLUE = "45.0.1"
____exports.NPCID.MOM_RED = "45.0.2"
____exports.NPCID.MOM_STOMP = "45.10.0"
____exports.NPCID.MOM_STOMP_BLUE = "45.10.1"
____exports.NPCID.MOM_STOMP_RED = "45.10.2"
____exports.NPCID.SLOTH = "46.0.0"
____exports.NPCID.SUPER_SLOTH = "46.1.0"
____exports.NPCID.ULTRA_PRIDE = "46.2.0"
____exports.NPCID.LUST = "47.0.0"
____exports.NPCID.SUPER_LUST = "47.1.0"
____exports.NPCID.WRATH = "48.0.0"
____exports.NPCID.SUPER_WRATH = "48.1.0"
____exports.NPCID.GLUTTONY = "49.0.0"
____exports.NPCID.SUPER_GLUTTONY = "49.1.0"
____exports.NPCID.GREED = "50.0.0"
____exports.NPCID.SUPER_GREED = "50.1.0"
____exports.NPCID.ENVY = "51.0.0"
____exports.NPCID.SUPER_ENVY = "51.1.0"
____exports.NPCID.ENVY_BIG = "51.10.0"
____exports.NPCID.SUPER_ENVY_BIG = "51.11.0"
____exports.NPCID.ENVY_MEDIUM = "51.20.0"
____exports.NPCID.SUPER_ENVY_MEDIUM = "51.21.0"
____exports.NPCID.ENVY_SMALL = "51.30.0"
____exports.NPCID.SUPER_ENVY_SMALL = "51.31.0"
____exports.NPCID.PRIDE = "52.0.0"
____exports.NPCID.SUPER_PRIDE = "52.1.0"
____exports.NPCID.DOPLE = "53.0.0"
____exports.NPCID.EVIL_TWIN = "53.1.0"
____exports.NPCID.FLAMING_HOPPER = "54.0.0"
____exports.NPCID.LEECH = "55.0.0"
____exports.NPCID.KAMIKAZE_LEECH = "55.1.0"
____exports.NPCID.HOLY_LEECH = "55.2.0"
____exports.NPCID.LUMP = "56.0.0"
____exports.NPCID.MEMBRAIN = "57.0.0"
____exports.NPCID.MAMA_GUTS = "57.1.0"
____exports.NPCID.DEAD_MEAT = "57.2.0"
____exports.NPCID.PARA_BITE = "58.0.0"
____exports.NPCID.SCARRED_PARA_BITE = "58.1.0"
____exports.NPCID.FRED = "59.0.0"
____exports.NPCID.EYE = "60.0.0"
____exports.NPCID.BLOODSHOT_EYE = "60.1.0"
____exports.NPCID.HOLY_EYE = "60.2.0"
____exports.NPCID.SUCKER = "61.0.0"
____exports.NPCID.SPIT = "61.1.0"
____exports.NPCID.SOUL_SUCKER = "61.2.0"
____exports.NPCID.INK = "61.3.0"
____exports.NPCID.MAMA_FLY = "61.4.0"
____exports.NPCID.BULB = "61.5.0"
____exports.NPCID.BLOODFLY = "61.6.0"
____exports.NPCID.TAINTED_SUCKER = "61.7.0"
____exports.NPCID.PIN = "62.0.0"
____exports.NPCID.PIN_GREY = "62.0.1"
____exports.NPCID.SCOLEX = "62.1.0"
____exports.NPCID.THE_FRAIL = "62.2.0"
____exports.NPCID.THE_FRAIL_BLACK = "62.2.1"
____exports.NPCID.WORMWOOD = "62.3.0"
____exports.NPCID.FAMINE = "63.0.0"
____exports.NPCID.FAMINE_BLUE = "63.0.1"
____exports.NPCID.PESTILENCE = "64.0.0"
____exports.NPCID.PESTILENCE_GREY = "64.0.1"
____exports.NPCID.WAR = "65.0.0"
____exports.NPCID.WAR_GREY = "65.0.1"
____exports.NPCID.CONQUEST = "65.1.0"
____exports.NPCID.WAR_WITHOUT_HORSE = "65.10.0"
____exports.NPCID.WAR_WITHOUT_HORSE_GREY = "65.10.1"
____exports.NPCID.DEATH = "66.0.0"
____exports.NPCID.DEATH_BLACK = "66.0.1"
____exports.NPCID.DEATH_SCYTHE = "66.10.0"
____exports.NPCID.DEATH_SCYTHE_BLACK = "66.10.1"
____exports.NPCID.DEATH_HORSE = "66.20.0"
____exports.NPCID.DEATH_HORSE_BLACK = "66.20.1"
____exports.NPCID.DEATH_WITHOUT_HORSE = "66.30.0"
____exports.NPCID.DEATH_WITHOUT_HORSE_BLACK = "66.30.1"
____exports.NPCID.THE_DUKE_OF_FLIES = "67.0.0"
____exports.NPCID.THE_DUKE_OF_FLIES_GREEN = "67.0.1"
____exports.NPCID.THE_DUKE_OF_FLIES_ORANGE = "67.0.2"
____exports.NPCID.THE_HUSK = "67.1.0"
____exports.NPCID.THE_HUSK_BLACK = "67.1.1"
____exports.NPCID.THE_HUSK_RED = "67.1.2"
____exports.NPCID.PEEP = "68.0.0"
____exports.NPCID.PEEP_YELLOW = "68.0.1"
____exports.NPCID.PEEP_CYAN = "68.0.2"
____exports.NPCID.THE_BLOAT = "68.1.0"
____exports.NPCID.THE_BLOAT_GREEN = "68.1.1"
____exports.NPCID.PEEP_EYE = "68.10.0"
____exports.NPCID.PEEP_EYE_YELLOW = "68.10.1"
____exports.NPCID.PEEP_EYE_CYAN = "68.10.2"
____exports.NPCID.BLOAT_EYE = "68.11.0"
____exports.NPCID.BLOAT_EYE_GREEN = "68.11.1"
____exports.NPCID.LOKI = "69.0.0"
____exports.NPCID.LOKII = "69.1.0"
____exports.NPCID.FISTULA = "71.0.0"
____exports.NPCID.FISTULA_GREY = "71.0.1"
____exports.NPCID.TERATOMA = "71.1.0"
____exports.NPCID.FISTULA_MEDIUM = "72.0.0"
____exports.NPCID.FISTULA_MEDIUM_GREY = "72.0.1"
____exports.NPCID.TERATOMA_MEDIUM = "72.1.0"
____exports.NPCID.FISTULA_SMALL = "73.0.0"
____exports.NPCID.FISTULA_SMALL_GREY = "73.0.1"
____exports.NPCID.TERATOMA_SMALL = "73.1.0"
____exports.NPCID.BLASTOCYST = "74.0.0"
____exports.NPCID.BLASTOCYST_MEDIUM = "75.0.0"
____exports.NPCID.BLASTOCYST_SMALL = "76.0.0"
____exports.NPCID.EMBRYO = "77.0.0"
____exports.NPCID.MOMS_HEART = "78.0.0"
____exports.NPCID.IT_LIVES = "78.1.0"
____exports.NPCID.MOMS_GUTS = "78.10.0"
____exports.NPCID.GEMINI = "79.0.0"
____exports.NPCID.GEMINI_GREEN = "79.0.1"
____exports.NPCID.GEMINI_BLUE = "79.0.2"
____exports.NPCID.STEVEN = "79.1.0"
____exports.NPCID.THE_BLIGHTED_OVUM = "79.2.0"
____exports.NPCID.GEMINI_BABY = "79.10.0"
____exports.NPCID.GEMINI_BABY_GREEN = "79.10.1"
____exports.NPCID.GEMINI_BABY_BLUE = "79.10.2"
____exports.NPCID.STEVEN_BABY = "79.11.0"
____exports.NPCID.THE_BLIGHTED_OVUM_BABY = "79.12.0"
____exports.NPCID.UMBILICAL_CORD = "79.20.0"
____exports.NPCID.UMBILICAL_CORD_GREEN = "79.20.1"
____exports.NPCID.UMBILICAL_CORD_BLUE = "79.20.2"
____exports.NPCID.MOTER = "80.0.0"
____exports.NPCID.THE_FALLEN = "81.0.0"
____exports.NPCID.KRAMPUS = "81.1.0"
____exports.NPCID.HEADLESS_HORSEMAN = "82.0.0"
____exports.NPCID.HEADLESS_HORSEMAN_HEAD = "83.0.0"
____exports.NPCID.SATAN = "84.0.0"
____exports.NPCID.SATAN_STOMP = "84.10.0"
____exports.NPCID.SPIDER = "85.0.0"
____exports.NPCID.KEEPER = "86.0.0"
____exports.NPCID.GURGLE = "87.0.0"
____exports.NPCID.CRACKLE = "87.1.0"
____exports.NPCID.WALKING_BOIL = "88.0.0"
____exports.NPCID.WALKING_GUT = "88.1.0"
____exports.NPCID.WALKING_SACK = "88.2.0"
____exports.NPCID.BUTTLICKER = "89.0.0"
____exports.NPCID.HANGER = "90.0.0"
____exports.NPCID.SWARMER = "91.0.0"
____exports.NPCID.HEART = "92.0.0"
____exports.NPCID.HALF_HEART = "92.1.0"
____exports.NPCID.HALF_HEART_2 = "92.1.1"
____exports.NPCID.MASK = "93.0.0"
____exports.NPCID.MASK_II = "93.1.0"
____exports.NPCID.BIG_SPIDER = "94.0.0"
____exports.NPCID.ETERNAL_FLY = "96.0.0"
____exports.NPCID.MASK_OF_INFAMY = "97.0.0"
____exports.NPCID.MASK_OF_INFAMY_BLACK = "97.0.1"
____exports.NPCID.HEART_OF_INFAMY = "98.0.0"
____exports.NPCID.HEART_OF_INFAMY_BLACK = "98.0.1"
____exports.NPCID.GURDY_JR = "99.0.0"
____exports.NPCID.GURDY_JR_BLUE = "99.0.1"
____exports.NPCID.GURDY_JR_YELLOW = "99.0.2"
____exports.NPCID.WIDOW = "100.0.0"
____exports.NPCID.WIDOW_BLACK = "100.0.1"
____exports.NPCID.WIDOW_PINK = "100.0.2"
____exports.NPCID.THE_WRETCHED = "100.1.0"
____exports.NPCID.DADDY_LONG_LEGS = "101.0.0"
____exports.NPCID.TRIACHNID = "101.1.0"
____exports.NPCID.ISAAC = "102.0.0"
____exports.NPCID.BLUE_BABY = "102.1.0"
____exports.NPCID.BLUE_BABY_HUSH = "102.2.0"
____exports.NPCID.STONE_EYE = "201.0.0"
____exports.NPCID.CONSTANT_STONE_SHOOTER_LEFT = "202.0.0"
____exports.NPCID.CONSTANT_STONE_SHOOTER_UP = "202.0.1"
____exports.NPCID.CONSTANT_STONE_SHOOTER_RIGHT = "202.0.2"
____exports.NPCID.CONSTANT_STONE_SHOOTER_DOWN = "202.0.3"
____exports.NPCID.CROSS_STONE_SHOOTER = "202.10.0"
____exports.NPCID.CROSS_STONE_SHOOTER_2 = "202.10.1"
____exports.NPCID.CROSS_STONE_SHOOTER_ALWAYS_ON = "202.11.0"
____exports.NPCID.CROSS_STONE_SHOOTER_ALWAYS_ON_2 = "202.11.1"
____exports.NPCID.BRIMSTONE_HEAD = "203.0.0"
____exports.NPCID.MOBILE_HOST = "204.0.0"
____exports.NPCID.NEST = "205.0.0"
____exports.NPCID.BABY_LONG_LEGS = "206.0.0"
____exports.NPCID.SMALL_BABY_LONG_LEGS = "206.1.0"
____exports.NPCID.CRAZY_LONG_LEGS = "207.0.0"
____exports.NPCID.SMALL_CRAZY_LONG_LEGS = "207.1.0"
____exports.NPCID.FATTY = "208.0.0"
____exports.NPCID.PALE_FATTY = "208.1.0"
____exports.NPCID.FLAMING_FATTY = "208.2.0"
____exports.NPCID.FAT_SACK = "209.0.0"
____exports.NPCID.BLUBBER = "210.0.0"
____exports.NPCID.HALF_SACK = "211.0.0"
____exports.NPCID.DEATHS_HEAD = "212.0.0"
____exports.NPCID.DANK_DEATHS_HEAD = "212.1.0"
____exports.NPCID.CURSED_DEATHS_HEAD = "212.2.0"
____exports.NPCID.BRIMSTONE_DEATHS_HEAD = "212.3.0"
____exports.NPCID.REDSKULL = "212.4.0"
____exports.NPCID.MOMS_HAND = "213.0.0"
____exports.NPCID.LEVEL_2_FLY = "214.0.0"
____exports.NPCID.LEVEL_2_SPIDER = "215.0.0"
____exports.NPCID.SWINGER = "216.0.0"
____exports.NPCID.SWINGER_HEAD = "216.1.0"
____exports.NPCID.SWINGER_NECK = "216.10.0"
____exports.NPCID.DIP = "217.0.0"
____exports.NPCID.CORN = "217.1.0"
____exports.NPCID.BROWNIE_CORN = "217.2.0"
____exports.NPCID.BIG_CORN = "217.3.0"
____exports.NPCID.WALL_HUGGER = "218.0.0"
____exports.NPCID.WIZOOB = "219.0.0"
____exports.NPCID.SQUIRT = "220.0.0"
____exports.NPCID.DANK_SQUIRT = "220.1.0"
____exports.NPCID.COD_WORM = "221.0.0"
____exports.NPCID.RING_FLY = "222.0.0"
____exports.NPCID.DINGA = "223.0.0"
____exports.NPCID.OOB = "224.0.0"
____exports.NPCID.BLACK_MAW = "225.0.0"
____exports.NPCID.SKINNY = "226.0.0"
____exports.NPCID.ROTTY = "226.1.0"
____exports.NPCID.CRISPY = "226.2.0"
____exports.NPCID.BONY = "227.0.0"
____exports.NPCID.HOLY_BONY = "227.1.0"
____exports.NPCID.HOMUNCULUS = "228.0.0"
____exports.NPCID.HOMUNCULUS_CORD = "228.10.0"
____exports.NPCID.TUMOR = "229.0.0"
____exports.NPCID.PLANETOID = "229.1.0"
____exports.NPCID.CAMILLO_JR = "230.0.0"
____exports.NPCID.NERVE_ENDING = "231.0.0"
____exports.NPCID.NERVE_ENDING_2 = "231.1.0"
____exports.NPCID.ONE_TOOTH = "234.0.0"
____exports.NPCID.GAPING_MAW = "235.0.0"
____exports.NPCID.BROKEN_GAPING_MAW = "236.0.0"
____exports.NPCID.GURGLING = "237.0.0"
____exports.NPCID.GURGLING_BOSS = "237.1.0"
____exports.NPCID.GURGLING_BOSS_YELLOW = "237.1.1"
____exports.NPCID.GURGLING_BOSS_BLACK = "237.1.2"
____exports.NPCID.TURDLING = "237.2.0"
____exports.NPCID.SPLASHER = "238.0.0"
____exports.NPCID.GRUB = "239.0.0"
____exports.NPCID.CORPSE_EATER = "239.100.0"
____exports.NPCID.CARRION_RIDER = "239.101.0"
____exports.NPCID.WALL_CREEP = "240.0.0"
____exports.NPCID.SOY_CREEP = "240.1.0"
____exports.NPCID.RAG_CREEP = "240.2.0"
____exports.NPCID.TAINTED_SOY_CREEP = "240.3.0"
____exports.NPCID.RAGE_CREEP = "241.0.0"
____exports.NPCID.SPLIT_RAGE_CREEP = "241.1.0"
____exports.NPCID.BLIND_CREEP = "242.0.0"
____exports.NPCID.CONJOINED_SPITTY = "243.0.0"
____exports.NPCID.ROUND_WORM = "244.0.0"
____exports.NPCID.TUBE_WORM = "244.1.0"
____exports.NPCID.TAINTED_ROUND_WORM = "244.2.0"
____exports.NPCID.TAINTED_ROUND_WORM_BUTT = "244.2.1"
____exports.NPCID.TAINTED_TUBE_WORM = "244.3.0"
____exports.NPCID.POOP = "245.0.0"
____exports.NPCID.RAGLING = "246.0.0"
____exports.NPCID.RAG_MANS_RAGLING = "246.1.0"
____exports.NPCID.RAG_MANS_RAGLING_RED = "246.1.1"
____exports.NPCID.RAG_MANS_RAGLING_BLACK = "246.1.2"
____exports.NPCID.FLESH_MOBILE_HOST = "247.0.0"
____exports.NPCID.PSYCHIC_HORF = "248.0.0"
____exports.NPCID.FULL_FLY = "249.0.0"
____exports.NPCID.TICKING_SPIDER = "250.0.0"
____exports.NPCID.BEGOTTEN = "251.0.0"
____exports.NPCID.BEGOTTEN_CHAIN = "251.10.0"
____exports.NPCID.NULLS = "252.0.0"
____exports.NPCID.PSY_TUMOR = "253.0.0"
____exports.NPCID.FLOATING_KNIGHT = "254.0.0"
____exports.NPCID.NIGHT_CRAWLER = "255.0.0"
____exports.NPCID.DART_FLY = "256.0.0"
____exports.NPCID.CONJOINED_FATTY = "257.0.0"
____exports.NPCID.BLUE_CONJOINED_FATTY = "257.1.0"
____exports.NPCID.FAT_BAT = "258.0.0"
____exports.NPCID.IMP = "259.0.0"
____exports.NPCID.HAUNT = "260.0.0"
____exports.NPCID.HAUNT_BLACK = "260.0.1"
____exports.NPCID.HAUNT_PINK = "260.0.2"
____exports.NPCID.LIL_HAUNT = "260.10.0"
____exports.NPCID.DINGLE = "261.0.0"
____exports.NPCID.DINGLE_RED = "261.0.1"
____exports.NPCID.DINGLE_BLACK = "261.0.2"
____exports.NPCID.DANGLE = "261.1.0"
____exports.NPCID.MEGA_MAW = "262.0.0"
____exports.NPCID.MEGA_MAW_RED = "262.0.1"
____exports.NPCID.MEGA_MAW_BLACK = "262.0.2"
____exports.NPCID.THE_GATE = "263.0.0"
____exports.NPCID.THE_GATE_RED = "263.0.1"
____exports.NPCID.THE_GATE_BLACK = "263.0.2"
____exports.NPCID.MEGA_FATTY = "264.0.0"
____exports.NPCID.MEGA_FATTY_RED = "264.0.1"
____exports.NPCID.MEGA_FATTY_BROWN = "264.0.2"
____exports.NPCID.THE_CAGE = "265.0.0"
____exports.NPCID.THE_CAGE_GREEN = "265.0.1"
____exports.NPCID.THE_CAGE_PINK = "265.0.2"
____exports.NPCID.MAMA_GURDY = "266.0.0"
____exports.NPCID.MAMA_GURDY_LEFT_HAND = "266.1.0"
____exports.NPCID.MAMA_GURDY_RIGHT_HAND = "266.2.0"
____exports.NPCID.DARK_ONE = "267.0.0"
____exports.NPCID.THE_ADVERSARY = "268.0.0"
____exports.NPCID.POLYCEPHALUS = "269.0.0"
____exports.NPCID.POLYCEPHALUS_RED = "269.0.1"
____exports.NPCID.POLYCEPHALUS_PINK = "269.0.2"
____exports.NPCID.THE_PILE = "269.1.0"
____exports.NPCID.MR_FRED = "270.0.0"
____exports.NPCID.URIEL = "271.0.0"
____exports.NPCID.FALLEN_URIEL = "271.1.0"
____exports.NPCID.GABRIEL = "272.0.0"
____exports.NPCID.FALLEN_GABRIEL = "272.1.0"
____exports.NPCID.THE_LAMB = "273.0.0"
____exports.NPCID.LAMB_BODY = "273.10.0"
____exports.NPCID.MEGA_SATAN = "274.0.0"
____exports.NPCID.MEGA_SATANS_RIGHT_HAND = "274.1.0"
____exports.NPCID.MEGA_SATANS_LEFT_HAND = "274.2.0"
____exports.NPCID.MEGA_SATAN_2 = "275.0.0"
____exports.NPCID.MEGA_SATAN_2_RIGHT_HAND = "275.1.0"
____exports.NPCID.MEGA_SATAN_2_LEFT_HAND = "275.2.0"
____exports.NPCID.ROUNDY = "276.0.0"
____exports.NPCID.BLACK_BONY = "277.0.0"
____exports.NPCID.BLACK_GLOBIN = "278.0.0"
____exports.NPCID.BLACK_GLOBINS_HEAD = "279.0.0"
____exports.NPCID.BLACK_GLOBINS_BODY = "280.0.0"
____exports.NPCID.SWARM = "281.0.0"
____exports.NPCID.MEGA_CLOTTY = "282.0.0"
____exports.NPCID.BONE_KNIGHT = "283.0.0"
____exports.NPCID.CYCLOPIA = "284.0.0"
____exports.NPCID.RED_GHOST = "285.0.0"
____exports.NPCID.FLESH_DEATHS_HEAD = "286.0.0"
____exports.NPCID.MOMS_DEAD_HAND = "287.0.0"
____exports.NPCID.DUKIE = "288.0.0"
____exports.NPCID.ULCER = "289.0.0"
____exports.NPCID.MEATBALL = "290.0.0"
____exports.NPCID.PITFALL = "291.0.0"
____exports.NPCID.SUCTION_PITFALL = "291.1.0"
____exports.NPCID.TELEPORT_PITFALL = "291.2.0"
____exports.NPCID.MOVABLE_TNT = "292.0.0"
____exports.NPCID.MOVABLE_TNT_MINE_CRAFTER = "292.1.0"
____exports.NPCID.ULTRA_GREED_COIN_SPINNER = "293.0.0"
____exports.NPCID.ULTRA_GREED_COIN_KEY = "293.1.0"
____exports.NPCID.ULTRA_GREED_COIN_BOMB = "293.2.0"
____exports.NPCID.ULTRA_GREED_COIN_HEART = "293.3.0"
____exports.NPCID.ULTRA_GREED_DOOR = "294.0.0"
____exports.NPCID.CORN_MINE = "295.0.0"
____exports.NPCID.CORN_MINE_BLACK = "295.0.1"
____exports.NPCID.HUSH_FLY = "296.0.0"
____exports.NPCID.BLUE_GAPER = "297.0.0"
____exports.NPCID.BLUE_BOIL = "298.0.0"
____exports.NPCID.GREED_GAPER = "299.0.0"
____exports.NPCID.MUSHROOM = "300.0.0"
____exports.NPCID.POISON_MIND = "301.0.0"
____exports.NPCID.STONEY = "302.0.0"
____exports.NPCID.CROSS_STONEY = "302.10.0"
____exports.NPCID.BLISTER = "303.0.0"
____exports.NPCID.THE_THING = "304.0.0"
____exports.NPCID.MINISTRO = "305.0.0"
____exports.NPCID.PORTAL = "306.0.0"
____exports.NPCID.LIL_PORTAL = "306.1.0"
____exports.NPCID.TAR_BOY = "307.0.0"
____exports.NPCID.TAR_BOY_MOUTH = "307.0.1"
____exports.NPCID.FISTULOID = "308.0.0"
____exports.NPCID.GUSH = "309.0.0"
____exports.NPCID.LEPER = "310.0.0"
____exports.NPCID.LEPER_STAGE_2 = "310.0.1"
____exports.NPCID.LEPER_STAGE_3 = "310.0.2"
____exports.NPCID.LEPER_STAGE_4 = "310.0.3"
____exports.NPCID.LEPER_FLESH = "310.1.0"
____exports.NPCID.MR_MINE = "311.0.0"
____exports.NPCID.MR_MINE_NECK = "311.10.0"
____exports.NPCID.THE_STAIN = "401.0.0"
____exports.NPCID.THE_STAIN_GREY = "401.0.1"
____exports.NPCID.BROWNIE = "402.0.0"
____exports.NPCID.BROWNIE_BLACK = "402.0.1"
____exports.NPCID.THE_FORSAKEN = "403.0.0"
____exports.NPCID.THE_FORSAKEN_BLACK = "403.0.1"
____exports.NPCID.LITTLE_HORN = "404.0.0"
____exports.NPCID.LITTLE_HORN_ORANGE = "404.0.1"
____exports.NPCID.LITTLE_HORN_BLACK = "404.0.2"
____exports.NPCID.DARK_BALL = "404.1.0"
____exports.NPCID.DARK_BALL_ORANGE = "404.1.1"
____exports.NPCID.DARK_BALL_BLACK = "404.1.2"
____exports.NPCID.RAG_MAN = "405.0.0"
____exports.NPCID.RAG_MAN_RED = "405.0.1"
____exports.NPCID.RAG_MAN_BLACK = "405.0.2"
____exports.NPCID.RAG_MANS_HEAD = "405.1.0"
____exports.NPCID.RAG_MANS_HEAD_RED = "405.1.1"
____exports.NPCID.RAG_MANS_HEAD_BLACK = "405.1.2"
____exports.NPCID.ULTRA_GREED = "406.0.0"
____exports.NPCID.ULTRA_GREEDIER = "406.1.0"
____exports.NPCID.HUSH = "407.0.0"
____exports.NPCID.HUSH_SKINLESS = "408.0.0"
____exports.NPCID.RAG_MEGA = "409.0.0"
____exports.NPCID.PURPLE_BALL = "409.1.0"
____exports.NPCID.RAG_MEGA_REBIRTH_PILLAR = "409.2.0"
____exports.NPCID.SISTERS_VIS = "410.0.0"
____exports.NPCID.BIG_HORN = "411.0.0"
____exports.NPCID.SMALL_HOLE = "411.1.0"
____exports.NPCID.BIG_HOLE = "411.2.0"
____exports.NPCID.DELIRIUM = "412.0.0"
____exports.NPCID.THE_MATRIARCH = "413.0.0"
____exports.NPCID.BLOOD_PUPPY_SMALL = "802.0.0"
____exports.NPCID.BLOOD_PUPPY_LARGE = "802.1.0"
____exports.NPCID.BLIND_BAT = "803.0.0"
____exports.NPCID.QUAKE_GRIMACE_LEFT = "804.0.0"
____exports.NPCID.QUAKE_GRIMACE_UP = "804.0.1"
____exports.NPCID.QUAKE_GRIMACE_RIGHT = "804.0.2"
____exports.NPCID.QUAKE_GRIMACE_DOWN = "804.0.3"
____exports.NPCID.BISHOP = "805.0.0"
____exports.NPCID.BUBBLES = "806.0.0"
____exports.NPCID.WRAITH = "807.0.0"
____exports.NPCID.WILLO = "808.0.0"
____exports.NPCID.BOMB_GRIMACE = "809.0.0"
____exports.NPCID.SMALL_LEECH = "810.0.0"
____exports.NPCID.DEEP_GAPER = "811.0.0"
____exports.NPCID.DEEP_GAPER_2 = "811.0.1"
____exports.NPCID.DEEP_GAPER_3 = "811.0.2"
____exports.NPCID.DEEP_GAPER_4 = "811.0.3"
____exports.NPCID.DEEP_GAPER_5 = "811.0.4"
____exports.NPCID.DEEP_GAPER_6 = "811.0.5"
____exports.NPCID.DEEP_GAPER_7 = "811.0.6"
____exports.NPCID.SUB_HORF = "812.0.0"
____exports.NPCID.TAINTED_SUB_HORF = "812.1.0"
____exports.NPCID.BLURB = "813.0.0"
____exports.NPCID.STRIDER = "814.0.0"
____exports.NPCID.FISSURE = "815.0.0"
____exports.NPCID.POLTY = "816.0.0"
____exports.NPCID.KINETI = "816.1.0"
____exports.NPCID.PREY = "817.0.0"
____exports.NPCID.MULLIGHOUL = "817.1.0"
____exports.NPCID.ROCK_SPIDER = "818.0.0"
____exports.NPCID.ROCK_SPIDER_2 = "818.0.1"
____exports.NPCID.ROCK_SPIDER_3 = "818.0.2"
____exports.NPCID.ROCK_SPIDER_4 = "818.0.3"
____exports.NPCID.TINTED_ROCK_SPIDER = "818.1.0"
____exports.NPCID.TINTED_ROCK_SPIDER_2 = "818.1.1"
____exports.NPCID.TINTED_ROCK_SPIDER_3 = "818.1.2"
____exports.NPCID.TINTED_ROCK_SPIDER_4 = "818.1.3"
____exports.NPCID.COAL_SPIDER = "818.2.0"
____exports.NPCID.COAL_SPIDER_2 = "818.2.1"
____exports.NPCID.COAL_SPIDER_3 = "818.2.2"
____exports.NPCID.COAL_SPIDER_4 = "818.2.3"
____exports.NPCID.FLY_BOMB = "819.0.0"
____exports.NPCID.ETERNAL_FLY_BOMB = "819.1.0"
____exports.NPCID.DANNY = "820.0.0"
____exports.NPCID.COAL_BOY = "820.1.0"
____exports.NPCID.BLASTER = "821.0.0"
____exports.NPCID.BOUNCER = "822.0.0"
____exports.NPCID.QUAKEY = "823.0.0"
____exports.NPCID.GYRO = "824.0.0"
____exports.NPCID.GRILLED_GYRO = "824.1.0"
____exports.NPCID.FIRE_WORM = "825.0.0"
____exports.NPCID.HARDY = "826.0.0"
____exports.NPCID.FACELESS = "827.0.0"
____exports.NPCID.TAINTED_FACELESS = "827.1.0"
____exports.NPCID.NECRO = "828.0.0"
____exports.NPCID.MOLE = "829.0.0"
____exports.NPCID.TAINTED_MOLE = "829.1.0"
____exports.NPCID.BIG_BONY = "830.0.0"
____exports.NPCID.BIG_BONE = "830.10.0"
____exports.NPCID.GUTTED_FATTY = "831.0.0"
____exports.NPCID.GUTTED_FATTY_EYE = "831.10.0"
____exports.NPCID.FESTERING_GUTS = "831.20.0"
____exports.NPCID.EXORCIST = "832.0.0"
____exports.NPCID.FANATIC = "832.1.0"
____exports.NPCID.CANDLER = "833.0.0"
____exports.NPCID.WHIPPER = "834.0.0"
____exports.NPCID.SNAPPER = "834.1.0"
____exports.NPCID.FLAGELLANT = "834.2.0"
____exports.NPCID.PEEPING_FATTY = "835.0.0"
____exports.NPCID.PEEPING_FATTY_EYE = "835.10.0"
____exports.NPCID.VIS_VERSA = "836.0.0"
____exports.NPCID.HENRY = "837.0.0"
____exports.NPCID.LEVEL_2_WILLO = "838.0.0"
____exports.NPCID.STRIFER = "839.0.0"
____exports.NPCID.PON = "840.0.0"
____exports.NPCID.REVENANT = "841.0.0"
____exports.NPCID.QUAD_REVENANT = "841.1.0"
____exports.NPCID.NIGHTWATCH = "842.0.0"
____exports.NPCID.CANARY = "843.0.0"
____exports.NPCID.FOREIGNER = "843.1.0"
____exports.NPCID.BOMBGAGGER = "844.0.0"
____exports.NPCID.LEVEL_2_GAPER = "850.0.0"
____exports.NPCID.LEVEL_2_HORF = "850.1.0"
____exports.NPCID.LEVEL_2_GUSHER = "850.2.0"
____exports.NPCID.TWITCHY = "851.0.0"
____exports.NPCID.SPIKEBALL = "852.0.0"
____exports.NPCID.SMALL_MAGGOT = "853.0.0"
____exports.NPCID.ADULT_LEECH = "854.0.0"
____exports.NPCID.LEVEL_2_CHARGER = "855.0.0"
____exports.NPCID.ELLEECH = "855.1.0"
____exports.NPCID.GASBAG = "856.0.0"
____exports.NPCID.COHORT = "857.0.0"
____exports.NPCID.VESSEL = "858.0.0"
____exports.NPCID.FLOAST = "859.0.0"
____exports.NPCID.UNBORN = "860.0.0"
____exports.NPCID.PUSTULE = "861.0.0"
____exports.NPCID.CYST = "862.0.0"
____exports.NPCID.MORNINGSTAR = "863.0.0"
____exports.NPCID.MORNINGSTAR_2 = "863.0.1"
____exports.NPCID.MORNINGSTAR_3 = "863.0.2"
____exports.NPCID.MOCKULUS = "864.0.0"
____exports.NPCID.EVIS = "865.0.0"
____exports.NPCID.EVIS_GUTS = "865.10.0"
____exports.NPCID.DARK_ESAU = "866.0.0"
____exports.NPCID.DARKER_ESAU = "866.0.1"
____exports.NPCID.DARK_ESAUS_PIT = "866.1.0"
____exports.NPCID.MOTHERS_SHADOW = "867.0.0"
____exports.NPCID.ARMY_FLY = "868.0.0"
____exports.NPCID.MIGRAINE = "869.0.0"
____exports.NPCID.DRIP = "870.0.0"
____exports.NPCID.SPLURT = "871.0.0"
____exports.NPCID.CLOGGY = "872.0.0"
____exports.NPCID.FLY_TRAP = "873.0.0"
____exports.NPCID.GAS_DWARF = "874.0.0"
____exports.NPCID.POOT_MINE = "875.0.0"
____exports.NPCID.DUMP = "876.0.0"
____exports.NPCID.DUMP_HEAD = "876.1.0"
____exports.NPCID.GRUDGE = "877.0.0"
____exports.NPCID.BUTT_SLICKER = "878.0.0"
____exports.NPCID.BLOATY = "879.0.0"
____exports.NPCID.FLESH_MAIDEN = "880.0.0"
____exports.NPCID.NEEDLE = "881.0.0"
____exports.NPCID.PASTY = "881.1.0"
____exports.NPCID.DUST = "882.0.0"
____exports.NPCID.BABY_BEGOTTEN = "883.0.0"
____exports.NPCID.SWARM_SPIDER = "884.0.0"
____exports.NPCID.CULTIST = "885.0.0"
____exports.NPCID.BLOOD_CULTIST = "885.1.0"
____exports.NPCID.BONE_TRAP = "885.10.0"
____exports.NPCID.VIS_FATTY = "886.0.0"
____exports.NPCID.FETAL_DEMON = "886.1.0"
____exports.NPCID.DUSTY_DEATHS_HEAD = "887.0.0"
____exports.NPCID.SHADY = "888.0.0"
____exports.NPCID.CLICKETY_CLACK = "889.0.0"
____exports.NPCID.MAZE_ROAMER = "890.0.0"
____exports.NPCID.MAZE_ROAMER_2 = "890.0.1"
____exports.NPCID.GOAT = "891.0.0"
____exports.NPCID.BLACK_GOAT = "891.1.0"
____exports.NPCID.POOFER = "892.0.0"
____exports.NPCID.BALL_AND_CHAIN = "893.0.0"
____exports.NPCID.REAP_CREEP = "900.0.0"
____exports.NPCID.LIL_BLUB = "901.0.0"
____exports.NPCID.RAINMAKER = "902.0.0"
____exports.NPCID.THE_VISAGE = "903.0.0"
____exports.NPCID.VISAGE_MASK = "903.1.0"
____exports.NPCID.VISAGE_CHAIN = "903.10.0"
____exports.NPCID.VISAGE_PLASMA = "903.20.0"
____exports.NPCID.SIREN = "904.0.0"
____exports.NPCID.SIRENS_SKULL = "904.1.0"
____exports.NPCID.SIREN_HELPER_PROJECTILE = "904.10.0"
____exports.NPCID.THE_HERETIC = "905.0.0"
____exports.NPCID.HORNFEL = "906.0.0"
____exports.NPCID.HORNFEL_DECOY = "906.1.0"
____exports.NPCID.GREAT_GIDEON = "907.0.0"
____exports.NPCID.GREAT_GIDEON_DEFEATED = "907.0.1"
____exports.NPCID.BABY_PLUM = "908.0.0"
____exports.NPCID.THE_SCOURGE = "909.0.0"
____exports.NPCID.THE_SCOURGE_CHAIN = "909.10.0"
____exports.NPCID.CHIMERA = "910.0.0"
____exports.NPCID.CHIMERA_BODY = "910.1.0"
____exports.NPCID.CHIMERA_HEAD = "910.2.0"
____exports.NPCID.ROTGUT = "911.0.0"
____exports.NPCID.ROTGUT_MAGGOT = "911.1.0"
____exports.NPCID.ROTGUT_HEART = "911.2.0"
____exports.NPCID.MOTHER_PHASE_1 = "912.0.0"
____exports.NPCID.MOTHER_PHASE_2 = "912.0.1"
____exports.NPCID.MOTHER_LEFT_ARM = "912.0.2"
____exports.NPCID.MOTHER_RIGHT_ARM = "912.0.3"
____exports.NPCID.MOTHER_DISAPPEAR = "912.0.4"
____exports.NPCID.MOTHER_2 = "912.10.0"
____exports.NPCID.DEAD_ISAAC = "912.20.0"
____exports.NPCID.MOTHER_WORM = "912.30.0"
____exports.NPCID.MOTHER_BALL = "912.100.0"
____exports.NPCID.MOTHER_BALL_MEDIUM = "912.100.1"
____exports.NPCID.MOTHER_BALL_SMALL = "912.100.2"
____exports.NPCID.MIN_MIN = "913.0.0"
____exports.NPCID.CLOG = "914.0.0"
____exports.NPCID.SINGE = "915.0.0"
____exports.NPCID.SINGES_BALL = "915.1.0"
____exports.NPCID.BUMBINO = "916.0.0"
____exports.NPCID.COLOSTOMIA = "917.0.0"
____exports.NPCID.TURDLET = "918.0.0"
____exports.NPCID.RAGLICH = "919.0.0"
____exports.NPCID.RAGLICH_ARM = "919.1.0"
____exports.NPCID.HORNY_BOYS = "920.0.0"
____exports.NPCID.CLUTCH = "921.0.0"
____exports.NPCID.CLUTCH_ORBITAL = "921.1.0"
____exports.NPCID.DOGMA = "950.0.0"
____exports.NPCID.DOGMAS_TV = "950.1.0"
____exports.NPCID.DOGMA_ANGEL = "950.2.0"
____exports.NPCID.DOGMA_ANGEL_BABY = "950.10.0"
____exports.NPCID.THE_BEAST = "951.0.0"
____exports.NPCID.STALACTITE = "951.1.0"
____exports.NPCID.BEAST_ROCK_PROJECTILE = "951.2.0"
____exports.NPCID.BEAST_SOUL = "951.3.0"
____exports.NPCID.ULTRA_FAMINE = "951.10.0"
____exports.NPCID.ULTRA_FAMINE_FLY = "951.11.0"
____exports.NPCID.ULTRA_PESTILENCE = "951.20.0"
____exports.NPCID.ULTRA_PESTILENCE_FLY = "951.21.0"
____exports.NPCID.ULTRA_PESTILENCE_MAGGOT = "951.22.0"
____exports.NPCID.ULTRA_PESTILENCE_FLY_BALL = "951.23.0"
____exports.NPCID.ULTRA_WAR = "951.30.0"
____exports.NPCID.ULTRA_WAR_BOMB = "951.31.0"
____exports.NPCID.ULTRA_DEATH = "951.40.0"
____exports.NPCID.ULTRA_DEATH_SCYTHE = "951.41.0"
____exports.NPCID.ULTRA_DEATH_HEAD = "951.42.0"
____exports.NPCID.BACKGROUND_BEAST = "951.100.0"
____exports.NPCID.BACKGROUND_FAMINE = "951.101.0"
____exports.NPCID.BACKGROUND_PESTILENCE = "951.102.0"
____exports.NPCID.BACKGROUND_WAR = "951.103.0"
____exports.NPCID.BACKGROUND_DEATH = "951.104.0"
____exports.NPCID.GENERIC_PROP = "960.0.0"
____exports.NPCID.MOMS_DRESSER = "960.1.0"
____exports.NPCID.MOMS_VANITY = "960.2.0"
____exports.NPCID.COUCH = "960.3.0"
____exports.NPCID.TV = "960.4.0"
____exports.NPCID.FROZEN_ENEMY = "963.0.0"
____exports.NPCID.DUMMY = "964.0.0"
____exports.NPCID.MINECART = "965.0.0"
____exports.NPCID.SIREN_HELPER = "966.0.0"
____exports.NPCID.HORNFEL_DOOR = "967.0.0"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.Music"] = function(...) 
local ____exports = {}
____exports.Music = {}
____exports.Music.NULL = 0
____exports.Music[____exports.Music.NULL] = "NULL"
____exports.Music.BASEMENT = 1
____exports.Music[____exports.Music.BASEMENT] = "BASEMENT"
____exports.Music.CAVES = 2
____exports.Music[____exports.Music.CAVES] = "CAVES"
____exports.Music.DEPTHS = 3
____exports.Music[____exports.Music.DEPTHS] = "DEPTHS"
____exports.Music.CELLAR = 4
____exports.Music[____exports.Music.CELLAR] = "CELLAR"
____exports.Music.CATACOMBS = 5
____exports.Music[____exports.Music.CATACOMBS] = "CATACOMBS"
____exports.Music.NECROPOLIS = 6
____exports.Music[____exports.Music.NECROPOLIS] = "NECROPOLIS"
____exports.Music.WOMB = 7
____exports.Music[____exports.Music.WOMB] = "WOMB"
____exports.Music.GAME_OVER = 8
____exports.Music[____exports.Music.GAME_OVER] = "GAME_OVER"
____exports.Music.BOSS = 9
____exports.Music[____exports.Music.BOSS] = "BOSS"
____exports.Music.CATHEDRAL = 10
____exports.Music[____exports.Music.CATHEDRAL] = "CATHEDRAL"
____exports.Music.SHEOL = 11
____exports.Music[____exports.Music.SHEOL] = "SHEOL"
____exports.Music.DARK_ROOM = 12
____exports.Music[____exports.Music.DARK_ROOM] = "DARK_ROOM"
____exports.Music.CHEST = 13
____exports.Music[____exports.Music.CHEST] = "CHEST"
____exports.Music.BURNING_BASEMENT = 14
____exports.Music[____exports.Music.BURNING_BASEMENT] = "BURNING_BASEMENT"
____exports.Music.FLOODED_CAVES = 15
____exports.Music[____exports.Music.FLOODED_CAVES] = "FLOODED_CAVES"
____exports.Music.DANK_DEPTHS = 16
____exports.Music[____exports.Music.DANK_DEPTHS] = "DANK_DEPTHS"
____exports.Music.SCARRED_WOMB = 17
____exports.Music[____exports.Music.SCARRED_WOMB] = "SCARRED_WOMB"
____exports.Music.BLUE_WOMB = 18
____exports.Music[____exports.Music.BLUE_WOMB] = "BLUE_WOMB"
____exports.Music.UTERO = 19
____exports.Music[____exports.Music.UTERO] = "UTERO"
____exports.Music.MOM_BOSS = 20
____exports.Music[____exports.Music.MOM_BOSS] = "MOM_BOSS"
____exports.Music.MOMS_HEART_BOSS = 21
____exports.Music[____exports.Music.MOMS_HEART_BOSS] = "MOMS_HEART_BOSS"
____exports.Music.ISAAC_BOSS = 22
____exports.Music[____exports.Music.ISAAC_BOSS] = "ISAAC_BOSS"
____exports.Music.SATAN_BOSS = 23
____exports.Music[____exports.Music.SATAN_BOSS] = "SATAN_BOSS"
____exports.Music.DARK_ROOM_BOSS = 24
____exports.Music[____exports.Music.DARK_ROOM_BOSS] = "DARK_ROOM_BOSS"
____exports.Music.BLUE_BABY_BOSS = 25
____exports.Music[____exports.Music.BLUE_BABY_BOSS] = "BLUE_BABY_BOSS"
____exports.Music.BOSS_2 = 26
____exports.Music[____exports.Music.BOSS_2] = "BOSS_2"
____exports.Music.HUSH_BOSS = 27
____exports.Music[____exports.Music.HUSH_BOSS] = "HUSH_BOSS"
____exports.Music.ULTRA_GREED_BOSS = 28
____exports.Music[____exports.Music.ULTRA_GREED_BOSS] = "ULTRA_GREED_BOSS"
____exports.Music.LIBRARY_ROOM = 30
____exports.Music[____exports.Music.LIBRARY_ROOM] = "LIBRARY_ROOM"
____exports.Music.SECRET_ROOM = 31
____exports.Music[____exports.Music.SECRET_ROOM] = "SECRET_ROOM"
____exports.Music.SECRET_ROOM_2 = 32
____exports.Music[____exports.Music.SECRET_ROOM_2] = "SECRET_ROOM_2"
____exports.Music.DEVIL_ROOM = 33
____exports.Music[____exports.Music.DEVIL_ROOM] = "DEVIL_ROOM"
____exports.Music.ANGEL_ROOM = 34
____exports.Music[____exports.Music.ANGEL_ROOM] = "ANGEL_ROOM"
____exports.Music.SHOP_ROOM = 35
____exports.Music[____exports.Music.SHOP_ROOM] = "SHOP_ROOM"
____exports.Music.ARCADE_ROOM = 36
____exports.Music[____exports.Music.ARCADE_ROOM] = "ARCADE_ROOM"
____exports.Music.BOSS_OVER = 37
____exports.Music[____exports.Music.BOSS_OVER] = "BOSS_OVER"
____exports.Music.CHALLENGE_FIGHT = 38
____exports.Music[____exports.Music.CHALLENGE_FIGHT] = "CHALLENGE_FIGHT"
____exports.Music.BOSS_RUSH = 39
____exports.Music[____exports.Music.BOSS_RUSH] = "BOSS_RUSH"
____exports.Music.JINGLE_BOSS_RUSH_OUTRO = 40
____exports.Music[____exports.Music.JINGLE_BOSS_RUSH_OUTRO] = "JINGLE_BOSS_RUSH_OUTRO"
____exports.Music.BOSS_3 = 41
____exports.Music[____exports.Music.BOSS_3] = "BOSS_3"
____exports.Music.JINGLE_BOSS_OVER_3 = 42
____exports.Music[____exports.Music.JINGLE_BOSS_OVER_3] = "JINGLE_BOSS_OVER_3"
____exports.Music.MOTHER_BOSS = 43
____exports.Music[____exports.Music.MOTHER_BOSS] = "MOTHER_BOSS"
____exports.Music.DOGMA_BOSS = 44
____exports.Music[____exports.Music.DOGMA_BOSS] = "DOGMA_BOSS"
____exports.Music.BEAST_BOSS = 45
____exports.Music[____exports.Music.BEAST_BOSS] = "BEAST_BOSS"
____exports.Music.JINGLE_MOTHER_OVER = 47
____exports.Music[____exports.Music.JINGLE_MOTHER_OVER] = "JINGLE_MOTHER_OVER"
____exports.Music.JINGLE_DOGMA_OVER = 48
____exports.Music[____exports.Music.JINGLE_DOGMA_OVER] = "JINGLE_DOGMA_OVER"
____exports.Music.JINGLE_BEAST_OVER = 49
____exports.Music[____exports.Music.JINGLE_BEAST_OVER] = "JINGLE_BEAST_OVER"
____exports.Music.PLANETARIUM = 50
____exports.Music[____exports.Music.PLANETARIUM] = "PLANETARIUM"
____exports.Music.SECRET_ROOM_ALT_ALT = 51
____exports.Music[____exports.Music.SECRET_ROOM_ALT_ALT] = "SECRET_ROOM_ALT_ALT"
____exports.Music.BOSS_OVER_TWISTED = 52
____exports.Music[____exports.Music.BOSS_OVER_TWISTED] = "BOSS_OVER_TWISTED"
____exports.Music.CREDITS = 60
____exports.Music[____exports.Music.CREDITS] = "CREDITS"
____exports.Music.TITLE = 61
____exports.Music[____exports.Music.TITLE] = "TITLE"
____exports.Music.TITLE_AFTERBIRTH = 62
____exports.Music[____exports.Music.TITLE_AFTERBIRTH] = "TITLE_AFTERBIRTH"
____exports.Music.TITLE_REPENTANCE = 63
____exports.Music[____exports.Music.TITLE_REPENTANCE] = "TITLE_REPENTANCE"
____exports.Music.JINGLE_GAME_START_ALT = 64
____exports.Music[____exports.Music.JINGLE_GAME_START_ALT] = "JINGLE_GAME_START_ALT"
____exports.Music.JINGLE_NIGHTMARE_ALT = 65
____exports.Music[____exports.Music.JINGLE_NIGHTMARE_ALT] = "JINGLE_NIGHTMARE_ALT"
____exports.Music.MOTHERS_SHADOW_INTRO = 66
____exports.Music[____exports.Music.MOTHERS_SHADOW_INTRO] = "MOTHERS_SHADOW_INTRO"
____exports.Music.DOGMA_INTRO = 67
____exports.Music[____exports.Music.DOGMA_INTRO] = "DOGMA_INTRO"
____exports.Music.STRANGE_DOOR_JINGLE = 68
____exports.Music[____exports.Music.STRANGE_DOOR_JINGLE] = "STRANGE_DOOR_JINGLE"
____exports.Music.DARK_CLOSET = 69
____exports.Music[____exports.Music.DARK_CLOSET] = "DARK_CLOSET"
____exports.Music.CREDITS_ALT = 70
____exports.Music[____exports.Music.CREDITS_ALT] = "CREDITS_ALT"
____exports.Music.CREDITS_ALT_FINAL = 71
____exports.Music[____exports.Music.CREDITS_ALT_FINAL] = "CREDITS_ALT_FINAL"
____exports.Music.JINGLE_BOSS = 81
____exports.Music[____exports.Music.JINGLE_BOSS] = "JINGLE_BOSS"
____exports.Music.JINGLE_BOSS_OVER_1 = 83
____exports.Music[____exports.Music.JINGLE_BOSS_OVER_1] = "JINGLE_BOSS_OVER_1"
____exports.Music.JINGLE_HOLY_ROOM_FIND = 84
____exports.Music[____exports.Music.JINGLE_HOLY_ROOM_FIND] = "JINGLE_HOLY_ROOM_FIND"
____exports.Music.JINGLE_SECRET_ROOM_FIND = 85
____exports.Music[____exports.Music.JINGLE_SECRET_ROOM_FIND] = "JINGLE_SECRET_ROOM_FIND"
____exports.Music.JINGLE_TREASURE_ROOM_ENTRY_0 = 87
____exports.Music[____exports.Music.JINGLE_TREASURE_ROOM_ENTRY_0] = "JINGLE_TREASURE_ROOM_ENTRY_0"
____exports.Music.JINGLE_TREASURE_ROOM_ENTRY_1 = 88
____exports.Music[____exports.Music.JINGLE_TREASURE_ROOM_ENTRY_1] = "JINGLE_TREASURE_ROOM_ENTRY_1"
____exports.Music.JINGLE_TREASURE_ROOM_ENTRY_2 = 89
____exports.Music[____exports.Music.JINGLE_TREASURE_ROOM_ENTRY_2] = "JINGLE_TREASURE_ROOM_ENTRY_2"
____exports.Music.JINGLE_TREASURE_ROOM_ENTRY_3 = 90
____exports.Music[____exports.Music.JINGLE_TREASURE_ROOM_ENTRY_3] = "JINGLE_TREASURE_ROOM_ENTRY_3"
____exports.Music.JINGLE_CHALLENGE_ENTRY = 91
____exports.Music[____exports.Music.JINGLE_CHALLENGE_ENTRY] = "JINGLE_CHALLENGE_ENTRY"
____exports.Music.JINGLE_CHALLENGE_OUTRO = 92
____exports.Music[____exports.Music.JINGLE_CHALLENGE_OUTRO] = "JINGLE_CHALLENGE_OUTRO"
____exports.Music.JINGLE_GAME_OVER = 93
____exports.Music[____exports.Music.JINGLE_GAME_OVER] = "JINGLE_GAME_OVER"
____exports.Music.JINGLE_DEVIL_ROOM_FIND = 94
____exports.Music[____exports.Music.JINGLE_DEVIL_ROOM_FIND] = "JINGLE_DEVIL_ROOM_FIND"
____exports.Music.JINGLE_GAME_START = 95
____exports.Music[____exports.Music.JINGLE_GAME_START] = "JINGLE_GAME_START"
____exports.Music.JINGLE_NIGHTMARE = 96
____exports.Music[____exports.Music.JINGLE_NIGHTMARE] = "JINGLE_NIGHTMARE"
____exports.Music.JINGLE_BOSS_OVER_2 = 97
____exports.Music[____exports.Music.JINGLE_BOSS_OVER_2] = "JINGLE_BOSS_OVER_2"
____exports.Music.JINGLE_HUSH_OVER = 98
____exports.Music[____exports.Music.JINGLE_HUSH_OVER] = "JINGLE_HUSH_OVER"
____exports.Music.INTRO_VOICEOVER = 100
____exports.Music[____exports.Music.INTRO_VOICEOVER] = "INTRO_VOICEOVER"
____exports.Music.EPILOGUE_VOICEOVER = 101
____exports.Music[____exports.Music.EPILOGUE_VOICEOVER] = "EPILOGUE_VOICEOVER"
____exports.Music.VOID = 102
____exports.Music[____exports.Music.VOID] = "VOID"
____exports.Music.VOID_BOSS = 103
____exports.Music[____exports.Music.VOID_BOSS] = "VOID_BOSS"
____exports.Music.DOWNPOUR = 104
____exports.Music[____exports.Music.DOWNPOUR] = "DOWNPOUR"
____exports.Music.MINES = 105
____exports.Music[____exports.Music.MINES] = "MINES"
____exports.Music.MAUSOLEUM = 106
____exports.Music[____exports.Music.MAUSOLEUM] = "MAUSOLEUM"
____exports.Music.CORPSE = 107
____exports.Music[____exports.Music.CORPSE] = "CORPSE"
____exports.Music.DROSS = 108
____exports.Music[____exports.Music.DROSS] = "DROSS"
____exports.Music.ASHPIT = 109
____exports.Music[____exports.Music.ASHPIT] = "ASHPIT"
____exports.Music.GEHENNA = 110
____exports.Music[____exports.Music.GEHENNA] = "GEHENNA"
____exports.Music.MORTIS = 111
____exports.Music[____exports.Music.MORTIS] = "MORTIS"
____exports.Music.ISAACS_HOUSE = 112
____exports.Music[____exports.Music.ISAACS_HOUSE] = "ISAACS_HOUSE"
____exports.Music.FINAL_VOICEOVER = 113
____exports.Music[____exports.Music.FINAL_VOICEOVER] = "FINAL_VOICEOVER"
____exports.Music.DOWNPOUR_REVERSE = 114
____exports.Music[____exports.Music.DOWNPOUR_REVERSE] = "DOWNPOUR_REVERSE"
____exports.Music.DROSS_REVERSE = 115
____exports.Music[____exports.Music.DROSS_REVERSE] = "DROSS_REVERSE"
____exports.Music.MINESHAFT_AMBIENT = 116
____exports.Music[____exports.Music.MINESHAFT_AMBIENT] = "MINESHAFT_AMBIENT"
____exports.Music.MINESHAFT_ESCAPE = 117
____exports.Music[____exports.Music.MINESHAFT_ESCAPE] = "MINESHAFT_ESCAPE"
____exports.Music.REVERSE_GENESIS = 118
____exports.Music[____exports.Music.REVERSE_GENESIS] = "REVERSE_GENESIS"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.Mouse"] = function(...) 
local ____exports = {}
____exports.Mouse = {}
____exports.Mouse.BUTTON_LEFT = 0
____exports.Mouse[____exports.Mouse.BUTTON_LEFT] = "BUTTON_LEFT"
____exports.Mouse.BUTTON_RIGHT = 1
____exports.Mouse[____exports.Mouse.BUTTON_RIGHT] = "BUTTON_RIGHT"
____exports.Mouse.BUTTON_MIDDLE = 2
____exports.Mouse[____exports.Mouse.BUTTON_MIDDLE] = "BUTTON_MIDDLE"
____exports.Mouse.BUTTON_4 = 3
____exports.Mouse[____exports.Mouse.BUTTON_4] = "BUTTON_4"
____exports.Mouse.BUTTON_5 = 4
____exports.Mouse[____exports.Mouse.BUTTON_5] = "BUTTON_5"
____exports.Mouse.BUTTON_6 = 5
____exports.Mouse[____exports.Mouse.BUTTON_6] = "BUTTON_6"
____exports.Mouse.BUTTON_7 = 6
____exports.Mouse[____exports.Mouse.BUTTON_7] = "BUTTON_7"
____exports.Mouse.BUTTON_8 = 7
____exports.Mouse[____exports.Mouse.BUTTON_8] = "BUTTON_8"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ModCallback"] = function(...) 
local ____exports = {}
____exports.ModCallback = {}
____exports.ModCallback.POST_NPC_UPDATE = 0
____exports.ModCallback[____exports.ModCallback.POST_NPC_UPDATE] = "POST_NPC_UPDATE"
____exports.ModCallback.POST_UPDATE = 1
____exports.ModCallback[____exports.ModCallback.POST_UPDATE] = "POST_UPDATE"
____exports.ModCallback.POST_RENDER = 2
____exports.ModCallback[____exports.ModCallback.POST_RENDER] = "POST_RENDER"
____exports.ModCallback.POST_USE_ITEM = 3
____exports.ModCallback[____exports.ModCallback.POST_USE_ITEM] = "POST_USE_ITEM"
____exports.ModCallback.POST_PEFFECT_UPDATE = 4
____exports.ModCallback[____exports.ModCallback.POST_PEFFECT_UPDATE] = "POST_PEFFECT_UPDATE"
____exports.ModCallback.POST_USE_CARD = 5
____exports.ModCallback[____exports.ModCallback.POST_USE_CARD] = "POST_USE_CARD"
____exports.ModCallback.POST_FAMILIAR_UPDATE = 6
____exports.ModCallback[____exports.ModCallback.POST_FAMILIAR_UPDATE] = "POST_FAMILIAR_UPDATE"
____exports.ModCallback.POST_FAMILIAR_INIT = 7
____exports.ModCallback[____exports.ModCallback.POST_FAMILIAR_INIT] = "POST_FAMILIAR_INIT"
____exports.ModCallback.EVALUATE_CACHE = 8
____exports.ModCallback[____exports.ModCallback.EVALUATE_CACHE] = "EVALUATE_CACHE"
____exports.ModCallback.POST_PLAYER_INIT = 9
____exports.ModCallback[____exports.ModCallback.POST_PLAYER_INIT] = "POST_PLAYER_INIT"
____exports.ModCallback.POST_USE_PILL = 10
____exports.ModCallback[____exports.ModCallback.POST_USE_PILL] = "POST_USE_PILL"
____exports.ModCallback.ENTITY_TAKE_DMG = 11
____exports.ModCallback[____exports.ModCallback.ENTITY_TAKE_DMG] = "ENTITY_TAKE_DMG"
____exports.ModCallback.POST_CURSE_EVAL = 12
____exports.ModCallback[____exports.ModCallback.POST_CURSE_EVAL] = "POST_CURSE_EVAL"
____exports.ModCallback.INPUT_ACTION = 13
____exports.ModCallback[____exports.ModCallback.INPUT_ACTION] = "INPUT_ACTION"
____exports.ModCallback.POST_GAME_STARTED = 15
____exports.ModCallback[____exports.ModCallback.POST_GAME_STARTED] = "POST_GAME_STARTED"
____exports.ModCallback.POST_GAME_END = 16
____exports.ModCallback[____exports.ModCallback.POST_GAME_END] = "POST_GAME_END"
____exports.ModCallback.PRE_GAME_EXIT = 17
____exports.ModCallback[____exports.ModCallback.PRE_GAME_EXIT] = "PRE_GAME_EXIT"
____exports.ModCallback.POST_NEW_LEVEL = 18
____exports.ModCallback[____exports.ModCallback.POST_NEW_LEVEL] = "POST_NEW_LEVEL"
____exports.ModCallback.POST_NEW_ROOM = 19
____exports.ModCallback[____exports.ModCallback.POST_NEW_ROOM] = "POST_NEW_ROOM"
____exports.ModCallback.GET_CARD = 20
____exports.ModCallback[____exports.ModCallback.GET_CARD] = "GET_CARD"
____exports.ModCallback.GET_SHADER_PARAMS = 21
____exports.ModCallback[____exports.ModCallback.GET_SHADER_PARAMS] = "GET_SHADER_PARAMS"
____exports.ModCallback.EXECUTE_CMD = 22
____exports.ModCallback[____exports.ModCallback.EXECUTE_CMD] = "EXECUTE_CMD"
____exports.ModCallback.PRE_USE_ITEM = 23
____exports.ModCallback[____exports.ModCallback.PRE_USE_ITEM] = "PRE_USE_ITEM"
____exports.ModCallback.PRE_ENTITY_SPAWN = 24
____exports.ModCallback[____exports.ModCallback.PRE_ENTITY_SPAWN] = "PRE_ENTITY_SPAWN"
____exports.ModCallback.POST_FAMILIAR_RENDER = 25
____exports.ModCallback[____exports.ModCallback.POST_FAMILIAR_RENDER] = "POST_FAMILIAR_RENDER"
____exports.ModCallback.PRE_FAMILIAR_COLLISION = 26
____exports.ModCallback[____exports.ModCallback.PRE_FAMILIAR_COLLISION] = "PRE_FAMILIAR_COLLISION"
____exports.ModCallback.POST_NPC_INIT = 27
____exports.ModCallback[____exports.ModCallback.POST_NPC_INIT] = "POST_NPC_INIT"
____exports.ModCallback.POST_NPC_RENDER = 28
____exports.ModCallback[____exports.ModCallback.POST_NPC_RENDER] = "POST_NPC_RENDER"
____exports.ModCallback.POST_NPC_DEATH = 29
____exports.ModCallback[____exports.ModCallback.POST_NPC_DEATH] = "POST_NPC_DEATH"
____exports.ModCallback.PRE_NPC_COLLISION = 30
____exports.ModCallback[____exports.ModCallback.PRE_NPC_COLLISION] = "PRE_NPC_COLLISION"
____exports.ModCallback.POST_PLAYER_UPDATE = 31
____exports.ModCallback[____exports.ModCallback.POST_PLAYER_UPDATE] = "POST_PLAYER_UPDATE"
____exports.ModCallback.POST_PLAYER_RENDER = 32
____exports.ModCallback[____exports.ModCallback.POST_PLAYER_RENDER] = "POST_PLAYER_RENDER"
____exports.ModCallback.PRE_PLAYER_COLLISION = 33
____exports.ModCallback[____exports.ModCallback.PRE_PLAYER_COLLISION] = "PRE_PLAYER_COLLISION"
____exports.ModCallback.POST_PICKUP_INIT = 34
____exports.ModCallback[____exports.ModCallback.POST_PICKUP_INIT] = "POST_PICKUP_INIT"
____exports.ModCallback.POST_PICKUP_UPDATE = 35
____exports.ModCallback[____exports.ModCallback.POST_PICKUP_UPDATE] = "POST_PICKUP_UPDATE"
____exports.ModCallback.POST_PICKUP_RENDER = 36
____exports.ModCallback[____exports.ModCallback.POST_PICKUP_RENDER] = "POST_PICKUP_RENDER"
____exports.ModCallback.POST_PICKUP_SELECTION = 37
____exports.ModCallback[____exports.ModCallback.POST_PICKUP_SELECTION] = "POST_PICKUP_SELECTION"
____exports.ModCallback.PRE_PICKUP_COLLISION = 38
____exports.ModCallback[____exports.ModCallback.PRE_PICKUP_COLLISION] = "PRE_PICKUP_COLLISION"
____exports.ModCallback.POST_TEAR_INIT = 39
____exports.ModCallback[____exports.ModCallback.POST_TEAR_INIT] = "POST_TEAR_INIT"
____exports.ModCallback.POST_TEAR_UPDATE = 40
____exports.ModCallback[____exports.ModCallback.POST_TEAR_UPDATE] = "POST_TEAR_UPDATE"
____exports.ModCallback.POST_TEAR_RENDER = 41
____exports.ModCallback[____exports.ModCallback.POST_TEAR_RENDER] = "POST_TEAR_RENDER"
____exports.ModCallback.PRE_TEAR_COLLISION = 42
____exports.ModCallback[____exports.ModCallback.PRE_TEAR_COLLISION] = "PRE_TEAR_COLLISION"
____exports.ModCallback.POST_PROJECTILE_INIT = 43
____exports.ModCallback[____exports.ModCallback.POST_PROJECTILE_INIT] = "POST_PROJECTILE_INIT"
____exports.ModCallback.POST_PROJECTILE_UPDATE = 44
____exports.ModCallback[____exports.ModCallback.POST_PROJECTILE_UPDATE] = "POST_PROJECTILE_UPDATE"
____exports.ModCallback.POST_PROJECTILE_RENDER = 45
____exports.ModCallback[____exports.ModCallback.POST_PROJECTILE_RENDER] = "POST_PROJECTILE_RENDER"
____exports.ModCallback.PRE_PROJECTILE_COLLISION = 46
____exports.ModCallback[____exports.ModCallback.PRE_PROJECTILE_COLLISION] = "PRE_PROJECTILE_COLLISION"
____exports.ModCallback.POST_LASER_INIT = 47
____exports.ModCallback[____exports.ModCallback.POST_LASER_INIT] = "POST_LASER_INIT"
____exports.ModCallback.POST_LASER_UPDATE = 48
____exports.ModCallback[____exports.ModCallback.POST_LASER_UPDATE] = "POST_LASER_UPDATE"
____exports.ModCallback.POST_LASER_RENDER = 49
____exports.ModCallback[____exports.ModCallback.POST_LASER_RENDER] = "POST_LASER_RENDER"
____exports.ModCallback.POST_KNIFE_INIT = 50
____exports.ModCallback[____exports.ModCallback.POST_KNIFE_INIT] = "POST_KNIFE_INIT"
____exports.ModCallback.POST_KNIFE_UPDATE = 51
____exports.ModCallback[____exports.ModCallback.POST_KNIFE_UPDATE] = "POST_KNIFE_UPDATE"
____exports.ModCallback.POST_KNIFE_RENDER = 52
____exports.ModCallback[____exports.ModCallback.POST_KNIFE_RENDER] = "POST_KNIFE_RENDER"
____exports.ModCallback.PRE_KNIFE_COLLISION = 53
____exports.ModCallback[____exports.ModCallback.PRE_KNIFE_COLLISION] = "PRE_KNIFE_COLLISION"
____exports.ModCallback.POST_EFFECT_INIT = 54
____exports.ModCallback[____exports.ModCallback.POST_EFFECT_INIT] = "POST_EFFECT_INIT"
____exports.ModCallback.POST_EFFECT_UPDATE = 55
____exports.ModCallback[____exports.ModCallback.POST_EFFECT_UPDATE] = "POST_EFFECT_UPDATE"
____exports.ModCallback.POST_EFFECT_RENDER = 56
____exports.ModCallback[____exports.ModCallback.POST_EFFECT_RENDER] = "POST_EFFECT_RENDER"
____exports.ModCallback.POST_BOMB_INIT = 57
____exports.ModCallback[____exports.ModCallback.POST_BOMB_INIT] = "POST_BOMB_INIT"
____exports.ModCallback.POST_BOMB_UPDATE = 58
____exports.ModCallback[____exports.ModCallback.POST_BOMB_UPDATE] = "POST_BOMB_UPDATE"
____exports.ModCallback.POST_BOMB_RENDER = 59
____exports.ModCallback[____exports.ModCallback.POST_BOMB_RENDER] = "POST_BOMB_RENDER"
____exports.ModCallback.PRE_BOMB_COLLISION = 60
____exports.ModCallback[____exports.ModCallback.PRE_BOMB_COLLISION] = "PRE_BOMB_COLLISION"
____exports.ModCallback.POST_FIRE_TEAR = 61
____exports.ModCallback[____exports.ModCallback.POST_FIRE_TEAR] = "POST_FIRE_TEAR"
____exports.ModCallback.PRE_GET_COLLECTIBLE = 62
____exports.ModCallback[____exports.ModCallback.PRE_GET_COLLECTIBLE] = "PRE_GET_COLLECTIBLE"
____exports.ModCallback.POST_GET_COLLECTIBLE = 63
____exports.ModCallback[____exports.ModCallback.POST_GET_COLLECTIBLE] = "POST_GET_COLLECTIBLE"
____exports.ModCallback.GET_PILL_COLOR = 64
____exports.ModCallback[____exports.ModCallback.GET_PILL_COLOR] = "GET_PILL_COLOR"
____exports.ModCallback.GET_PILL_EFFECT = 65
____exports.ModCallback[____exports.ModCallback.GET_PILL_EFFECT] = "GET_PILL_EFFECT"
____exports.ModCallback.GET_TRINKET = 66
____exports.ModCallback[____exports.ModCallback.GET_TRINKET] = "GET_TRINKET"
____exports.ModCallback.POST_ENTITY_REMOVE = 67
____exports.ModCallback[____exports.ModCallback.POST_ENTITY_REMOVE] = "POST_ENTITY_REMOVE"
____exports.ModCallback.POST_ENTITY_KILL = 68
____exports.ModCallback[____exports.ModCallback.POST_ENTITY_KILL] = "POST_ENTITY_KILL"
____exports.ModCallback.PRE_NPC_UPDATE = 69
____exports.ModCallback[____exports.ModCallback.PRE_NPC_UPDATE] = "PRE_NPC_UPDATE"
____exports.ModCallback.PRE_SPAWN_CLEAR_AWARD = 70
____exports.ModCallback[____exports.ModCallback.PRE_SPAWN_CLEAR_AWARD] = "PRE_SPAWN_CLEAR_AWARD"
____exports.ModCallback.PRE_ROOM_ENTITY_SPAWN = 71
____exports.ModCallback[____exports.ModCallback.PRE_ROOM_ENTITY_SPAWN] = "PRE_ROOM_ENTITY_SPAWN"
____exports.ModCallback.PRE_ENTITY_DEVOLVE = 72
____exports.ModCallback[____exports.ModCallback.PRE_ENTITY_DEVOLVE] = "PRE_ENTITY_DEVOLVE"
____exports.ModCallback.PRE_MOD_UNLOAD = 73
____exports.ModCallback[____exports.ModCallback.PRE_MOD_UNLOAD] = "PRE_MOD_UNLOAD"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.LineCheckMode"] = function(...) 
local ____exports = {}
____exports.LineCheckMode = {}
____exports.LineCheckMode.NORMAL = 0
____exports.LineCheckMode[____exports.LineCheckMode.NORMAL] = "NORMAL"
____exports.LineCheckMode.ECONOMIC = 1
____exports.LineCheckMode[____exports.LineCheckMode.ECONOMIC] = "ECONOMIC"
____exports.LineCheckMode.EXPLOSION = 2
____exports.LineCheckMode[____exports.LineCheckMode.EXPLOSION] = "EXPLOSION"
____exports.LineCheckMode.PROJECTILE = 3
____exports.LineCheckMode[____exports.LineCheckMode.PROJECTILE] = "PROJECTILE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.LevelStateFlag"] = function(...) 
local ____exports = {}
--- Used with the `Level.GetStateFlag` and `Level.SetStateFlag` methods.
____exports.LevelStateFlag = {}
____exports.LevelStateFlag.BUM_KILLED = 0
____exports.LevelStateFlag[____exports.LevelStateFlag.BUM_KILLED] = "BUM_KILLED"
____exports.LevelStateFlag.EVIL_BUM_KILLED = 1
____exports.LevelStateFlag[____exports.LevelStateFlag.EVIL_BUM_KILLED] = "EVIL_BUM_KILLED"
____exports.LevelStateFlag.RED_HEART_DAMAGED = 2
____exports.LevelStateFlag[____exports.LevelStateFlag.RED_HEART_DAMAGED] = "RED_HEART_DAMAGED"
____exports.LevelStateFlag.BUM_LEFT = 3
____exports.LevelStateFlag[____exports.LevelStateFlag.BUM_LEFT] = "BUM_LEFT"
____exports.LevelStateFlag.EVIL_BUM_LEFT = 4
____exports.LevelStateFlag[____exports.LevelStateFlag.EVIL_BUM_LEFT] = "EVIL_BUM_LEFT"
____exports.LevelStateFlag.DAMAGED = 5
____exports.LevelStateFlag[____exports.LevelStateFlag.DAMAGED] = "DAMAGED"
____exports.LevelStateFlag.SHOPKEEPER_KILLED_LVL = 6
____exports.LevelStateFlag[____exports.LevelStateFlag.SHOPKEEPER_KILLED_LVL] = "SHOPKEEPER_KILLED_LVL"
____exports.LevelStateFlag.COMPASS_EFFECT = 7
____exports.LevelStateFlag[____exports.LevelStateFlag.COMPASS_EFFECT] = "COMPASS_EFFECT"
____exports.LevelStateFlag.MAP_EFFECT = 8
____exports.LevelStateFlag[____exports.LevelStateFlag.MAP_EFFECT] = "MAP_EFFECT"
____exports.LevelStateFlag.BLUE_MAP_EFFECT = 9
____exports.LevelStateFlag[____exports.LevelStateFlag.BLUE_MAP_EFFECT] = "BLUE_MAP_EFFECT"
____exports.LevelStateFlag.FULL_MAP_EFFECT = 10
____exports.LevelStateFlag[____exports.LevelStateFlag.FULL_MAP_EFFECT] = "FULL_MAP_EFFECT"
____exports.LevelStateFlag.GREED_LOST_PENALTY = 11
____exports.LevelStateFlag[____exports.LevelStateFlag.GREED_LOST_PENALTY] = "GREED_LOST_PENALTY"
____exports.LevelStateFlag.GREED_MONSTRO_SPAWNED = 12
____exports.LevelStateFlag[____exports.LevelStateFlag.GREED_MONSTRO_SPAWNED] = "GREED_MONSTRO_SPAWNED"
____exports.LevelStateFlag.ITEM_DUNGEON_FOUND = 13
____exports.LevelStateFlag[____exports.LevelStateFlag.ITEM_DUNGEON_FOUND] = "ITEM_DUNGEON_FOUND"
____exports.LevelStateFlag.MAMA_MEGA_USED = 14
____exports.LevelStateFlag[____exports.LevelStateFlag.MAMA_MEGA_USED] = "MAMA_MEGA_USED"
____exports.LevelStateFlag.WOODEN_CROSS_REMOVED = 15
____exports.LevelStateFlag[____exports.LevelStateFlag.WOODEN_CROSS_REMOVED] = "WOODEN_CROSS_REMOVED"
____exports.LevelStateFlag.SHOVEL_QUEST_TRIGGERED = 16
____exports.LevelStateFlag[____exports.LevelStateFlag.SHOVEL_QUEST_TRIGGERED] = "SHOVEL_QUEST_TRIGGERED"
____exports.LevelStateFlag.SATANIC_BIBLE_USED = 17
____exports.LevelStateFlag[____exports.LevelStateFlag.SATANIC_BIBLE_USED] = "SATANIC_BIBLE_USED"
____exports.LevelStateFlag.SOL_EFFECT = 18
____exports.LevelStateFlag[____exports.LevelStateFlag.SOL_EFFECT] = "SOL_EFFECT"
____exports.LevelStateFlag.LEVEL_START_TRIGGERED = 19
____exports.LevelStateFlag[____exports.LevelStateFlag.LEVEL_START_TRIGGERED] = "LEVEL_START_TRIGGERED"
____exports.LevelStateFlag.LUNA_EFFECT = 20
____exports.LevelStateFlag[____exports.LevelStateFlag.LUNA_EFFECT] = "LUNA_EFFECT"
____exports.LevelStateFlag.VOID_DOOR_DISABLED = 21
____exports.LevelStateFlag[____exports.LevelStateFlag.VOID_DOOR_DISABLED] = "VOID_DOOR_DISABLED"
____exports.LevelStateFlag.MINESHAFT_ESCAPE = 22
____exports.LevelStateFlag[____exports.LevelStateFlag.MINESHAFT_ESCAPE] = "MINESHAFT_ESCAPE"
____exports.LevelStateFlag.MIRROR_BROKEN = 23
____exports.LevelStateFlag[____exports.LevelStateFlag.MIRROR_BROKEN] = "MIRROR_BROKEN"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.LevelStage"] = function(...) 
local ____exports = {}
____exports.LevelStage = {}
____exports.LevelStage.BASEMENT_1 = 1
____exports.LevelStage[____exports.LevelStage.BASEMENT_1] = "BASEMENT_1"
____exports.LevelStage.BASEMENT_2 = 2
____exports.LevelStage[____exports.LevelStage.BASEMENT_2] = "BASEMENT_2"
____exports.LevelStage.CAVES_1 = 3
____exports.LevelStage[____exports.LevelStage.CAVES_1] = "CAVES_1"
____exports.LevelStage.CAVES_2 = 4
____exports.LevelStage[____exports.LevelStage.CAVES_2] = "CAVES_2"
____exports.LevelStage.DEPTHS_1 = 5
____exports.LevelStage[____exports.LevelStage.DEPTHS_1] = "DEPTHS_1"
____exports.LevelStage.DEPTHS_2 = 6
____exports.LevelStage[____exports.LevelStage.DEPTHS_2] = "DEPTHS_2"
____exports.LevelStage.WOMB_1 = 7
____exports.LevelStage[____exports.LevelStage.WOMB_1] = "WOMB_1"
____exports.LevelStage.WOMB_2 = 8
____exports.LevelStage[____exports.LevelStage.WOMB_2] = "WOMB_2"
____exports.LevelStage.BLUE_WOMB = 9
____exports.LevelStage[____exports.LevelStage.BLUE_WOMB] = "BLUE_WOMB"
____exports.LevelStage.SHEOL_CATHEDRAL = 10
____exports.LevelStage[____exports.LevelStage.SHEOL_CATHEDRAL] = "SHEOL_CATHEDRAL"
____exports.LevelStage.DARK_ROOM_CHEST = 11
____exports.LevelStage[____exports.LevelStage.DARK_ROOM_CHEST] = "DARK_ROOM_CHEST"
____exports.LevelStage.VOID = 12
____exports.LevelStage[____exports.LevelStage.VOID] = "VOID"
____exports.LevelStage.HOME = 13
____exports.LevelStage[____exports.LevelStage.HOME] = "HOME"
____exports.LevelStage.BASEMENT_GREED_MODE = 1
____exports.LevelStage[____exports.LevelStage.BASEMENT_GREED_MODE] = "BASEMENT_GREED_MODE"
____exports.LevelStage.CAVES_GREED_MODE = 2
____exports.LevelStage[____exports.LevelStage.CAVES_GREED_MODE] = "CAVES_GREED_MODE"
____exports.LevelStage.DEPTHS_GREED_MODE = 3
____exports.LevelStage[____exports.LevelStage.DEPTHS_GREED_MODE] = "DEPTHS_GREED_MODE"
____exports.LevelStage.WOMB_GREED_MODE = 4
____exports.LevelStage[____exports.LevelStage.WOMB_GREED_MODE] = "WOMB_GREED_MODE"
____exports.LevelStage.SHEOL_GREED_MODE = 5
____exports.LevelStage[____exports.LevelStage.SHEOL_GREED_MODE] = "SHEOL_GREED_MODE"
____exports.LevelStage.SHOP_GREED_MODE = 6
____exports.LevelStage[____exports.LevelStage.SHOP_GREED_MODE] = "SHOP_GREED_MODE"
____exports.LevelStage.ULTRA_GREED_GREED_MODE = 7
____exports.LevelStage[____exports.LevelStage.ULTRA_GREED_GREED_MODE] = "ULTRA_GREED_GREED_MODE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.LaserOffset"] = function(...) 
local ____exports = {}
____exports.LaserOffset = {}
____exports.LaserOffset.TECH_1 = 0
____exports.LaserOffset[____exports.LaserOffset.TECH_1] = "TECH_1"
____exports.LaserOffset.TECH_2 = 1
____exports.LaserOffset[____exports.LaserOffset.TECH_2] = "TECH_2"
____exports.LaserOffset.TECH_5 = 2
____exports.LaserOffset[____exports.LaserOffset.TECH_5] = "TECH_5"
____exports.LaserOffset.SHOOP = 3
____exports.LaserOffset[____exports.LaserOffset.SHOOP] = "SHOOP"
____exports.LaserOffset.BRIMSTONE = 4
____exports.LaserOffset[____exports.LaserOffset.BRIMSTONE] = "BRIMSTONE"
____exports.LaserOffset.MOMS_EYE = 5
____exports.LaserOffset[____exports.LaserOffset.MOMS_EYE] = "MOMS_EYE"
____exports.LaserOffset.TRACTOR_BEAM = 6
____exports.LaserOffset[____exports.LaserOffset.TRACTOR_BEAM] = "TRACTOR_BEAM"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.LanguageAbbreviation"] = function(...) 
local ____exports = {}
--- Listed in order of how they cycle through the options menu.
____exports.LanguageAbbreviation = {}
____exports.LanguageAbbreviation.ENGLISH = "en"
____exports.LanguageAbbreviation.JAPANESE = "jp"
____exports.LanguageAbbreviation.SPANISH = "es"
____exports.LanguageAbbreviation.GERMAN = "de"
____exports.LanguageAbbreviation.RUSSIAN = "ru"
____exports.LanguageAbbreviation.KOREAN = "kr"
____exports.LanguageAbbreviation.CHINESE_SIMPLE = "zh"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.Keyboard"] = function(...) 
local ____exports = {}
____exports.Keyboard = {}
____exports.Keyboard.SPACE = 32
____exports.Keyboard[____exports.Keyboard.SPACE] = "SPACE"
____exports.Keyboard.APOSTROPHE = 39
____exports.Keyboard[____exports.Keyboard.APOSTROPHE] = "APOSTROPHE"
____exports.Keyboard.COMMA = 44
____exports.Keyboard[____exports.Keyboard.COMMA] = "COMMA"
____exports.Keyboard.MINUS = 45
____exports.Keyboard[____exports.Keyboard.MINUS] = "MINUS"
____exports.Keyboard.PERIOD = 46
____exports.Keyboard[____exports.Keyboard.PERIOD] = "PERIOD"
____exports.Keyboard.SLASH = 47
____exports.Keyboard[____exports.Keyboard.SLASH] = "SLASH"
____exports.Keyboard.ZERO = 48
____exports.Keyboard[____exports.Keyboard.ZERO] = "ZERO"
____exports.Keyboard.ONE = 49
____exports.Keyboard[____exports.Keyboard.ONE] = "ONE"
____exports.Keyboard.TWO = 50
____exports.Keyboard[____exports.Keyboard.TWO] = "TWO"
____exports.Keyboard.THREE = 51
____exports.Keyboard[____exports.Keyboard.THREE] = "THREE"
____exports.Keyboard.FOUR = 52
____exports.Keyboard[____exports.Keyboard.FOUR] = "FOUR"
____exports.Keyboard.FIVE = 53
____exports.Keyboard[____exports.Keyboard.FIVE] = "FIVE"
____exports.Keyboard.SIX = 54
____exports.Keyboard[____exports.Keyboard.SIX] = "SIX"
____exports.Keyboard.SEVEN = 55
____exports.Keyboard[____exports.Keyboard.SEVEN] = "SEVEN"
____exports.Keyboard.EIGHT = 56
____exports.Keyboard[____exports.Keyboard.EIGHT] = "EIGHT"
____exports.Keyboard.NINE = 57
____exports.Keyboard[____exports.Keyboard.NINE] = "NINE"
____exports.Keyboard.SEMICOLON = 59
____exports.Keyboard[____exports.Keyboard.SEMICOLON] = "SEMICOLON"
____exports.Keyboard.EQUAL = 61
____exports.Keyboard[____exports.Keyboard.EQUAL] = "EQUAL"
____exports.Keyboard.A = 65
____exports.Keyboard[____exports.Keyboard.A] = "A"
____exports.Keyboard.B = 66
____exports.Keyboard[____exports.Keyboard.B] = "B"
____exports.Keyboard.C = 67
____exports.Keyboard[____exports.Keyboard.C] = "C"
____exports.Keyboard.D = 68
____exports.Keyboard[____exports.Keyboard.D] = "D"
____exports.Keyboard.E = 69
____exports.Keyboard[____exports.Keyboard.E] = "E"
____exports.Keyboard.F = 70
____exports.Keyboard[____exports.Keyboard.F] = "F"
____exports.Keyboard.G = 71
____exports.Keyboard[____exports.Keyboard.G] = "G"
____exports.Keyboard.H = 72
____exports.Keyboard[____exports.Keyboard.H] = "H"
____exports.Keyboard.I = 73
____exports.Keyboard[____exports.Keyboard.I] = "I"
____exports.Keyboard.J = 74
____exports.Keyboard[____exports.Keyboard.J] = "J"
____exports.Keyboard.K = 75
____exports.Keyboard[____exports.Keyboard.K] = "K"
____exports.Keyboard.L = 76
____exports.Keyboard[____exports.Keyboard.L] = "L"
____exports.Keyboard.M = 77
____exports.Keyboard[____exports.Keyboard.M] = "M"
____exports.Keyboard.N = 78
____exports.Keyboard[____exports.Keyboard.N] = "N"
____exports.Keyboard.O = 79
____exports.Keyboard[____exports.Keyboard.O] = "O"
____exports.Keyboard.P = 80
____exports.Keyboard[____exports.Keyboard.P] = "P"
____exports.Keyboard.Q = 81
____exports.Keyboard[____exports.Keyboard.Q] = "Q"
____exports.Keyboard.R = 82
____exports.Keyboard[____exports.Keyboard.R] = "R"
____exports.Keyboard.S = 83
____exports.Keyboard[____exports.Keyboard.S] = "S"
____exports.Keyboard.T = 84
____exports.Keyboard[____exports.Keyboard.T] = "T"
____exports.Keyboard.U = 85
____exports.Keyboard[____exports.Keyboard.U] = "U"
____exports.Keyboard.V = 86
____exports.Keyboard[____exports.Keyboard.V] = "V"
____exports.Keyboard.W = 87
____exports.Keyboard[____exports.Keyboard.W] = "W"
____exports.Keyboard.X = 88
____exports.Keyboard[____exports.Keyboard.X] = "X"
____exports.Keyboard.Y = 89
____exports.Keyboard[____exports.Keyboard.Y] = "Y"
____exports.Keyboard.Z = 90
____exports.Keyboard[____exports.Keyboard.Z] = "Z"
____exports.Keyboard.LEFT_BRACKET = 91
____exports.Keyboard[____exports.Keyboard.LEFT_BRACKET] = "LEFT_BRACKET"
____exports.Keyboard.BACKSLASH = 92
____exports.Keyboard[____exports.Keyboard.BACKSLASH] = "BACKSLASH"
____exports.Keyboard.RIGHT_BRACKET = 93
____exports.Keyboard[____exports.Keyboard.RIGHT_BRACKET] = "RIGHT_BRACKET"
____exports.Keyboard.GRAVE_ACCENT = 96
____exports.Keyboard[____exports.Keyboard.GRAVE_ACCENT] = "GRAVE_ACCENT"
____exports.Keyboard.WORLD_1 = 161
____exports.Keyboard[____exports.Keyboard.WORLD_1] = "WORLD_1"
____exports.Keyboard.WORLD_2 = 162
____exports.Keyboard[____exports.Keyboard.WORLD_2] = "WORLD_2"
____exports.Keyboard.ESCAPE = 256
____exports.Keyboard[____exports.Keyboard.ESCAPE] = "ESCAPE"
____exports.Keyboard.ENTER = 257
____exports.Keyboard[____exports.Keyboard.ENTER] = "ENTER"
____exports.Keyboard.TAB = 258
____exports.Keyboard[____exports.Keyboard.TAB] = "TAB"
____exports.Keyboard.BACKSPACE = 259
____exports.Keyboard[____exports.Keyboard.BACKSPACE] = "BACKSPACE"
____exports.Keyboard.INSERT = 260
____exports.Keyboard[____exports.Keyboard.INSERT] = "INSERT"
____exports.Keyboard.DELETE = 261
____exports.Keyboard[____exports.Keyboard.DELETE] = "DELETE"
____exports.Keyboard.RIGHT = 262
____exports.Keyboard[____exports.Keyboard.RIGHT] = "RIGHT"
____exports.Keyboard.LEFT = 263
____exports.Keyboard[____exports.Keyboard.LEFT] = "LEFT"
____exports.Keyboard.DOWN = 264
____exports.Keyboard[____exports.Keyboard.DOWN] = "DOWN"
____exports.Keyboard.UP = 265
____exports.Keyboard[____exports.Keyboard.UP] = "UP"
____exports.Keyboard.PAGE_UP = 266
____exports.Keyboard[____exports.Keyboard.PAGE_UP] = "PAGE_UP"
____exports.Keyboard.PAGE_DOWN = 267
____exports.Keyboard[____exports.Keyboard.PAGE_DOWN] = "PAGE_DOWN"
____exports.Keyboard.HOME = 268
____exports.Keyboard[____exports.Keyboard.HOME] = "HOME"
____exports.Keyboard.END = 269
____exports.Keyboard[____exports.Keyboard.END] = "END"
____exports.Keyboard.CAPS_LOCK = 280
____exports.Keyboard[____exports.Keyboard.CAPS_LOCK] = "CAPS_LOCK"
____exports.Keyboard.SCROLL_LOCK = 281
____exports.Keyboard[____exports.Keyboard.SCROLL_LOCK] = "SCROLL_LOCK"
____exports.Keyboard.NUM_LOCK = 282
____exports.Keyboard[____exports.Keyboard.NUM_LOCK] = "NUM_LOCK"
____exports.Keyboard.PRINT_SCREEN = 283
____exports.Keyboard[____exports.Keyboard.PRINT_SCREEN] = "PRINT_SCREEN"
____exports.Keyboard.PAUSE = 284
____exports.Keyboard[____exports.Keyboard.PAUSE] = "PAUSE"
____exports.Keyboard.F1 = 290
____exports.Keyboard[____exports.Keyboard.F1] = "F1"
____exports.Keyboard.F2 = 291
____exports.Keyboard[____exports.Keyboard.F2] = "F2"
____exports.Keyboard.F3 = 292
____exports.Keyboard[____exports.Keyboard.F3] = "F3"
____exports.Keyboard.F4 = 293
____exports.Keyboard[____exports.Keyboard.F4] = "F4"
____exports.Keyboard.F5 = 294
____exports.Keyboard[____exports.Keyboard.F5] = "F5"
____exports.Keyboard.F6 = 295
____exports.Keyboard[____exports.Keyboard.F6] = "F6"
____exports.Keyboard.F7 = 296
____exports.Keyboard[____exports.Keyboard.F7] = "F7"
____exports.Keyboard.F8 = 297
____exports.Keyboard[____exports.Keyboard.F8] = "F8"
____exports.Keyboard.F9 = 298
____exports.Keyboard[____exports.Keyboard.F9] = "F9"
____exports.Keyboard.F10 = 299
____exports.Keyboard[____exports.Keyboard.F10] = "F10"
____exports.Keyboard.F11 = 300
____exports.Keyboard[____exports.Keyboard.F11] = "F11"
____exports.Keyboard.F12 = 301
____exports.Keyboard[____exports.Keyboard.F12] = "F12"
____exports.Keyboard.F13 = 302
____exports.Keyboard[____exports.Keyboard.F13] = "F13"
____exports.Keyboard.F14 = 303
____exports.Keyboard[____exports.Keyboard.F14] = "F14"
____exports.Keyboard.F15 = 304
____exports.Keyboard[____exports.Keyboard.F15] = "F15"
____exports.Keyboard.F16 = 305
____exports.Keyboard[____exports.Keyboard.F16] = "F16"
____exports.Keyboard.F17 = 306
____exports.Keyboard[____exports.Keyboard.F17] = "F17"
____exports.Keyboard.F18 = 307
____exports.Keyboard[____exports.Keyboard.F18] = "F18"
____exports.Keyboard.F19 = 308
____exports.Keyboard[____exports.Keyboard.F19] = "F19"
____exports.Keyboard.F20 = 309
____exports.Keyboard[____exports.Keyboard.F20] = "F20"
____exports.Keyboard.F21 = 310
____exports.Keyboard[____exports.Keyboard.F21] = "F21"
____exports.Keyboard.F22 = 311
____exports.Keyboard[____exports.Keyboard.F22] = "F22"
____exports.Keyboard.F23 = 312
____exports.Keyboard[____exports.Keyboard.F23] = "F23"
____exports.Keyboard.F24 = 313
____exports.Keyboard[____exports.Keyboard.F24] = "F24"
____exports.Keyboard.F25 = 314
____exports.Keyboard[____exports.Keyboard.F25] = "F25"
____exports.Keyboard.KP_0 = 320
____exports.Keyboard[____exports.Keyboard.KP_0] = "KP_0"
____exports.Keyboard.KP_1 = 321
____exports.Keyboard[____exports.Keyboard.KP_1] = "KP_1"
____exports.Keyboard.KP_2 = 322
____exports.Keyboard[____exports.Keyboard.KP_2] = "KP_2"
____exports.Keyboard.KP_3 = 323
____exports.Keyboard[____exports.Keyboard.KP_3] = "KP_3"
____exports.Keyboard.KP_4 = 324
____exports.Keyboard[____exports.Keyboard.KP_4] = "KP_4"
____exports.Keyboard.KP_5 = 325
____exports.Keyboard[____exports.Keyboard.KP_5] = "KP_5"
____exports.Keyboard.KP_6 = 326
____exports.Keyboard[____exports.Keyboard.KP_6] = "KP_6"
____exports.Keyboard.KP_7 = 327
____exports.Keyboard[____exports.Keyboard.KP_7] = "KP_7"
____exports.Keyboard.KP_8 = 328
____exports.Keyboard[____exports.Keyboard.KP_8] = "KP_8"
____exports.Keyboard.KP_9 = 329
____exports.Keyboard[____exports.Keyboard.KP_9] = "KP_9"
____exports.Keyboard.KP_DECIMAL = 330
____exports.Keyboard[____exports.Keyboard.KP_DECIMAL] = "KP_DECIMAL"
____exports.Keyboard.KP_DIVIDE = 331
____exports.Keyboard[____exports.Keyboard.KP_DIVIDE] = "KP_DIVIDE"
____exports.Keyboard.KP_MULTIPLY = 332
____exports.Keyboard[____exports.Keyboard.KP_MULTIPLY] = "KP_MULTIPLY"
____exports.Keyboard.KP_SUBTRACT = 333
____exports.Keyboard[____exports.Keyboard.KP_SUBTRACT] = "KP_SUBTRACT"
____exports.Keyboard.KP_ADD = 334
____exports.Keyboard[____exports.Keyboard.KP_ADD] = "KP_ADD"
____exports.Keyboard.KP_ENTER = 335
____exports.Keyboard[____exports.Keyboard.KP_ENTER] = "KP_ENTER"
____exports.Keyboard.KP_EQUAL = 336
____exports.Keyboard[____exports.Keyboard.KP_EQUAL] = "KP_EQUAL"
____exports.Keyboard.LEFT_SHIFT = 340
____exports.Keyboard[____exports.Keyboard.LEFT_SHIFT] = "LEFT_SHIFT"
____exports.Keyboard.LEFT_CONTROL = 341
____exports.Keyboard[____exports.Keyboard.LEFT_CONTROL] = "LEFT_CONTROL"
____exports.Keyboard.LEFT_ALT = 342
____exports.Keyboard[____exports.Keyboard.LEFT_ALT] = "LEFT_ALT"
____exports.Keyboard.LEFT_SUPER = 343
____exports.Keyboard[____exports.Keyboard.LEFT_SUPER] = "LEFT_SUPER"
____exports.Keyboard.RIGHT_SHIFT = 344
____exports.Keyboard[____exports.Keyboard.RIGHT_SHIFT] = "RIGHT_SHIFT"
____exports.Keyboard.RIGHT_CONTROL = 345
____exports.Keyboard[____exports.Keyboard.RIGHT_CONTROL] = "RIGHT_CONTROL"
____exports.Keyboard.RIGHT_ALT = 346
____exports.Keyboard[____exports.Keyboard.RIGHT_ALT] = "RIGHT_ALT"
____exports.Keyboard.RIGHT_SUPER = 347
____exports.Keyboard[____exports.Keyboard.RIGHT_SUPER] = "RIGHT_SUPER"
____exports.Keyboard.MENU = 348
____exports.Keyboard[____exports.Keyboard.MENU] = "MENU"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ItemType"] = function(...) 
local ____exports = {}
____exports.ItemType = {}
____exports.ItemType.NULL = 0
____exports.ItemType[____exports.ItemType.NULL] = "NULL"
____exports.ItemType.PASSIVE = 1
____exports.ItemType[____exports.ItemType.PASSIVE] = "PASSIVE"
____exports.ItemType.TRINKET = 2
____exports.ItemType[____exports.ItemType.TRINKET] = "TRINKET"
____exports.ItemType.ACTIVE = 3
____exports.ItemType[____exports.ItemType.ACTIVE] = "ACTIVE"
____exports.ItemType.FAMILIAR = 4
____exports.ItemType[____exports.ItemType.FAMILIAR] = "FAMILIAR"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ItemPoolType"] = function(...) 
local ____exports = {}
____exports.ItemPoolType = {}
____exports.ItemPoolType.TREASURE = 0
____exports.ItemPoolType[____exports.ItemPoolType.TREASURE] = "TREASURE"
____exports.ItemPoolType.SHOP = 1
____exports.ItemPoolType[____exports.ItemPoolType.SHOP] = "SHOP"
____exports.ItemPoolType.BOSS = 2
____exports.ItemPoolType[____exports.ItemPoolType.BOSS] = "BOSS"
____exports.ItemPoolType.DEVIL = 3
____exports.ItemPoolType[____exports.ItemPoolType.DEVIL] = "DEVIL"
____exports.ItemPoolType.ANGEL = 4
____exports.ItemPoolType[____exports.ItemPoolType.ANGEL] = "ANGEL"
____exports.ItemPoolType.SECRET = 5
____exports.ItemPoolType[____exports.ItemPoolType.SECRET] = "SECRET"
____exports.ItemPoolType.LIBRARY = 6
____exports.ItemPoolType[____exports.ItemPoolType.LIBRARY] = "LIBRARY"
____exports.ItemPoolType.SHELL_GAME = 7
____exports.ItemPoolType[____exports.ItemPoolType.SHELL_GAME] = "SHELL_GAME"
____exports.ItemPoolType.GOLDEN_CHEST = 8
____exports.ItemPoolType[____exports.ItemPoolType.GOLDEN_CHEST] = "GOLDEN_CHEST"
____exports.ItemPoolType.RED_CHEST = 9
____exports.ItemPoolType[____exports.ItemPoolType.RED_CHEST] = "RED_CHEST"
____exports.ItemPoolType.BEGGAR = 10
____exports.ItemPoolType[____exports.ItemPoolType.BEGGAR] = "BEGGAR"
____exports.ItemPoolType.DEMON_BEGGAR = 11
____exports.ItemPoolType[____exports.ItemPoolType.DEMON_BEGGAR] = "DEMON_BEGGAR"
____exports.ItemPoolType.CURSE = 12
____exports.ItemPoolType[____exports.ItemPoolType.CURSE] = "CURSE"
____exports.ItemPoolType.KEY_MASTER = 13
____exports.ItemPoolType[____exports.ItemPoolType.KEY_MASTER] = "KEY_MASTER"
____exports.ItemPoolType.BATTERY_BUM = 14
____exports.ItemPoolType[____exports.ItemPoolType.BATTERY_BUM] = "BATTERY_BUM"
____exports.ItemPoolType.MOMS_CHEST = 15
____exports.ItemPoolType[____exports.ItemPoolType.MOMS_CHEST] = "MOMS_CHEST"
____exports.ItemPoolType.GREED_TREASURE = 16
____exports.ItemPoolType[____exports.ItemPoolType.GREED_TREASURE] = "GREED_TREASURE"
____exports.ItemPoolType.GREED_BOSS = 17
____exports.ItemPoolType[____exports.ItemPoolType.GREED_BOSS] = "GREED_BOSS"
____exports.ItemPoolType.GREED_SHOP = 18
____exports.ItemPoolType[____exports.ItemPoolType.GREED_SHOP] = "GREED_SHOP"
____exports.ItemPoolType.GREED_DEVIL = 19
____exports.ItemPoolType[____exports.ItemPoolType.GREED_DEVIL] = "GREED_DEVIL"
____exports.ItemPoolType.GREED_ANGEL = 20
____exports.ItemPoolType[____exports.ItemPoolType.GREED_ANGEL] = "GREED_ANGEL"
____exports.ItemPoolType.GREED_CURSE = 21
____exports.ItemPoolType[____exports.ItemPoolType.GREED_CURSE] = "GREED_CURSE"
____exports.ItemPoolType.GREED_SECRET = 22
____exports.ItemPoolType[____exports.ItemPoolType.GREED_SECRET] = "GREED_SECRET"
____exports.ItemPoolType.CRANE_GAME = 23
____exports.ItemPoolType[____exports.ItemPoolType.CRANE_GAME] = "CRANE_GAME"
____exports.ItemPoolType.ULTRA_SECRET = 24
____exports.ItemPoolType[____exports.ItemPoolType.ULTRA_SECRET] = "ULTRA_SECRET"
____exports.ItemPoolType.BOMB_BUM = 25
____exports.ItemPoolType[____exports.ItemPoolType.BOMB_BUM] = "BOMB_BUM"
____exports.ItemPoolType.PLANETARIUM = 26
____exports.ItemPoolType[____exports.ItemPoolType.PLANETARIUM] = "PLANETARIUM"
____exports.ItemPoolType.OLD_CHEST = 27
____exports.ItemPoolType[____exports.ItemPoolType.OLD_CHEST] = "OLD_CHEST"
____exports.ItemPoolType.BABY_SHOP = 28
____exports.ItemPoolType[____exports.ItemPoolType.BABY_SHOP] = "BABY_SHOP"
____exports.ItemPoolType.WOODEN_CHEST = 29
____exports.ItemPoolType[____exports.ItemPoolType.WOODEN_CHEST] = "WOODEN_CHEST"
____exports.ItemPoolType.ROTTEN_BEGGAR = 30
____exports.ItemPoolType[____exports.ItemPoolType.ROTTEN_BEGGAR] = "ROTTEN_BEGGAR"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ItemConfigPillEffectType"] = function(...) 
local ____exports = {}
--- This corresponds to the suffix of the "class" tag in the "pocketitems.xml" file. "+" is equal to
-- `POSITIVE`, "-" is equal to `NEGATIVE`, and no suffix is equal to `NEUTRAL`.
____exports.ItemConfigPillEffectType = {}
____exports.ItemConfigPillEffectType.POSITIVE = 0
____exports.ItemConfigPillEffectType[____exports.ItemConfigPillEffectType.POSITIVE] = "POSITIVE"
____exports.ItemConfigPillEffectType.NEGATIVE = 1
____exports.ItemConfigPillEffectType[____exports.ItemConfigPillEffectType.NEGATIVE] = "NEGATIVE"
____exports.ItemConfigPillEffectType.NEUTRAL = 2
____exports.ItemConfigPillEffectType[____exports.ItemConfigPillEffectType.NEUTRAL] = "NEUTRAL"
____exports.ItemConfigPillEffectType.MODDED = 3
____exports.ItemConfigPillEffectType[____exports.ItemConfigPillEffectType.MODDED] = "MODDED"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ItemConfigPillEffectClass"] = function(...) 
local ____exports = {}
--- This corresponds to the number in the "class" tag in the "pocketitems.xml" file. The "+" or "-"
-- part of the tag is contained within the `ItemConfigPillEffectType` enum.
____exports.ItemConfigPillEffectClass = {}
____exports.ItemConfigPillEffectClass.JOKE = 0
____exports.ItemConfigPillEffectClass[____exports.ItemConfigPillEffectClass.JOKE] = "JOKE"
____exports.ItemConfigPillEffectClass.MINOR = 1
____exports.ItemConfigPillEffectClass[____exports.ItemConfigPillEffectClass.MINOR] = "MINOR"
____exports.ItemConfigPillEffectClass.MEDIUM = 2
____exports.ItemConfigPillEffectClass[____exports.ItemConfigPillEffectClass.MEDIUM] = "MEDIUM"
____exports.ItemConfigPillEffectClass.MAJOR = 3
____exports.ItemConfigPillEffectClass[____exports.ItemConfigPillEffectClass.MAJOR] = "MAJOR"
____exports.ItemConfigPillEffectClass.MODDED = 4
____exports.ItemConfigPillEffectClass[____exports.ItemConfigPillEffectClass.MODDED] = "MODDED"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ItemConfigChargeType"] = function(...) 
local ____exports = {}
--- Matches the `ItemConfig.CHARGE_` members of the `ItemConfig` class. In IsaacScript, we
-- reimplement this as an enum instead, since it is cleaner.
____exports.ItemConfigChargeType = {}
____exports.ItemConfigChargeType.NORMAL = 0
____exports.ItemConfigChargeType[____exports.ItemConfigChargeType.NORMAL] = "NORMAL"
____exports.ItemConfigChargeType.TIMED = 1
____exports.ItemConfigChargeType[____exports.ItemConfigChargeType.TIMED] = "TIMED"
____exports.ItemConfigChargeType.SPECIAL = 2
____exports.ItemConfigChargeType[____exports.ItemConfigChargeType.SPECIAL] = "SPECIAL"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ItemConfigCardType"] = function(...) 
local ____exports = {}
--- Corresponds to the "type" attribute in the "pocketitems.xml" file.
-- 
-- Matches the `ItemConfig.CARDTYPE_` members of the `ItemConfig` class. In IsaacScript, we
-- reimplement this as an enum instead, since it is cleaner.
-- 
-- Note that this enum is not to be confused with the `CardType` enum; the latter denotes the
-- in-game sub-type of the card, which is completely different.
____exports.ItemConfigCardType = {}
____exports.ItemConfigCardType.NULL = -1
____exports.ItemConfigCardType[____exports.ItemConfigCardType.NULL] = "NULL"
____exports.ItemConfigCardType.TAROT = 0
____exports.ItemConfigCardType[____exports.ItemConfigCardType.TAROT] = "TAROT"
____exports.ItemConfigCardType.SUIT = 1
____exports.ItemConfigCardType[____exports.ItemConfigCardType.SUIT] = "SUIT"
____exports.ItemConfigCardType.RUNE = 2
____exports.ItemConfigCardType[____exports.ItemConfigCardType.RUNE] = "RUNE"
____exports.ItemConfigCardType.SPECIAL = 3
____exports.ItemConfigCardType[____exports.ItemConfigCardType.SPECIAL] = "SPECIAL"
____exports.ItemConfigCardType.SPECIAL_OBJECT = 4
____exports.ItemConfigCardType[____exports.ItemConfigCardType.SPECIAL_OBJECT] = "SPECIAL_OBJECT"
____exports.ItemConfigCardType.TAROT_REVERSE = 5
____exports.ItemConfigCardType[____exports.ItemConfigCardType.TAROT_REVERSE] = "TAROT_REVERSE"
____exports.ItemConfigCardType.MODDED = 6
____exports.ItemConfigCardType[____exports.ItemConfigCardType.MODDED] = "MODDED"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.InputHook"] = function(...) 
local ____exports = {}
____exports.InputHook = {}
____exports.InputHook.IS_ACTION_PRESSED = 0
____exports.InputHook[____exports.InputHook.IS_ACTION_PRESSED] = "IS_ACTION_PRESSED"
____exports.InputHook.IS_ACTION_TRIGGERED = 1
____exports.InputHook[____exports.InputHook.IS_ACTION_TRIGGERED] = "IS_ACTION_TRIGGERED"
____exports.InputHook.GET_ACTION_VALUE = 2
____exports.InputHook[____exports.InputHook.GET_ACTION_VALUE] = "GET_ACTION_VALUE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.GridRoom"] = function(...) 
local ____exports = {}
--- Most rooms have a grid index corresponding to their position on the level layout grid. Valid grid
-- indexes range from 0 through 168 (because the grid is 13x13). However, some rooms are not part of
-- the level layout grid. For off-grid rooms, they are assigned special negative integers that
-- correspond to what kind of room they are. This enum contains all of the special negative values
-- that exist.
____exports.GridRoom = {}
____exports.GridRoom.DEVIL = -1
____exports.GridRoom[____exports.GridRoom.DEVIL] = "DEVIL"
____exports.GridRoom.ERROR = -2
____exports.GridRoom[____exports.GridRoom.ERROR] = "ERROR"
____exports.GridRoom.DEBUG = -3
____exports.GridRoom[____exports.GridRoom.DEBUG] = "DEBUG"
____exports.GridRoom.DUNGEON = -4
____exports.GridRoom[____exports.GridRoom.DUNGEON] = "DUNGEON"
____exports.GridRoom.BOSS_RUSH = -5
____exports.GridRoom[____exports.GridRoom.BOSS_RUSH] = "BOSS_RUSH"
____exports.GridRoom.BLACK_MARKET = -6
____exports.GridRoom[____exports.GridRoom.BLACK_MARKET] = "BLACK_MARKET"
____exports.GridRoom.MEGA_SATAN = -7
____exports.GridRoom[____exports.GridRoom.MEGA_SATAN] = "MEGA_SATAN"
____exports.GridRoom.BLUE_WOMB = -8
____exports.GridRoom[____exports.GridRoom.BLUE_WOMB] = "BLUE_WOMB"
____exports.GridRoom.VOID = -9
____exports.GridRoom[____exports.GridRoom.VOID] = "VOID"
____exports.GridRoom.SECRET_EXIT = -10
____exports.GridRoom[____exports.GridRoom.SECRET_EXIT] = "SECRET_EXIT"
____exports.GridRoom.GIDEON_DUNGEON = -11
____exports.GridRoom[____exports.GridRoom.GIDEON_DUNGEON] = "GIDEON_DUNGEON"
____exports.GridRoom.GENESIS = -12
____exports.GridRoom[____exports.GridRoom.GENESIS] = "GENESIS"
____exports.GridRoom.SECRET_SHOP = -13
____exports.GridRoom[____exports.GridRoom.SECRET_SHOP] = "SECRET_SHOP"
____exports.GridRoom.ROTGUT_DUNGEON_1 = -14
____exports.GridRoom[____exports.GridRoom.ROTGUT_DUNGEON_1] = "ROTGUT_DUNGEON_1"
____exports.GridRoom.ROTGUT_DUNGEON_2 = -15
____exports.GridRoom[____exports.GridRoom.ROTGUT_DUNGEON_2] = "ROTGUT_DUNGEON_2"
____exports.GridRoom.BLUE_ROOM = -16
____exports.GridRoom[____exports.GridRoom.BLUE_ROOM] = "BLUE_ROOM"
____exports.GridRoom.EXTRA_BOSS = -17
____exports.GridRoom[____exports.GridRoom.EXTRA_BOSS] = "EXTRA_BOSS"
____exports.GridRoom.ANGEL_SHOP = -18
____exports.GridRoom[____exports.GridRoom.ANGEL_SHOP] = "ANGEL_SHOP"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.GridPath"] = function(...) 
local ____exports = {}
--- GridPath is not an enum, but rather a variable integer that represents the cost it would take for
-- an entity to pass through a grid entity. This enum lists some standard cost values that the
-- vanilla game uses.
____exports.GridPath = {}
____exports.GridPath.NONE = 0
____exports.GridPath[____exports.GridPath.NONE] = "NONE"
____exports.GridPath.WALKED_TILE = 900
____exports.GridPath[____exports.GridPath.WALKED_TILE] = "WALKED_TILE"
____exports.GridPath.FIREPLACE = 950
____exports.GridPath[____exports.GridPath.FIREPLACE] = "FIREPLACE"
____exports.GridPath.ROCK = 1000
____exports.GridPath[____exports.GridPath.ROCK] = "ROCK"
____exports.GridPath.PIT = 3000
____exports.GridPath[____exports.GridPath.PIT] = "PIT"
____exports.GridPath.GRIMACE = 3999
____exports.GridPath[____exports.GridPath.GRIMACE] = "GRIMACE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.GridEntityXMLType"] = function(...) 
local ____exports = {}
--- The type of a grid entity as represented in a room XML/STB file.
-- 
-- This is converted by the game to the GridEntityType enum.
-- 
-- The `gridspawn` console command accepts `GridEntityXMLType` instead of `GridEntityType`.
____exports.GridEntityXMLType = {}
____exports.GridEntityXMLType.DECORATION = 0
____exports.GridEntityXMLType[____exports.GridEntityXMLType.DECORATION] = "DECORATION"
____exports.GridEntityXMLType.EFFECT = 999
____exports.GridEntityXMLType[____exports.GridEntityXMLType.EFFECT] = "EFFECT"
____exports.GridEntityXMLType.ROCK = 1000
____exports.GridEntityXMLType[____exports.GridEntityXMLType.ROCK] = "ROCK"
____exports.GridEntityXMLType.ROCK_BOMB = 1001
____exports.GridEntityXMLType[____exports.GridEntityXMLType.ROCK_BOMB] = "ROCK_BOMB"
____exports.GridEntityXMLType.ROCK_ALT = 1002
____exports.GridEntityXMLType[____exports.GridEntityXMLType.ROCK_ALT] = "ROCK_ALT"
____exports.GridEntityXMLType.ROCK_TINTED = 1003
____exports.GridEntityXMLType[____exports.GridEntityXMLType.ROCK_TINTED] = "ROCK_TINTED"
____exports.GridEntityXMLType.ROCK_ALT_2 = 1008
____exports.GridEntityXMLType[____exports.GridEntityXMLType.ROCK_ALT_2] = "ROCK_ALT_2"
____exports.GridEntityXMLType.ROCK_EVENT = 1009
____exports.GridEntityXMLType[____exports.GridEntityXMLType.ROCK_EVENT] = "ROCK_EVENT"
____exports.GridEntityXMLType.ROCK_SPIKED = 1010
____exports.GridEntityXMLType[____exports.GridEntityXMLType.ROCK_SPIKED] = "ROCK_SPIKED"
____exports.GridEntityXMLType.ROCK_GOLD = 1011
____exports.GridEntityXMLType[____exports.GridEntityXMLType.ROCK_GOLD] = "ROCK_GOLD"
____exports.GridEntityXMLType.TNT = 1300
____exports.GridEntityXMLType[____exports.GridEntityXMLType.TNT] = "TNT"
____exports.GridEntityXMLType.FIREPLACE = 1400
____exports.GridEntityXMLType[____exports.GridEntityXMLType.FIREPLACE] = "FIREPLACE"
____exports.GridEntityXMLType.RED_FIREPLACE = 1410
____exports.GridEntityXMLType[____exports.GridEntityXMLType.RED_FIREPLACE] = "RED_FIREPLACE"
____exports.GridEntityXMLType.POOP_RED = 1490
____exports.GridEntityXMLType[____exports.GridEntityXMLType.POOP_RED] = "POOP_RED"
____exports.GridEntityXMLType.POOP_RAINBOW = 1494
____exports.GridEntityXMLType[____exports.GridEntityXMLType.POOP_RAINBOW] = "POOP_RAINBOW"
____exports.GridEntityXMLType.POOP_CORNY = 1495
____exports.GridEntityXMLType[____exports.GridEntityXMLType.POOP_CORNY] = "POOP_CORNY"
____exports.GridEntityXMLType.POOP_GOLDEN = 1496
____exports.GridEntityXMLType[____exports.GridEntityXMLType.POOP_GOLDEN] = "POOP_GOLDEN"
____exports.GridEntityXMLType.POOP_BLACK = 1497
____exports.GridEntityXMLType[____exports.GridEntityXMLType.POOP_BLACK] = "POOP_BLACK"
____exports.GridEntityXMLType.POOP_WHITE = 1498
____exports.GridEntityXMLType[____exports.GridEntityXMLType.POOP_WHITE] = "POOP_WHITE"
____exports.GridEntityXMLType.POOP_GIGA = 1499
____exports.GridEntityXMLType[____exports.GridEntityXMLType.POOP_GIGA] = "POOP_GIGA"
____exports.GridEntityXMLType.POOP = 1500
____exports.GridEntityXMLType[____exports.GridEntityXMLType.POOP] = "POOP"
____exports.GridEntityXMLType.POOP_CHARMING = 1501
____exports.GridEntityXMLType[____exports.GridEntityXMLType.POOP_CHARMING] = "POOP_CHARMING"
____exports.GridEntityXMLType.BLOCK = 1900
____exports.GridEntityXMLType[____exports.GridEntityXMLType.BLOCK] = "BLOCK"
____exports.GridEntityXMLType.PILLAR = 1901
____exports.GridEntityXMLType[____exports.GridEntityXMLType.PILLAR] = "PILLAR"
____exports.GridEntityXMLType.SPIKES = 1930
____exports.GridEntityXMLType[____exports.GridEntityXMLType.SPIKES] = "SPIKES"
____exports.GridEntityXMLType.SPIKES_ON_OFF = 1931
____exports.GridEntityXMLType[____exports.GridEntityXMLType.SPIKES_ON_OFF] = "SPIKES_ON_OFF"
____exports.GridEntityXMLType.SPIDER_WEB = 1940
____exports.GridEntityXMLType[____exports.GridEntityXMLType.SPIDER_WEB] = "SPIDER_WEB"
____exports.GridEntityXMLType.WALL = 1999
____exports.GridEntityXMLType[____exports.GridEntityXMLType.WALL] = "WALL"
____exports.GridEntityXMLType.PIT = 3000
____exports.GridEntityXMLType[____exports.GridEntityXMLType.PIT] = "PIT"
____exports.GridEntityXMLType.FISSURE_SPAWNER = 3001
____exports.GridEntityXMLType[____exports.GridEntityXMLType.FISSURE_SPAWNER] = "FISSURE_SPAWNER"
____exports.GridEntityXMLType.PIT_EVENT = 3009
____exports.GridEntityXMLType[____exports.GridEntityXMLType.PIT_EVENT] = "PIT_EVENT"
____exports.GridEntityXMLType.LOCK = 4000
____exports.GridEntityXMLType[____exports.GridEntityXMLType.LOCK] = "LOCK"
____exports.GridEntityXMLType.PRESSURE_PLATE = 4500
____exports.GridEntityXMLType[____exports.GridEntityXMLType.PRESSURE_PLATE] = "PRESSURE_PLATE"
____exports.GridEntityXMLType.STATUE_DEVIL = 5000
____exports.GridEntityXMLType[____exports.GridEntityXMLType.STATUE_DEVIL] = "STATUE_DEVIL"
____exports.GridEntityXMLType.STATUE_ANGEL = 5001
____exports.GridEntityXMLType[____exports.GridEntityXMLType.STATUE_ANGEL] = "STATUE_ANGEL"
____exports.GridEntityXMLType.TELEPORTER = 6100
____exports.GridEntityXMLType[____exports.GridEntityXMLType.TELEPORTER] = "TELEPORTER"
____exports.GridEntityXMLType.TRAPDOOR = 9000
____exports.GridEntityXMLType[____exports.GridEntityXMLType.TRAPDOOR] = "TRAPDOOR"
____exports.GridEntityXMLType.CRAWL_SPACE = 9100
____exports.GridEntityXMLType[____exports.GridEntityXMLType.CRAWL_SPACE] = "CRAWL_SPACE"
____exports.GridEntityXMLType.GRAVITY = 10000
____exports.GridEntityXMLType[____exports.GridEntityXMLType.GRAVITY] = "GRAVITY"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.GridEntityType"] = function(...) 
local ____exports = {}
____exports.GridEntityType = {}
____exports.GridEntityType.NULL = 0
____exports.GridEntityType[____exports.GridEntityType.NULL] = "NULL"
____exports.GridEntityType.DECORATION = 1
____exports.GridEntityType[____exports.GridEntityType.DECORATION] = "DECORATION"
____exports.GridEntityType.ROCK = 2
____exports.GridEntityType[____exports.GridEntityType.ROCK] = "ROCK"
____exports.GridEntityType.BLOCK = 3
____exports.GridEntityType[____exports.GridEntityType.BLOCK] = "BLOCK"
____exports.GridEntityType.ROCK_TINTED = 4
____exports.GridEntityType[____exports.GridEntityType.ROCK_TINTED] = "ROCK_TINTED"
____exports.GridEntityType.ROCK_BOMB = 5
____exports.GridEntityType[____exports.GridEntityType.ROCK_BOMB] = "ROCK_BOMB"
____exports.GridEntityType.ROCK_ALT = 6
____exports.GridEntityType[____exports.GridEntityType.ROCK_ALT] = "ROCK_ALT"
____exports.GridEntityType.PIT = 7
____exports.GridEntityType[____exports.GridEntityType.PIT] = "PIT"
____exports.GridEntityType.SPIKES = 8
____exports.GridEntityType[____exports.GridEntityType.SPIKES] = "SPIKES"
____exports.GridEntityType.SPIKES_ON_OFF = 9
____exports.GridEntityType[____exports.GridEntityType.SPIKES_ON_OFF] = "SPIKES_ON_OFF"
____exports.GridEntityType.SPIDER_WEB = 10
____exports.GridEntityType[____exports.GridEntityType.SPIDER_WEB] = "SPIDER_WEB"
____exports.GridEntityType.LOCK = 11
____exports.GridEntityType[____exports.GridEntityType.LOCK] = "LOCK"
____exports.GridEntityType.TNT = 12
____exports.GridEntityType[____exports.GridEntityType.TNT] = "TNT"
____exports.GridEntityType.FIREPLACE = 13
____exports.GridEntityType[____exports.GridEntityType.FIREPLACE] = "FIREPLACE"
____exports.GridEntityType.POOP = 14
____exports.GridEntityType[____exports.GridEntityType.POOP] = "POOP"
____exports.GridEntityType.WALL = 15
____exports.GridEntityType[____exports.GridEntityType.WALL] = "WALL"
____exports.GridEntityType.DOOR = 16
____exports.GridEntityType[____exports.GridEntityType.DOOR] = "DOOR"
____exports.GridEntityType.TRAPDOOR = 17
____exports.GridEntityType[____exports.GridEntityType.TRAPDOOR] = "TRAPDOOR"
____exports.GridEntityType.CRAWL_SPACE = 18
____exports.GridEntityType[____exports.GridEntityType.CRAWL_SPACE] = "CRAWL_SPACE"
____exports.GridEntityType.GRAVITY = 19
____exports.GridEntityType[____exports.GridEntityType.GRAVITY] = "GRAVITY"
____exports.GridEntityType.PRESSURE_PLATE = 20
____exports.GridEntityType[____exports.GridEntityType.PRESSURE_PLATE] = "PRESSURE_PLATE"
____exports.GridEntityType.STATUE = 21
____exports.GridEntityType[____exports.GridEntityType.STATUE] = "STATUE"
____exports.GridEntityType.ROCK_SUPER_SPECIAL = 22
____exports.GridEntityType[____exports.GridEntityType.ROCK_SUPER_SPECIAL] = "ROCK_SUPER_SPECIAL"
____exports.GridEntityType.TELEPORTER = 23
____exports.GridEntityType[____exports.GridEntityType.TELEPORTER] = "TELEPORTER"
____exports.GridEntityType.PILLAR = 24
____exports.GridEntityType[____exports.GridEntityType.PILLAR] = "PILLAR"
____exports.GridEntityType.ROCK_SPIKED = 25
____exports.GridEntityType[____exports.GridEntityType.ROCK_SPIKED] = "ROCK_SPIKED"
____exports.GridEntityType.ROCK_ALT_2 = 26
____exports.GridEntityType[____exports.GridEntityType.ROCK_ALT_2] = "ROCK_ALT_2"
____exports.GridEntityType.ROCK_GOLD = 27
____exports.GridEntityType[____exports.GridEntityType.ROCK_GOLD] = "ROCK_GOLD"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.GridCollisionClass"] = function(...) 
local ____exports = {}
____exports.GridCollisionClass = {}
____exports.GridCollisionClass.NONE = 0
____exports.GridCollisionClass[____exports.GridCollisionClass.NONE] = "NONE"
____exports.GridCollisionClass.PIT = 1
____exports.GridCollisionClass[____exports.GridCollisionClass.PIT] = "PIT"
____exports.GridCollisionClass.OBJECT = 2
____exports.GridCollisionClass[____exports.GridCollisionClass.OBJECT] = "OBJECT"
____exports.GridCollisionClass.SOLID = 3
____exports.GridCollisionClass[____exports.GridCollisionClass.SOLID] = "SOLID"
____exports.GridCollisionClass.WALL = 4
____exports.GridCollisionClass[____exports.GridCollisionClass.WALL] = "WALL"
____exports.GridCollisionClass.WALL_EXCEPT_PLAYER = 5
____exports.GridCollisionClass[____exports.GridCollisionClass.WALL_EXCEPT_PLAYER] = "WALL_EXCEPT_PLAYER"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.GameStateFlag"] = function(...) 
local ____exports = {}
--- Used with the `Game.GetStateFlag` and `Game.SetStateFlag` methods.
____exports.GameStateFlag = {}
____exports.GameStateFlag.FAMINE_SPAWNED = 0
____exports.GameStateFlag[____exports.GameStateFlag.FAMINE_SPAWNED] = "FAMINE_SPAWNED"
____exports.GameStateFlag.PESTILENCE_SPAWNED = 1
____exports.GameStateFlag[____exports.GameStateFlag.PESTILENCE_SPAWNED] = "PESTILENCE_SPAWNED"
____exports.GameStateFlag.WAR_SPAWNED = 2
____exports.GameStateFlag[____exports.GameStateFlag.WAR_SPAWNED] = "WAR_SPAWNED"
____exports.GameStateFlag.DEATH_SPAWNED = 3
____exports.GameStateFlag[____exports.GameStateFlag.DEATH_SPAWNED] = "DEATH_SPAWNED"
____exports.GameStateFlag.BOSS_POOL_SWITCHED = 4
____exports.GameStateFlag[____exports.GameStateFlag.BOSS_POOL_SWITCHED] = "BOSS_POOL_SWITCHED"
____exports.GameStateFlag.DEVIL_ROOM_SPAWNED = 5
____exports.GameStateFlag[____exports.GameStateFlag.DEVIL_ROOM_SPAWNED] = "DEVIL_ROOM_SPAWNED"
____exports.GameStateFlag.DEVIL_ROOM_VISITED = 6
____exports.GameStateFlag[____exports.GameStateFlag.DEVIL_ROOM_VISITED] = "DEVIL_ROOM_VISITED"
____exports.GameStateFlag.BOOK_REVELATIONS_USED = 7
____exports.GameStateFlag[____exports.GameStateFlag.BOOK_REVELATIONS_USED] = "BOOK_REVELATIONS_USED"
____exports.GameStateFlag.BOOK_PICKED_UP = 8
____exports.GameStateFlag[____exports.GameStateFlag.BOOK_PICKED_UP] = "BOOK_PICKED_UP"
____exports.GameStateFlag.WRATH_SPAWNED = 9
____exports.GameStateFlag[____exports.GameStateFlag.WRATH_SPAWNED] = "WRATH_SPAWNED"
____exports.GameStateFlag.GLUTTONY_SPAWNED = 10
____exports.GameStateFlag[____exports.GameStateFlag.GLUTTONY_SPAWNED] = "GLUTTONY_SPAWNED"
____exports.GameStateFlag.LUST_SPAWNED = 11
____exports.GameStateFlag[____exports.GameStateFlag.LUST_SPAWNED] = "LUST_SPAWNED"
____exports.GameStateFlag.SLOTH_SPAWNED = 12
____exports.GameStateFlag[____exports.GameStateFlag.SLOTH_SPAWNED] = "SLOTH_SPAWNED"
____exports.GameStateFlag.ENVY_SPAWNED = 13
____exports.GameStateFlag[____exports.GameStateFlag.ENVY_SPAWNED] = "ENVY_SPAWNED"
____exports.GameStateFlag.PRIDE_SPAWNED = 14
____exports.GameStateFlag[____exports.GameStateFlag.PRIDE_SPAWNED] = "PRIDE_SPAWNED"
____exports.GameStateFlag.GREED_SPAWNED = 15
____exports.GameStateFlag[____exports.GameStateFlag.GREED_SPAWNED] = "GREED_SPAWNED"
____exports.GameStateFlag.SUPER_GREED_SPAWNED = 16
____exports.GameStateFlag[____exports.GameStateFlag.SUPER_GREED_SPAWNED] = "SUPER_GREED_SPAWNED"
____exports.GameStateFlag.DONATION_SLOT_BROKEN = 17
____exports.GameStateFlag[____exports.GameStateFlag.DONATION_SLOT_BROKEN] = "DONATION_SLOT_BROKEN"
____exports.GameStateFlag.DONATION_SLOT_JAMMED = 18
____exports.GameStateFlag[____exports.GameStateFlag.DONATION_SLOT_JAMMED] = "DONATION_SLOT_JAMMED"
____exports.GameStateFlag.HEAVEN_PATH = 19
____exports.GameStateFlag[____exports.GameStateFlag.HEAVEN_PATH] = "HEAVEN_PATH"
____exports.GameStateFlag.REBIRTH_BOSS_SWITCHED = 20
____exports.GameStateFlag[____exports.GameStateFlag.REBIRTH_BOSS_SWITCHED] = "REBIRTH_BOSS_SWITCHED"
____exports.GameStateFlag.HAUNT_SELECTED = 21
____exports.GameStateFlag[____exports.GameStateFlag.HAUNT_SELECTED] = "HAUNT_SELECTED"
____exports.GameStateFlag.ADVERSARY_SELECTED = 22
____exports.GameStateFlag[____exports.GameStateFlag.ADVERSARY_SELECTED] = "ADVERSARY_SELECTED"
____exports.GameStateFlag.MR_FRED_SELECTED = 23
____exports.GameStateFlag[____exports.GameStateFlag.MR_FRED_SELECTED] = "MR_FRED_SELECTED"
____exports.GameStateFlag.MAMA_GURDY_SELECTED = 24
____exports.GameStateFlag[____exports.GameStateFlag.MAMA_GURDY_SELECTED] = "MAMA_GURDY_SELECTED"
____exports.GameStateFlag.URIEL_SPAWNED = 25
____exports.GameStateFlag[____exports.GameStateFlag.URIEL_SPAWNED] = "URIEL_SPAWNED"
____exports.GameStateFlag.GABRIEL_SPAWNED = 26
____exports.GameStateFlag[____exports.GameStateFlag.GABRIEL_SPAWNED] = "GABRIEL_SPAWNED"
____exports.GameStateFlag.FALLEN_SPAWNED = 27
____exports.GameStateFlag[____exports.GameStateFlag.FALLEN_SPAWNED] = "FALLEN_SPAWNED"
____exports.GameStateFlag.HEADLESS_HORSEMAN_SPAWNED = 28
____exports.GameStateFlag[____exports.GameStateFlag.HEADLESS_HORSEMAN_SPAWNED] = "HEADLESS_HORSEMAN_SPAWNED"
____exports.GameStateFlag.KRAMPUS_SPAWNED = 29
____exports.GameStateFlag[____exports.GameStateFlag.KRAMPUS_SPAWNED] = "KRAMPUS_SPAWNED"
____exports.GameStateFlag.DONATION_SLOT_BLOWN = 30
____exports.GameStateFlag[____exports.GameStateFlag.DONATION_SLOT_BLOWN] = "DONATION_SLOT_BLOWN"
____exports.GameStateFlag.SHOPKEEPER_KILLED = 31
____exports.GameStateFlag[____exports.GameStateFlag.SHOPKEEPER_KILLED] = "SHOPKEEPER_KILLED"
____exports.GameStateFlag.ULTRA_PRIDE_SPAWNED = 32
____exports.GameStateFlag[____exports.GameStateFlag.ULTRA_PRIDE_SPAWNED] = "ULTRA_PRIDE_SPAWNED"
____exports.GameStateFlag.BOSS_RUSH_DONE = 33
____exports.GameStateFlag[____exports.GameStateFlag.BOSS_RUSH_DONE] = "BOSS_RUSH_DONE"
____exports.GameStateFlag.GREED_SLOT_JAMMED = 34
____exports.GameStateFlag[____exports.GameStateFlag.GREED_SLOT_JAMMED] = "GREED_SLOT_JAMMED"
____exports.GameStateFlag.AFTERBIRTH_BOSS_SWITCHED = 35
____exports.GameStateFlag[____exports.GameStateFlag.AFTERBIRTH_BOSS_SWITCHED] = "AFTERBIRTH_BOSS_SWITCHED"
____exports.GameStateFlag.BROWNIE_SELECTED = 36
____exports.GameStateFlag[____exports.GameStateFlag.BROWNIE_SELECTED] = "BROWNIE_SELECTED"
____exports.GameStateFlag.SUPER_BUM_APPEARED = 37
____exports.GameStateFlag[____exports.GameStateFlag.SUPER_BUM_APPEARED] = "SUPER_BUM_APPEARED"
____exports.GameStateFlag.BOSS_RUSH_DOOR_SPAWNED = 38
____exports.GameStateFlag[____exports.GameStateFlag.BOSS_RUSH_DOOR_SPAWNED] = "BOSS_RUSH_DOOR_SPAWNED"
____exports.GameStateFlag.BLUE_WOMB_DOOR_SPAWNED = 39
____exports.GameStateFlag[____exports.GameStateFlag.BLUE_WOMB_DOOR_SPAWNED] = "BLUE_WOMB_DOOR_SPAWNED"
____exports.GameStateFlag.BLUE_WOMB_DONE = 40
____exports.GameStateFlag[____exports.GameStateFlag.BLUE_WOMB_DONE] = "BLUE_WOMB_DONE"
____exports.GameStateFlag.HEART_BOMB_COIN_PICKED = 41
____exports.GameStateFlag[____exports.GameStateFlag.HEART_BOMB_COIN_PICKED] = "HEART_BOMB_COIN_PICKED"
____exports.GameStateFlag.AFTERBIRTH_PLUS_BOSS_SWITCHED = 42
____exports.GameStateFlag[____exports.GameStateFlag.AFTERBIRTH_PLUS_BOSS_SWITCHED] = "AFTERBIRTH_PLUS_BOSS_SWITCHED"
____exports.GameStateFlag.MAX_COINS_OBTAINED = 43
____exports.GameStateFlag[____exports.GameStateFlag.MAX_COINS_OBTAINED] = "MAX_COINS_OBTAINED"
____exports.GameStateFlag.SECRET_PATH = 44
____exports.GameStateFlag[____exports.GameStateFlag.SECRET_PATH] = "SECRET_PATH"
____exports.GameStateFlag.PERFECTION_SPAWNED = 45
____exports.GameStateFlag[____exports.GameStateFlag.PERFECTION_SPAWNED] = "PERFECTION_SPAWNED"
____exports.GameStateFlag.MAUSOLEUM_HEART_KILLED = 46
____exports.GameStateFlag[____exports.GameStateFlag.MAUSOLEUM_HEART_KILLED] = "MAUSOLEUM_HEART_KILLED"
____exports.GameStateFlag.BACKWARDS_PATH_INIT = 47
____exports.GameStateFlag[____exports.GameStateFlag.BACKWARDS_PATH_INIT] = "BACKWARDS_PATH_INIT"
____exports.GameStateFlag.BACKWARDS_PATH = 48
____exports.GameStateFlag[____exports.GameStateFlag.BACKWARDS_PATH] = "BACKWARDS_PATH"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.FadeoutTarget"] = function(...) 
local ____exports = {}
____exports.FadeoutTarget = {}
____exports.FadeoutTarget.NONE = 0
____exports.FadeoutTarget[____exports.FadeoutTarget.NONE] = "NONE"
____exports.FadeoutTarget.FILE_SELECT = 1
____exports.FadeoutTarget[____exports.FadeoutTarget.FILE_SELECT] = "FILE_SELECT"
____exports.FadeoutTarget.MAIN_MENU = 2
____exports.FadeoutTarget[____exports.FadeoutTarget.MAIN_MENU] = "MAIN_MENU"
____exports.FadeoutTarget.TITLE_SCREEN = 3
____exports.FadeoutTarget[____exports.FadeoutTarget.TITLE_SCREEN] = "TITLE_SCREEN"
____exports.FadeoutTarget.RESTART_RUN = 4
____exports.FadeoutTarget[____exports.FadeoutTarget.RESTART_RUN] = "RESTART_RUN"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.EntityType"] = function(...) 
local ____exports = {}
____exports.EntityType = {}
____exports.EntityType.NULL = 0
____exports.EntityType[____exports.EntityType.NULL] = "NULL"
____exports.EntityType.PLAYER = 1
____exports.EntityType[____exports.EntityType.PLAYER] = "PLAYER"
____exports.EntityType.TEAR = 2
____exports.EntityType[____exports.EntityType.TEAR] = "TEAR"
____exports.EntityType.FAMILIAR = 3
____exports.EntityType[____exports.EntityType.FAMILIAR] = "FAMILIAR"
____exports.EntityType.BOMB = 4
____exports.EntityType[____exports.EntityType.BOMB] = "BOMB"
____exports.EntityType.PICKUP = 5
____exports.EntityType[____exports.EntityType.PICKUP] = "PICKUP"
____exports.EntityType.SLOT = 6
____exports.EntityType[____exports.EntityType.SLOT] = "SLOT"
____exports.EntityType.LASER = 7
____exports.EntityType[____exports.EntityType.LASER] = "LASER"
____exports.EntityType.KNIFE = 8
____exports.EntityType[____exports.EntityType.KNIFE] = "KNIFE"
____exports.EntityType.PROJECTILE = 9
____exports.EntityType[____exports.EntityType.PROJECTILE] = "PROJECTILE"
____exports.EntityType.GAPER = 10
____exports.EntityType[____exports.EntityType.GAPER] = "GAPER"
____exports.EntityType.GUSHER = 11
____exports.EntityType[____exports.EntityType.GUSHER] = "GUSHER"
____exports.EntityType.HORF = 12
____exports.EntityType[____exports.EntityType.HORF] = "HORF"
____exports.EntityType.FLY = 13
____exports.EntityType[____exports.EntityType.FLY] = "FLY"
____exports.EntityType.POOTER = 14
____exports.EntityType[____exports.EntityType.POOTER] = "POOTER"
____exports.EntityType.CLOTTY = 15
____exports.EntityType[____exports.EntityType.CLOTTY] = "CLOTTY"
____exports.EntityType.MULLIGAN = 16
____exports.EntityType[____exports.EntityType.MULLIGAN] = "MULLIGAN"
____exports.EntityType.SHOPKEEPER = 17
____exports.EntityType[____exports.EntityType.SHOPKEEPER] = "SHOPKEEPER"
____exports.EntityType.ATTACK_FLY = 18
____exports.EntityType[____exports.EntityType.ATTACK_FLY] = "ATTACK_FLY"
____exports.EntityType.LARRY_JR = 19
____exports.EntityType[____exports.EntityType.LARRY_JR] = "LARRY_JR"
____exports.EntityType.MONSTRO = 20
____exports.EntityType[____exports.EntityType.MONSTRO] = "MONSTRO"
____exports.EntityType.MAGGOT = 21
____exports.EntityType[____exports.EntityType.MAGGOT] = "MAGGOT"
____exports.EntityType.HIVE = 22
____exports.EntityType[____exports.EntityType.HIVE] = "HIVE"
____exports.EntityType.CHARGER = 23
____exports.EntityType[____exports.EntityType.CHARGER] = "CHARGER"
____exports.EntityType.GLOBIN = 24
____exports.EntityType[____exports.EntityType.GLOBIN] = "GLOBIN"
____exports.EntityType.BOOM_FLY = 25
____exports.EntityType[____exports.EntityType.BOOM_FLY] = "BOOM_FLY"
____exports.EntityType.MAW = 26
____exports.EntityType[____exports.EntityType.MAW] = "MAW"
____exports.EntityType.HOST = 27
____exports.EntityType[____exports.EntityType.HOST] = "HOST"
____exports.EntityType.CHUB = 28
____exports.EntityType[____exports.EntityType.CHUB] = "CHUB"
____exports.EntityType.HOPPER = 29
____exports.EntityType[____exports.EntityType.HOPPER] = "HOPPER"
____exports.EntityType.BOIL = 30
____exports.EntityType[____exports.EntityType.BOIL] = "BOIL"
____exports.EntityType.SPITTY = 31
____exports.EntityType[____exports.EntityType.SPITTY] = "SPITTY"
____exports.EntityType.BRAIN = 32
____exports.EntityType[____exports.EntityType.BRAIN] = "BRAIN"
____exports.EntityType.FIREPLACE = 33
____exports.EntityType[____exports.EntityType.FIREPLACE] = "FIREPLACE"
____exports.EntityType.LEAPER = 34
____exports.EntityType[____exports.EntityType.LEAPER] = "LEAPER"
____exports.EntityType.MR_MAW = 35
____exports.EntityType[____exports.EntityType.MR_MAW] = "MR_MAW"
____exports.EntityType.GURDY = 36
____exports.EntityType[____exports.EntityType.GURDY] = "GURDY"
____exports.EntityType.BABY = 38
____exports.EntityType[____exports.EntityType.BABY] = "BABY"
____exports.EntityType.VIS = 39
____exports.EntityType[____exports.EntityType.VIS] = "VIS"
____exports.EntityType.GUTS = 40
____exports.EntityType[____exports.EntityType.GUTS] = "GUTS"
____exports.EntityType.KNIGHT = 41
____exports.EntityType[____exports.EntityType.KNIGHT] = "KNIGHT"
____exports.EntityType.GRIMACE = 42
____exports.EntityType[____exports.EntityType.GRIMACE] = "GRIMACE"
____exports.EntityType.MONSTRO_2 = 43
____exports.EntityType[____exports.EntityType.MONSTRO_2] = "MONSTRO_2"
____exports.EntityType.POKY = 44
____exports.EntityType[____exports.EntityType.POKY] = "POKY"
____exports.EntityType.MOM = 45
____exports.EntityType[____exports.EntityType.MOM] = "MOM"
____exports.EntityType.SLOTH = 46
____exports.EntityType[____exports.EntityType.SLOTH] = "SLOTH"
____exports.EntityType.LUST = 47
____exports.EntityType[____exports.EntityType.LUST] = "LUST"
____exports.EntityType.WRATH = 48
____exports.EntityType[____exports.EntityType.WRATH] = "WRATH"
____exports.EntityType.GLUTTONY = 49
____exports.EntityType[____exports.EntityType.GLUTTONY] = "GLUTTONY"
____exports.EntityType.GREED = 50
____exports.EntityType[____exports.EntityType.GREED] = "GREED"
____exports.EntityType.ENVY = 51
____exports.EntityType[____exports.EntityType.ENVY] = "ENVY"
____exports.EntityType.PRIDE = 52
____exports.EntityType[____exports.EntityType.PRIDE] = "PRIDE"
____exports.EntityType.DOPLE = 53
____exports.EntityType[____exports.EntityType.DOPLE] = "DOPLE"
____exports.EntityType.FLAMING_HOPPER = 54
____exports.EntityType[____exports.EntityType.FLAMING_HOPPER] = "FLAMING_HOPPER"
____exports.EntityType.LEECH = 55
____exports.EntityType[____exports.EntityType.LEECH] = "LEECH"
____exports.EntityType.LUMP = 56
____exports.EntityType[____exports.EntityType.LUMP] = "LUMP"
____exports.EntityType.MEMBRAIN = 57
____exports.EntityType[____exports.EntityType.MEMBRAIN] = "MEMBRAIN"
____exports.EntityType.PARA_BITE = 58
____exports.EntityType[____exports.EntityType.PARA_BITE] = "PARA_BITE"
____exports.EntityType.FRED = 59
____exports.EntityType[____exports.EntityType.FRED] = "FRED"
____exports.EntityType.EYE = 60
____exports.EntityType[____exports.EntityType.EYE] = "EYE"
____exports.EntityType.SUCKER = 61
____exports.EntityType[____exports.EntityType.SUCKER] = "SUCKER"
____exports.EntityType.PIN = 62
____exports.EntityType[____exports.EntityType.PIN] = "PIN"
____exports.EntityType.FAMINE = 63
____exports.EntityType[____exports.EntityType.FAMINE] = "FAMINE"
____exports.EntityType.PESTILENCE = 64
____exports.EntityType[____exports.EntityType.PESTILENCE] = "PESTILENCE"
____exports.EntityType.WAR = 65
____exports.EntityType[____exports.EntityType.WAR] = "WAR"
____exports.EntityType.DEATH = 66
____exports.EntityType[____exports.EntityType.DEATH] = "DEATH"
____exports.EntityType.DUKE_OF_FLIES = 67
____exports.EntityType[____exports.EntityType.DUKE_OF_FLIES] = "DUKE_OF_FLIES"
____exports.EntityType.PEEP = 68
____exports.EntityType[____exports.EntityType.PEEP] = "PEEP"
____exports.EntityType.LOKI = 69
____exports.EntityType[____exports.EntityType.LOKI] = "LOKI"
____exports.EntityType.FISTULA_BIG = 71
____exports.EntityType[____exports.EntityType.FISTULA_BIG] = "FISTULA_BIG"
____exports.EntityType.FISTULA_MEDIUM = 72
____exports.EntityType[____exports.EntityType.FISTULA_MEDIUM] = "FISTULA_MEDIUM"
____exports.EntityType.FISTULA_SMALL = 73
____exports.EntityType[____exports.EntityType.FISTULA_SMALL] = "FISTULA_SMALL"
____exports.EntityType.BLASTOCYST_BIG = 74
____exports.EntityType[____exports.EntityType.BLASTOCYST_BIG] = "BLASTOCYST_BIG"
____exports.EntityType.BLASTOCYST_MEDIUM = 75
____exports.EntityType[____exports.EntityType.BLASTOCYST_MEDIUM] = "BLASTOCYST_MEDIUM"
____exports.EntityType.BLASTOCYST_SMALL = 76
____exports.EntityType[____exports.EntityType.BLASTOCYST_SMALL] = "BLASTOCYST_SMALL"
____exports.EntityType.EMBRYO = 77
____exports.EntityType[____exports.EntityType.EMBRYO] = "EMBRYO"
____exports.EntityType.MOMS_HEART = 78
____exports.EntityType[____exports.EntityType.MOMS_HEART] = "MOMS_HEART"
____exports.EntityType.GEMINI = 79
____exports.EntityType[____exports.EntityType.GEMINI] = "GEMINI"
____exports.EntityType.MOTER = 80
____exports.EntityType[____exports.EntityType.MOTER] = "MOTER"
____exports.EntityType.FALLEN = 81
____exports.EntityType[____exports.EntityType.FALLEN] = "FALLEN"
____exports.EntityType.HEADLESS_HORSEMAN = 82
____exports.EntityType[____exports.EntityType.HEADLESS_HORSEMAN] = "HEADLESS_HORSEMAN"
____exports.EntityType.HORSEMAN_HEAD = 83
____exports.EntityType[____exports.EntityType.HORSEMAN_HEAD] = "HORSEMAN_HEAD"
____exports.EntityType.SATAN = 84
____exports.EntityType[____exports.EntityType.SATAN] = "SATAN"
____exports.EntityType.SPIDER = 85
____exports.EntityType[____exports.EntityType.SPIDER] = "SPIDER"
____exports.EntityType.KEEPER = 86
____exports.EntityType[____exports.EntityType.KEEPER] = "KEEPER"
____exports.EntityType.GURGLE = 87
____exports.EntityType[____exports.EntityType.GURGLE] = "GURGLE"
____exports.EntityType.WALKING_BOIL = 88
____exports.EntityType[____exports.EntityType.WALKING_BOIL] = "WALKING_BOIL"
____exports.EntityType.BUTTLICKER = 89
____exports.EntityType[____exports.EntityType.BUTTLICKER] = "BUTTLICKER"
____exports.EntityType.HANGER = 90
____exports.EntityType[____exports.EntityType.HANGER] = "HANGER"
____exports.EntityType.SWARMER = 91
____exports.EntityType[____exports.EntityType.SWARMER] = "SWARMER"
____exports.EntityType.HEART = 92
____exports.EntityType[____exports.EntityType.HEART] = "HEART"
____exports.EntityType.MASK = 93
____exports.EntityType[____exports.EntityType.MASK] = "MASK"
____exports.EntityType.BIG_SPIDER = 94
____exports.EntityType[____exports.EntityType.BIG_SPIDER] = "BIG_SPIDER"
____exports.EntityType.ETERNAL_FLY = 96
____exports.EntityType[____exports.EntityType.ETERNAL_FLY] = "ETERNAL_FLY"
____exports.EntityType.MASK_OF_INFAMY = 97
____exports.EntityType[____exports.EntityType.MASK_OF_INFAMY] = "MASK_OF_INFAMY"
____exports.EntityType.HEART_OF_INFAMY = 98
____exports.EntityType[____exports.EntityType.HEART_OF_INFAMY] = "HEART_OF_INFAMY"
____exports.EntityType.GURDY_JR = 99
____exports.EntityType[____exports.EntityType.GURDY_JR] = "GURDY_JR"
____exports.EntityType.WIDOW = 100
____exports.EntityType[____exports.EntityType.WIDOW] = "WIDOW"
____exports.EntityType.DADDY_LONG_LEGS = 101
____exports.EntityType[____exports.EntityType.DADDY_LONG_LEGS] = "DADDY_LONG_LEGS"
____exports.EntityType.ISAAC = 102
____exports.EntityType[____exports.EntityType.ISAAC] = "ISAAC"
____exports.EntityType.STONE_EYE = 201
____exports.EntityType[____exports.EntityType.STONE_EYE] = "STONE_EYE"
____exports.EntityType.CONSTANT_STONE_SHOOTER = 202
____exports.EntityType[____exports.EntityType.CONSTANT_STONE_SHOOTER] = "CONSTANT_STONE_SHOOTER"
____exports.EntityType.BRIMSTONE_HEAD = 203
____exports.EntityType[____exports.EntityType.BRIMSTONE_HEAD] = "BRIMSTONE_HEAD"
____exports.EntityType.MOBILE_HOST = 204
____exports.EntityType[____exports.EntityType.MOBILE_HOST] = "MOBILE_HOST"
____exports.EntityType.NEST = 205
____exports.EntityType[____exports.EntityType.NEST] = "NEST"
____exports.EntityType.BABY_LONG_LEGS = 206
____exports.EntityType[____exports.EntityType.BABY_LONG_LEGS] = "BABY_LONG_LEGS"
____exports.EntityType.CRAZY_LONG_LEGS = 207
____exports.EntityType[____exports.EntityType.CRAZY_LONG_LEGS] = "CRAZY_LONG_LEGS"
____exports.EntityType.FATTY = 208
____exports.EntityType[____exports.EntityType.FATTY] = "FATTY"
____exports.EntityType.FAT_SACK = 209
____exports.EntityType[____exports.EntityType.FAT_SACK] = "FAT_SACK"
____exports.EntityType.BLUBBER = 210
____exports.EntityType[____exports.EntityType.BLUBBER] = "BLUBBER"
____exports.EntityType.HALF_SACK = 211
____exports.EntityType[____exports.EntityType.HALF_SACK] = "HALF_SACK"
____exports.EntityType.DEATHS_HEAD = 212
____exports.EntityType[____exports.EntityType.DEATHS_HEAD] = "DEATHS_HEAD"
____exports.EntityType.MOMS_HAND = 213
____exports.EntityType[____exports.EntityType.MOMS_HAND] = "MOMS_HAND"
____exports.EntityType.FLY_LVL_2 = 214
____exports.EntityType[____exports.EntityType.FLY_LVL_2] = "FLY_LVL_2"
____exports.EntityType.SPIDER_LVL_2 = 215
____exports.EntityType[____exports.EntityType.SPIDER_LVL_2] = "SPIDER_LVL_2"
____exports.EntityType.SWINGER = 216
____exports.EntityType[____exports.EntityType.SWINGER] = "SWINGER"
____exports.EntityType.DIP = 217
____exports.EntityType[____exports.EntityType.DIP] = "DIP"
____exports.EntityType.WALL_HUGGER = 218
____exports.EntityType[____exports.EntityType.WALL_HUGGER] = "WALL_HUGGER"
____exports.EntityType.WIZOOB = 219
____exports.EntityType[____exports.EntityType.WIZOOB] = "WIZOOB"
____exports.EntityType.SQUIRT = 220
____exports.EntityType[____exports.EntityType.SQUIRT] = "SQUIRT"
____exports.EntityType.COD_WORM = 221
____exports.EntityType[____exports.EntityType.COD_WORM] = "COD_WORM"
____exports.EntityType.RING_OF_FLIES = 222
____exports.EntityType[____exports.EntityType.RING_OF_FLIES] = "RING_OF_FLIES"
____exports.EntityType.DINGA = 223
____exports.EntityType[____exports.EntityType.DINGA] = "DINGA"
____exports.EntityType.OOB = 224
____exports.EntityType[____exports.EntityType.OOB] = "OOB"
____exports.EntityType.BLACK_MAW = 225
____exports.EntityType[____exports.EntityType.BLACK_MAW] = "BLACK_MAW"
____exports.EntityType.SKINNY = 226
____exports.EntityType[____exports.EntityType.SKINNY] = "SKINNY"
____exports.EntityType.BONY = 227
____exports.EntityType[____exports.EntityType.BONY] = "BONY"
____exports.EntityType.HOMUNCULUS = 228
____exports.EntityType[____exports.EntityType.HOMUNCULUS] = "HOMUNCULUS"
____exports.EntityType.TUMOR = 229
____exports.EntityType[____exports.EntityType.TUMOR] = "TUMOR"
____exports.EntityType.CAMILLO_JR = 230
____exports.EntityType[____exports.EntityType.CAMILLO_JR] = "CAMILLO_JR"
____exports.EntityType.NERVE_ENDING = 231
____exports.EntityType[____exports.EntityType.NERVE_ENDING] = "NERVE_ENDING"
____exports.EntityType.ONE_TOOTH = 234
____exports.EntityType[____exports.EntityType.ONE_TOOTH] = "ONE_TOOTH"
____exports.EntityType.GAPING_MAW = 235
____exports.EntityType[____exports.EntityType.GAPING_MAW] = "GAPING_MAW"
____exports.EntityType.BROKEN_GAPING_MAW = 236
____exports.EntityType[____exports.EntityType.BROKEN_GAPING_MAW] = "BROKEN_GAPING_MAW"
____exports.EntityType.GURGLING = 237
____exports.EntityType[____exports.EntityType.GURGLING] = "GURGLING"
____exports.EntityType.SPLASHER = 238
____exports.EntityType[____exports.EntityType.SPLASHER] = "SPLASHER"
____exports.EntityType.GRUB = 239
____exports.EntityType[____exports.EntityType.GRUB] = "GRUB"
____exports.EntityType.WALL_CREEP = 240
____exports.EntityType[____exports.EntityType.WALL_CREEP] = "WALL_CREEP"
____exports.EntityType.RAGE_CREEP = 241
____exports.EntityType[____exports.EntityType.RAGE_CREEP] = "RAGE_CREEP"
____exports.EntityType.BLIND_CREEP = 242
____exports.EntityType[____exports.EntityType.BLIND_CREEP] = "BLIND_CREEP"
____exports.EntityType.CONJOINED_SPITTY = 243
____exports.EntityType[____exports.EntityType.CONJOINED_SPITTY] = "CONJOINED_SPITTY"
____exports.EntityType.ROUND_WORM = 244
____exports.EntityType[____exports.EntityType.ROUND_WORM] = "ROUND_WORM"
____exports.EntityType.POOP = 245
____exports.EntityType[____exports.EntityType.POOP] = "POOP"
____exports.EntityType.RAGLING = 246
____exports.EntityType[____exports.EntityType.RAGLING] = "RAGLING"
____exports.EntityType.FLESH_MOBILE_HOST = 247
____exports.EntityType[____exports.EntityType.FLESH_MOBILE_HOST] = "FLESH_MOBILE_HOST"
____exports.EntityType.PSY_HORF = 248
____exports.EntityType[____exports.EntityType.PSY_HORF] = "PSY_HORF"
____exports.EntityType.FULL_FLY = 249
____exports.EntityType[____exports.EntityType.FULL_FLY] = "FULL_FLY"
____exports.EntityType.TICKING_SPIDER = 250
____exports.EntityType[____exports.EntityType.TICKING_SPIDER] = "TICKING_SPIDER"
____exports.EntityType.BEGOTTEN = 251
____exports.EntityType[____exports.EntityType.BEGOTTEN] = "BEGOTTEN"
____exports.EntityType.NULLS = 252
____exports.EntityType[____exports.EntityType.NULLS] = "NULLS"
____exports.EntityType.PSY_TUMOR = 253
____exports.EntityType[____exports.EntityType.PSY_TUMOR] = "PSY_TUMOR"
____exports.EntityType.FLOATING_KNIGHT = 254
____exports.EntityType[____exports.EntityType.FLOATING_KNIGHT] = "FLOATING_KNIGHT"
____exports.EntityType.NIGHT_CRAWLER = 255
____exports.EntityType[____exports.EntityType.NIGHT_CRAWLER] = "NIGHT_CRAWLER"
____exports.EntityType.DART_FLY = 256
____exports.EntityType[____exports.EntityType.DART_FLY] = "DART_FLY"
____exports.EntityType.CONJOINED_FATTY = 257
____exports.EntityType[____exports.EntityType.CONJOINED_FATTY] = "CONJOINED_FATTY"
____exports.EntityType.FAT_BAT = 258
____exports.EntityType[____exports.EntityType.FAT_BAT] = "FAT_BAT"
____exports.EntityType.IMP = 259
____exports.EntityType[____exports.EntityType.IMP] = "IMP"
____exports.EntityType.HAUNT = 260
____exports.EntityType[____exports.EntityType.HAUNT] = "HAUNT"
____exports.EntityType.DINGLE = 261
____exports.EntityType[____exports.EntityType.DINGLE] = "DINGLE"
____exports.EntityType.MEGA_MAW = 262
____exports.EntityType[____exports.EntityType.MEGA_MAW] = "MEGA_MAW"
____exports.EntityType.GATE = 263
____exports.EntityType[____exports.EntityType.GATE] = "GATE"
____exports.EntityType.MEGA_FATTY = 264
____exports.EntityType[____exports.EntityType.MEGA_FATTY] = "MEGA_FATTY"
____exports.EntityType.CAGE = 265
____exports.EntityType[____exports.EntityType.CAGE] = "CAGE"
____exports.EntityType.MAMA_GURDY = 266
____exports.EntityType[____exports.EntityType.MAMA_GURDY] = "MAMA_GURDY"
____exports.EntityType.DARK_ONE = 267
____exports.EntityType[____exports.EntityType.DARK_ONE] = "DARK_ONE"
____exports.EntityType.ADVERSARY = 268
____exports.EntityType[____exports.EntityType.ADVERSARY] = "ADVERSARY"
____exports.EntityType.POLYCEPHALUS = 269
____exports.EntityType[____exports.EntityType.POLYCEPHALUS] = "POLYCEPHALUS"
____exports.EntityType.MR_FRED = 270
____exports.EntityType[____exports.EntityType.MR_FRED] = "MR_FRED"
____exports.EntityType.URIEL = 271
____exports.EntityType[____exports.EntityType.URIEL] = "URIEL"
____exports.EntityType.GABRIEL = 272
____exports.EntityType[____exports.EntityType.GABRIEL] = "GABRIEL"
____exports.EntityType.LAMB = 273
____exports.EntityType[____exports.EntityType.LAMB] = "LAMB"
____exports.EntityType.MEGA_SATAN = 274
____exports.EntityType[____exports.EntityType.MEGA_SATAN] = "MEGA_SATAN"
____exports.EntityType.MEGA_SATAN_2 = 275
____exports.EntityType[____exports.EntityType.MEGA_SATAN_2] = "MEGA_SATAN_2"
____exports.EntityType.ROUNDY = 276
____exports.EntityType[____exports.EntityType.ROUNDY] = "ROUNDY"
____exports.EntityType.BLACK_BONY = 277
____exports.EntityType[____exports.EntityType.BLACK_BONY] = "BLACK_BONY"
____exports.EntityType.BLACK_GLOBIN = 278
____exports.EntityType[____exports.EntityType.BLACK_GLOBIN] = "BLACK_GLOBIN"
____exports.EntityType.BLACK_GLOBIN_HEAD = 279
____exports.EntityType[____exports.EntityType.BLACK_GLOBIN_HEAD] = "BLACK_GLOBIN_HEAD"
____exports.EntityType.BLACK_GLOBIN_BODY = 280
____exports.EntityType[____exports.EntityType.BLACK_GLOBIN_BODY] = "BLACK_GLOBIN_BODY"
____exports.EntityType.SWARM = 281
____exports.EntityType[____exports.EntityType.SWARM] = "SWARM"
____exports.EntityType.MEGA_CLOTTY = 282
____exports.EntityType[____exports.EntityType.MEGA_CLOTTY] = "MEGA_CLOTTY"
____exports.EntityType.BONE_KNIGHT = 283
____exports.EntityType[____exports.EntityType.BONE_KNIGHT] = "BONE_KNIGHT"
____exports.EntityType.CYCLOPIA = 284
____exports.EntityType[____exports.EntityType.CYCLOPIA] = "CYCLOPIA"
____exports.EntityType.RED_GHOST = 285
____exports.EntityType[____exports.EntityType.RED_GHOST] = "RED_GHOST"
____exports.EntityType.FLESH_DEATHS_HEAD = 286
____exports.EntityType[____exports.EntityType.FLESH_DEATHS_HEAD] = "FLESH_DEATHS_HEAD"
____exports.EntityType.MOMS_DEAD_HAND = 287
____exports.EntityType[____exports.EntityType.MOMS_DEAD_HAND] = "MOMS_DEAD_HAND"
____exports.EntityType.DUKIE = 288
____exports.EntityType[____exports.EntityType.DUKIE] = "DUKIE"
____exports.EntityType.ULCER = 289
____exports.EntityType[____exports.EntityType.ULCER] = "ULCER"
____exports.EntityType.MEATBALL = 290
____exports.EntityType[____exports.EntityType.MEATBALL] = "MEATBALL"
____exports.EntityType.PITFALL = 291
____exports.EntityType[____exports.EntityType.PITFALL] = "PITFALL"
____exports.EntityType.MOVABLE_TNT = 292
____exports.EntityType[____exports.EntityType.MOVABLE_TNT] = "MOVABLE_TNT"
____exports.EntityType.ULTRA_COIN = 293
____exports.EntityType[____exports.EntityType.ULTRA_COIN] = "ULTRA_COIN"
____exports.EntityType.ULTRA_DOOR = 294
____exports.EntityType[____exports.EntityType.ULTRA_DOOR] = "ULTRA_DOOR"
____exports.EntityType.CORN_MINE = 295
____exports.EntityType[____exports.EntityType.CORN_MINE] = "CORN_MINE"
____exports.EntityType.HUSH_FLY = 296
____exports.EntityType[____exports.EntityType.HUSH_FLY] = "HUSH_FLY"
____exports.EntityType.HUSH_GAPER = 297
____exports.EntityType[____exports.EntityType.HUSH_GAPER] = "HUSH_GAPER"
____exports.EntityType.HUSH_BOIL = 298
____exports.EntityType[____exports.EntityType.HUSH_BOIL] = "HUSH_BOIL"
____exports.EntityType.GREED_GAPER = 299
____exports.EntityType[____exports.EntityType.GREED_GAPER] = "GREED_GAPER"
____exports.EntityType.MUSHROOM = 300
____exports.EntityType[____exports.EntityType.MUSHROOM] = "MUSHROOM"
____exports.EntityType.POISON_MIND = 301
____exports.EntityType[____exports.EntityType.POISON_MIND] = "POISON_MIND"
____exports.EntityType.STONEY = 302
____exports.EntityType[____exports.EntityType.STONEY] = "STONEY"
____exports.EntityType.BLISTER = 303
____exports.EntityType[____exports.EntityType.BLISTER] = "BLISTER"
____exports.EntityType.THING = 304
____exports.EntityType[____exports.EntityType.THING] = "THING"
____exports.EntityType.MINISTRO = 305
____exports.EntityType[____exports.EntityType.MINISTRO] = "MINISTRO"
____exports.EntityType.PORTAL = 306
____exports.EntityType[____exports.EntityType.PORTAL] = "PORTAL"
____exports.EntityType.TAR_BOY = 307
____exports.EntityType[____exports.EntityType.TAR_BOY] = "TAR_BOY"
____exports.EntityType.FISTULOID = 308
____exports.EntityType[____exports.EntityType.FISTULOID] = "FISTULOID"
____exports.EntityType.GUSH = 309
____exports.EntityType[____exports.EntityType.GUSH] = "GUSH"
____exports.EntityType.LEPER = 310
____exports.EntityType[____exports.EntityType.LEPER] = "LEPER"
____exports.EntityType.MR_MINE = 311
____exports.EntityType[____exports.EntityType.MR_MINE] = "MR_MINE"
____exports.EntityType.STAIN = 401
____exports.EntityType[____exports.EntityType.STAIN] = "STAIN"
____exports.EntityType.BROWNIE = 402
____exports.EntityType[____exports.EntityType.BROWNIE] = "BROWNIE"
____exports.EntityType.FORSAKEN = 403
____exports.EntityType[____exports.EntityType.FORSAKEN] = "FORSAKEN"
____exports.EntityType.LITTLE_HORN = 404
____exports.EntityType[____exports.EntityType.LITTLE_HORN] = "LITTLE_HORN"
____exports.EntityType.RAG_MAN = 405
____exports.EntityType[____exports.EntityType.RAG_MAN] = "RAG_MAN"
____exports.EntityType.ULTRA_GREED = 406
____exports.EntityType[____exports.EntityType.ULTRA_GREED] = "ULTRA_GREED"
____exports.EntityType.HUSH = 407
____exports.EntityType[____exports.EntityType.HUSH] = "HUSH"
____exports.EntityType.HUSH_SKINLESS = 408
____exports.EntityType[____exports.EntityType.HUSH_SKINLESS] = "HUSH_SKINLESS"
____exports.EntityType.RAG_MEGA = 409
____exports.EntityType[____exports.EntityType.RAG_MEGA] = "RAG_MEGA"
____exports.EntityType.SISTERS_VIS = 410
____exports.EntityType[____exports.EntityType.SISTERS_VIS] = "SISTERS_VIS"
____exports.EntityType.BIG_HORN = 411
____exports.EntityType[____exports.EntityType.BIG_HORN] = "BIG_HORN"
____exports.EntityType.DELIRIUM = 412
____exports.EntityType[____exports.EntityType.DELIRIUM] = "DELIRIUM"
____exports.EntityType.MATRIARCH = 413
____exports.EntityType[____exports.EntityType.MATRIARCH] = "MATRIARCH"
____exports.EntityType.BLOOD_PUPPY = 802
____exports.EntityType[____exports.EntityType.BLOOD_PUPPY] = "BLOOD_PUPPY"
____exports.EntityType.QUAKE_GRIMACE = 804
____exports.EntityType[____exports.EntityType.QUAKE_GRIMACE] = "QUAKE_GRIMACE"
____exports.EntityType.BISHOP = 805
____exports.EntityType[____exports.EntityType.BISHOP] = "BISHOP"
____exports.EntityType.BUBBLES = 806
____exports.EntityType[____exports.EntityType.BUBBLES] = "BUBBLES"
____exports.EntityType.WRAITH = 807
____exports.EntityType[____exports.EntityType.WRAITH] = "WRAITH"
____exports.EntityType.WILLO = 808
____exports.EntityType[____exports.EntityType.WILLO] = "WILLO"
____exports.EntityType.BOMB_GRIMACE = 809
____exports.EntityType[____exports.EntityType.BOMB_GRIMACE] = "BOMB_GRIMACE"
____exports.EntityType.SMALL_LEECH = 810
____exports.EntityType[____exports.EntityType.SMALL_LEECH] = "SMALL_LEECH"
____exports.EntityType.DEEP_GAPER = 811
____exports.EntityType[____exports.EntityType.DEEP_GAPER] = "DEEP_GAPER"
____exports.EntityType.SUB_HORF = 812
____exports.EntityType[____exports.EntityType.SUB_HORF] = "SUB_HORF"
____exports.EntityType.BLURB = 813
____exports.EntityType[____exports.EntityType.BLURB] = "BLURB"
____exports.EntityType.STRIDER = 814
____exports.EntityType[____exports.EntityType.STRIDER] = "STRIDER"
____exports.EntityType.FISSURE = 815
____exports.EntityType[____exports.EntityType.FISSURE] = "FISSURE"
____exports.EntityType.POLTY = 816
____exports.EntityType[____exports.EntityType.POLTY] = "POLTY"
____exports.EntityType.PREY = 817
____exports.EntityType[____exports.EntityType.PREY] = "PREY"
____exports.EntityType.ROCK_SPIDER = 818
____exports.EntityType[____exports.EntityType.ROCK_SPIDER] = "ROCK_SPIDER"
____exports.EntityType.FLY_BOMB = 819
____exports.EntityType[____exports.EntityType.FLY_BOMB] = "FLY_BOMB"
____exports.EntityType.DANNY = 820
____exports.EntityType[____exports.EntityType.DANNY] = "DANNY"
____exports.EntityType.BLASTER = 821
____exports.EntityType[____exports.EntityType.BLASTER] = "BLASTER"
____exports.EntityType.BOUNCER = 822
____exports.EntityType[____exports.EntityType.BOUNCER] = "BOUNCER"
____exports.EntityType.QUAKEY = 823
____exports.EntityType[____exports.EntityType.QUAKEY] = "QUAKEY"
____exports.EntityType.GYRO = 824
____exports.EntityType[____exports.EntityType.GYRO] = "GYRO"
____exports.EntityType.FIRE_WORM = 825
____exports.EntityType[____exports.EntityType.FIRE_WORM] = "FIRE_WORM"
____exports.EntityType.HARDY = 826
____exports.EntityType[____exports.EntityType.HARDY] = "HARDY"
____exports.EntityType.FACELESS = 827
____exports.EntityType[____exports.EntityType.FACELESS] = "FACELESS"
____exports.EntityType.NECRO = 828
____exports.EntityType[____exports.EntityType.NECRO] = "NECRO"
____exports.EntityType.MOLE = 829
____exports.EntityType[____exports.EntityType.MOLE] = "MOLE"
____exports.EntityType.BIG_BONY = 830
____exports.EntityType[____exports.EntityType.BIG_BONY] = "BIG_BONY"
____exports.EntityType.GUTTED_FATTY = 831
____exports.EntityType[____exports.EntityType.GUTTED_FATTY] = "GUTTED_FATTY"
____exports.EntityType.EXORCIST = 832
____exports.EntityType[____exports.EntityType.EXORCIST] = "EXORCIST"
____exports.EntityType.CANDLER = 833
____exports.EntityType[____exports.EntityType.CANDLER] = "CANDLER"
____exports.EntityType.WHIPPER = 834
____exports.EntityType[____exports.EntityType.WHIPPER] = "WHIPPER"
____exports.EntityType.PEEPER_FATTY = 835
____exports.EntityType[____exports.EntityType.PEEPER_FATTY] = "PEEPER_FATTY"
____exports.EntityType.VIS_VERSA = 836
____exports.EntityType[____exports.EntityType.VIS_VERSA] = "VIS_VERSA"
____exports.EntityType.HENRY = 837
____exports.EntityType[____exports.EntityType.HENRY] = "HENRY"
____exports.EntityType.WILLO_LVL_2 = 838
____exports.EntityType[____exports.EntityType.WILLO_LVL_2] = "WILLO_LVL_2"
____exports.EntityType.PON = 840
____exports.EntityType[____exports.EntityType.PON] = "PON"
____exports.EntityType.REVENANT = 841
____exports.EntityType[____exports.EntityType.REVENANT] = "REVENANT"
____exports.EntityType.BOMBGAGGER = 844
____exports.EntityType[____exports.EntityType.BOMBGAGGER] = "BOMBGAGGER"
____exports.EntityType.GAPER_LVL_2 = 850
____exports.EntityType[____exports.EntityType.GAPER_LVL_2] = "GAPER_LVL_2"
____exports.EntityType.TWITCHY = 851
____exports.EntityType[____exports.EntityType.TWITCHY] = "TWITCHY"
____exports.EntityType.SPIKEBALL = 852
____exports.EntityType[____exports.EntityType.SPIKEBALL] = "SPIKEBALL"
____exports.EntityType.SMALL_MAGGOT = 853
____exports.EntityType[____exports.EntityType.SMALL_MAGGOT] = "SMALL_MAGGOT"
____exports.EntityType.ADULT_LEECH = 854
____exports.EntityType[____exports.EntityType.ADULT_LEECH] = "ADULT_LEECH"
____exports.EntityType.CHARGER_LVL_2 = 855
____exports.EntityType[____exports.EntityType.CHARGER_LVL_2] = "CHARGER_LVL_2"
____exports.EntityType.GASBAG = 856
____exports.EntityType[____exports.EntityType.GASBAG] = "GASBAG"
____exports.EntityType.COHORT = 857
____exports.EntityType[____exports.EntityType.COHORT] = "COHORT"
____exports.EntityType.FLOATING_HOST = 859
____exports.EntityType[____exports.EntityType.FLOATING_HOST] = "FLOATING_HOST"
____exports.EntityType.UNBORN = 860
____exports.EntityType[____exports.EntityType.UNBORN] = "UNBORN"
____exports.EntityType.PUSTULE = 861
____exports.EntityType[____exports.EntityType.PUSTULE] = "PUSTULE"
____exports.EntityType.CYST = 862
____exports.EntityType[____exports.EntityType.CYST] = "CYST"
____exports.EntityType.MORNINGSTAR = 863
____exports.EntityType[____exports.EntityType.MORNINGSTAR] = "MORNINGSTAR"
____exports.EntityType.MOCKULUS = 864
____exports.EntityType[____exports.EntityType.MOCKULUS] = "MOCKULUS"
____exports.EntityType.EVIS = 865
____exports.EntityType[____exports.EntityType.EVIS] = "EVIS"
____exports.EntityType.DARK_ESAU = 866
____exports.EntityType[____exports.EntityType.DARK_ESAU] = "DARK_ESAU"
____exports.EntityType.MOTHERS_SHADOW = 867
____exports.EntityType[____exports.EntityType.MOTHERS_SHADOW] = "MOTHERS_SHADOW"
____exports.EntityType.ARMY_FLY = 868
____exports.EntityType[____exports.EntityType.ARMY_FLY] = "ARMY_FLY"
____exports.EntityType.MIGRAINE = 869
____exports.EntityType[____exports.EntityType.MIGRAINE] = "MIGRAINE"
____exports.EntityType.DRIP = 870
____exports.EntityType[____exports.EntityType.DRIP] = "DRIP"
____exports.EntityType.SPLURT = 871
____exports.EntityType[____exports.EntityType.SPLURT] = "SPLURT"
____exports.EntityType.CLOGGY = 872
____exports.EntityType[____exports.EntityType.CLOGGY] = "CLOGGY"
____exports.EntityType.FLY_TRAP = 873
____exports.EntityType[____exports.EntityType.FLY_TRAP] = "FLY_TRAP"
____exports.EntityType.GAS_DWARF = 874
____exports.EntityType[____exports.EntityType.GAS_DWARF] = "GAS_DWARF"
____exports.EntityType.POOT_MINE = 875
____exports.EntityType[____exports.EntityType.POOT_MINE] = "POOT_MINE"
____exports.EntityType.DUMP = 876
____exports.EntityType[____exports.EntityType.DUMP] = "DUMP"
____exports.EntityType.GRUDGE = 877
____exports.EntityType[____exports.EntityType.GRUDGE] = "GRUDGE"
____exports.EntityType.BUTT_SLICKER = 878
____exports.EntityType[____exports.EntityType.BUTT_SLICKER] = "BUTT_SLICKER"
____exports.EntityType.BLOATY = 879
____exports.EntityType[____exports.EntityType.BLOATY] = "BLOATY"
____exports.EntityType.FLESH_MAIDEN = 880
____exports.EntityType[____exports.EntityType.FLESH_MAIDEN] = "FLESH_MAIDEN"
____exports.EntityType.NEEDLE = 881
____exports.EntityType[____exports.EntityType.NEEDLE] = "NEEDLE"
____exports.EntityType.DUST = 882
____exports.EntityType[____exports.EntityType.DUST] = "DUST"
____exports.EntityType.BABY_BEGOTTEN = 883
____exports.EntityType[____exports.EntityType.BABY_BEGOTTEN] = "BABY_BEGOTTEN"
____exports.EntityType.SWARM_SPIDER = 884
____exports.EntityType[____exports.EntityType.SWARM_SPIDER] = "SWARM_SPIDER"
____exports.EntityType.CULTIST = 885
____exports.EntityType[____exports.EntityType.CULTIST] = "CULTIST"
____exports.EntityType.VIS_FATTY = 886
____exports.EntityType[____exports.EntityType.VIS_FATTY] = "VIS_FATTY"
____exports.EntityType.DUSTY_DEATHS_HEAD = 887
____exports.EntityType[____exports.EntityType.DUSTY_DEATHS_HEAD] = "DUSTY_DEATHS_HEAD"
____exports.EntityType.SHADY = 888
____exports.EntityType[____exports.EntityType.SHADY] = "SHADY"
____exports.EntityType.CLICKETY_CLACK = 889
____exports.EntityType[____exports.EntityType.CLICKETY_CLACK] = "CLICKETY_CLACK"
____exports.EntityType.MAZE_ROAMER = 890
____exports.EntityType[____exports.EntityType.MAZE_ROAMER] = "MAZE_ROAMER"
____exports.EntityType.GOAT = 891
____exports.EntityType[____exports.EntityType.GOAT] = "GOAT"
____exports.EntityType.POOFER = 892
____exports.EntityType[____exports.EntityType.POOFER] = "POOFER"
____exports.EntityType.BALL_AND_CHAIN = 893
____exports.EntityType[____exports.EntityType.BALL_AND_CHAIN] = "BALL_AND_CHAIN"
____exports.EntityType.REAP_CREEP = 900
____exports.EntityType[____exports.EntityType.REAP_CREEP] = "REAP_CREEP"
____exports.EntityType.LIL_BLUB = 901
____exports.EntityType[____exports.EntityType.LIL_BLUB] = "LIL_BLUB"
____exports.EntityType.RAINMAKER = 902
____exports.EntityType[____exports.EntityType.RAINMAKER] = "RAINMAKER"
____exports.EntityType.VISAGE = 903
____exports.EntityType[____exports.EntityType.VISAGE] = "VISAGE"
____exports.EntityType.SIREN = 904
____exports.EntityType[____exports.EntityType.SIREN] = "SIREN"
____exports.EntityType.HERETIC = 905
____exports.EntityType[____exports.EntityType.HERETIC] = "HERETIC"
____exports.EntityType.HORNFEL = 906
____exports.EntityType[____exports.EntityType.HORNFEL] = "HORNFEL"
____exports.EntityType.GREAT_GIDEON = 907
____exports.EntityType[____exports.EntityType.GREAT_GIDEON] = "GREAT_GIDEON"
____exports.EntityType.BABY_PLUM = 908
____exports.EntityType[____exports.EntityType.BABY_PLUM] = "BABY_PLUM"
____exports.EntityType.SCOURGE = 909
____exports.EntityType[____exports.EntityType.SCOURGE] = "SCOURGE"
____exports.EntityType.CHIMERA = 910
____exports.EntityType[____exports.EntityType.CHIMERA] = "CHIMERA"
____exports.EntityType.ROTGUT = 911
____exports.EntityType[____exports.EntityType.ROTGUT] = "ROTGUT"
____exports.EntityType.MOTHER = 912
____exports.EntityType[____exports.EntityType.MOTHER] = "MOTHER"
____exports.EntityType.MIN_MIN = 913
____exports.EntityType[____exports.EntityType.MIN_MIN] = "MIN_MIN"
____exports.EntityType.CLOG = 914
____exports.EntityType[____exports.EntityType.CLOG] = "CLOG"
____exports.EntityType.SINGE = 915
____exports.EntityType[____exports.EntityType.SINGE] = "SINGE"
____exports.EntityType.BUMBINO = 916
____exports.EntityType[____exports.EntityType.BUMBINO] = "BUMBINO"
____exports.EntityType.COLOSTOMIA = 917
____exports.EntityType[____exports.EntityType.COLOSTOMIA] = "COLOSTOMIA"
____exports.EntityType.TURDLET = 918
____exports.EntityType[____exports.EntityType.TURDLET] = "TURDLET"
____exports.EntityType.RAGLICH = 919
____exports.EntityType[____exports.EntityType.RAGLICH] = "RAGLICH"
____exports.EntityType.HORNY_BOYS = 920
____exports.EntityType[____exports.EntityType.HORNY_BOYS] = "HORNY_BOYS"
____exports.EntityType.CLUTCH = 921
____exports.EntityType[____exports.EntityType.CLUTCH] = "CLUTCH"
____exports.EntityType.DOGMA = 950
____exports.EntityType[____exports.EntityType.DOGMA] = "DOGMA"
____exports.EntityType.BEAST = 951
____exports.EntityType[____exports.EntityType.BEAST] = "BEAST"
____exports.EntityType.GENERIC_PROP = 960
____exports.EntityType[____exports.EntityType.GENERIC_PROP] = "GENERIC_PROP"
____exports.EntityType.FROZEN_ENEMY = 963
____exports.EntityType[____exports.EntityType.FROZEN_ENEMY] = "FROZEN_ENEMY"
____exports.EntityType.DUMMY = 964
____exports.EntityType[____exports.EntityType.DUMMY] = "DUMMY"
____exports.EntityType.MINECART = 965
____exports.EntityType[____exports.EntityType.MINECART] = "MINECART"
____exports.EntityType.SIREN_HELPER = 966
____exports.EntityType[____exports.EntityType.SIREN_HELPER] = "SIREN_HELPER"
____exports.EntityType.HORNFEL_DOOR = 967
____exports.EntityType[____exports.EntityType.HORNFEL_DOOR] = "HORNFEL_DOOR"
____exports.EntityType.EFFECT = 1000
____exports.EntityType[____exports.EntityType.EFFECT] = "EFFECT"
____exports.EntityType.TEXT = 9001
____exports.EntityType[____exports.EntityType.TEXT] = "TEXT"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.EntityGridCollisionClass"] = function(...) 
local ____exports = {}
____exports.EntityGridCollisionClass = {}
____exports.EntityGridCollisionClass.NONE = 0
____exports.EntityGridCollisionClass[____exports.EntityGridCollisionClass.NONE] = "NONE"
____exports.EntityGridCollisionClass.WALLS_X = 1
____exports.EntityGridCollisionClass[____exports.EntityGridCollisionClass.WALLS_X] = "WALLS_X"
____exports.EntityGridCollisionClass.WALLS_Y = 2
____exports.EntityGridCollisionClass[____exports.EntityGridCollisionClass.WALLS_Y] = "WALLS_Y"
____exports.EntityGridCollisionClass.WALLS = 3
____exports.EntityGridCollisionClass[____exports.EntityGridCollisionClass.WALLS] = "WALLS"
____exports.EntityGridCollisionClass.BULLET = 4
____exports.EntityGridCollisionClass[____exports.EntityGridCollisionClass.BULLET] = "BULLET"
____exports.EntityGridCollisionClass.GROUND = 5
____exports.EntityGridCollisionClass[____exports.EntityGridCollisionClass.GROUND] = "GROUND"
____exports.EntityGridCollisionClass.NO_PITS = 6
____exports.EntityGridCollisionClass[____exports.EntityGridCollisionClass.NO_PITS] = "NO_PITS"
____exports.EntityGridCollisionClass.PITS_ONLY = 7
____exports.EntityGridCollisionClass[____exports.EntityGridCollisionClass.PITS_ONLY] = "PITS_ONLY"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.EntityCollisionClass"] = function(...) 
local ____exports = {}
____exports.EntityCollisionClass = {}
____exports.EntityCollisionClass.NONE = 0
____exports.EntityCollisionClass[____exports.EntityCollisionClass.NONE] = "NONE"
____exports.EntityCollisionClass.PLAYER_ONLY = 1
____exports.EntityCollisionClass[____exports.EntityCollisionClass.PLAYER_ONLY] = "PLAYER_ONLY"
____exports.EntityCollisionClass.PLAYER_OBJECTS = 2
____exports.EntityCollisionClass[____exports.EntityCollisionClass.PLAYER_OBJECTS] = "PLAYER_OBJECTS"
____exports.EntityCollisionClass.ENEMIES = 3
____exports.EntityCollisionClass[____exports.EntityCollisionClass.ENEMIES] = "ENEMIES"
____exports.EntityCollisionClass.ALL = 4
____exports.EntityCollisionClass[____exports.EntityCollisionClass.ALL] = "ALL"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.Ending"] = function(...) 
local ____exports = {}
--- Matches the entries in the "cutscenes.xml" file.
____exports.Ending = {}
____exports.Ending.INTRO = 1
____exports.Ending[____exports.Ending.INTRO] = "INTRO"
____exports.Ending.CREDITS = 2
____exports.Ending[____exports.Ending.CREDITS] = "CREDITS"
____exports.Ending.EPILOGUE = 3
____exports.Ending[____exports.Ending.EPILOGUE] = "EPILOGUE"
____exports.Ending.WOMB_EDEN = 4
____exports.Ending[____exports.Ending.WOMB_EDEN] = "WOMB_EDEN"
____exports.Ending.WOMB_RUBBER_CEMENT = 5
____exports.Ending[____exports.Ending.WOMB_RUBBER_CEMENT] = "WOMB_RUBBER_CEMENT"
____exports.Ending.WOMB_NOOSE = 6
____exports.Ending[____exports.Ending.WOMB_NOOSE] = "WOMB_NOOSE"
____exports.Ending.WOMB_WIRE_COAT_HANGER = 7
____exports.Ending[____exports.Ending.WOMB_WIRE_COAT_HANGER] = "WOMB_WIRE_COAT_HANGER"
____exports.Ending.WOMB_EVERYTHING_IS_TERRIBLE = 8
____exports.Ending[____exports.Ending.WOMB_EVERYTHING_IS_TERRIBLE] = "WOMB_EVERYTHING_IS_TERRIBLE"
____exports.Ending.WOMB_IPECAC = 9
____exports.Ending[____exports.Ending.WOMB_IPECAC] = "WOMB_IPECAC"
____exports.Ending.WOMB_EXPERIMENTAL_TREATMENT = 10
____exports.Ending[____exports.Ending.WOMB_EXPERIMENTAL_TREATMENT] = "WOMB_EXPERIMENTAL_TREATMENT"
____exports.Ending.WOMB_A_QUARTER = 11
____exports.Ending[____exports.Ending.WOMB_A_QUARTER] = "WOMB_A_QUARTER"
____exports.Ending.WOMB_DR_FETUS = 12
____exports.Ending[____exports.Ending.WOMB_DR_FETUS] = "WOMB_DR_FETUS"
____exports.Ending.WOMB_BLUE_BABY = 13
____exports.Ending[____exports.Ending.WOMB_BLUE_BABY] = "WOMB_BLUE_BABY"
____exports.Ending.WOMB_IT_LIVES = 14
____exports.Ending[____exports.Ending.WOMB_IT_LIVES] = "WOMB_IT_LIVES"
____exports.Ending.SHEOL = 15
____exports.Ending[____exports.Ending.SHEOL] = "SHEOL"
____exports.Ending.CATHEDRAL = 16
____exports.Ending[____exports.Ending.CATHEDRAL] = "CATHEDRAL"
____exports.Ending.CHEST = 17
____exports.Ending[____exports.Ending.CHEST] = "CHEST"
____exports.Ending.DARK_ROOM = 18
____exports.Ending[____exports.Ending.DARK_ROOM] = "DARK_ROOM"
____exports.Ending.MEGA_SATAN = 19
____exports.Ending[____exports.Ending.MEGA_SATAN] = "MEGA_SATAN"
____exports.Ending.BLUE_WOMB = 20
____exports.Ending[____exports.Ending.BLUE_WOMB] = "BLUE_WOMB"
____exports.Ending.GREED_MODE = 21
____exports.Ending[____exports.Ending.GREED_MODE] = "GREED_MODE"
____exports.Ending.VOID = 22
____exports.Ending[____exports.Ending.VOID] = "VOID"
____exports.Ending.GREEDIER = 23
____exports.Ending[____exports.Ending.GREEDIER] = "GREEDIER"
____exports.Ending.MOTHER = 24
____exports.Ending[____exports.Ending.MOTHER] = "MOTHER"
____exports.Ending.DOGMA = 25
____exports.Ending[____exports.Ending.DOGMA] = "DOGMA"
____exports.Ending.BEAST = 26
____exports.Ending[____exports.Ending.BEAST] = "BEAST"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.Direction"] = function(...) 
local ____exports = {}
____exports.Direction = {}
____exports.Direction.NO_DIRECTION = -1
____exports.Direction[____exports.Direction.NO_DIRECTION] = "NO_DIRECTION"
____exports.Direction.LEFT = 0
____exports.Direction[____exports.Direction.LEFT] = "LEFT"
____exports.Direction.UP = 1
____exports.Direction[____exports.Direction.UP] = "UP"
____exports.Direction.RIGHT = 2
____exports.Direction[____exports.Direction.RIGHT] = "RIGHT"
____exports.Direction.DOWN = 3
____exports.Direction[____exports.Direction.DOWN] = "DOWN"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.Dimension"] = function(...) 
local ____exports = {}
____exports.Dimension = {}
____exports.Dimension.CURRENT = -1
____exports.Dimension[____exports.Dimension.CURRENT] = "CURRENT"
____exports.Dimension.MAIN = 0
____exports.Dimension[____exports.Dimension.MAIN] = "MAIN"
____exports.Dimension.SECONDARY = 1
____exports.Dimension[____exports.Dimension.SECONDARY] = "SECONDARY"
____exports.Dimension.DEATH_CERTIFICATE = 2
____exports.Dimension[____exports.Dimension.DEATH_CERTIFICATE] = "DEATH_CERTIFICATE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.Difficulty"] = function(...) 
local ____exports = {}
____exports.Difficulty = {}
____exports.Difficulty.NORMAL = 0
____exports.Difficulty[____exports.Difficulty.NORMAL] = "NORMAL"
____exports.Difficulty.HARD = 1
____exports.Difficulty[____exports.Difficulty.HARD] = "HARD"
____exports.Difficulty.GREED = 2
____exports.Difficulty[____exports.Difficulty.GREED] = "GREED"
____exports.Difficulty.GREEDIER = 3
____exports.Difficulty[____exports.Difficulty.GREEDIER] = "GREEDIER"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.DebugCommand"] = function(...) 
local ____exports = {}
--- The values accepted by the `debug` console command.
____exports.DebugCommand = {}
____exports.DebugCommand.ENTITY_POSITIONS = 1
____exports.DebugCommand[____exports.DebugCommand.ENTITY_POSITIONS] = "ENTITY_POSITIONS"
____exports.DebugCommand.GRID_COST = 2
____exports.DebugCommand[____exports.DebugCommand.GRID_COST] = "GRID_COST"
____exports.DebugCommand.INFINITE_HP = 3
____exports.DebugCommand[____exports.DebugCommand.INFINITE_HP] = "INFINITE_HP"
____exports.DebugCommand.HIGH_DAMAGE = 4
____exports.DebugCommand[____exports.DebugCommand.HIGH_DAMAGE] = "HIGH_DAMAGE"
____exports.DebugCommand.SHOW_ROOM_INFO = 5
____exports.DebugCommand[____exports.DebugCommand.SHOW_ROOM_INFO] = "SHOW_ROOM_INFO"
____exports.DebugCommand.SHOW_HITSPHERES = 6
____exports.DebugCommand[____exports.DebugCommand.SHOW_HITSPHERES] = "SHOW_HITSPHERES"
____exports.DebugCommand.SHOW_DAMAGE_VALUES = 7
____exports.DebugCommand[____exports.DebugCommand.SHOW_DAMAGE_VALUES] = "SHOW_DAMAGE_VALUES"
____exports.DebugCommand.INFINITE_ITEM_CHARGES = 8
____exports.DebugCommand[____exports.DebugCommand.INFINITE_ITEM_CHARGES] = "INFINITE_ITEM_CHARGES"
____exports.DebugCommand.HIGH_LUCK = 9
____exports.DebugCommand[____exports.DebugCommand.HIGH_LUCK] = "HIGH_LUCK"
____exports.DebugCommand.QUICK_KILL = 10
____exports.DebugCommand[____exports.DebugCommand.QUICK_KILL] = "QUICK_KILL"
____exports.DebugCommand.GRID_INFO = 11
____exports.DebugCommand[____exports.DebugCommand.GRID_INFO] = "GRID_INFO"
____exports.DebugCommand.PLAYER_ITEM_INFO = 12
____exports.DebugCommand[____exports.DebugCommand.PLAYER_ITEM_INFO] = "PLAYER_ITEM_INFO"
____exports.DebugCommand.SHOW_GRID_COLLISION_POINTS = 13
____exports.DebugCommand[____exports.DebugCommand.SHOW_GRID_COLLISION_POINTS] = "SHOW_GRID_COLLISION_POINTS"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.CopyableIsaacAPIClassType"] = function(...) 
local ____exports = {}
--- An enum containing the Isaac API classes that can be safely copied / serialized.
____exports.CopyableIsaacAPIClassType = {}
____exports.CopyableIsaacAPIClassType.BIT_SET_128 = "BitSet128"
____exports.CopyableIsaacAPIClassType.COLOR = "Color"
____exports.CopyableIsaacAPIClassType.K_COLOR = "KColor"
____exports.CopyableIsaacAPIClassType.RNG = "RNG"
____exports.CopyableIsaacAPIClassType.VECTOR = "Vector"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ControllerIndex"] = function(...) 
local ____exports = {}
____exports.ControllerIndex = {}
____exports.ControllerIndex.KEYBOARD = 0
____exports.ControllerIndex[____exports.ControllerIndex.KEYBOARD] = "KEYBOARD"
____exports.ControllerIndex.CONTROLLER_1 = 1
____exports.ControllerIndex[____exports.ControllerIndex.CONTROLLER_1] = "CONTROLLER_1"
____exports.ControllerIndex.CONTROLLER_2 = 2
____exports.ControllerIndex[____exports.ControllerIndex.CONTROLLER_2] = "CONTROLLER_2"
____exports.ControllerIndex.CONTROLLER_3 = 3
____exports.ControllerIndex[____exports.ControllerIndex.CONTROLLER_3] = "CONTROLLER_3"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.Controller"] = function(...) 
local ____exports = {}
--- These enums loop after 31, so 32 = D_PAD_LEFT, 63 = D_PAD_LEFT, and so on.
-- 
-- There appears to be no input key for joystick movement.
____exports.Controller = {}
____exports.Controller.D_PAD_LEFT = 0
____exports.Controller[____exports.Controller.D_PAD_LEFT] = "D_PAD_LEFT"
____exports.Controller.D_PAD_RIGHT = 1
____exports.Controller[____exports.Controller.D_PAD_RIGHT] = "D_PAD_RIGHT"
____exports.Controller.D_PAD_UP = 2
____exports.Controller[____exports.Controller.D_PAD_UP] = "D_PAD_UP"
____exports.Controller.D_PAD_DOWN = 3
____exports.Controller[____exports.Controller.D_PAD_DOWN] = "D_PAD_DOWN"
____exports.Controller.BUTTON_A = 4
____exports.Controller[____exports.Controller.BUTTON_A] = "BUTTON_A"
____exports.Controller.BUTTON_B = 5
____exports.Controller[____exports.Controller.BUTTON_B] = "BUTTON_B"
____exports.Controller.BUTTON_X = 6
____exports.Controller[____exports.Controller.BUTTON_X] = "BUTTON_X"
____exports.Controller.BUTTON_Y = 7
____exports.Controller[____exports.Controller.BUTTON_Y] = "BUTTON_Y"
____exports.Controller.BUMPER_LEFT = 8
____exports.Controller[____exports.Controller.BUMPER_LEFT] = "BUMPER_LEFT"
____exports.Controller.TRIGGER_LEFT = 9
____exports.Controller[____exports.Controller.TRIGGER_LEFT] = "TRIGGER_LEFT"
____exports.Controller.STICK_LEFT = 10
____exports.Controller[____exports.Controller.STICK_LEFT] = "STICK_LEFT"
____exports.Controller.BUMPER_RIGHT = 11
____exports.Controller[____exports.Controller.BUMPER_RIGHT] = "BUMPER_RIGHT"
____exports.Controller.TRIGGER_RIGHT = 12
____exports.Controller[____exports.Controller.TRIGGER_RIGHT] = "TRIGGER_RIGHT"
____exports.Controller.STICK_RIGHT = 13
____exports.Controller[____exports.Controller.STICK_RIGHT] = "STICK_RIGHT"
____exports.Controller.BUTTON_BACK = 14
____exports.Controller[____exports.Controller.BUTTON_BACK] = "BUTTON_BACK"
____exports.Controller.BUTTON_START = 15
____exports.Controller[____exports.Controller.BUTTON_START] = "BUTTON_START"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.CollectibleSpriteLayer"] = function(...) 
local ____exports = {}
--- Corresponds to "resources/gfx/005.100_collectible.anm2".
____exports.CollectibleSpriteLayer = {}
____exports.CollectibleSpriteLayer.BODY = 0
____exports.CollectibleSpriteLayer[____exports.CollectibleSpriteLayer.BODY] = "BODY"
____exports.CollectibleSpriteLayer.HEAD = 1
____exports.CollectibleSpriteLayer[____exports.CollectibleSpriteLayer.HEAD] = "HEAD"
____exports.CollectibleSpriteLayer.SPARKLE = 2
____exports.CollectibleSpriteLayer[____exports.CollectibleSpriteLayer.SPARKLE] = "SPARKLE"
____exports.CollectibleSpriteLayer.SHADOW = 3
____exports.CollectibleSpriteLayer[____exports.CollectibleSpriteLayer.SHADOW] = "SHADOW"
____exports.CollectibleSpriteLayer.ITEM_SHADOW = 4
____exports.CollectibleSpriteLayer[____exports.CollectibleSpriteLayer.ITEM_SHADOW] = "ITEM_SHADOW"
____exports.CollectibleSpriteLayer.ALTAR = 5
____exports.CollectibleSpriteLayer[____exports.CollectibleSpriteLayer.ALTAR] = "ALTAR"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.CollectiblePedestalType"] = function(...) 
local ____exports = {}
--- Corresponds to the overlay frame number in "005.100_collectible.anm2".
____exports.CollectiblePedestalType = {}
____exports.CollectiblePedestalType.NONE = -1
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.NONE] = "NONE"
____exports.CollectiblePedestalType.NORMAL = 0
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.NORMAL] = "NORMAL"
____exports.CollectiblePedestalType.FORTUNE_TELLING_MACHINE = 1
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.FORTUNE_TELLING_MACHINE] = "FORTUNE_TELLING_MACHINE"
____exports.CollectiblePedestalType.BLOOD_DONATION_MACHINE = 2
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.BLOOD_DONATION_MACHINE] = "BLOOD_DONATION_MACHINE"
____exports.CollectiblePedestalType.SLOT_MACHINE = 3
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.SLOT_MACHINE] = "SLOT_MACHINE"
____exports.CollectiblePedestalType.LOCKED_CHEST = 4
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.LOCKED_CHEST] = "LOCKED_CHEST"
____exports.CollectiblePedestalType.RED_CHEST = 5
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.RED_CHEST] = "RED_CHEST"
____exports.CollectiblePedestalType.BOMB_CHEST = 6
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.BOMB_CHEST] = "BOMB_CHEST"
____exports.CollectiblePedestalType.SPIKED_CHEST = 7
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.SPIKED_CHEST] = "SPIKED_CHEST"
____exports.CollectiblePedestalType.ETERNAL_CHEST = 8
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.ETERNAL_CHEST] = "ETERNAL_CHEST"
____exports.CollectiblePedestalType.MOMS_DRESSING_TABLE = 9
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.MOMS_DRESSING_TABLE] = "MOMS_DRESSING_TABLE"
____exports.CollectiblePedestalType.CHEST = 10
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.CHEST] = "CHEST"
____exports.CollectiblePedestalType.MOMS_CHEST = 11
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.MOMS_CHEST] = "MOMS_CHEST"
____exports.CollectiblePedestalType.OLD_CHEST = 12
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.OLD_CHEST] = "OLD_CHEST"
____exports.CollectiblePedestalType.WOODEN_CHEST = 13
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.WOODEN_CHEST] = "WOODEN_CHEST"
____exports.CollectiblePedestalType.MEGA_CHEST = 14
____exports.CollectiblePedestalType[____exports.CollectiblePedestalType.MEGA_CHEST] = "MEGA_CHEST"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.CollectibleAnimation"] = function(...) 
local ____exports = {}
____exports.CollectibleAnimation = {}
____exports.CollectibleAnimation.IDLE = "Idle"
____exports.CollectibleAnimation.EMPTY = "Empty"
____exports.CollectibleAnimation.SHOP_IDLE = "ShopIdle"
____exports.CollectibleAnimation.PLAYER_PICKUP = "PlayerPickup"
____exports.CollectibleAnimation.PLAYER_PICKUP_SPARKLE = "PlayerPickupSparkle"
____exports.CollectibleAnimation.ALTERNATE = "Alternates"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ChampionColor"] = function(...) 
local ____exports = {}
____exports.ChampionColor = {}
____exports.ChampionColor.RED = 0
____exports.ChampionColor[____exports.ChampionColor.RED] = "RED"
____exports.ChampionColor.YELLOW = 1
____exports.ChampionColor[____exports.ChampionColor.YELLOW] = "YELLOW"
____exports.ChampionColor.GREEN = 2
____exports.ChampionColor[____exports.ChampionColor.GREEN] = "GREEN"
____exports.ChampionColor.ORANGE = 3
____exports.ChampionColor[____exports.ChampionColor.ORANGE] = "ORANGE"
____exports.ChampionColor.BLUE = 4
____exports.ChampionColor[____exports.ChampionColor.BLUE] = "BLUE"
____exports.ChampionColor.BLACK = 5
____exports.ChampionColor[____exports.ChampionColor.BLACK] = "BLACK"
____exports.ChampionColor.WHITE = 6
____exports.ChampionColor[____exports.ChampionColor.WHITE] = "WHITE"
____exports.ChampionColor.GREY = 7
____exports.ChampionColor[____exports.ChampionColor.GREY] = "GREY"
____exports.ChampionColor.TRANSPARENT = 8
____exports.ChampionColor[____exports.ChampionColor.TRANSPARENT] = "TRANSPARENT"
____exports.ChampionColor.FLICKER = 9
____exports.ChampionColor[____exports.ChampionColor.FLICKER] = "FLICKER"
____exports.ChampionColor.PINK = 10
____exports.ChampionColor[____exports.ChampionColor.PINK] = "PINK"
____exports.ChampionColor.PURPLE = 11
____exports.ChampionColor[____exports.ChampionColor.PURPLE] = "PURPLE"
____exports.ChampionColor.DARK_RED = 12
____exports.ChampionColor[____exports.ChampionColor.DARK_RED] = "DARK_RED"
____exports.ChampionColor.LIGHT_BLUE = 13
____exports.ChampionColor[____exports.ChampionColor.LIGHT_BLUE] = "LIGHT_BLUE"
____exports.ChampionColor.CAMO = 14
____exports.ChampionColor[____exports.ChampionColor.CAMO] = "CAMO"
____exports.ChampionColor.PULSE_GREEN = 15
____exports.ChampionColor[____exports.ChampionColor.PULSE_GREEN] = "PULSE_GREEN"
____exports.ChampionColor.PULSE_GREY = 16
____exports.ChampionColor[____exports.ChampionColor.PULSE_GREY] = "PULSE_GREY"
____exports.ChampionColor.FLY_PROTECTED = 17
____exports.ChampionColor[____exports.ChampionColor.FLY_PROTECTED] = "FLY_PROTECTED"
____exports.ChampionColor.TINY = 18
____exports.ChampionColor[____exports.ChampionColor.TINY] = "TINY"
____exports.ChampionColor.GIANT = 19
____exports.ChampionColor[____exports.ChampionColor.GIANT] = "GIANT"
____exports.ChampionColor.PULSE_RED = 20
____exports.ChampionColor[____exports.ChampionColor.PULSE_RED] = "PULSE_RED"
____exports.ChampionColor.SIZE_PULSE = 21
____exports.ChampionColor[____exports.ChampionColor.SIZE_PULSE] = "SIZE_PULSE"
____exports.ChampionColor.KING = 22
____exports.ChampionColor[____exports.ChampionColor.KING] = "KING"
____exports.ChampionColor.DEATH = 23
____exports.ChampionColor[____exports.ChampionColor.DEATH] = "DEATH"
____exports.ChampionColor.BROWN = 24
____exports.ChampionColor[____exports.ChampionColor.BROWN] = "BROWN"
____exports.ChampionColor.RAINBOW = 25
____exports.ChampionColor[____exports.ChampionColor.RAINBOW] = "RAINBOW"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.Challenge"] = function(...) 
local ____exports = {}
--- This enum is contiguous. (Every value is satisfied between 0 and 45, inclusive.)
____exports.Challenge = {}
____exports.Challenge.NULL = 0
____exports.Challenge[____exports.Challenge.NULL] = "NULL"
____exports.Challenge.PITCH_BLACK = 1
____exports.Challenge[____exports.Challenge.PITCH_BLACK] = "PITCH_BLACK"
____exports.Challenge.HIGH_BROW = 2
____exports.Challenge[____exports.Challenge.HIGH_BROW] = "HIGH_BROW"
____exports.Challenge.HEAD_TRAUMA = 3
____exports.Challenge[____exports.Challenge.HEAD_TRAUMA] = "HEAD_TRAUMA"
____exports.Challenge.DARKNESS_FALLS = 4
____exports.Challenge[____exports.Challenge.DARKNESS_FALLS] = "DARKNESS_FALLS"
____exports.Challenge.TANK = 5
____exports.Challenge[____exports.Challenge.TANK] = "TANK"
____exports.Challenge.SOLAR_SYSTEM = 6
____exports.Challenge[____exports.Challenge.SOLAR_SYSTEM] = "SOLAR_SYSTEM"
____exports.Challenge.SUICIDE_KING = 7
____exports.Challenge[____exports.Challenge.SUICIDE_KING] = "SUICIDE_KING"
____exports.Challenge.CAT_GOT_YOUR_TONGUE = 8
____exports.Challenge[____exports.Challenge.CAT_GOT_YOUR_TONGUE] = "CAT_GOT_YOUR_TONGUE"
____exports.Challenge.DEMO_MAN = 9
____exports.Challenge[____exports.Challenge.DEMO_MAN] = "DEMO_MAN"
____exports.Challenge.CURSED = 10
____exports.Challenge[____exports.Challenge.CURSED] = "CURSED"
____exports.Challenge.GLASS_CANNON = 11
____exports.Challenge[____exports.Challenge.GLASS_CANNON] = "GLASS_CANNON"
____exports.Challenge.WHEN_LIFE_GIVES_YOU_LEMONS = 12
____exports.Challenge[____exports.Challenge.WHEN_LIFE_GIVES_YOU_LEMONS] = "WHEN_LIFE_GIVES_YOU_LEMONS"
____exports.Challenge.BEANS = 13
____exports.Challenge[____exports.Challenge.BEANS] = "BEANS"
____exports.Challenge.ITS_IN_THE_CARDS = 14
____exports.Challenge[____exports.Challenge.ITS_IN_THE_CARDS] = "ITS_IN_THE_CARDS"
____exports.Challenge.SLOW_ROLL = 15
____exports.Challenge[____exports.Challenge.SLOW_ROLL] = "SLOW_ROLL"
____exports.Challenge.COMPUTER_SAVY = 16
____exports.Challenge[____exports.Challenge.COMPUTER_SAVY] = "COMPUTER_SAVY"
____exports.Challenge.WAKA_WAKA = 17
____exports.Challenge[____exports.Challenge.WAKA_WAKA] = "WAKA_WAKA"
____exports.Challenge.HOST = 18
____exports.Challenge[____exports.Challenge.HOST] = "HOST"
____exports.Challenge.FAMILY_MAN = 19
____exports.Challenge[____exports.Challenge.FAMILY_MAN] = "FAMILY_MAN"
____exports.Challenge.PURIST = 20
____exports.Challenge[____exports.Challenge.PURIST] = "PURIST"
____exports.Challenge.XXXXXXXXL = 21
____exports.Challenge[____exports.Challenge.XXXXXXXXL] = "XXXXXXXXL"
____exports.Challenge.SPEED = 22
____exports.Challenge[____exports.Challenge.SPEED] = "SPEED"
____exports.Challenge.BLUE_BOMBER = 23
____exports.Challenge[____exports.Challenge.BLUE_BOMBER] = "BLUE_BOMBER"
____exports.Challenge.PAY_TO_PLAY = 24
____exports.Challenge[____exports.Challenge.PAY_TO_PLAY] = "PAY_TO_PLAY"
____exports.Challenge.HAVE_A_HEART = 25
____exports.Challenge[____exports.Challenge.HAVE_A_HEART] = "HAVE_A_HEART"
____exports.Challenge.I_RULE = 26
____exports.Challenge[____exports.Challenge.I_RULE] = "I_RULE"
____exports.Challenge.BRAINS = 27
____exports.Challenge[____exports.Challenge.BRAINS] = "BRAINS"
____exports.Challenge.PRIDE_DAY = 28
____exports.Challenge[____exports.Challenge.PRIDE_DAY] = "PRIDE_DAY"
____exports.Challenge.ONANS_STREAK = 29
____exports.Challenge[____exports.Challenge.ONANS_STREAK] = "ONANS_STREAK"
____exports.Challenge.GUARDIAN = 30
____exports.Challenge[____exports.Challenge.GUARDIAN] = "GUARDIAN"
____exports.Challenge.BACKASSWARDS = 31
____exports.Challenge[____exports.Challenge.BACKASSWARDS] = "BACKASSWARDS"
____exports.Challenge.APRILS_FOOL = 32
____exports.Challenge[____exports.Challenge.APRILS_FOOL] = "APRILS_FOOL"
____exports.Challenge.POKEY_MANS = 33
____exports.Challenge[____exports.Challenge.POKEY_MANS] = "POKEY_MANS"
____exports.Challenge.ULTRA_HARD = 34
____exports.Challenge[____exports.Challenge.ULTRA_HARD] = "ULTRA_HARD"
____exports.Challenge.PONG = 35
____exports.Challenge[____exports.Challenge.PONG] = "PONG"
____exports.Challenge.SCAT_MAN = 36
____exports.Challenge[____exports.Challenge.SCAT_MAN] = "SCAT_MAN"
____exports.Challenge.BLOODY_MARY = 37
____exports.Challenge[____exports.Challenge.BLOODY_MARY] = "BLOODY_MARY"
____exports.Challenge.BAPTISM_BY_FIRE = 38
____exports.Challenge[____exports.Challenge.BAPTISM_BY_FIRE] = "BAPTISM_BY_FIRE"
____exports.Challenge.ISAACS_AWAKENING = 39
____exports.Challenge[____exports.Challenge.ISAACS_AWAKENING] = "ISAACS_AWAKENING"
____exports.Challenge.SEEING_DOUBLE = 40
____exports.Challenge[____exports.Challenge.SEEING_DOUBLE] = "SEEING_DOUBLE"
____exports.Challenge.PICA_RUN = 41
____exports.Challenge[____exports.Challenge.PICA_RUN] = "PICA_RUN"
____exports.Challenge.HOT_POTATO = 42
____exports.Challenge[____exports.Challenge.HOT_POTATO] = "HOT_POTATO"
____exports.Challenge.CANTRIPPED = 43
____exports.Challenge[____exports.Challenge.CANTRIPPED] = "CANTRIPPED"
____exports.Challenge.RED_REDEMPTION = 44
____exports.Challenge[____exports.Challenge.RED_REDEMPTION] = "RED_REDEMPTION"
____exports.Challenge.DELETE_THIS = 45
____exports.Challenge[____exports.Challenge.DELETE_THIS] = "DELETE_THIS"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.CallbackPriority"] = function(...) 
local ____exports = {}
____exports.CallbackPriority = {}
____exports.CallbackPriority.IMPORTANT = -200
____exports.CallbackPriority[____exports.CallbackPriority.IMPORTANT] = "IMPORTANT"
____exports.CallbackPriority.EARLY = -100
____exports.CallbackPriority[____exports.CallbackPriority.EARLY] = "EARLY"
____exports.CallbackPriority.DEFAULT = 0
____exports.CallbackPriority[____exports.CallbackPriority.DEFAULT] = "DEFAULT"
____exports.CallbackPriority.LATE = 100
____exports.CallbackPriority[____exports.CallbackPriority.LATE] = "LATE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ButtonAction"] = function(...) 
local ____exports = {}
____exports.ButtonAction = {}
____exports.ButtonAction.LEFT = 0
____exports.ButtonAction[____exports.ButtonAction.LEFT] = "LEFT"
____exports.ButtonAction.RIGHT = 1
____exports.ButtonAction[____exports.ButtonAction.RIGHT] = "RIGHT"
____exports.ButtonAction.UP = 2
____exports.ButtonAction[____exports.ButtonAction.UP] = "UP"
____exports.ButtonAction.DOWN = 3
____exports.ButtonAction[____exports.ButtonAction.DOWN] = "DOWN"
____exports.ButtonAction.SHOOT_LEFT = 4
____exports.ButtonAction[____exports.ButtonAction.SHOOT_LEFT] = "SHOOT_LEFT"
____exports.ButtonAction.SHOOT_RIGHT = 5
____exports.ButtonAction[____exports.ButtonAction.SHOOT_RIGHT] = "SHOOT_RIGHT"
____exports.ButtonAction.SHOOT_UP = 6
____exports.ButtonAction[____exports.ButtonAction.SHOOT_UP] = "SHOOT_UP"
____exports.ButtonAction.SHOOT_DOWN = 7
____exports.ButtonAction[____exports.ButtonAction.SHOOT_DOWN] = "SHOOT_DOWN"
____exports.ButtonAction.BOMB = 8
____exports.ButtonAction[____exports.ButtonAction.BOMB] = "BOMB"
____exports.ButtonAction.ITEM = 9
____exports.ButtonAction[____exports.ButtonAction.ITEM] = "ITEM"
____exports.ButtonAction.PILL_CARD = 10
____exports.ButtonAction[____exports.ButtonAction.PILL_CARD] = "PILL_CARD"
____exports.ButtonAction.DROP = 11
____exports.ButtonAction[____exports.ButtonAction.DROP] = "DROP"
____exports.ButtonAction.PAUSE = 12
____exports.ButtonAction[____exports.ButtonAction.PAUSE] = "PAUSE"
____exports.ButtonAction.MAP = 13
____exports.ButtonAction[____exports.ButtonAction.MAP] = "MAP"
____exports.ButtonAction.MENU_CONFIRM = 14
____exports.ButtonAction[____exports.ButtonAction.MENU_CONFIRM] = "MENU_CONFIRM"
____exports.ButtonAction.MENU_BACK = 15
____exports.ButtonAction[____exports.ButtonAction.MENU_BACK] = "MENU_BACK"
____exports.ButtonAction.RESTART = 16
____exports.ButtonAction[____exports.ButtonAction.RESTART] = "RESTART"
____exports.ButtonAction.FULLSCREEN = 17
____exports.ButtonAction[____exports.ButtonAction.FULLSCREEN] = "FULLSCREEN"
____exports.ButtonAction.MUTE = 18
____exports.ButtonAction[____exports.ButtonAction.MUTE] = "MUTE"
____exports.ButtonAction.JOIN_MULTIPLAYER = 19
____exports.ButtonAction[____exports.ButtonAction.JOIN_MULTIPLAYER] = "JOIN_MULTIPLAYER"
____exports.ButtonAction.MENU_LEFT = 20
____exports.ButtonAction[____exports.ButtonAction.MENU_LEFT] = "MENU_LEFT"
____exports.ButtonAction.MENU_RIGHT = 21
____exports.ButtonAction[____exports.ButtonAction.MENU_RIGHT] = "MENU_RIGHT"
____exports.ButtonAction.MENU_UP = 22
____exports.ButtonAction[____exports.ButtonAction.MENU_UP] = "MENU_UP"
____exports.ButtonAction.MENU_DOWN = 23
____exports.ButtonAction[____exports.ButtonAction.MENU_DOWN] = "MENU_DOWN"
____exports.ButtonAction.MENU_LT = 24
____exports.ButtonAction[____exports.ButtonAction.MENU_LT] = "MENU_LT"
____exports.ButtonAction.MENU_RT = 25
____exports.ButtonAction[____exports.ButtonAction.MENU_RT] = "MENU_RT"
____exports.ButtonAction.MENU_TAB = 26
____exports.ButtonAction[____exports.ButtonAction.MENU_TAB] = "MENU_TAB"
____exports.ButtonAction.CONSOLE = 28
____exports.ButtonAction[____exports.ButtonAction.CONSOLE] = "CONSOLE"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.BrokenWatchState"] = function(...) 
local ____exports = {}
--- Used by the `Room.SetBrokenWatchState` method.
____exports.BrokenWatchState = {}
____exports.BrokenWatchState.NONE = 0
____exports.BrokenWatchState[____exports.BrokenWatchState.NONE] = "NONE"
____exports.BrokenWatchState.SLOW = 1
____exports.BrokenWatchState[____exports.BrokenWatchState.SLOW] = "SLOW"
____exports.BrokenWatchState.FAST = 2
____exports.BrokenWatchState[____exports.BrokenWatchState.FAST] = "FAST"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.BackdropType"] = function(...) 
local ____exports = {}
____exports.BackdropType = {}
____exports.BackdropType.BASEMENT = 1
____exports.BackdropType[____exports.BackdropType.BASEMENT] = "BASEMENT"
____exports.BackdropType.CELLAR = 2
____exports.BackdropType[____exports.BackdropType.CELLAR] = "CELLAR"
____exports.BackdropType.BURNING_BASEMENT = 3
____exports.BackdropType[____exports.BackdropType.BURNING_BASEMENT] = "BURNING_BASEMENT"
____exports.BackdropType.CAVES = 4
____exports.BackdropType[____exports.BackdropType.CAVES] = "CAVES"
____exports.BackdropType.CATACOMBS = 5
____exports.BackdropType[____exports.BackdropType.CATACOMBS] = "CATACOMBS"
____exports.BackdropType.FLOODED_CAVES = 6
____exports.BackdropType[____exports.BackdropType.FLOODED_CAVES] = "FLOODED_CAVES"
____exports.BackdropType.DEPTHS = 7
____exports.BackdropType[____exports.BackdropType.DEPTHS] = "DEPTHS"
____exports.BackdropType.NECROPOLIS = 8
____exports.BackdropType[____exports.BackdropType.NECROPOLIS] = "NECROPOLIS"
____exports.BackdropType.DANK_DEPTHS = 9
____exports.BackdropType[____exports.BackdropType.DANK_DEPTHS] = "DANK_DEPTHS"
____exports.BackdropType.WOMB = 10
____exports.BackdropType[____exports.BackdropType.WOMB] = "WOMB"
____exports.BackdropType.UTERO = 11
____exports.BackdropType[____exports.BackdropType.UTERO] = "UTERO"
____exports.BackdropType.SCARRED_WOMB = 12
____exports.BackdropType[____exports.BackdropType.SCARRED_WOMB] = "SCARRED_WOMB"
____exports.BackdropType.BLUE_WOMB = 13
____exports.BackdropType[____exports.BackdropType.BLUE_WOMB] = "BLUE_WOMB"
____exports.BackdropType.SHEOL = 14
____exports.BackdropType[____exports.BackdropType.SHEOL] = "SHEOL"
____exports.BackdropType.CATHEDRAL = 15
____exports.BackdropType[____exports.BackdropType.CATHEDRAL] = "CATHEDRAL"
____exports.BackdropType.DARK_ROOM = 16
____exports.BackdropType[____exports.BackdropType.DARK_ROOM] = "DARK_ROOM"
____exports.BackdropType.CHEST = 17
____exports.BackdropType[____exports.BackdropType.CHEST] = "CHEST"
____exports.BackdropType.MEGA_SATAN = 18
____exports.BackdropType[____exports.BackdropType.MEGA_SATAN] = "MEGA_SATAN"
____exports.BackdropType.LIBRARY = 19
____exports.BackdropType[____exports.BackdropType.LIBRARY] = "LIBRARY"
____exports.BackdropType.SHOP = 20
____exports.BackdropType[____exports.BackdropType.SHOP] = "SHOP"
____exports.BackdropType.CLEAN_BEDROOM = 21
____exports.BackdropType[____exports.BackdropType.CLEAN_BEDROOM] = "CLEAN_BEDROOM"
____exports.BackdropType.DIRTY_BEDROOM = 22
____exports.BackdropType[____exports.BackdropType.DIRTY_BEDROOM] = "DIRTY_BEDROOM"
____exports.BackdropType.SECRET = 23
____exports.BackdropType[____exports.BackdropType.SECRET] = "SECRET"
____exports.BackdropType.DICE = 24
____exports.BackdropType[____exports.BackdropType.DICE] = "DICE"
____exports.BackdropType.ARCADE = 25
____exports.BackdropType[____exports.BackdropType.ARCADE] = "ARCADE"
____exports.BackdropType.ERROR_ROOM = 26
____exports.BackdropType[____exports.BackdropType.ERROR_ROOM] = "ERROR_ROOM"
____exports.BackdropType.BLUE_WOMB_PASS = 27
____exports.BackdropType[____exports.BackdropType.BLUE_WOMB_PASS] = "BLUE_WOMB_PASS"
____exports.BackdropType.GREED_SHOP = 28
____exports.BackdropType[____exports.BackdropType.GREED_SHOP] = "GREED_SHOP"
____exports.BackdropType.DUNGEON = 29
____exports.BackdropType[____exports.BackdropType.DUNGEON] = "DUNGEON"
____exports.BackdropType.SACRIFICE = 30
____exports.BackdropType[____exports.BackdropType.SACRIFICE] = "SACRIFICE"
____exports.BackdropType.DOWNPOUR = 31
____exports.BackdropType[____exports.BackdropType.DOWNPOUR] = "DOWNPOUR"
____exports.BackdropType.MINES = 32
____exports.BackdropType[____exports.BackdropType.MINES] = "MINES"
____exports.BackdropType.MAUSOLEUM = 33
____exports.BackdropType[____exports.BackdropType.MAUSOLEUM] = "MAUSOLEUM"
____exports.BackdropType.CORPSE = 34
____exports.BackdropType[____exports.BackdropType.CORPSE] = "CORPSE"
____exports.BackdropType.PLANETARIUM = 35
____exports.BackdropType[____exports.BackdropType.PLANETARIUM] = "PLANETARIUM"
____exports.BackdropType.DOWNPOUR_ENTRANCE = 36
____exports.BackdropType[____exports.BackdropType.DOWNPOUR_ENTRANCE] = "DOWNPOUR_ENTRANCE"
____exports.BackdropType.MINES_ENTRANCE = 37
____exports.BackdropType[____exports.BackdropType.MINES_ENTRANCE] = "MINES_ENTRANCE"
____exports.BackdropType.MAUSOLEUM_ENTRANCE = 38
____exports.BackdropType[____exports.BackdropType.MAUSOLEUM_ENTRANCE] = "MAUSOLEUM_ENTRANCE"
____exports.BackdropType.CORPSE_ENTRANCE = 39
____exports.BackdropType[____exports.BackdropType.CORPSE_ENTRANCE] = "CORPSE_ENTRANCE"
____exports.BackdropType.MAUSOLEUM_2 = 40
____exports.BackdropType[____exports.BackdropType.MAUSOLEUM_2] = "MAUSOLEUM_2"
____exports.BackdropType.MAUSOLEUM_3 = 41
____exports.BackdropType[____exports.BackdropType.MAUSOLEUM_3] = "MAUSOLEUM_3"
____exports.BackdropType.MAUSOLEUM_4 = 42
____exports.BackdropType[____exports.BackdropType.MAUSOLEUM_4] = "MAUSOLEUM_4"
____exports.BackdropType.CORPSE_2 = 43
____exports.BackdropType[____exports.BackdropType.CORPSE_2] = "CORPSE_2"
____exports.BackdropType.CORPSE_3 = 44
____exports.BackdropType[____exports.BackdropType.CORPSE_3] = "CORPSE_3"
____exports.BackdropType.DROSS = 45
____exports.BackdropType[____exports.BackdropType.DROSS] = "DROSS"
____exports.BackdropType.ASHPIT = 46
____exports.BackdropType[____exports.BackdropType.ASHPIT] = "ASHPIT"
____exports.BackdropType.GEHENNA = 47
____exports.BackdropType[____exports.BackdropType.GEHENNA] = "GEHENNA"
____exports.BackdropType.MORTIS = 48
____exports.BackdropType[____exports.BackdropType.MORTIS] = "MORTIS"
____exports.BackdropType.ISAACS_BEDROOM = 49
____exports.BackdropType[____exports.BackdropType.ISAACS_BEDROOM] = "ISAACS_BEDROOM"
____exports.BackdropType.HALLWAY = 50
____exports.BackdropType[____exports.BackdropType.HALLWAY] = "HALLWAY"
____exports.BackdropType.MOMS_BEDROOM = 51
____exports.BackdropType[____exports.BackdropType.MOMS_BEDROOM] = "MOMS_BEDROOM"
____exports.BackdropType.CLOSET = 52
____exports.BackdropType[____exports.BackdropType.CLOSET] = "CLOSET"
____exports.BackdropType.CLOSET_B = 53
____exports.BackdropType[____exports.BackdropType.CLOSET_B] = "CLOSET_B"
____exports.BackdropType.DOGMA = 54
____exports.BackdropType[____exports.BackdropType.DOGMA] = "DOGMA"
____exports.BackdropType.DUNGEON_GIDEON = 55
____exports.BackdropType[____exports.BackdropType.DUNGEON_GIDEON] = "DUNGEON_GIDEON"
____exports.BackdropType.DUNGEON_ROTGUT = 56
____exports.BackdropType[____exports.BackdropType.DUNGEON_ROTGUT] = "DUNGEON_ROTGUT"
____exports.BackdropType.DUNGEON_BEAST = 57
____exports.BackdropType[____exports.BackdropType.DUNGEON_BEAST] = "DUNGEON_BEAST"
____exports.BackdropType.MINES_SHAFT = 58
____exports.BackdropType[____exports.BackdropType.MINES_SHAFT] = "MINES_SHAFT"
____exports.BackdropType.ASHPIT_SHAFT = 59
____exports.BackdropType[____exports.BackdropType.ASHPIT_SHAFT] = "ASHPIT_SHAFT"
____exports.BackdropType.DARK_CLOSET = 60
____exports.BackdropType[____exports.BackdropType.DARK_CLOSET] = "DARK_CLOSET"
return ____exports
 end,
["lua_modules.isaac-typescript-definitions.dist.enums.ActiveSlot"] = function(...) 
local ____exports = {}
____exports.ActiveSlot = {}
____exports.ActiveSlot.PRIMARY = 0
____exports.ActiveSlot[____exports.ActiveSlot.PRIMARY] = "PRIMARY"
____exports.ActiveSlot.SECONDARY = 1
____exports.ActiveSlot[____exports.ActiveSlot.SECONDARY] = "SECONDARY"
____exports.ActiveSlot.POCKET = 2
____exports.ActiveSlot[____exports.ActiveSlot.POCKET] = "POCKET"
____exports.ActiveSlot.POCKET_SINGLE_USE = 3
____exports.ActiveSlot[____exports.ActiveSlot.POCKET_SINGLE_USE] = "POCKET_SINGLE_USE"
return ____exports
 end,
["types.PossibleStatType"] = function(...) 
local ____exports = {}
return ____exports
 end,
["shouldFire"] = function(...) 
local ____exports = {}
function ____exports.shouldFireAmbush(self, fireArgs, optionalArgs)
    local ambushType = table.unpack(fireArgs)
    local callbackAmbushType = table.unpack(optionalArgs)
    return callbackAmbushType == nil or callbackAmbushType == ambushType
end
function ____exports.shouldFireBomb(self, fireArgs, optionalArgs)
    local bomb = table.unpack(fireArgs)
    local callbackBombVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackBombVariant == nil or callbackBombVariant == bomb.Variant) and (callbackSubType == nil or callbackSubType == bomb.SubType)
end
function ____exports.shouldFireBoolean(self, fireArgs, optionalArgs)
    local fireArg = table.unpack(fireArgs)
    local optionalArg = table.unpack(optionalArgs)
    return optionalArg == nil or optionalArg == fireArg
end
function ____exports.shouldFireCollectibleType(self, fireArgs, optionalArgs)
    local _player, collectibleType = table.unpack(fireArgs)
    local callbackCollectibleType = table.unpack(optionalArgs)
    return callbackCollectibleType == nil or callbackCollectibleType == collectibleType
end
function ____exports.shouldFireDoor(self, fireArgs, optionalArgs)
    local door = table.unpack(fireArgs)
    local callbackDoorVariant = table.unpack(optionalArgs)
    local doorVariant = door:GetVariant()
    return callbackDoorVariant == nil or callbackDoorVariant == doorVariant
end
function ____exports.shouldFireEffect(self, fireArgs, optionalArgs)
    local effect = table.unpack(fireArgs)
    local callbackEffectVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackEffectVariant == nil or callbackEffectVariant == effect.Variant) and (callbackSubType == nil or callbackSubType == effect.SubType)
end
function ____exports.shouldFireEntity(self, fireArgs, optionalArgs)
    local entity = table.unpack(fireArgs)
    local callbackEntityType, callbackVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackEntityType == nil or callbackEntityType == entity.Type) and (callbackVariant == nil or callbackVariant == entity.Variant) and (callbackSubType == nil or callbackSubType == entity.SubType)
end
function ____exports.shouldFireFamiliar(self, fireArgs, optionalArgs)
    local familiar = table.unpack(fireArgs)
    local callbackFamiliarVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackFamiliarVariant == nil or callbackFamiliarVariant == familiar.Variant) and (callbackSubType == nil or callbackSubType == familiar.SubType)
end
function ____exports.shouldFireGridEntity(self, fireArgs, optionalArgs)
    local gridEntity = table.unpack(fireArgs)
    local callbackGridEntityType, callbackVariant = table.unpack(optionalArgs)
    local gridEntityType = gridEntity:GetType()
    local variant = gridEntity:GetVariant()
    return (callbackGridEntityType == nil or callbackGridEntityType == gridEntityType) and (callbackVariant == nil or callbackVariant == variant)
end
function ____exports.shouldFireGridEntityCustom(self, fireArgs, optionalArgs)
    local _gridEntity, gridEntityTypeCustom = table.unpack(fireArgs)
    local callbackGridEntityTypeCustom = table.unpack(optionalArgs)
    return callbackGridEntityTypeCustom == nil or callbackGridEntityTypeCustom == gridEntityTypeCustom
end
function ____exports.shouldFireItemPickup(self, fireArgs, optionalArgs)
    local _player, pickingUpItem = table.unpack(fireArgs)
    local callbackItemType, callbackSubtype = table.unpack(optionalArgs)
    return (callbackItemType == nil or callbackItemType == pickingUpItem.itemType) and (callbackSubtype == nil or callbackSubtype == pickingUpItem.subType)
end
function ____exports.shouldFireKnife(self, fireArgs, optionalArgs)
    local knife = table.unpack(fireArgs)
    local callbackKnifeVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackKnifeVariant == nil or callbackKnifeVariant == knife.Variant) and (callbackSubType == nil or callbackSubType == knife.SubType)
end
function ____exports.shouldFireLaser(self, fireArgs, optionalArgs)
    local laser = table.unpack(fireArgs)
    local callbackLaserVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackLaserVariant == nil or callbackLaserVariant == laser.Variant) and (callbackSubType == nil or callbackSubType == laser.SubType)
end
function ____exports.shouldFireLevel(self, fireArgs, optionalArgs)
    local stage, stageType = table.unpack(fireArgs)
    local callbackStage, callbackStageType = table.unpack(optionalArgs)
    return (callbackStage == nil or callbackStage == stage) and (callbackStageType == nil or callbackStageType == stageType)
end
function ____exports.shouldFireNPC(self, fireArgs, optionalArgs)
    local npc = table.unpack(fireArgs)
    local callbackEntityType, callbackVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackEntityType == nil or callbackEntityType == npc.Type) and (callbackVariant == nil or callbackVariant == npc.Variant) and (callbackSubType == nil or callbackSubType == npc.SubType)
end
function ____exports.shouldFirePickup(self, fireArgs, optionalArgs)
    local pickup = table.unpack(fireArgs)
    local callbackPickupVariant, callbackPickupSubType = table.unpack(optionalArgs)
    return (callbackPickupVariant == nil or callbackPickupVariant == pickup.Variant) and (callbackPickupSubType == nil or callbackPickupSubType == pickup.SubType)
end
function ____exports.shouldFirePit(self, fireArgs, optionalArgs)
    local pit = table.unpack(fireArgs)
    local callbackPitVariant = table.unpack(optionalArgs)
    local pitVariant = pit:GetVariant()
    return callbackPitVariant == nil or callbackPitVariant == pitVariant
end
function ____exports.shouldFirePlayer(self, fireArgs, optionalArgs)
    local player = table.unpack(fireArgs)
    local callbackPlayerVariant, callbackCharacter = table.unpack(optionalArgs)
    local character = player:GetPlayerType()
    return (callbackPlayerVariant == nil or callbackPlayerVariant == player.Variant) and (callbackCharacter == nil or callbackCharacter == character)
end
function ____exports.shouldFirePoop(self, fireArgs, optionalArgs)
    local poop = table.unpack(fireArgs)
    local callbackPoopGridEntityVariant = table.unpack(optionalArgs)
    local poopGridEntityVariant = poop:GetVariant()
    return callbackPoopGridEntityVariant == nil or callbackPoopGridEntityVariant == poopGridEntityVariant
end
function ____exports.shouldFirePressurePlate(self, fireArgs, optionalArgs)
    local pressurePlate = table.unpack(fireArgs)
    local callbackPressurePlateVariant = table.unpack(optionalArgs)
    local pressurePlateVariant = pressurePlate:GetVariant()
    return callbackPressurePlateVariant == nil or callbackPressurePlateVariant == pressurePlateVariant
end
function ____exports.shouldFireProjectile(self, fireArgs, optionalArgs)
    local projectile = table.unpack(fireArgs)
    local callbackProjectileVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackProjectileVariant == nil or callbackProjectileVariant == projectile.Variant) and (callbackSubType == nil or callbackSubType == projectile.SubType)
end
function ____exports.shouldFireRock(self, fireArgs, optionalArgs)
    local rock = table.unpack(fireArgs)
    local callbackGridEntity, callbackVariant = table.unpack(optionalArgs)
    local gridEntityType = rock:GetType()
    local variant = rock:GetVariant()
    return (callbackGridEntity == nil or callbackGridEntity == gridEntityType) and (callbackVariant == nil or callbackVariant == variant)
end
function ____exports.shouldFireRoom(self, fireArgs, optionalArgs)
    local roomType = table.unpack(fireArgs)
    local callbackRoomType = table.unpack(optionalArgs)
    return callbackRoomType == nil or callbackRoomType == roomType
end
function ____exports.shouldFireSlot(self, fireArgs, optionalArgs)
    local slot = table.unpack(fireArgs)
    local callbackSlotVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackSlotVariant == nil or callbackSlotVariant == slot.Variant) and (callbackSubType == nil or callbackSubType == slot.SubType)
end
function ____exports.shouldFireSpikes(self, fireArgs, optionalArgs)
    local spikes = table.unpack(fireArgs)
    local callbackVariant = table.unpack(optionalArgs)
    local variant = spikes:GetVariant()
    return callbackVariant == nil or callbackVariant == variant
end
function ____exports.shouldFireTNT(self, fireArgs, optionalArgs)
    local tnt = table.unpack(fireArgs)
    local callbackVariant = table.unpack(optionalArgs)
    local variant = tnt:GetVariant()
    return callbackVariant == nil or callbackVariant == variant
end
function ____exports.shouldFireTear(self, fireArgs, optionalArgs)
    local tear = table.unpack(fireArgs)
    local callbackTearVariant, callbackSubType = table.unpack(optionalArgs)
    return (callbackTearVariant == nil or callbackTearVariant == tear.Variant) and (callbackSubType == nil or callbackSubType == tear.SubType)
end
function ____exports.shouldFireTrinketType(self, fireArgs, optionalArgs)
    local _player, trinketType = table.unpack(fireArgs)
    local callbackTrinketType = table.unpack(optionalArgs)
    return callbackTrinketType == nil or callbackTrinketType == trinketType
end
return ____exports
 end,
["functions.types"] = function(...) 
local ____exports = {}
function ____exports.isNumber(self, variable)
    return type(variable) == "number"
end
--- Helper function to safely cast an `int` to a `CardType`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asCardType(self, num)
    return num
end
--- Helper function to safely cast an `int` to a `CollectibleType`. (This is better than using the
-- `as` TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asCollectibleType(self, num)
    return num
end
--- Helper function to safely cast an enum to an `int`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asFloat(self, num)
    return num
end
--- Helper function to safely cast an enum to an `int`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asInt(self, num)
    return num
end
--- Helper function to safely cast an `int` to a `LevelStage`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asLevelStage(self, num)
    return num
end
--- Helper function to safely cast an `int` to a `NPCState`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asNPCState(self, num)
    return num
end
--- Helper function to safely cast an enum to a `number`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asNumber(self, num)
    return num
end
--- Helper function to safely cast an `int` to a `PillColor`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asPillColor(self, num)
    return num
end
--- Helper function to safely cast an `int` to a `PillEffect`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asPillEffect(self, num)
    return num
end
--- Helper function to safely cast an `int` to a `PlayerType`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asPlayerType(self, num)
    return num
end
--- Helper function to safely cast an `int` to a `RoomType`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asRoomType(self, num)
    return num
end
--- Helper function to safely cast an enum to a `string`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asString(self, str)
    return str
end
--- Helper function to safely cast an `int` to a `TrinketType`. (This is better than using the `as`
-- TypeScript keyword to do a type assertion, since that can obfuscate compiler errors. )
-- 
-- This is useful to satisfy the "isaacscript/strict-enums" ESLint rule.
function ____exports.asTrinketType(self, num)
    return num
end
function ____exports.isBoolean(self, variable)
    return type(variable) == "boolean"
end
function ____exports.isFunction(self, variable)
    return type(variable) == "function"
end
function ____exports.isInteger(self, variable)
    if not ____exports.isNumber(nil, variable) then
        return false
    end
    return variable == math.floor(variable)
end
--- Helper function to detect if a variable is a boolean, number, or string.
function ____exports.isPrimitive(self, variable)
    local variableType = type(variable)
    return variableType == "boolean" or variableType == "number" or variableType == "string"
end
function ____exports.isString(self, variable)
    return type(variable) == "string"
end
function ____exports.isTable(self, variable)
    return type(variable) == "table"
end
function ____exports.isUserdata(self, variable)
    return type(variable) == "userdata"
end
--- Helper function to convert a string to an integer. Returns undefined if the string is not an
-- integer.
-- 
-- Under the hood, this uses the built-in `tonumber` and `math.floor` functions.
-- 
-- This is named `parseIntSafe` in order to match the helper function in `isaacscript-common-ts`.
function ____exports.parseIntSafe(self, ____string)
    if not ____exports.isString(nil, ____string) then
        return nil
    end
    local number = tonumber(____string)
    if number == nil then
        return nil
    end
    local flooredNumber = math.floor(number)
    return number == flooredNumber and flooredNumber or nil
end
return ____exports
 end,
["functions.sort"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySlice = ____lualib.__TS__ArraySlice
local ____exports = {}
local ____types = require("functions.types")
local isNumber = ____types.isNumber
local isString = ____types.isString
local isTable = ____types.isTable
local function sortNormal(self, a, b)
    if not isNumber(nil, a) and not isString(nil, a) then
        error("Failed to normal sort since the first value was not a number or string and was instead: " .. type(a))
    end
    if not isNumber(nil, b) and not isString(nil, b) then
        error("Failed to normal sort since the second value was not a number or string and was instead: " .. type(b))
    end
    if a < b then
        return -1
    end
    if a > b then
        return 1
    end
    return 0
end
--- Helper function to sort an array of objects by one of the object keys.
-- 
-- For example:
-- 
-- ```ts
-- const myArray = [
--   {
--     name: "alice",
--     age: 30,
--   },
--   {
--     name: "bob",
--     age: 20,
--   },
-- ];
-- myArray.sort(sortObjectArrayByKey("age"));
-- ```
function ____exports.sortObjectArrayByKey(self, key)
    return function(____, a, b)
        if not isTable(nil, a) then
            error((("Failed to sort an object array by the key of \"" .. key) .. "\" since the first element was not a table and was instead: ") .. type(a))
        end
        if not isTable(nil, b) then
            error(((("Failed to sort an object array by the key of \"" .. key) .. "\" since the second element was not a table and was instead: ") .. type(b)) .. ".")
        end
        local aValue = a[key]
        local bValue = b[key]
        return sortNormal(nil, aValue, bValue)
    end
end
--- Helper function to sort a two-dimensional array by the first element.
-- 
-- For example:
-- 
-- ```ts
-- const myArray = [[1, 2], [2, 3], [3, 4]];
-- myArray.sort(twoDimensionalSort);
-- ```
-- 
-- This function also properly handles when the array elements are strings or numbers (instead of
-- another array).
-- 
-- From:
-- https://stackoverflow.com/questions/16096872/how-to-sort-2-dimensional-array-by-column-value
function ____exports.sortTwoDimensionalArray(self, a, b)
    local aType = type(a)
    local bType = type(b)
    if aType ~= bType then
        error(((((((("Failed to two-dimensional sort since the two elements were disparate types: " .. tostring(a)) .. " & ") .. tostring(b)) .. " (") .. aType) .. " & ") .. bType) .. ")")
    end
    if aType == "string" or aType == "number" then
        return sortNormal(nil, a, b)
    end
    if aType ~= "table" then
        error("Failed to two-dimensional sort since the first element was not a string, number, or table.")
    end
    if bType ~= "table" then
        error("Failed to two-dimensional sort since the second element was not a string, number, or table.")
    end
    local firstElement1 = a[1]
    local firstElement2 = b[1]
    if firstElement1 == nil or firstElement1 == nil then
        error("Failed to two-dimensional sort since the first element of the first array was undefined.")
    end
    if firstElement2 == nil or firstElement2 == nil then
        error("Failed to two-dimensional sort since the first element of the second array was undefined.")
    end
    local elementType1 = type(firstElement1)
    local elementType2 = type(firstElement2)
    if elementType1 ~= elementType2 then
        error(((((((("Failed to two-dimensional sort since the first element of each array were disparate types: " .. tostring(firstElement1)) .. " & ") .. tostring(firstElement2)) .. " (") .. elementType1) .. " & ") .. elementType2) .. ")")
    end
    return sortNormal(nil, firstElement1, firstElement2)
end
--- Helper function to sort an array in a stable way.
-- 
-- This is useful because by default, the transpiled `Array.sort` method from TSTL is not stable.
-- 
-- Under the hood, this uses the merge sort algorithm.
function ____exports.stableSort(self, array, sortFunc)
    if sortFunc == nil then
        sortFunc = sortNormal
    end
    if #array <= 1 then
        return array
    end
    local middleIndex = math.floor(#array / 2)
    local leftArray = __TS__ArraySlice(array, 0, middleIndex)
    local rightArray = __TS__ArraySlice(array, middleIndex)
    local sortedLeftArray = ____exports.stableSort(nil, leftArray, sortFunc)
    local sortedRightArray = ____exports.stableSort(nil, rightArray, sortFunc)
    local mergedArray = {}
    local leftIndex = 0
    local rightIndex = 0
    while leftIndex < #sortedLeftArray and rightIndex < #sortedRightArray do
        local left = sortedLeftArray[leftIndex + 1]
        local right = sortedRightArray[rightIndex + 1]
        local sortResult = sortFunc(nil, left, right)
        if sortResult == -1 or sortResult == 0 then
            mergedArray[#mergedArray + 1] = left
            leftIndex = leftIndex + 1
        else
            mergedArray[#mergedArray + 1] = right
            rightIndex = rightIndex + 1
        end
    end
    while leftIndex < #sortedLeftArray do
        local left = sortedLeftArray[leftIndex + 1]
        mergedArray[#mergedArray + 1] = left
        leftIndex = leftIndex + 1
    end
    while rightIndex < #sortedRightArray do
        local right = sortedRightArray[rightIndex + 1]
        mergedArray[#mergedArray + 1] = right
        rightIndex = rightIndex + 1
    end
    return mergedArray
end
return ____exports
 end,
["types.WidenLiteral"] = function(...) 
local ____exports = {}
return ____exports
 end,
["core.cachedClasses"] = function(...) 
local ____exports = {}
--- A cached version of the class returned from the `Game()` constructor.
-- 
-- Use this instead of invoking the constructor again for a miniscule performance increase.
-- 
-- Caching the results of this constructor is safe, but caching other classes (like `Level` or
-- `Room`) is not safe and can lead to the game crashing in certain situations.
____exports.game = Game()
--- A cached version of the class returned from the `Isaac.GetItemConfig()` constructor.
-- 
-- Use this instead of invoking the constructor again for a miniscule performance increase.
-- 
-- Caching the results of this constructor is safe, but caching other classes (like `Level` or
-- `Room`) is not safe and can lead to the game crashing in certain situations.
____exports.itemConfig = Isaac.GetItemConfig()
--- A cached version of the class returned from the `MusicManager()` constructor.
-- 
-- Use this instead of invoking the constructor again for a miniscule performance increase.
-- 
-- Caching the results of this constructor is safe, but caching other classes (like `Level` or
-- `Room`) is not safe and can lead to the game crashing in certain situations.
____exports.musicManager = MusicManager()
--- A cached version of the class returned from the `SFXManager()` constructor.
-- 
-- Use this instead of invoking the constructor again for a miniscule performance increase.
-- 
-- Caching the results of this constructor is safe, but caching other classes (like `Level` or
-- `Room`) is not safe and can lead to the game crashing in certain situations.
____exports.sfxManager = SFXManager()
--- An object containing all 7 vanilla fonts that are pre-loaded and ready to use.
-- 
-- For more information on the vanilla fonts and to see what they look like, see:
-- https://wofsauge.github.io/IsaacDocs/rep/tutorials/Tutorial-Rendertext.html
____exports.fonts = {
    droid = Font(),
    pfTempestaSevenCondensed = Font(),
    teamMeatFont10 = Font(),
    teamMeatFont12 = Font(),
    teamMeatFont16Bold = Font(),
    terminus = Font(),
    upheaval = Font()
}
____exports.fonts.droid:Load("font/droid.fnt")
____exports.fonts.pfTempestaSevenCondensed:Load("font/pftempestasevencondensed.fnt")
____exports.fonts.teamMeatFont10:Load("font/teammeatfont10.fnt")
____exports.fonts.teamMeatFont12:Load("font/teammeatfont12.fnt")
____exports.fonts.teamMeatFont16Bold:Load("font/teammeatfont16bold.fnt")
____exports.fonts.terminus:Load("font/terminus.fnt")
____exports.fonts.upheaval:Load("font/upheaval.fnt")
return ____exports
 end,
["enums.private.SerializationBrand"] = function(...) 
local ____exports = {}
--- During serialization, we write an arbitrary string key to the object with a value of an empty
-- string. This is used during deserialization to instantiate the correct type of object.
____exports.SerializationBrand = {}
____exports.SerializationBrand.DEFAULT_MAP = "__TSTL_DEFAULT_MAP"
____exports.SerializationBrand.MAP = "__TSTL_MAP"
____exports.SerializationBrand.SET = "__TSTL_SET"
____exports.SerializationBrand.BIT_SET_128 = "__BIT_SET_128"
____exports.SerializationBrand.COLOR = "__COLOR"
____exports.SerializationBrand.K_COLOR = "__K_COLOR"
____exports.SerializationBrand.RNG = "__RNG"
____exports.SerializationBrand.VECTOR = "__VECTOR"
____exports.SerializationBrand.DEFAULT_MAP_VALUE = "__TSTL_DEFAULT_MAP_VALUE"
____exports.SerializationBrand.OBJECT_WITH_NUMBER_KEYS = "__TSTL_OBJECT_WITH_NUMBER_KEYS"
____exports.SerializationBrand.TSTL_CLASS = "__TSTL_CLASS"
return ____exports
 end,
["types.ReadonlyRecord"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.log"] = function(...) 
local ____exports = {}
local ____types = require("functions.types")
local isNumber = ____types.isNumber
--- Helper function to get the name and the line number of the current calling function.
-- 
-- For this function to work properly, the "--luadebug" flag must be enabled. Otherwise, it will
-- always return undefined.
-- 
-- @param levels Optional. The amount of levels to look backwards in the call stack. Default is 3
-- (because the first level is this function, the second level is the calling
-- function, and the third level is the parent of the calling function).
function ____exports.getParentFunctionDescription(levels)
    if levels == nil then
        levels = 3
    end
    if debug ~= nil then
        local debugTable = debug.getinfo(levels)
        if debugTable ~= nil then
            return (tostring(debugTable.name) .. ":") .. tostring(debugTable.linedefined)
        end
    end
    if SandboxGetParentFunctionDescription ~= nil then
        return SandboxGetParentFunctionDescription(levels)
    end
    return nil
end
--- Helper function to avoid typing out `Isaac.DebugString()`.
-- 
-- If you have the "--luadebug" launch flag turned on, then this function will also prepend the
-- function name and the line number before the string, like this:
-- 
-- ```text
-- [INFO] - Lua Debug: saveToDisk:42494 - The save data manager wrote data to the "save#.dat" file.
-- ```
-- 
-- Subsequently, it is recommended that you turn on the "--luadebug" launch flag when developing
-- your mod so that debugging becomes a little bit easier.
-- 
-- @param msg The message to log.
-- @param includeParentFunction Optional. Whether to prefix the message with the function name and
-- line number, as shown in the above example. Default is true.
function ____exports.log(msg, includeParentFunction)
    if includeParentFunction == nil then
        includeParentFunction = true
    end
    if isNumber(nil, msg) then
        msg = tostring(msg)
    end
    local ____includeParentFunction_0
    if includeParentFunction then
        ____includeParentFunction_0 = ____exports.getParentFunctionDescription()
    else
        ____includeParentFunction_0 = nil
    end
    local parentFunctionDescription = ____includeParentFunction_0
    local debugMsg = parentFunctionDescription == nil and msg or (parentFunctionDescription .. " - ") .. msg
    Isaac.DebugString(debugMsg)
end
--- Helper function to log a message to the "log.txt" file and to print it to the screen at the same
-- time.
function ____exports.logAndPrint(self, msg)
    ____exports.log(msg)
    print(msg)
end
--- Helper function to log an error message and also print it to the console for better visibility.
-- 
-- This is useful in situations where using the `error` function would be dangerous (since it
-- prevents all of the subsequent code in the callback from running).
function ____exports.logError(msg)
    local errorMsg = "Error: " .. msg
    ____exports.logAndPrint(nil, errorMsg)
end
return ____exports
 end,
["functions.debugFunctions"] = function(...) 
local ____exports = {}
local ____log = require("functions.log")
local log = ____log.log
--- Helper function to get the current time for benchmarking / profiling purposes.
-- 
-- The return value will either be in seconds or milliseconds, depending on if the "--luadebug" flag
-- is turned on.
-- 
-- If the "--luadebug" flag is present, then this function will use the `socket.gettime` method,
-- which returns the epoch timestamp in seconds (e.g. "1640320492.5779"). This is preferable over
-- the more conventional `Isaac.GetTime` method, since it has one extra decimal point of precision.
-- 
-- If the "--luadebug" flag is not present, then this function will use the `Isaac.GetTime` method,
-- which returns the number of milliseconds since the computer's operating system was started (e.g.
-- "739454963").
-- 
-- @param useSocketIfAvailable Optional. Whether to use the `socket.gettime` method, if available.
-- Default is true. If set to false, the `Isaac.GetTime()` method will
-- always be used.
function ____exports.getTime(self, useSocketIfAvailable)
    if useSocketIfAvailable == nil then
        useSocketIfAvailable = true
    end
    if useSocketIfAvailable then
        if SandboxGetTime ~= nil then
            return SandboxGetTime()
        end
        if ____exports.isLuaDebugEnabled(nil) then
            local ok, requiredSocket = pcall(require, "socket")
            if ok then
                local socket = requiredSocket
                return socket.gettime()
            end
        end
    end
    return Isaac.GetTime()
end
--- Players can boot the game with an launch option called "--luadebug", which will enable additional
-- functionality that is considered to be unsafe. For more information about this flag, see the
-- wiki: https://bindingofisaacrebirth.fandom.com/wiki/Launch_Options
-- 
-- When this flag is enabled, the global environment will be slightly different. The differences are
-- documented here: https://wofsauge.github.io/IsaacDocs/rep/Globals.html
-- 
-- This function uses the `package` global variable as a proxy to determine if the "--luadebug" flag
-- is enabled.
-- 
-- Note that this function will return false if the Racing+ sandbox is enabled, even if the
-- "--luadebug" flag is really turned on. If checking for this case is needed, check for the
-- presence of the `sandboxGetTraceback` function.
function ____exports.isLuaDebugEnabled(self)
    return _G.package ~= nil
end
--- Helper function to get the amount of elapsed time for benchmarking / profiling purposes.
-- 
-- For more information, see the documentation for the `getTime` helper function.
-- 
-- @param time The milliseconds (int) or fractional seconds (float).
-- @param useSocketIfAvailable Optional. Whether to use the `socket.gettime` method, if available.
-- Default is true. If set to false, the `Isaac.GetTime()` method will
-- always be used.
function ____exports.getElapsedTimeSince(self, time, useSocketIfAvailable)
    if useSocketIfAvailable == nil then
        useSocketIfAvailable = true
    end
    return ____exports.getTime(nil, useSocketIfAvailable) - time
end
--- Helper function to get a stack trace.
-- 
-- This will only work if the `--luadebug` launch option is enabled. If it isn't, then a error
-- string will be returned.
function ____exports.getTraceback()
    if SandboxGetTraceback ~= nil then
        return SandboxGetTraceback()
    end
    if debug ~= nil then
        return debug.traceback()
    end
    return "stack traceback:\n(the \"--luadebug\" flag is not enabled)"
end
--- Helper function to log a stack trace to the "log.txt" file, similar to JavaScript's
-- `console.trace` function.
-- 
-- This will only work if the `--luadebug` launch option is enabled. If it isn't, then a error
-- string will be logged.
function ____exports.traceback()
    local tracebackOutput = ____exports.getTraceback()
    log(tracebackOutput)
end
return ____exports
 end,
["types.PlayerIndex"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.playerIndex"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local ____exports = {}
local getPlayerIndexCollectibleType, DEFAULT_COLLECTIBLE_TYPE, EXCLUDED_CHARACTERS
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BabySubType = ____isaac_2Dtypescript_2Ddefinitions.BabySubType
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local PlayerVariant = ____isaac_2Dtypescript_2Ddefinitions.PlayerVariant
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
--- Helper function to get every player with no restrictions, by using `Game.GetNumPlayers` and
-- `Isaac.GetPlayer`.
-- 
-- This function is almost never what you want to use. For most purposes, use the `getPlayers`
-- helper function instead to get a filtered list of players.
function ____exports.getAllPlayers(self)
    local numPlayers = game:GetNumPlayers()
    local players = {}
    do
        local i = 0
        while i < numPlayers do
            local player = Isaac.GetPlayer(i)
            players[#players + 1] = player
            i = i + 1
        end
    end
    return players
end
--- Mods often have to track variables relating to the player. In naive mods, information will only
-- be stored about the first player. However, in order to be robust, mods must handle up to 4
-- players playing at the same time. This means that information must be stored on a map data
-- structure. Finding a good index for these types of map data structures is difficult:
-- 
-- - We cannot use the index from `Isaac.GetPlayer(i)` since this fails in the case where there are
--   two players and the first player leaves the run.
-- - We cannot use `EntityPlayer.ControllerIndex` as an index because it fails in the case of Jacob
--   & Esau or Tainted Forgotten. It also fails in the case of a player changing their controls
--   mid-run.
-- - We cannot use `EntityPlayer.GetData().index` because it does not persist across saving and
--   continuing.
-- - We cannot use `GetPtrHash()` as an index because it does not persist across exiting and
--   relaunching the game.
-- - We cannot use `EntityPlayer.InitSeed` because it is not consistent with additional players
--   beyond the first.
-- 
-- Instead, we use the `EntityPlayer.GetCollectibleRNG` method with an arbitrary value of Sad Onion
-- (1). This works even if the player does not have any Sad Onions.
-- 
-- Note that by default, this returns the same index for both The Forgotten and The Soul. (Even
-- though they are technically different characters, they share the same inventory and `InitSeed`.)
-- If this is not desired, pass true for the `differentiateForgottenAndSoul` argument, and the RNG
-- of Spoon Bender (3) will be used for The Soul.
-- 
-- Also note that this index does not work in the `POST_PLAYER_INIT` function for players 2 through
-- 4. With that said, in almost all cases, you should be lazy-initializing your data structures in
-- other callbacks, so this should not be an issue.
function ____exports.getPlayerIndex(self, player, differentiateForgottenAndSoul)
    if differentiateForgottenAndSoul == nil then
        differentiateForgottenAndSoul = false
    end
    local playerToUse = player
    local isSubPlayer = player:IsSubPlayer()
    if isSubPlayer then
        local subPlayer = player
        local playerParent = ____exports.getSubPlayerParent(nil, subPlayer)
        if playerParent ~= nil then
            playerToUse = playerParent
        end
    end
    local collectibleType = getPlayerIndexCollectibleType(nil, player, differentiateForgottenAndSoul)
    local collectibleRNG = playerToUse:GetCollectibleRNG(collectibleType)
    local seed = collectibleRNG:GetSeed()
    return seed
end
function getPlayerIndexCollectibleType(self, player, differentiateForgottenAndSoul)
    local character = player:GetPlayerType()
    if character == PlayerType.SOUL then
        return differentiateForgottenAndSoul and CollectibleType.INNER_EYE or DEFAULT_COLLECTIBLE_TYPE
    end
    return DEFAULT_COLLECTIBLE_TYPE
end
--- This function always excludes players with a non-undefined parent, since they are not real
-- players (e.g. the Strawman Keeper).
-- 
-- If this is not desired, use the `getAllPlayers` helper function instead.
-- 
-- @param performCharacterExclusions Whether to exclude characters that are not directly controlled
-- by the player (i.e. Esau & Tainted Soul). Default is false.
function ____exports.getPlayers(self, performCharacterExclusions)
    if performCharacterExclusions == nil then
        performCharacterExclusions = false
    end
    local players = ____exports.getAllPlayers(nil)
    local nonChildPlayers = __TS__ArrayFilter(
        players,
        function(____, player) return not ____exports.isChildPlayer(nil, player) end
    )
    local nonChildPlayersFiltered = __TS__ArrayFilter(
        nonChildPlayers,
        function(____, player)
            local character = player:GetPlayerType()
            return not EXCLUDED_CHARACTERS:has(character)
        end
    )
    return performCharacterExclusions and nonChildPlayersFiltered or nonChildPlayers
end
--- Helper function to get a parent `EntityPlayer` object for a given `EntitySubPlayer` object. This
-- is useful because calling the `EntityPlayer.GetSubPlayer` method on a sub-player object will
-- return undefined.
function ____exports.getSubPlayerParent(self, subPlayer)
    local subPlayerPtrHash = GetPtrHash(subPlayer)
    local players = ____exports.getPlayers(nil)
    return __TS__ArrayFind(
        players,
        function(____, player)
            local thisPlayerSubPlayer = player:GetSubPlayer()
            if thisPlayerSubPlayer == nil then
                return false
            end
            local thisPlayerSubPlayerPtrHash = GetPtrHash(thisPlayerSubPlayer)
            return thisPlayerSubPlayerPtrHash == subPlayerPtrHash
        end
    )
end
--- Helper function to detect if a particular player is a "child" player, meaning that they have a
-- non-undefined `EntityPlayer.Parent` field. (For example, the Strawman Keeper.)
function ____exports.isChildPlayer(self, player)
    return player.Parent ~= nil
end
DEFAULT_COLLECTIBLE_TYPE = CollectibleType.SAD_ONION
EXCLUDED_CHARACTERS = __TS__New(ReadonlySet, {PlayerType.ESAU, PlayerType.SOUL_B})
--- Helper function to get all of the other players in the room besides the one provided. (This
-- includes "child" players.)
function ____exports.getOtherPlayers(self, player)
    local playerPtrHash = GetPtrHash(player)
    local players = ____exports.getAllPlayers(nil)
    return __TS__ArrayFilter(
        players,
        function(____, otherPlayer) return GetPtrHash(otherPlayer) ~= playerPtrHash end
    )
end
--- Helper function to get the corresponding `EntityPlayer` object that corresponds to a
-- `PlayerIndex`.
function ____exports.getPlayerFromIndex(self, playerIndex)
    local players = ____exports.getAllPlayers(nil)
    return __TS__ArrayFind(
        players,
        function(____, player) return ____exports.getPlayerIndex(nil, player) == playerIndex end
    )
end
--- Helper function to return the index of this player with respect to the output of the
-- `Isaac.GetPlayer` method.
-- 
-- Note that if you storing information about a player in a data structure, you never want to use
-- this index; use the `getPlayerIndex` function instead.
function ____exports.getPlayerIndexVanilla(self, playerToFind)
    local numPlayers = game:GetNumPlayers()
    local playerToFindHash = GetPtrHash(playerToFind)
    do
        local i = 0
        while i < numPlayers do
            local player = Isaac.GetPlayer(i)
            local playerHash = GetPtrHash(player)
            if playerHash == playerToFindHash then
                return i
            end
            i = i + 1
        end
    end
    return nil
end
--- Helper function to detect if a particular player is the Found Soul player provided by the
-- trinket.
function ____exports.isFoundSoul(self, player)
    return ____exports.isChildPlayer(nil, player) and player.Variant == PlayerVariant.COOP_BABY and player.SubType == BabySubType.FOUND_SOUL
end
return ____exports
 end,
["functions.utils"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____playerIndex = require("functions.playerIndex")
local getAllPlayers = ____playerIndex.getAllPlayers
local ____types = require("functions.types")
local isFunction = ____types.isFunction
--- Helper function to throw an error (using the `error` Lua function) if the provided value is equal
-- to `undefined`.
-- 
-- This is useful to have TypeScript narrow a `T | undefined` value to `T` in a concise way.
function ____exports.assertDefined(self, value, ...)
    local ____bindingPattern0 = {...}
    local msg
    msg = ____bindingPattern0[1]
    if value == nil then
        error(msg)
    end
end
--- Helper function to throw an error (using the `error` Lua function) if the provided value is equal
-- to `null`.
-- 
-- This is useful to have TypeScript narrow a `T | null` value to `T` in a concise way.
function ____exports.assertNotNull(self, value, ...)
    local ____bindingPattern0 = {...}
    local msg
    msg = ____bindingPattern0[1]
    if value == nil then
        error(msg)
    end
end
--- Helper function to return an array of integers with the specified range, inclusive on the lower
-- end and exclusive on the high end. (The "e" in the function name stands for exclusive.) Thus,
-- this function works in a similar way as the built-in `range` function from Python.
-- 
-- If the end is lower than the start, then the range will be reversed.
-- 
-- For example:
-- 
-- - `eRange(2)` returns `[0, 1]`.
-- - `eRange(3)` returns `[0, 1, 2]`.
-- - `eRange(-3)` returns `[0, -1, -2]`.
-- - `eRange(1, 3)` returns `[1, 2]`.
-- - `eRange(2, 5)` returns `[2, 3, 4]`.
-- - `eRange(5, 2)` returns `[5, 4, 3]`.
-- 
-- @param start The integer to start at.
-- @param end Optional. The integer to end at. If not specified, then the start will be 0 and the
-- first argument will be the end.
-- @param increment Optional. The increment to use. Default is 1.
function ____exports.eRange(self, start, ____end, increment)
    if increment == nil then
        increment = 1
    end
    if ____end == nil then
        return ____exports.eRange(nil, 0, start, increment)
    end
    local array = {}
    if start < ____end then
        do
            local i = start
            while i < ____end do
                array[#array + 1] = i
                i = i + increment
            end
        end
    else
        do
            local i = start
            while i > ____end do
                array[#array + 1] = i
                i = i - increment
            end
        end
    end
    return array
end
--- Helper function to log what is happening in functions that recursively move through nested data
-- structures.
function ____exports.getTraversalDescription(self, key, traversalDescription)
    if traversalDescription ~= "" then
        traversalDescription = traversalDescription .. " --> "
    end
    traversalDescription = traversalDescription .. tostring(key)
    return traversalDescription
end
--- Helper function to return an array of integers with the specified range, inclusive on both ends.
-- (The "i" in the function name stands for inclusive.)
-- 
-- If the end is lower than the start, then the range will be reversed.
-- 
-- For example:
-- 
-- - `iRange(2)` returns `[0, 1, 2]`.
-- - `iRange(3)` returns `[0, 1, 2, 3]`.
-- - `iRange(-3)` returns `[0, -1, -2, -3]`.
-- - `iRange(1, 3)` returns `[1, 2, 3]`.
-- - `iRange(2, 5)` returns `[2, 3, 4, 5]`.
-- - `iRange(5, 2)` returns `[5, 4, 3, 2]`.
-- 
-- @param start The integer to start at.
-- @param end Optional. The integer to end at. If not specified, then the start will be 0 and the
-- first argument will be the end.
-- @param increment Optional. The increment to use. Default is 1.
function ____exports.iRange(self, start, ____end, increment)
    if increment == nil then
        increment = 1
    end
    if ____end == nil then
        return ____exports.iRange(nil, 0, start, increment)
    end
    local rangeIncreasing = start <= ____end
    local exclusiveEnd = rangeIncreasing and ____end + 1 or ____end - 1
    return ____exports.eRange(nil, start, exclusiveEnd, increment)
end
--- Helper function to check if a variable is within a certain range, inclusive on both ends.
-- 
-- - For example, `inRange(1, 1, 3)` will return `true`.
-- - For example, `inRange(0, 1, 3)` will return `false`.
-- 
-- @param num The number to check.
-- @param start The start of the range to check.
-- @param end The end of the range to check.
function ____exports.inRange(self, num, start, ____end)
    return num >= start and num <= ____end
end
--- Helper function to detect if there is two or more players currently playing.
-- 
-- Specifically, this function looks for unique `ControllerIndex` values across all players.
-- 
-- This function is not safe to use in the `POST_PLAYER_INIT` callback, because the
-- `ControllerIndex` will not be set properly. As a workaround, you can use it in the
-- `POST_PLAYER_INIT_FIRST` callback (or some other callback like `POST_UPDATE`).
function ____exports.isMultiplayer(self)
    local players = getAllPlayers(nil)
    local controllerIndexes = __TS__ArrayMap(
        players,
        function(____, player) return player.ControllerIndex end
    )
    local controllerIndexesSet = __TS__New(ReadonlySet, controllerIndexes)
    return controllerIndexesSet.size > 1
end
--- Helper function to check if the player is using Afterbirth+ or Repentance.
-- 
-- This function should always be used over the `REPENTANCE` constant, since the latter is not safe.
-- 
-- Specifically, this function checks for the `Sprite.GetAnimation` method:
-- https://bindingofisaacrebirth.fandom.com/wiki/V1.06.J818#Lua_Changes
function ____exports.isRepentance(self)
    local metatable = getmetatable(Sprite)
    ____exports.assertDefined(nil, metatable, "Failed to get the metatable of the Sprite global table.")
    local classTable = metatable.__class
    ____exports.assertDefined(nil, classTable, "Failed to get the \"__class\" key of the Sprite metatable.")
    local getAnimation = classTable.GetAnimation
    return isFunction(nil, getAnimation)
end
--- Helper function to repeat code N times. This is faster to type and cleaner than using a for loop.
-- 
-- For example:
-- 
-- ```ts
-- const player = Isaac.GetPlayer();
-- repeat(10, () => {
--   player.AddCollectible(CollectibleType.STEVEN);
-- });
-- ```
-- 
-- The repeated function is passed the index of the iteration, if needed:
-- 
-- ```ts
-- repeat(3, (i) => {
--   print(i); // Prints "0", "1", "2"
-- });
-- ```
____exports["repeat"] = function(self, num, func)
    do
        local i = 0
        while i < num do
            func(nil, i)
            i = i + 1
        end
    end
end
--- Helper function to signify that the enclosing code block is not yet complete. Using this function
-- is similar to writing a "TODO" comment, but it has the benefit of preventing ESLint errors due to
-- unused variables or early returns.
-- 
-- When you see this function, it simply means that the programmer intends to add in more code to
-- this spot later.
-- 
-- This function is variadic, meaning that you can pass as many arguments as you want. (This is
-- useful as a means to prevent unused variables.)
-- 
-- This function does not actually do anything. (It is an "empty" function.)
-- 
-- @allowEmptyVariadic
function ____exports.todo(self, ...)
end
return ____exports
 end,
["functions.string"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Spread = ____lualib.__TS__Spread
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
local __TS__ArrayToSorted = ____lualib.__TS__ArrayToSorted
local __TS__StringReplaceAll = ____lualib.__TS__StringReplaceAll
local __TS__StringStartsWith = ____lualib.__TS__StringStartsWith
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArraySort = ____lualib.__TS__ArraySort
local __TS__StringSlice = ____lualib.__TS__StringSlice
local __TS__StringEndsWith = ____lualib.__TS__StringEndsWith
local ____exports = {}
local ____types = require("functions.types")
local parseIntSafe = ____types.parseIntSafe
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to get the closest value from an array of strings based on partial search text.
-- 
-- Note that:
-- - Spaces are automatically removed from the search text.
-- - Both the search text and the strings to search through are converted to lowercase before
--   attempting to find a match.
-- 
-- For example:
-- 
-- ```ts
-- const array = ["foo", "bar"];
-- const searchText = "f";
-- const match = getPartialMatch(array, searchText); // match is now equal to "foo"
-- 
-- @returns If a match was found, returns the array element. If a match was not
-- found, returns undefined.
-- ```
function ____exports.getPartialMatch(self, searchText, array)
    local sortedArray = __TS__ArrayToSorted(array)
    searchText = string.lower(searchText)
    searchText = __TS__StringReplaceAll(searchText, " ", "")
    local matchingElements = __TS__ArrayFilter(
        sortedArray,
        function(____, element) return __TS__StringStartsWith(
            string.lower(element),
            searchText
        ) end
    )
    __TS__ArraySort(matchingElements)
    return matchingElements[1]
end
function ____exports.capitalizeFirstLetter(self, ____string)
    if ____string == "" then
        return ____string
    end
    local firstCharacter = string.sub(____string, 1, 1)
    local capitalizedFirstLetter = string.upper(firstCharacter)
    local restOfString = string.sub(____string, 2)
    return capitalizedFirstLetter .. restOfString
end
--- Helper function to get the closest key from a map based on partial search text. (It only searches
-- through the keys, not the values.)
-- 
-- Note that:
-- - Spaces are automatically removed from the search text.
-- - Both the search text and the strings to search through are converted to lowercase before
--   attempting to find a match.
-- 
-- For example:
-- 
-- ```ts
-- const map = new <string, number>Map([
--   ["foo", 123],
--   ["bar", 456],
-- ]);
-- const searchText = "f";
-- const match = getMapPartialMatch(map, searchText); // match is now equal to ["foo", 123]
-- ```
-- 
-- @returns If a match was found, returns a tuple of the map key and value. If a match was not
-- found, returns undefined.
function ____exports.getMapPartialMatch(self, searchText, map)
    local keys = {__TS__Spread(map:keys())}
    local matchingKey = ____exports.getPartialMatch(nil, searchText, keys)
    if matchingKey == nil then
        return nil
    end
    local value = map:get(matchingKey)
    assertDefined(nil, value, "Failed to get the map value corresponding to the partial match of: " .. matchingKey)
    return {matchingKey, value}
end
--- Helper function to get the closest key from an object based on partial search text. (It only
-- searches through the keys, not the values.)
-- 
-- Note that:
-- - Spaces are automatically removed from the search text.
-- - Both the search text and the strings to search through are converted to lowercase before
--   attempting to find a match.
-- 
-- For example:
-- 
-- ```ts
-- const object = {
--   foo: 123,
--   bar: 456,
-- };
-- const searchText = "f";
-- const match = getObjectPartialMatch(object, searchText); // match is now equal to ["foo", 123]
-- ```
-- 
-- @returns If a match was found, returns a tuple of the map key and value. If a match was not
-- found, returns undefined.
function ____exports.getObjectPartialMatch(self, searchText, object)
    local keys = __TS__ObjectKeys(object)
    local matchingKey = ____exports.getPartialMatch(nil, searchText, keys)
    if matchingKey == nil then
        return nil
    end
    local value = object[matchingKey]
    assertDefined(nil, value, "Failed to get the object value corresponding to the partial match of: " .. matchingKey)
    return {matchingKey, value}
end
--- Helper function to parse a Semantic Versioning string into its individual constituents. Returns
-- undefined if the submitted string was not a proper Semantic Version string.
-- 
-- https://semver.org/
function ____exports.parseSemanticVersion(self, versionString)
    local majorVersionString, minorVersionString, patchVersionString = string.match(versionString, "(%d+).(%d+).(%d+)")
    if majorVersionString == nil or minorVersionString == nil or patchVersionString == nil then
        return nil
    end
    local majorVersion = parseIntSafe(nil, majorVersionString)
    local minorVersion = parseIntSafe(nil, minorVersionString)
    local patchVersion = parseIntSafe(nil, patchVersionString)
    if majorVersion == nil or minorVersion == nil or patchVersion == nil then
        return nil
    end
    return {majorVersion = majorVersion, minorVersion = minorVersion, patchVersion = patchVersion}
end
function ____exports.removeAllCharacters(self, ____string, character)
    return __TS__StringReplaceAll(____string, character, "")
end
--- Helper function to remove all of the characters in a string before a given substring. Returns the
-- modified string.
function ____exports.removeCharactersBefore(self, ____string, substring)
    local index = (string.find(____string, substring, nil, true) or 0) - 1
    return __TS__StringSlice(____string, index)
end
--- Helper function to remove all characters from a string that are not letters or numbers.
function ____exports.removeNonAlphanumericCharacters(self, str)
    local returnValue, _ = string.gsub(str, "%W", "")
    return returnValue
end
--- Helper function to remove one or more substrings from a string, if they exist. Returns the
-- modified string.
-- 
-- This function is variadic, meaning that you can pass as many substrings as you want to remove.
function ____exports.removeSubstring(self, ____string, ...)
    local substrings = {...}
    for ____, substring in ipairs(substrings) do
        ____string = __TS__StringReplaceAll(____string, substring, "")
    end
    return ____string
end
--- Helper function to trim a prefix from a string, if it exists. Returns the trimmed string.
function ____exports.trimPrefix(self, ____string, prefix)
    if not __TS__StringStartsWith(____string, prefix) then
        return ____string
    end
    return __TS__StringSlice(____string, #prefix)
end
--- Helper function to trim a suffix from a string, if it exists. Returns the trimmed string.
function ____exports.trimSuffix(self, ____string, prefix)
    if not __TS__StringEndsWith(____string, prefix) then
        return ____string
    end
    local endCharacter = #____string - #prefix
    return __TS__StringSlice(____string, 0, endCharacter)
end
function ____exports.uncapitalizeFirstLetter(self, ____string)
    if ____string == "" then
        return ____string
    end
    local firstCharacter = string.sub(____string, 1, 1)
    local uncapitalizedFirstLetter = string.lower(firstCharacter)
    local restOfString = string.sub(____string, 2)
    return uncapitalizedFirstLetter .. restOfString
end
return ____exports
 end,
["functions.isaacAPIClass"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
local ____exports = {}
local ____string = require("functions.string")
local trimPrefix = ____string.trimPrefix
local ____types = require("functions.types")
local isString = ____types.isString
local isUserdata = ____types.isUserdata
--- Helper function to get the name of a class from the Isaac API. This is contained within the
-- "__type" metatable key.
-- 
-- For example, a `Vector` class is has a name of "Vector".
-- 
-- Returns undefined if the object is not of type `userdata` or if the "__type" metatable key does
-- not exist.
-- 
-- In some cases, Isaac classes can be a read-only. If this is the case, the "__type" field will be
-- prepended with "const ". This function will always strip this prefix, if it exists. For example,
-- the class name returned for "const Vector" will be "Vector".
function ____exports.getIsaacAPIClassName(self, object)
    if not isUserdata(nil, object) then
        return nil
    end
    local metatable = getmetatable(object)
    if metatable == nil then
        return nil
    end
    local classType = metatable.__type
    if not isString(nil, classType) then
        return nil
    end
    return trimPrefix(nil, classType, "const ")
end
--- Helper function to detect if a variable is of type `EntityBomb`.
function ____exports.isBomb(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityBomb"
end
--- Helper function to detect if a variable is of type `GridEntityDoor`.
function ____exports.isDoor(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "GridEntityDoor"
end
--- Helper function to detect if a variable is of type `EntityEffect`.
function ____exports.isEffect(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityEffect"
end
--- Helper function to detect if a variable is of type `Entity`. This will return false for child
-- classes such as `EntityPlayer` or `EntityTear`.
function ____exports.isEntity(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "Entity"
end
--- Helper function to detect if a variable is of type `EntityFamiliar`.
function ____exports.isFamiliar(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityEffect"
end
--- Helper function to detect if a variable is of type `GridEntity`.
function ____exports.isGridEntity(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "GridEntity"
end
--- Helper function to check if something is an instantiated class from the Isaac API. (All classes
-- from the Isaac API have a type of "userdata" in Lua with a metatable key of "__type" equal to the
-- name of the class.)
function ____exports.isIsaacAPIClass(self, object)
    local isaacAPIClassType = ____exports.getIsaacAPIClassName(nil, object)
    return isaacAPIClassType ~= nil
end
function ____exports.isIsaacAPIClassOfType(self, object, classType)
    local isaacAPIClassType = ____exports.getIsaacAPIClassName(nil, object)
    return isaacAPIClassType == classType or isaacAPIClassType == "const " .. classType
end
--- Helper function to detect if a variable is of type `EntityKnife`.
function ____exports.isKnife(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityKnife"
end
--- Helper function to detect if a variable is of type `EntityLaser`.
function ____exports.isLaser(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityLaser"
end
--- Helper function to detect if a variable is of type `EntityNPC`.
function ____exports.isNPC(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityNPC"
end
--- Helper function to detect if a variable is of type `EntityPickup`.
function ____exports.isPickup(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityPickup"
end
--- Helper function to detect if a variable is of type `GridEntityPit`.
function ____exports.isPit(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "GridEntityPit"
end
--- Helper function to detect if a variable is of type `EntityPlayer`.
function ____exports.isPlayer(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityPlayer"
end
--- Helper function to detect if a variable is of type `GridEntityPoop`.
function ____exports.isPoop(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "GridEntityPoop"
end
--- Helper function to detect if a variable is of type `GridEntityPressurePlate`.
function ____exports.isPressurePlate(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "GridEntityPressurePlate"
end
--- Helper function to detect if a variable is of type `EntityProjectile`.
function ____exports.isProjectile(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityProjectile"
end
--- Helper function to detect if a variable is of type `GridEntityRock`.
function ____exports.isRock(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "GridEntityRock"
end
--- Helper function to detect if a variable is of type `GridEntitySpikes`.
function ____exports.isSpikes(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "GridEntitySpikes"
end
--- Helper function to detect if a variable is of type `GridEntityTNT`.
function ____exports.isTNT(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "GridEntityTNT"
end
--- Helper function to detect if a variable is of type `EntityTear`.
function ____exports.isTear(self, variable)
    return ____exports.getIsaacAPIClassName(nil, variable) == "EntityTear"
end
--- Helper function to check if an instantiated Isaac API class is equal to another one of the same
-- type. You must provide the list of keys to check for.
function ____exports.isaacAPIClassEquals(self, object1, object2, keys)
    local table1 = object1
    local table2 = object2
    return __TS__ArrayEvery(
        keys,
        function(____, key) return table1[key] == table2[key] end
    )
end
return ____exports
 end,
["functions.table"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__TypeOf = ____lualib.__TS__TypeOf
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
local __TS__ArraySort = ____lualib.__TS__ArraySort
local ____exports = {}
local ____types = require("functions.types")
local isBoolean = ____types.isBoolean
local isNumber = ____types.isNumber
local isString = ____types.isString
local isUserdata = ____types.isUserdata
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- In a `Map`, you can use the `clear` method to delete every element. However, in a `LuaMap`, the
-- `clear` method does not exist. Use this helper function as a drop-in replacement for this.
function ____exports.clearTable(self, luaMap)
    for key in pairs(luaMap) do
        luaMap[key] = nil
    end
end
--- Helper function to copy specific values from a userdata object (e.g. `Vector`) to a table.
function ____exports.copyUserdataValuesToTable(self, object, keys, luaMap)
    if not isUserdata(nil, object) then
        error("Failed to copy an object values to a table, since the object was of type: " .. type(object))
    end
    local userdata = object
    for ____, key in ipairs(keys) do
        local value = userdata[key]
        luaMap[key] = value
    end
end
--- Helper function to safely get boolean values from a Lua table. Will throw an error if the
-- specific value does not exist on the table.
-- 
-- This function is variadic, meaning that you can specify N arguments to get N values.
function ____exports.getBooleansFromTable(self, luaMap, objectName, ...)
    local keys = {...}
    local booleans = {}
    for ____, key in ipairs(keys) do
        local value = luaMap[key]
        assertDefined(nil, value, ((("Failed to find a value for \"" .. key) .. "\" in a table representing a \"") .. objectName) .. "\" object.")
        if isBoolean(nil, value) then
            booleans[#booleans + 1] = value
        else
            error((((("Failed to get the boolean for the \"" .. key) .. "\" value of a table representing a \"") .. objectName) .. "\" object because the type was: ") .. __TS__TypeOf(value))
        end
    end
    return booleans
end
--- Helper function to safely get number values from specific keys on a Lua table. If the values are
-- strings, they will be converted to numbers. Will throw an error if the specific value does not
-- exist on the table or if it cannot be converted to a number.
-- 
-- This function is variadic, meaning that you can specify N arguments to get N values.
function ____exports.getNumbersFromTable(self, luaMap, objectName, ...)
    local keys = {...}
    local numbers = {}
    for ____, key in ipairs(keys) do
        local value = luaMap[key]
        assertDefined(nil, value, ((("Failed to find a value for \"" .. key) .. "\" in a table representing a \"") .. objectName) .. "\" object.")
        if isNumber(nil, value) then
            numbers[#numbers + 1] = value
        elseif isString(nil, value) then
            local number = tonumber(value)
            assertDefined(nil, number, (((("Failed to convert the \"" .. key) .. "\" value of a table representing a \"") .. objectName) .. "\" object to a number: ") .. value)
            numbers[#numbers + 1] = number
        else
            error((((("Failed to get the number for the \"" .. key) .. "\" value of a table representing a \"") .. objectName) .. "\" object because the type was: ") .. __TS__TypeOf(value))
        end
    end
    return numbers
end
--- Helper function to safely get string values from a Lua table. Will throw an error if the specific
-- value does not exist on the table.
-- 
-- This function is variadic, meaning that you can specify N arguments to get N values.
function ____exports.getStringsFromTable(self, luaMap, objectName, ...)
    local keys = {...}
    local strings = {}
    for ____, key in ipairs(keys) do
        local value = luaMap[key]
        assertDefined(nil, value, ((("Failed to find a value for \"" .. key) .. "\" in a table representing a \"") .. objectName) .. "\" object.")
        if isString(nil, value) then
            strings[#strings + 1] = value
        else
            local ____string = tostring(value)
            strings[#strings + 1] = ____string
        end
    end
    return strings
end
--- Helper function to check if a Lua table has 0 keys.
function ____exports.isTableEmpty(self, luaMap)
    for _key, _value in pairs(luaMap) do
        return false
    end
    return true
end
--- Helper function to iterate over a table deterministically. This is useful because by default, the
-- `pairs` function will return the keys of a Lua table in a random order.
-- 
-- This function will sort the table entries based on the value of the key.
-- 
-- This function will only work on tables that have number keys or string keys. It will throw a
-- run-time error if it encounters a key of another type.
-- 
-- @param luaMap The table to iterate over.
-- @param func The function to run for each iteration.
-- @param inOrder Optional. Whether to iterate in order. True by default. You can dynamically set to
-- false in situations where iterating randomly would not matter and you need the
-- extra performance.
function ____exports.iterateTableInOrder(self, luaMap, func, inOrder)
    if inOrder == nil then
        inOrder = true
    end
    if not inOrder then
        for key, value in pairs(luaMap) do
            func(nil, key, value)
        end
        return
    end
    local keys = __TS__ObjectKeys(luaMap)
    local hasAllNumberKeys = __TS__ArrayEvery(
        keys,
        function(____, key) return isNumber(nil, key) end
    )
    local hasAllStringKeys = __TS__ArrayEvery(
        keys,
        function(____, key) return isString(nil, key) end
    )
    if not hasAllNumberKeys and not hasAllStringKeys then
        for key, value in pairs(luaMap) do
            func(nil, key, value)
        end
        return
    end
    __TS__ArraySort(keys)
    for ____, key in ipairs(keys) do
        local keyIndex = key
        local value = luaMap[keyIndex]
        if value ~= nil then
            func(nil, keyIndex, value)
        end
    end
end
--- Helper function to check if a Lua table has all of the provided keys.
-- 
-- This function is variadic, meaning that you can specify as many arguments as you want to check
-- for.
function ____exports.tableHasKeys(self, luaMap, ...)
    local keys = {...}
    return __TS__ArrayEvery(
        keys,
        function(____, key) return luaMap[key] ~= nil end
    )
end
return ____exports
 end,
["functions.rng"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__TypeOf = ____lualib.__TS__TypeOf
local ____exports = {}
local RECOMMENDED_SHIFT_IDX, OBJECT_NAME
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
local ____debugFunctions = require("functions.debugFunctions")
local traceback = ____debugFunctions.traceback
local ____isaacAPIClass = require("functions.isaacAPIClass")
local isaacAPIClassEquals = ____isaacAPIClass.isaacAPIClassEquals
local isIsaacAPIClassOfType = ____isaacAPIClass.isIsaacAPIClassOfType
local ____log = require("functions.log")
local logError = ____log.logError
local ____table = require("functions.table")
local getNumbersFromTable = ____table.getNumbersFromTable
local tableHasKeys = ____table.tableHasKeys
local ____types = require("functions.types")
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to get a random `Seed` value to be used in spawning entities and so on. Use this
-- instead of calling the `Random` function directly since that can return a value of 0 and crash
-- the game.
function ____exports.getRandomSeed(self)
    local randomNumber = Random()
    local safeRandomNumber = randomNumber == 0 and 1 or randomNumber
    return safeRandomNumber
end
--- Helper function to check if something is an instantiated `RNG` object.
function ____exports.isRNG(self, object)
    return isIsaacAPIClassOfType(nil, object, OBJECT_NAME)
end
--- Helper function to initialize a new RNG object using Blade's recommended shift index.
-- 
-- @param seed Optional. The seed to initialize it with. Default is a random seed.
function ____exports.newRNG(self, seed)
    if seed == nil then
        seed = ____exports.getRandomSeed(nil)
    end
    local rng = RNG()
    ____exports.setSeed(nil, rng, seed)
    return rng
end
--- Helper function to set a seed to an RNG object using Blade's recommended shift index.
function ____exports.setSeed(self, rng, seed)
    if seed == 0 then
        seed = ____exports.getRandomSeed(nil)
        logError("Failed to set a RNG object to a seed of 0. Using a random value instead.")
        traceback()
    end
    rng:SetSeed(seed, RECOMMENDED_SHIFT_IDX)
end
RECOMMENDED_SHIFT_IDX = 35
OBJECT_NAME = "RNG"
local KEYS = {"seed"}
--- Helper function to copy an `RNG` Isaac API class.
function ____exports.copyRNG(self, rng)
    if not ____exports.isRNG(nil, rng) then
        error(((("Failed to copy a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    local seed = rng:GetSeed()
    return ____exports.newRNG(nil, seed)
end
--- Helper function to convert a `SerializedRNG` object to a normal `RNG` object. (This is used by
-- the save data manager when reading data from the "save#.dat" file.)
function ____exports.deserializeRNG(self, rng)
    if not isTable(nil, rng) then
        error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object was not a Lua table.")
    end
    local seed = table.unpack(getNumbersFromTable(
        nil,
        rng,
        OBJECT_NAME,
        table.unpack(KEYS)
    ))
    assertDefined(nil, seed, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: seed")
    return ____exports.newRNG(nil, seed)
end
--- Used to determine is the given table is a serialized `RNG` object created by the `deepCopy`
-- function.
function ____exports.isSerializedRNG(self, object)
    if not isTable(nil, object) then
        return false
    end
    return tableHasKeys(
        nil,
        object,
        table.unpack(KEYS)
    ) and object[SerializationBrand.RNG] ~= nil
end
function ____exports.rngEquals(self, rng1, rng2)
    return isaacAPIClassEquals(nil, rng1, rng2, KEYS)
end
--- Helper function to convert a `RNG` object to a `SerializedRNG` object. (This is used by the save
-- data manager when writing data from the "save#.dat" file.)
function ____exports.serializeRNG(self, rng)
    if not ____exports.isRNG(nil, rng) then
        error(((("Failed to serialize a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    local seed = rng:GetSeed()
    local rngTable = {}
    rngTable.seed = seed
    rngTable[SerializationBrand.RNG] = ""
    return rngTable
end
--- Helper function to iterate over the provided object and set the seed for all of the values that
-- are RNG objects equal to a particular seed.
function ____exports.setAllRNGToSeed(self, object, seed)
    if not isTable(nil, object) then
        error("Failed to iterate over the object containing RNG objects since the type of the provided object was: " .. __TS__TypeOf(object))
    end
    local setAtLeastOneSeed = false
    for _key, value in pairs(object) do
        if ____exports.isRNG(nil, value) then
            ____exports.setSeed(nil, value, seed)
            setAtLeastOneSeed = true
        end
    end
    if not setAtLeastOneSeed then
        error(("Failed to set all RNG objects to seed " .. tostring(seed)) .. " because the parent object did not contain any RNG objects.")
    end
end
--- Helper function to iterate over the provided object and set the seed for all of the values that
-- are RNG objects equal to the start seed for the current run.
function ____exports.setAllRNGToStartSeed(self, object)
    local seeds = game:GetSeeds()
    local startSeed = seeds:GetStartSeed()
    ____exports.setAllRNGToSeed(nil, object, startSeed)
end
return ____exports
 end,
["functions.random"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
--- Returns a random float between 0 and 1. It is inclusive on the low end, but exclusive on the high
-- end. (This is because the `RNG.RandomFloat` method will never return a value of exactly 1.)
-- 
-- If you want to generate an unseeded number, you must explicitly pass `undefined` to the
-- `seedOrRNG` parameter.
-- 
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
function ____exports.getRandom(self, seedOrRNG)
    local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
    return rng:RandomFloat()
end
--- Returns a random float between min and max.
-- 
-- For example:
-- 
-- ```ts
-- const realNumberBetweenOneAndThree = getRandomFloat(1, 3, undefined);
-- ```
-- 
-- If you want to generate an unseeded number, you must explicitly pass `undefined` to the
-- `seedOrRNG` parameter.
-- 
-- @param min The lower bound for the random number (inclusive).
-- @param max The upper bound for the random number (exclusive).
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
function ____exports.getRandomFloat(self, min, max, seedOrRNG)
    if min > max then
        local oldMin = min
        local oldMax = max
        min = oldMax
        max = oldMin
    end
    return min + ____exports.getRandom(nil, seedOrRNG) * (max - min)
end
--- Returns a random integer between min and max. It is inclusive on both ends.
-- 
-- For example:
-- 
-- ```ts
-- const oneTwoOrThree = getRandomInt(1, 3);
-- ```
-- 
-- If you want to generate an unseeded number, you must explicitly pass `undefined` to the
-- `seedOrRNG` parameter.
-- 
-- @param min The lower bound for the random number (inclusive).
-- @param max The upper bound for the random number (inclusive).
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param exceptions Optional. An array of elements that will be skipped over when getting the
-- random integer. For example, a min of 1, a max of 4, and an exceptions array of
-- `[2]` would cause the function to return either 1, 3, or 4. Default is an empty
-- array.
function ____exports.getRandomInt(self, min, max, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
    min = math.ceil(min)
    max = math.floor(max)
    if min > max then
        local oldMin = min
        local oldMax = max
        min = oldMax
        max = oldMin
    end
    local exceptionsSet = __TS__New(ReadonlySet, exceptions)
    local randomInt
    repeat
        do
            randomInt = rng:RandomInt(max - min + 1) + min
        end
    until not exceptionsSet:has(randomInt)
    return randomInt
end
return ____exports
 end,
["functions.array"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
local __TS__New = ____lualib.__TS__New
local __TS__ArrayIndexOf = ____lualib.__TS__ArrayIndexOf
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local __TS__ArrayPushArray = ____lualib.__TS__ArrayPushArray
local __TS__ArrayEntries = ____lualib.__TS__ArrayEntries
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArrayUnshift = ____lualib.__TS__ArrayUnshift
local __TS__ArraySlice = ____lualib.__TS__ArraySlice
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
local __TS__ArraySome = ____lualib.__TS__ArraySome
local __TS__ArrayReduce = ____lualib.__TS__ArrayReduce
local ____exports = {}
local addCombinations
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____random = require("functions.random")
local getRandomInt = ____random.getRandomInt
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
local ____types = require("functions.types")
local isNumber = ____types.isNumber
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local eRange = ____utils.eRange
--- Removes all of the specified element(s) from the array. If the specified element(s) are not found
-- in the array, this function will do nothing.
-- 
-- This function is variadic, meaning that you can specify N arguments to remove N elements.
-- 
-- If there is more than one matching element in the array, this function will remove every matching
-- element. If you want to only remove the first matching element, use the `arrayRemoveInPlace`
-- function instead.
-- 
-- @returns True if one or more elements were removed, false otherwise.
function ____exports.arrayRemoveAllInPlace(self, array, ...)
    local elementsToRemove = {...}
    local removedOneOrMoreElements = false
    for ____, element in ipairs(elementsToRemove) do
        local index
        repeat
            do
                index = __TS__ArrayIndexOf(array, element)
                if index > -1 then
                    removedOneOrMoreElements = true
                    __TS__ArraySplice(array, index, 1)
                end
            end
        until not (index > -1)
    end
    return removedOneOrMoreElements
end
--- Helper function to perform a shallow copy.
-- 
-- @param oldArray The array to copy.
-- @param numElements Optional. If specified, will only copy the first N elements. By default, the
-- entire array will be copied.
function ____exports.copyArray(self, oldArray, numElements)
    if numElements == nil then
        return {table.unpack(oldArray)}
    end
    local newArrayWithFirstNElements = {}
    do
        local i = 0
        while i < numElements do
            newArrayWithFirstNElements[#newArrayWithFirstNElements + 1] = oldArray[i + 1]
            i = i + 1
        end
    end
    return newArrayWithFirstNElements
end
function addCombinations(self, n, src, got, all)
    if n == 0 then
        if #got > 0 then
            all[#all + 1] = got
        end
        return
    end
    for ____, ____value in __TS__Iterator(__TS__ArrayEntries(src)) do
        local i = ____value[1]
        local element = ____value[2]
        local ____addCombinations_3 = addCombinations
        local ____temp_1 = n - 1
        local ____TS__ArraySlice_result_2 = __TS__ArraySlice(src, i + 1)
        local ____array_0 = __TS__SparseArrayNew(table.unpack(got))
        __TS__SparseArrayPush(____array_0, element)
        ____addCombinations_3(
            nil,
            ____temp_1,
            ____TS__ArraySlice_result_2,
            {__TS__SparseArraySpread(____array_0)},
            all
        )
    end
end
--- Helper function to get a random index from the provided array.
-- 
-- If you want to get an unseeded index, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- @param array The array to get the index from.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param exceptions Optional. An array of indexes that will be skipped over when getting the random
-- index. Default is an empty array.
function ____exports.getRandomArrayIndex(self, array, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    if #array == 0 then
        error("Failed to get a random array index since the provided array is empty.")
    end
    return getRandomInt(
        nil,
        0,
        #array - 1,
        seedOrRNG,
        exceptions
    )
end
--- Shuffles the provided array in-place using the Fisher-Yates algorithm.
-- 
-- If you want an unseeded shuffle, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- From: https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
-- 
-- @param array The array to shuffle.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
function ____exports.shuffleArrayInPlace(self, array, seedOrRNG)
    local currentIndex = #array
    local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
    while currentIndex > 0 do
        currentIndex = currentIndex - 1
        local randomIndex = ____exports.getRandomArrayIndex(nil, array, rng)
        ____exports.swapArrayElements(nil, array, currentIndex, randomIndex)
    end
end
--- Helper function to swap two different array elements. (The elements will be swapped in-place.)
function ____exports.swapArrayElements(self, array, i, j)
    local value1 = array[i + 1]
    local value2 = array[j + 1]
    array[i + 1] = value2
    array[j + 1] = value1
end
--- Helper function for determining if two arrays contain the exact same elements. Note that this
-- only performs a shallow comparison.
function ____exports.arrayEquals(self, array1, array2)
    if #array1 ~= #array2 then
        return false
    end
    return __TS__ArrayEvery(
        array1,
        function(____, array1Element, i)
            local array2Element = array2[i + 1]
            return array1Element == array2Element
        end
    )
end
--- Builds a new array based on the original array without the specified element(s). Returns the new
-- array. If the specified element(s) are not found in the array, it will simply return a shallow
-- copy of the array.
-- 
-- This function is variadic, meaning that you can specify N arguments to remove N elements.
-- 
-- If there is more than one matching element in the array, this function will only remove the first
-- matching element. If you want to remove all of the elements, use the `arrayRemoveAll` function
-- instead.
function ____exports.arrayRemove(self, originalArray, ...)
    local elementsToRemove = {...}
    local elementsToRemoveSet = __TS__New(ReadonlySet, elementsToRemove)
    local array = {}
    for ____, element in ipairs(originalArray) do
        if not elementsToRemoveSet:has(element) then
            array[#array + 1] = element
        end
    end
    return array
end
--- Shallow copies and removes the specified element(s) from the array. Returns the copied array. If
-- the specified element(s) are not found in the array, it will simply return a shallow copy of the
-- array.
-- 
-- This function is variadic, meaning that you can specify N arguments to remove N elements.
-- 
-- If there is more than one matching element in the array, this function will remove every matching
-- element. If you want to only remove the first matching element, use the `arrayRemove` function
-- instead.
function ____exports.arrayRemoveAll(self, originalArray, ...)
    local array = ____exports.copyArray(nil, originalArray)
    ____exports.arrayRemoveAllInPlace(nil, array, ...)
    return array
end
--- Removes the specified element(s) from the array. If the specified element(s) are not found in the
-- array, this function will do nothing.
-- 
-- This function is variadic, meaning that you can specify N arguments to remove N elements.
-- 
-- If there is more than one matching element in the array, this function will only remove the first
-- matching element. If you want to remove all of the elements, use the `arrayRemoveAllInPlace`
-- function instead.
-- 
-- @returns The removed elements. This will be an empty array if no elements were removed.
function ____exports.arrayRemoveInPlace(self, array, ...)
    local elementsToRemove = {...}
    local removedElements = {}
    for ____, element in ipairs(elementsToRemove) do
        local index = __TS__ArrayIndexOf(array, element)
        if index > -1 then
            local removedElement = __TS__ArraySplice(array, index, 1)
            __TS__ArrayPushArray(removedElements, removedElement)
        end
    end
    return removedElements
end
--- Shallow copies and removes the elements at the specified indexes from the array. Returns the
-- copied array. If the specified indexes are not found in the array, it will simply return a
-- shallow copy of the array.
-- 
-- This function is variadic, meaning that you can specify N arguments to remove N elements.
function ____exports.arrayRemoveIndex(self, originalArray, ...)
    local indexesToRemove = {...}
    local indexesToRemoveSet = __TS__New(ReadonlySet, indexesToRemove)
    local array = {}
    for ____, ____value in __TS__Iterator(__TS__ArrayEntries(originalArray)) do
        local i = ____value[1]
        local element = ____value[2]
        if not indexesToRemoveSet:has(i) then
            array[#array + 1] = element
        end
    end
    return array
end
--- Removes the elements at the specified indexes from the array. If the specified indexes are not
-- found in the array, this function will do nothing.
-- 
-- This function is variadic, meaning that you can specify N arguments to remove N elements.
-- 
-- @returns The removed elements. This will be an empty array if no elements were removed.
function ____exports.arrayRemoveIndexInPlace(self, array, ...)
    local indexesToRemove = {...}
    local legalIndexes = __TS__ArrayFilter(
        indexesToRemove,
        function(____, i) return i >= 0 and i < #array end
    )
    if #legalIndexes == 0 then
        return {}
    end
    local legalIndexesSet = __TS__New(ReadonlySet, legalIndexes)
    local removedElements = {}
    do
        local i = #array - 1
        while i >= 0 do
            if legalIndexesSet:has(i) then
                local removedElement = __TS__ArraySplice(array, i, 1)
                __TS__ArrayPushArray(removedElements, removedElement)
            end
            i = i - 1
        end
    end
    return removedElements
end
function ____exports.arrayToString(self, array)
    if #array == 0 then
        return "[]"
    end
    local strings = __TS__ArrayMap(
        array,
        function(____, element) return tostring(element) end
    )
    local commaSeparatedStrings = table.concat(strings, ", ")
    return ("[" .. commaSeparatedStrings) .. "]"
end
--- Helper function to combine two or more arrays. Returns a new array that is the composition of all
-- of the specified arrays.
-- 
-- This function is variadic, meaning that you can specify N arguments to combine N arrays. Note
-- that this will only perform a shallow copy of the array elements.
function ____exports.combineArrays(self, ...)
    local arrays = {...}
    local elements = {}
    for ____, array in ipairs(arrays) do
        for ____, element in ipairs(array) do
            elements[#elements + 1] = element
        end
    end
    return elements
end
--- Helper function to remove all of the elements in an array in-place.
function ____exports.emptyArray(self, array)
    __TS__ArraySplice(array, 0, #array)
end
--- Helper function to perform a map and a filter at the same time. Similar to `Array.map`, provide a
-- function that transforms a value, but return `undefined` if the value should be skipped. (Thus,
-- this function cannot be used in situations where `undefined` can be a valid array element.)
-- 
-- This function is useful because the `Array.map` method will always produce an array with the same
-- amount of elements as the original array.
-- 
-- This is named `filterMap` after the Rust function:
-- https://doc.rust-lang.org/std/iter/struct.FilterMap.html
function ____exports.filterMap(self, array, func)
    local newArray = {}
    for ____, element in ipairs(array) do
        local newElement = func(nil, element)
        if newElement ~= nil then
            newArray[#newArray + 1] = newElement
        end
    end
    return newArray
end
--- Helper function to get all possible combinations of the given array. This includes the
-- combination of an empty array.
-- 
-- For example, if this function is provided an array containing 1, 2, and 3, then it will return an
-- array containing the following arrays:
-- 
-- - [] (if `includeEmptyArray` is set to true)
-- - [1]
-- - [2]
-- - [3]
-- - [1, 2]
-- - [1, 3]
-- - [2, 3]
-- - [1, 2, 3]
-- 
-- From: https://github.com/firstandthird/combinations/blob/master/index.js
-- 
-- @param array The array to get the combinations of.
-- @param includeEmptyArray Whether to include an empty array in the combinations.
-- @param min Optional. The minimum number of elements to include in each combination. Default is 1.
-- @param max Optional. The maximum number of elements to include in each combination. Default is
-- the length of the array.
function ____exports.getArrayCombinations(self, array, includeEmptyArray, min, max)
    if min == nil or min <= 0 then
        min = 1
    end
    if max == nil or max <= 0 then
        max = #array
    end
    local all = {}
    do
        local i = min
        while i < #array do
            addCombinations(
                nil,
                i,
                array,
                {},
                all
            )
            i = i + 1
        end
    end
    if #array == max then
        all[#all + 1] = array
    end
    if includeEmptyArray then
        __TS__ArrayUnshift(all, {})
    end
    return all
end
--- Helper function to get an array containing the indexes of an array.
-- 
-- For example, an array of `["Apple", "Banana"]` would return an array of `[0, 1]`.
-- 
-- Note that normally, you would use the `Object.keys` method to get the indexes of an array, but
-- due to implementation details of TypeScriptToLua, this results in an array of 1 through N
-- (instead of an array of 0 through N -1).
function ____exports.getArrayIndexes(self, array)
    return eRange(nil, #array)
end
--- Helper function to get the highest value in an array. Returns undefined if there were no elements
-- in the array.
function ____exports.getHighestArrayElement(self, array)
    if #array == 0 then
        return nil
    end
    local highestValue
    for ____, element in ipairs(array) do
        if highestValue == nil or element > highestValue then
            highestValue = element
        end
    end
    return highestValue
end
--- Helper function to get the lowest value in an array. Returns undefined if there were no elements
-- in the array.
function ____exports.getLowestArrayElement(self, array)
    if #array == 0 then
        return nil
    end
    local lowestValue
    for ____, element in ipairs(array) do
        if lowestValue == nil or element < lowestValue then
            lowestValue = element
        end
    end
    return lowestValue
end
--- Helper function to get a random element from the provided array.
-- 
-- If you want to get an unseeded element, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- @param array The array to get an element from.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param exceptions Optional. An array of elements to skip over if selected.
function ____exports.getRandomArrayElement(self, array, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    if #array == 0 then
        error("Failed to get a random array element since the provided array is empty.")
    end
    local arrayToUse = #exceptions > 0 and ____exports.arrayRemove(
        nil,
        array,
        table.unpack(exceptions)
    ) or array
    local randomIndex = ____exports.getRandomArrayIndex(nil, arrayToUse, seedOrRNG)
    local randomElement = arrayToUse[randomIndex + 1]
    assertDefined(
        nil,
        randomElement,
        ("Failed to get a random array element since the random index of " .. tostring(randomIndex)) .. " was not valid."
    )
    return randomElement
end
--- Helper function to get a random element from the provided array. Once the random element is
-- decided, it is then removed from the array (in-place).
-- 
-- If you want to get an unseeded element, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- @param array The array to get an element from.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param exceptions Optional. An array of elements to skip over if selected.
function ____exports.getRandomArrayElementAndRemove(self, array, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    local randomArrayElement = ____exports.getRandomArrayElement(nil, array, seedOrRNG, exceptions)
    ____exports.arrayRemoveInPlace(nil, array, randomArrayElement)
    return randomArrayElement
end
--- Similar to the `Array.includes` method, but works on a widened version of the array.
-- 
-- This is useful when the normal `Array.includes` produces a type error from an array that uses an
-- `as const` assertion.
function ____exports.includes(self, array, searchElement)
    local widenedArray = array
    return __TS__ArrayIncludes(widenedArray, searchElement)
end
--- Since Lua uses tables for every non-primitive data structure, it is non-trivial to determine if a
-- particular table is being used as an array. `isArray` returns true if:
-- 
-- - the table contains all numerical indexes that are contiguous, starting at 1
-- - the table has no keys (i.e. an "empty" table)
-- 
-- @param object The object to analyze.
-- @param ensureContiguousValues Optional. Whether the Lua table has to have all contiguous keys in
-- order to be considered an array. Default is true.
function ____exports.isArray(self, object, ensureContiguousValues)
    if ensureContiguousValues == nil then
        ensureContiguousValues = true
    end
    if not isTable(nil, object) then
        return false
    end
    local metatable = getmetatable(object)
    if metatable ~= nil then
        return false
    end
    local keys = __TS__ObjectKeys(object)
    if #keys == 0 then
        return true
    end
    local hasAllNumberKeys = __TS__ArrayEvery(
        keys,
        function(____, key) return isNumber(nil, key) end
    )
    if not hasAllNumberKeys then
        return false
    end
    if ensureContiguousValues then
        do
            local i = 1
            while i <= #keys do
                local element = object[i]
                if element == nil then
                    return false
                end
                i = i + 1
            end
        end
    end
    return true
end
--- Helper function to see if every element in the array is N + 1.
-- 
-- For example, `[2, 3, 4]` would return true, and `[2, 3, 5]` would return false.
function ____exports.isArrayContiguous(self, array)
    local lastValue
    for ____, element in ipairs(array) do
        if lastValue == nil then
            lastValue = element - 1
        end
        if element ~= lastValue - 1 then
            return false
        end
    end
    return true
end
--- Checks if an array is in the provided 2-dimensional array.
function ____exports.isArrayInArray(self, arrayToMatch, parentArray)
    return __TS__ArraySome(
        parentArray,
        function(____, element) return ____exports.arrayEquals(nil, element, arrayToMatch) end
    )
end
--- Helper function to set every element in an array to a specific value.
function ____exports.setAllArrayElements(self, array, value)
    do
        local i = 0
        while i < #array do
            array[i + 1] = value
            i = i + 1
        end
    end
end
--- Shallow copies and shuffles the array using the Fisher-Yates algorithm. Returns the copied array.
-- 
-- If you want an unseeded shuffle, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- From: https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
-- 
-- @param originalArray The array to shuffle.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
function ____exports.shuffleArray(self, originalArray, seedOrRNG)
    local array = ____exports.copyArray(nil, originalArray)
    ____exports.shuffleArrayInPlace(nil, array, seedOrRNG)
    return array
end
--- Helper function to sum every value in an array together.
function ____exports.sumArray(self, array)
    return __TS__ArrayReduce(
        array,
        function(____, accumulator, element) return accumulator + element end,
        0
    )
end
return ____exports
 end,
["functions.enums"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySort = ____lualib.__TS__ArraySort
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArrayAt = ____lualib.__TS__ArrayAt
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____array = require("functions.array")
local getRandomArrayElement = ____array.getRandomArrayElement
local ____types = require("functions.types")
local isNumber = ____types.isNumber
local isString = ____types.isString
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local iRange = ____utils.iRange
--- TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
-- Thus, when you iterate over them, you will get both the names of the enums and the values of the
-- enums, in a random order. Use this helper function to get the entries of the enum with the
-- reverse mappings filtered out.
-- 
-- This function will return the enum values in a sorted order, which may not necessarily be the
-- same order as which they were declared in. (It is impossible to get the declaration order at
-- run-time.)
-- 
-- This function will work properly for both number enums and string enums. (Reverse mappings are
-- not created for string enums.)
-- 
-- Also see the `getEnumKeys` and `getEnumValues` helper functions.
-- 
-- For a more in depth explanation, see:
-- https://isaacscript.github.io/main/gotchas#iterating-over-enums
function ____exports.getEnumEntries(self, transpiledEnum)
    local enumEntries = {}
    for key, value in pairs(transpiledEnum) do
        if isString(nil, key) then
            enumEntries[#enumEntries + 1] = {key, value}
        end
    end
    __TS__ArraySort(
        enumEntries,
        function(____, ____bindingPattern0, ____bindingPattern1)
            local value1
            local _key1 = ____bindingPattern0[1]
            value1 = ____bindingPattern0[2]
            local value2
            local _key2 = ____bindingPattern1[1]
            value2 = ____bindingPattern1[2]
            return value1 < value2 and -1 or (value1 > value2 and 1 or 0)
        end
    )
    return enumEntries
end
--- TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
-- Thus, when you iterate over them, you will get both the names of the enums and the values of the
-- enums, in a random order. If all you need are the keys of an enum, use this helper function.
-- 
-- This function will return the enum keys in a sorted order, which may not necessarily be the same
-- order as which they were declared in. (It is impossible to get the declaration order at
-- run-time.)
-- 
-- This function will work properly for both number enums and string enums. (Reverse mappings are
-- not created for string enums.)
-- 
-- Also see the `getEnumEntries` and `getEnumValues` helper functions.
-- 
-- For a more in depth explanation, see:
-- https://isaacscript.github.io/main/gotchas#iterating-over-enums
function ____exports.getEnumKeys(self, transpiledEnum)
    local enumEntries = ____exports.getEnumEntries(nil, transpiledEnum)
    return __TS__ArrayMap(
        enumEntries,
        function(____, ____bindingPattern0)
            local key
            key = ____bindingPattern0[1]
            local _value = ____bindingPattern0[2]
            return key
        end
    )
end
--- Helper function to get the amount of entries inside of an enum.
function ____exports.getEnumLength(self, transpiledEnum)
    local enumEntries = ____exports.getEnumEntries(nil, transpiledEnum)
    return #enumEntries
end
--- TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
-- Thus, when you iterate over them, you will get both the names of the enums and the values of the
-- enums, in a random order. If all you need are the names of an enum from the reverse mapping, use
-- this helper function.
-- 
-- This function will return the enum names in a sorted order, which may not necessarily be the same
-- order as which they were declared in. (It is impossible to get the declaration order at
-- run-time.)
-- 
-- This function will work properly for both number enums and string enums. (Reverse mappings are
-- not created for string enums, so their names would be equivalent to what would be returned by the
-- `getEnumKeys` function.)
-- 
-- For a more in depth explanation, see:
-- https://isaacscript.github.io/main/gotchas#iterating-over-enums
function ____exports.getEnumNames(self, transpiledEnum)
    local enumNames = {}
    for key, _value in pairs(transpiledEnum) do
        if isString(nil, key) then
            enumNames[#enumNames + 1] = key
        end
    end
    __TS__ArraySort(enumNames)
    return enumNames
end
--- TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
-- Thus, when you iterate over them, you will get both the names of the enums and the values of the
-- enums, in a random order. If all you need are the values of an enum, use this helper function.
-- 
-- This function will return the enum values in a sorted order, which may not necessarily be the
-- same order as which they were declared in. (It is impossible to get the declaration order at
-- run-time.)
-- 
-- This function will work properly for both number enums and string enums. (Reverse mappings are
-- not created for string enums.)
-- 
-- Also see the `getEnumEntries` and `getEnumKeys` helper functions.
-- 
-- For a more in depth explanation, see:
-- https://isaacscript.github.io/main/gotchas#iterating-over-enums
function ____exports.getEnumValues(self, transpiledEnum)
    local enumEntries = ____exports.getEnumEntries(nil, transpiledEnum)
    return __TS__ArrayMap(
        enumEntries,
        function(____, ____bindingPattern0)
            local value
            local _key = ____bindingPattern0[1]
            value = ____bindingPattern0[2]
            return value
        end
    )
end
--- Helper function to get the enum value with the highest value.
-- 
-- Note that this is not necessarily the enum value that is declared last in the code, since there
-- is no way to infer that at run-time.
-- 
-- Throws an error if the provided enum is empty.
function ____exports.getHighestEnumValue(self, transpiledEnum)
    local enumValues = ____exports.getEnumValues(nil, transpiledEnum)
    local lastElement = __TS__ArrayAt(enumValues, -1)
    assertDefined(nil, lastElement, "Failed to get the last value from an enum since the enum was empty.")
    return lastElement
end
--- Helper function to get the enum value with the lowest value.
-- 
-- Note that this is not necessarily the enum value that is declared first in the code, since there
-- is no way to infer that at run-time.
-- 
-- Throws an error if the provided enum is empty.
function ____exports.getLowestEnumValue(self, transpiledEnum)
    local enumValues = ____exports.getEnumValues(nil, transpiledEnum)
    local firstElement = enumValues[1]
    assertDefined(nil, firstElement, "Failed to get the first value from an enum since the enum was empty.")
    return firstElement
end
--- Helper function to get a random value from the provided enum.
-- 
-- If you want an unseeded value, you must explicitly pass `undefined` to the `seedOrRNG` parameter.
-- 
-- @param transpiledEnum The enum to get the value from.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param exceptions Optional. An array of elements to skip over if selected.
function ____exports.getRandomEnumValue(self, transpiledEnum, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    local enumValues = ____exports.getEnumValues(nil, transpiledEnum)
    return getRandomArrayElement(nil, enumValues, seedOrRNG, exceptions)
end
--- Helper function to validate that a particular value exists inside of an enum.
function ____exports.isEnumValue(self, value, transpiledEnum)
    local enumValues = ____exports.getEnumValues(nil, transpiledEnum)
    return __TS__ArrayIncludes(enumValues, value)
end
--- Helper function to check every value of a custom enum for -1. Will throw an run-time error if any
-- -1 values are found. This is helpful because many methods of the Isaac class return -1 if they
-- fail.
-- 
-- For example:
-- 
-- ```ts
-- enum EntityTypeCustom {
--   FOO = Isaac.GetEntityTypeByName("Foo"),
-- }
-- 
-- validateCustomEnum("EntityTypeCustom", EntityTypeCustom);
-- ```
function ____exports.validateCustomEnum(self, transpiledEnumName, transpiledEnum)
    for ____, ____value in ipairs(____exports.getEnumEntries(nil, transpiledEnum)) do
        local key = ____value[1]
        local value = ____value[2]
        if value == -1 then
            error((("Failed to find the custom enum value: " .. transpiledEnumName) .. ".") .. key)
        end
    end
end
--- Helper function to validate if every value in a number enum is contiguous, starting at 0.
-- 
-- This is useful to automate checking large enums for typos.
function ____exports.validateEnumContiguous(self, transpiledEnumName, transpiledEnum)
    local values = ____exports.getEnumValues(nil, transpiledEnum)
    local lastValue = __TS__ArrayAt(values, -1)
    assertDefined(nil, lastValue, "Failed to validate that an enum was contiguous, since the last value was undefined.")
    if not isNumber(nil, lastValue) then
        error("Failed to validate that an enum was contiguous, since the last value was not a number.")
    end
    local valuesSet = __TS__New(ReadonlySet, values)
    for ____, value in ipairs(iRange(nil, lastValue)) do
        if not valuesSet:has(value) then
            error((("Failed to find a custom enum value of " .. tostring(value)) .. " for: ") .. transpiledEnumName)
        end
    end
end
--- Helper function to validate that an interface contains all of the keys of an enum. You must
-- specify both generic parameters in order for this to work properly (i.e. the interface and then
-- the enum).
-- 
-- For example:
-- 
-- ```ts
-- enum MyEnum {
--   Value1,
--   Value2,
--   Value3,
-- }
-- 
-- interface MyEnumToType {
--   [MyEnum.Value1]: boolean;
--   [MyEnum.Value2]: number;
--   [MyEnum.Value3]: string;
-- }
-- 
-- validateInterfaceMatchesEnum<MyEnumToType, MyEnum>();
-- ```
-- 
-- This function is only meant to be used with interfaces (i.e. types that will not exist at
-- run-time). If you are generating an object that will contain all of the keys of an enum, use the
-- `satisfies` operator with the `Record` type instead.
function ____exports.validateInterfaceMatchesEnum(self)
end
return ____exports
 end,
["interfaces.PlayerStats"] = function(...) 
local ____exports = {}
local ____enums = require("functions.enums")
local validateInterfaceMatchesEnum = ____enums.validateInterfaceMatchesEnum
validateInterfaceMatchesEnum(nil)
return ____exports
 end,
["interfaces.private.AddCallbackParametersCustom"] = function(...) 
local ____exports = {}
local ____enums = require("functions.enums")
local validateInterfaceMatchesEnum = ____enums.validateInterfaceMatchesEnum
validateInterfaceMatchesEnum(nil)
return ____exports
 end,
["types.AllButFirst"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.AnyFunction"] = function(...) 
local ____exports = {}
return ____exports
 end,
["enums.ISCFeature"] = function(...) 
local ____exports = {}
____exports.ISCFeature = {}
____exports.ISCFeature.CUSTOM_REVIVE = 0
____exports.ISCFeature[____exports.ISCFeature.CUSTOM_REVIVE] = "CUSTOM_REVIVE"
____exports.ISCFeature.ESAU_JR_DETECTION = 1
____exports.ISCFeature[____exports.ISCFeature.ESAU_JR_DETECTION] = "ESAU_JR_DETECTION"
____exports.ISCFeature.FLIP_DETECTION = 2
____exports.ISCFeature[____exports.ISCFeature.FLIP_DETECTION] = "FLIP_DETECTION"
____exports.ISCFeature.GRID_ENTITY_COLLISION_DETECTION = 3
____exports.ISCFeature[____exports.ISCFeature.GRID_ENTITY_COLLISION_DETECTION] = "GRID_ENTITY_COLLISION_DETECTION"
____exports.ISCFeature.GRID_ENTITY_RENDER_DETECTION = 4
____exports.ISCFeature[____exports.ISCFeature.GRID_ENTITY_RENDER_DETECTION] = "GRID_ENTITY_RENDER_DETECTION"
____exports.ISCFeature.GRID_ENTITY_UPDATE_DETECTION = 5
____exports.ISCFeature[____exports.ISCFeature.GRID_ENTITY_UPDATE_DETECTION] = "GRID_ENTITY_UPDATE_DETECTION"
____exports.ISCFeature.GAME_REORDERED_CALLBACKS = 6
____exports.ISCFeature[____exports.ISCFeature.GAME_REORDERED_CALLBACKS] = "GAME_REORDERED_CALLBACKS"
____exports.ISCFeature.ITEM_PICKUP_DETECTION = 7
____exports.ISCFeature[____exports.ISCFeature.ITEM_PICKUP_DETECTION] = "ITEM_PICKUP_DETECTION"
____exports.ISCFeature.PICKUP_CHANGE_DETECTION = 8
____exports.ISCFeature[____exports.ISCFeature.PICKUP_CHANGE_DETECTION] = "PICKUP_CHANGE_DETECTION"
____exports.ISCFeature.PLAYER_COLLECTIBLE_DETECTION = 9
____exports.ISCFeature[____exports.ISCFeature.PLAYER_COLLECTIBLE_DETECTION] = "PLAYER_COLLECTIBLE_DETECTION"
____exports.ISCFeature.PLAYER_REORDERED_CALLBACKS = 10
____exports.ISCFeature[____exports.ISCFeature.PLAYER_REORDERED_CALLBACKS] = "PLAYER_REORDERED_CALLBACKS"
____exports.ISCFeature.SLOT_DESTROYED_DETECTION = 11
____exports.ISCFeature[____exports.ISCFeature.SLOT_DESTROYED_DETECTION] = "SLOT_DESTROYED_DETECTION"
____exports.ISCFeature.SLOT_RENDER_DETECTION = 12
____exports.ISCFeature[____exports.ISCFeature.SLOT_RENDER_DETECTION] = "SLOT_RENDER_DETECTION"
____exports.ISCFeature.SLOT_UPDATE_DETECTION = 13
____exports.ISCFeature[____exports.ISCFeature.SLOT_UPDATE_DETECTION] = "SLOT_UPDATE_DETECTION"
____exports.ISCFeature.CHARACTER_HEALTH_CONVERSION = 14
____exports.ISCFeature[____exports.ISCFeature.CHARACTER_HEALTH_CONVERSION] = "CHARACTER_HEALTH_CONVERSION"
____exports.ISCFeature.CHARACTER_STATS = 15
____exports.ISCFeature[____exports.ISCFeature.CHARACTER_STATS] = "CHARACTER_STATS"
____exports.ISCFeature.COLLECTIBLE_ITEM_POOL_TYPE = 16
____exports.ISCFeature[____exports.ISCFeature.COLLECTIBLE_ITEM_POOL_TYPE] = "COLLECTIBLE_ITEM_POOL_TYPE"
____exports.ISCFeature.CUSTOM_GRID_ENTITIES = 17
____exports.ISCFeature[____exports.ISCFeature.CUSTOM_GRID_ENTITIES] = "CUSTOM_GRID_ENTITIES"
____exports.ISCFeature.CUSTOM_ITEM_POOLS = 18
____exports.ISCFeature[____exports.ISCFeature.CUSTOM_ITEM_POOLS] = "CUSTOM_ITEM_POOLS"
____exports.ISCFeature.CUSTOM_HOTKEYS = 19
____exports.ISCFeature[____exports.ISCFeature.CUSTOM_HOTKEYS] = "CUSTOM_HOTKEYS"
____exports.ISCFeature.CUSTOM_PICKUPS = 20
____exports.ISCFeature[____exports.ISCFeature.CUSTOM_PICKUPS] = "CUSTOM_PICKUPS"
____exports.ISCFeature.CUSTOM_STAGES = 21
____exports.ISCFeature[____exports.ISCFeature.CUSTOM_STAGES] = "CUSTOM_STAGES"
____exports.ISCFeature.CUSTOM_TRAPDOORS = 22
____exports.ISCFeature[____exports.ISCFeature.CUSTOM_TRAPDOORS] = "CUSTOM_TRAPDOORS"
____exports.ISCFeature.DEBUG_DISPLAY = 23
____exports.ISCFeature[____exports.ISCFeature.DEBUG_DISPLAY] = "DEBUG_DISPLAY"
____exports.ISCFeature.DEPLOY_JSON_ROOM = 24
____exports.ISCFeature[____exports.ISCFeature.DEPLOY_JSON_ROOM] = "DEPLOY_JSON_ROOM"
____exports.ISCFeature.DISABLE_ALL_SOUND = 25
____exports.ISCFeature[____exports.ISCFeature.DISABLE_ALL_SOUND] = "DISABLE_ALL_SOUND"
____exports.ISCFeature.DISABLE_INPUTS = 26
____exports.ISCFeature[____exports.ISCFeature.DISABLE_INPUTS] = "DISABLE_INPUTS"
____exports.ISCFeature.EDEN_STARTING_STATS_HEALTH = 27
____exports.ISCFeature[____exports.ISCFeature.EDEN_STARTING_STATS_HEALTH] = "EDEN_STARTING_STATS_HEALTH"
____exports.ISCFeature.FADE_IN_REMOVER = 28
____exports.ISCFeature[____exports.ISCFeature.FADE_IN_REMOVER] = "FADE_IN_REMOVER"
____exports.ISCFeature.FAST_RESET = 29
____exports.ISCFeature[____exports.ISCFeature.FAST_RESET] = "FAST_RESET"
____exports.ISCFeature.FLYING_DETECTION = 30
____exports.ISCFeature[____exports.ISCFeature.FLYING_DETECTION] = "FLYING_DETECTION"
____exports.ISCFeature.FORGOTTEN_SWITCH = 31
____exports.ISCFeature[____exports.ISCFeature.FORGOTTEN_SWITCH] = "FORGOTTEN_SWITCH"
____exports.ISCFeature.EXTRA_CONSOLE_COMMANDS = 32
____exports.ISCFeature[____exports.ISCFeature.EXTRA_CONSOLE_COMMANDS] = "EXTRA_CONSOLE_COMMANDS"
____exports.ISCFeature.ITEM_POOL_DETECTION = 33
____exports.ISCFeature[____exports.ISCFeature.ITEM_POOL_DETECTION] = "ITEM_POOL_DETECTION"
____exports.ISCFeature.MODDED_ELEMENT_DETECTION = 34
____exports.ISCFeature[____exports.ISCFeature.MODDED_ELEMENT_DETECTION] = "MODDED_ELEMENT_DETECTION"
____exports.ISCFeature.MODDED_ELEMENT_SETS = 35
____exports.ISCFeature[____exports.ISCFeature.MODDED_ELEMENT_SETS] = "MODDED_ELEMENT_SETS"
____exports.ISCFeature.NO_SIREN_STEAL = 36
____exports.ISCFeature[____exports.ISCFeature.NO_SIREN_STEAL] = "NO_SIREN_STEAL"
____exports.ISCFeature.PAUSE = 37
____exports.ISCFeature[____exports.ISCFeature.PAUSE] = "PAUSE"
____exports.ISCFeature.PERSISTENT_ENTITIES = 38
____exports.ISCFeature[____exports.ISCFeature.PERSISTENT_ENTITIES] = "PERSISTENT_ENTITIES"
____exports.ISCFeature.PICKUP_INDEX_CREATION = 39
____exports.ISCFeature[____exports.ISCFeature.PICKUP_INDEX_CREATION] = "PICKUP_INDEX_CREATION"
____exports.ISCFeature.PLAYER_COLLECTIBLE_TRACKING = 40
____exports.ISCFeature[____exports.ISCFeature.PLAYER_COLLECTIBLE_TRACKING] = "PLAYER_COLLECTIBLE_TRACKING"
____exports.ISCFeature.PONY_DETECTION = 41
____exports.ISCFeature[____exports.ISCFeature.PONY_DETECTION] = "PONY_DETECTION"
____exports.ISCFeature.PRESS_INPUT = 42
____exports.ISCFeature[____exports.ISCFeature.PRESS_INPUT] = "PRESS_INPUT"
____exports.ISCFeature.PREVENT_CHILD_ENTITIES = 43
____exports.ISCFeature[____exports.ISCFeature.PREVENT_CHILD_ENTITIES] = "PREVENT_CHILD_ENTITIES"
____exports.ISCFeature.PREVENT_GRID_ENTITY_RESPAWN = 44
____exports.ISCFeature[____exports.ISCFeature.PREVENT_GRID_ENTITY_RESPAWN] = "PREVENT_GRID_ENTITY_RESPAWN"
____exports.ISCFeature.RERUN_DETECTION = 45
____exports.ISCFeature[____exports.ISCFeature.RERUN_DETECTION] = "RERUN_DETECTION"
____exports.ISCFeature.ROOM_CLEAR_FRAME = 46
____exports.ISCFeature[____exports.ISCFeature.ROOM_CLEAR_FRAME] = "ROOM_CLEAR_FRAME"
____exports.ISCFeature.ROOM_HISTORY = 47
____exports.ISCFeature[____exports.ISCFeature.ROOM_HISTORY] = "ROOM_HISTORY"
____exports.ISCFeature.RUN_IN_N_FRAMES = 48
____exports.ISCFeature[____exports.ISCFeature.RUN_IN_N_FRAMES] = "RUN_IN_N_FRAMES"
____exports.ISCFeature.RUN_NEXT_ROOM = 49
____exports.ISCFeature[____exports.ISCFeature.RUN_NEXT_ROOM] = "RUN_NEXT_ROOM"
____exports.ISCFeature.RUN_NEXT_RUN = 50
____exports.ISCFeature[____exports.ISCFeature.RUN_NEXT_RUN] = "RUN_NEXT_RUN"
____exports.ISCFeature.SAVE_DATA_MANAGER = 51
____exports.ISCFeature[____exports.ISCFeature.SAVE_DATA_MANAGER] = "SAVE_DATA_MANAGER"
____exports.ISCFeature.SPAWN_ALT_ROCK_REWARDS = 52
____exports.ISCFeature[____exports.ISCFeature.SPAWN_ALT_ROCK_REWARDS] = "SPAWN_ALT_ROCK_REWARDS"
____exports.ISCFeature.STAGE_HISTORY = 53
____exports.ISCFeature[____exports.ISCFeature.STAGE_HISTORY] = "STAGE_HISTORY"
____exports.ISCFeature.START_AMBUSH = 54
____exports.ISCFeature[____exports.ISCFeature.START_AMBUSH] = "START_AMBUSH"
____exports.ISCFeature.TAINTED_LAZARUS_PLAYERS = 55
____exports.ISCFeature[____exports.ISCFeature.TAINTED_LAZARUS_PLAYERS] = "TAINTED_LAZARUS_PLAYERS"
____exports.ISCFeature.UNLOCK_ACHIEVEMENTS_DETECTION = 56
____exports.ISCFeature[____exports.ISCFeature.UNLOCK_ACHIEVEMENTS_DETECTION] = "UNLOCK_ACHIEVEMENTS_DETECTION"
return ____exports
 end,
["functions.bitSet128"] = function(...) 
local ____exports = {}
local OBJECT_NAME
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
local ____isaacAPIClass = require("functions.isaacAPIClass")
local isIsaacAPIClassOfType = ____isaacAPIClass.isIsaacAPIClassOfType
local ____table = require("functions.table")
local copyUserdataValuesToTable = ____table.copyUserdataValuesToTable
local getNumbersFromTable = ____table.getNumbersFromTable
local tableHasKeys = ____table.tableHasKeys
local ____types = require("functions.types")
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to check if something is an instantiated `BitSet128` object.
function ____exports.isBitSet128(self, object)
    return isIsaacAPIClassOfType(nil, object, OBJECT_NAME)
end
OBJECT_NAME = "BitSet128"
local KEYS = {"l", "h"}
--- Helper function to copy a `BitSet128` Isaac API class.
function ____exports.copyBitSet128(self, bitSet128)
    if not ____exports.isBitSet128(nil, bitSet128) then
        error(((("Failed to copy a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    local lowBits = bitSet128.l
    local highBits = bitSet128.h
    return BitSet128(lowBits, highBits)
end
--- Helper function to convert a `SerializedBitSet128` object to a normal `BitSet128` object. (This
-- is used by the save data manager when reading data from the "save#.dat" file.)
function ____exports.deserializeBitSet128(self, bitSet128)
    if not isTable(nil, bitSet128) then
        error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object was not a Lua table.")
    end
    local l, h = table.unpack(getNumbersFromTable(
        nil,
        bitSet128,
        OBJECT_NAME,
        table.unpack(KEYS)
    ))
    assertDefined(nil, l, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: l")
    assertDefined(nil, h, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: h")
    return BitSet128(l, h)
end
--- Used to determine is the given table is a serialized `BitSet128` object created by the `deepCopy`
-- function.
function ____exports.isSerializedBitSet128(self, object)
    if not isTable(nil, object) then
        return false
    end
    return tableHasKeys(
        nil,
        object,
        table.unpack(KEYS)
    ) and object[SerializationBrand.BIT_SET_128] ~= nil
end
--- Helper function to convert a `BitSet128` object to a `SerializedBitSet128` object. (This is used
-- by the save data manager when writing data from the "save#.dat" file.)
function ____exports.serializeBitSet128(self, bitSet128)
    if not ____exports.isBitSet128(nil, bitSet128) then
        error(((("Failed to serialize a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    local bitSet128Table = {}
    copyUserdataValuesToTable(nil, bitSet128, KEYS, bitSet128Table)
    bitSet128Table[SerializationBrand.BIT_SET_128] = ""
    return bitSet128Table
end
return ____exports
 end,
["functions.color"] = function(...) 
local ____exports = {}
local OBJECT_NAME
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
local ____isaacAPIClass = require("functions.isaacAPIClass")
local isaacAPIClassEquals = ____isaacAPIClass.isaacAPIClassEquals
local isIsaacAPIClassOfType = ____isaacAPIClass.isIsaacAPIClassOfType
local ____random = require("functions.random")
local getRandom = ____random.getRandom
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
local ____table = require("functions.table")
local copyUserdataValuesToTable = ____table.copyUserdataValuesToTable
local getNumbersFromTable = ____table.getNumbersFromTable
local tableHasKeys = ____table.tableHasKeys
local ____types = require("functions.types")
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to check if something is an instantiated `Color` object.
function ____exports.isColor(self, object)
    return isIsaacAPIClassOfType(nil, object, OBJECT_NAME)
end
OBJECT_NAME = "Color"
local KEYS = {
    "R",
    "G",
    "B",
    "A",
    "RO",
    "GO",
    "BO"
}
function ____exports.colorEquals(self, color1, color2)
    return isaacAPIClassEquals(nil, color1, color2, KEYS)
end
--- Helper function to copy a `Color` Isaac API class.
function ____exports.copyColor(self, color)
    if not ____exports.isColor(nil, color) then
        error(((("Failed to copy a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    return Color(
        color.R,
        color.G,
        color.B,
        color.A,
        color.RO,
        color.GO,
        color.BO
    )
end
--- Helper function to convert a `SerializedColor` object to a normal `Color` object. (This is used
-- by the save data manager when reading data from the "save#.dat" file.)
function ____exports.deserializeColor(self, color)
    if not isTable(nil, color) then
        error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object was not a Lua table.")
    end
    local r, g, b, a, ro, go, bo = table.unpack(getNumbersFromTable(
        nil,
        color,
        OBJECT_NAME,
        table.unpack(KEYS)
    ))
    assertDefined(nil, r, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: R")
    assertDefined(nil, g, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: G")
    assertDefined(nil, b, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: B")
    return Color(
        r,
        g,
        b,
        a,
        ro,
        go,
        bo
    )
end
--- Helper function to get a random `Color` object.
-- 
-- If you want to generate an unseeded object, you must explicitly pass `undefined` to the
-- `seedOrRNG` parameter.
-- 
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param alpha Optional. The alpha value to use. Default is 1.
function ____exports.getRandomColor(self, seedOrRNG, alpha)
    if alpha == nil then
        alpha = 1
    end
    local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
    local r = getRandom(nil, rng)
    local g = getRandom(nil, rng)
    local b = getRandom(nil, rng)
    return Color(r, g, b, alpha)
end
--- Used to determine is the given table is a serialized `Color` object created by the `deepCopy`
-- function.
function ____exports.isSerializedColor(self, object)
    if not isTable(nil, object) then
        return false
    end
    return tableHasKeys(
        nil,
        object,
        table.unpack(KEYS)
    ) and object[SerializationBrand.COLOR] ~= nil
end
--- Helper function to convert a `Color` object to a `SerializedColor` object. (This is used by the
-- save data manager when writing data from the "save#.dat" file.)
function ____exports.serializeColor(self, color)
    if not ____exports.isColor(nil, color) then
        error(((("Failed to serialize a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    local colorTable = {}
    copyUserdataValuesToTable(nil, color, KEYS, colorTable)
    colorTable[SerializationBrand.COLOR] = ""
    return colorTable
end
return ____exports
 end,
["functions.kColor"] = function(...) 
local ____exports = {}
local OBJECT_NAME
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
local ____isaacAPIClass = require("functions.isaacAPIClass")
local isaacAPIClassEquals = ____isaacAPIClass.isaacAPIClassEquals
local isIsaacAPIClassOfType = ____isaacAPIClass.isIsaacAPIClassOfType
local ____random = require("functions.random")
local getRandom = ____random.getRandom
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
local ____table = require("functions.table")
local copyUserdataValuesToTable = ____table.copyUserdataValuesToTable
local getNumbersFromTable = ____table.getNumbersFromTable
local tableHasKeys = ____table.tableHasKeys
local ____types = require("functions.types")
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to check if something is an instantiated `KColor` object.
function ____exports.isKColor(self, object)
    return isIsaacAPIClassOfType(nil, object, OBJECT_NAME)
end
OBJECT_NAME = "KColor"
local KEYS = {"Red", "Green", "Blue", "Alpha"}
--- Helper function to copy a `KColor` Isaac API class.
function ____exports.copyKColor(self, kColor)
    if not ____exports.isKColor(nil, kColor) then
        error(((("Failed to copy a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    return KColor(kColor.Red, kColor.Green, kColor.Blue, kColor.Alpha)
end
--- Helper function to convert a `SerializedKColor` object to a normal `KColor` object. (This is used
-- by the save data manager when reading data from the "save#.dat" file.)
function ____exports.deserializeKColor(self, kColor)
    if not isTable(nil, kColor) then
        error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object was not a Lua table.")
    end
    local r, g, b, a = table.unpack(getNumbersFromTable(
        nil,
        kColor,
        OBJECT_NAME,
        table.unpack(KEYS)
    ))
    assertDefined(nil, r, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: Red")
    assertDefined(nil, g, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: Green")
    assertDefined(nil, b, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: Blue")
    assertDefined(nil, a, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: Alpha")
    return KColor(r, g, b, a)
end
--- Helper function to get a random `KColor` object (for use in fonts).
-- 
-- If you want to generate an unseeded object, you must explicitly pass `undefined` to the
-- `seedOrRNG` parameter.
-- 
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param alpha Optional. The alpha value to use. Default is 1.
function ____exports.getRandomKColor(self, seedOrRNG, alpha)
    if alpha == nil then
        alpha = 1
    end
    local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
    local r = getRandom(nil, rng)
    local g = getRandom(nil, rng)
    local b = getRandom(nil, rng)
    return KColor(r, g, b, alpha)
end
--- Used to determine is the given table is a serialized `KColor` object created by the `deepCopy`
-- function.
function ____exports.isSerializedKColor(self, object)
    if not isTable(nil, object) then
        return false
    end
    return tableHasKeys(
        nil,
        object,
        table.unpack(KEYS)
    ) and object[SerializationBrand.K_COLOR] ~= nil
end
function ____exports.kColorEquals(self, kColor1, kColor2)
    return isaacAPIClassEquals(nil, kColor1, kColor2, KEYS)
end
--- Helper function to convert a `KColor` object to a `SerializedKColor` object. (This is used by the
-- save data manager when writing data from the "save#.dat" file.)
function ____exports.serializeKColor(self, kColor)
    if not ____exports.isKColor(nil, kColor) then
        error(((("Failed to serialize a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    local kColorTable = {}
    copyUserdataValuesToTable(nil, kColor, KEYS, kColorTable)
    kColorTable[SerializationBrand.K_COLOR] = ""
    return kColorTable
end
return ____exports
 end,
["objects.directionNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
____exports.DIRECTION_NAMES = {
    [Direction.NO_DIRECTION] = nil,
    [Direction.LEFT] = "left",
    [Direction.UP] = "up",
    [Direction.RIGHT] = "right",
    [Direction.DOWN] = "down"
}
return ____exports
 end,
["objects.directionToDegrees"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
____exports.DIRECTION_TO_DEGREES = {
    [Direction.NO_DIRECTION] = 0,
    [Direction.LEFT] = 180,
    [Direction.UP] = 270,
    [Direction.RIGHT] = 0,
    [Direction.DOWN] = 90
}
return ____exports
 end,
["objects.directionToMoveAction"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ButtonAction = ____isaac_2Dtypescript_2Ddefinitions.ButtonAction
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
____exports.DIRECTION_TO_MOVE_ACTION = {
    [Direction.NO_DIRECTION] = nil,
    [Direction.LEFT] = ButtonAction.LEFT,
    [Direction.UP] = ButtonAction.UP,
    [Direction.RIGHT] = ButtonAction.RIGHT,
    [Direction.DOWN] = ButtonAction.DOWN
}
return ____exports
 end,
["objects.directionToShootAction"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ButtonAction = ____isaac_2Dtypescript_2Ddefinitions.ButtonAction
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
____exports.DIRECTION_TO_SHOOT_ACTION = {
    [Direction.NO_DIRECTION] = nil,
    [Direction.LEFT] = ButtonAction.SHOOT_LEFT,
    [Direction.UP] = ButtonAction.SHOOT_UP,
    [Direction.RIGHT] = ButtonAction.SHOOT_RIGHT,
    [Direction.DOWN] = ButtonAction.SHOOT_DOWN
}
return ____exports
 end,
["functions.flag"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DamageFlag = ____isaac_2Dtypescript_2Ddefinitions.DamageFlag
--- Helper function to add a bit flag to an existing set of bit flags.
-- 
-- This is a variadic function, so pass as many flags as you want to add.
-- 
-- Example 1:
-- 
-- ```ts
-- // Give the player spectral tears
-- const player = Isaac.GetPlayer();
-- player.TearFlags = addFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL);
-- ```
-- 
-- Example 2:
-- 
-- ```ts
-- // Give the player spectral and homing tears
-- const player = Isaac.GetPlayer();
-- player.TearFlags = addFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL, TearFlags.TEAR_HOMING);
-- ```
-- 
-- @param flags The existing set of bit flags.
-- @param flagsToAdd One or more bit flags to add, each as a separate argument.
-- @returns The combined bit flags.
function ____exports.addFlag(self, flags, ...)
    local flagsToAdd = {...}
    local flagsAsInt = flags
    for ____, flagToAdd in ipairs(flagsToAdd) do
        flagsAsInt = flagsAsInt | flagToAdd
    end
    return flagsAsInt
end
--- Helper function for casting a flag enum value to a `BitFlags` object.
-- 
-- This is useful because the compiler will prevent you from assigning a specific flag to a
-- `BitFlags` field. (It does this to ensure type safety, since `BitFlags` can represent a zero
-- value or a composition of N flags.)
-- 
-- For example:
-- 
-- ```ts
-- player.TearFlags = bitFlags(TearFlag.SPECTRAL);
-- ```
function ____exports.bitFlags(self, flag)
    return flag
end
--- Helper function to get the key associated with a particular flag.
-- 
-- (Since bit flags are represented by custom objects instead of normal TypeScript enums, you cannot
-- use the reverse mapping to find the associated key of a given enum value. Use this helper
-- function instead of indexing the enum directly.)
function ____exports.getFlagName(self, flag, flagEnum)
    for ____, ____value in ipairs(__TS__ObjectEntries(flagEnum)) do
        local key = ____value[1]
        local value = ____value[2]
        if value == flag then
            return key
        end
    end
    return nil
end
--- Helper function to determine if a particular bit flag is set to true.
-- 
-- This is a variadic function, so pass as many flags as you want to check for. If passed multiple
-- flags, it will only return true if all of the flags are set.
-- 
-- For example:
-- 
-- ```ts
-- const player = Isaac.GetPlayer();
-- if (hasFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL) {
--   // The player currently has spectral tears
-- }
-- ```
-- 
-- @param flags The existing set of bit flags.
-- @param flagsToCheck One or more bit flags to check for, each as a separate argument.
function ____exports.hasFlag(self, flags, ...)
    local flagsToCheck = {...}
    local flagsAsInt = flags
    for ____, flagToCheck in ipairs(flagsToCheck) do
        if not (flagsAsInt & flagToCheck == flagToCheck) then
            return false
        end
    end
    return true
end
--- Helper function to check if every bit in the flag is turned off.
-- 
-- (This is equivalent to checking if the flag is equal to 0, but this is not possible without
-- casting the flag to a number.)
function ____exports.isEmptyFlag(self, flag)
    return flag == 0
end
--- Helper function to determine whether damage to a player in the `ENTITY_TAKE_DMG` callback was
-- self-inflicted. For example, damage from a Curse Room door, a Razor, or a Blood Donation Machine
-- would count as self-inflicted damage.
function ____exports.isSelfDamage(self, damageFlags)
    return ____exports.hasFlag(nil, damageFlags, DamageFlag.NO_PENALTIES) or ____exports.hasFlag(nil, damageFlags, DamageFlag.RED_HEARTS)
end
--- Helper function to remove a bit flag from an existing set of bit flags.
-- 
-- This is a variadic function, so pass as many flags as you want to remove.
-- 
-- For example:
-- 
-- ```ts
-- // Remove spectral tears from the player, if present
-- const player = Isaac.GetPlayer();
-- player.TearFlags = removeFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL);
-- ```
-- 
-- @param flags The existing set of bit flags.
-- @param flagsToRemove One or more bit flags to remove, each as a separate argument.
-- @returns The combined bit flags.
function ____exports.removeFlag(self, flags, ...)
    local flagsToRemove = {...}
    local flagsAsInt = flags
    for ____, flagToRemove in ipairs(flagsToRemove) do
        flagsAsInt = flagsAsInt & ~flagToRemove
    end
    return flagsAsInt
end
return ____exports
 end,
["functions.readOnly"] = function(...) 
local ____exports = {}
--- Helper function to create a read-only `Color` object. (Otherwise, you would have to manually
-- specify both the type and the constructor.)
-- 
-- Note that read-only colors will be writable at run-time.
function ____exports.newReadonlyColor(self, r, g, b, a, ro, go, bo)
    return Color(
        r,
        g,
        b,
        a,
        ro,
        go,
        bo
    )
end
--- Helper function to create a read-only `KColor` object. (Otherwise, you would have to manually
-- specify both the type and the constructor.)
-- 
-- Note that read-only colors will be writable at run-time.
function ____exports.newReadonlyKColor(self, r, g, b, a)
    return KColor(r, g, b, a)
end
--- Helper function to create a read-only `Vector` object. (Otherwise, you would have to manually
-- specify both the type and the constructor.)
-- 
-- Note that read-only vectors will be writable at run-time.
function ____exports.newReadonlyVector(self, x, y)
    return Vector(x, y)
end
return ____exports
 end,
["core.constantsFirstLast"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CardType = ____isaac_2Dtypescript_2Ddefinitions.CardType
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local PillColor = ____isaac_2Dtypescript_2Ddefinitions.PillColor
local PillEffect = ____isaac_2Dtypescript_2Ddefinitions.PillEffect
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____enums = require("functions.enums")
local getEnumLength = ____enums.getEnumLength
local getHighestEnumValue = ____enums.getHighestEnumValue
local ____utils = require("functions.utils")
local iRange = ____utils.iRange
--- Equal to `CollectibleType.SAD_ONION`.
____exports.FIRST_COLLECTIBLE_TYPE = CollectibleType.SAD_ONION
--- Calculated from the `CollectibleType` enum.
-- 
-- Note that this cannot be calculated from the length of the enum, because collectible types are
-- not contiguous.
____exports.LAST_VANILLA_COLLECTIBLE_TYPE = getHighestEnumValue(nil, CollectibleType)
--- Calculated from the `CollectibleType` enum. (`CollectibleType.NULL` is not included.)
____exports.NUM_VANILLA_COLLECTIBLE_TYPES = getEnumLength(nil, CollectibleType) - 1
--- Equal to `TrinketType.SWALLOWED_PENNY`.
____exports.FIRST_TRINKET_TYPE = TrinketType.SWALLOWED_PENNY
--- Calculated from the `TrinketType` enum.
-- 
-- Note that this cannot be calculated from the length of the enum, because trinket types are not
-- contiguous.
____exports.LAST_VANILLA_TRINKET_TYPE = getHighestEnumValue(nil, TrinketType)
--- Calculated from the `TrinketType` enum. (`TrinketType.NULL` is not included.)
____exports.NUM_VANILLA_TRINKET_TYPES = getEnumLength(nil, TrinketType) - 1
--- Equal to `Card.FOOL`.
____exports.FIRST_CARD_TYPE = CardType.FOOL
--- Calculated from the `CardType` enum.
____exports.LAST_VANILLA_CARD_TYPE = getHighestEnumValue(nil, CardType)
--- Calculated from the `Card` enum. `Card.NULL` is not included.
____exports.NUM_VANILLA_CARD_TYPES = getEnumLength(nil, CardType) - 1
--- Equal to `PillEffect.BAD_GAS`.
____exports.FIRST_PILL_EFFECT = PillEffect.BAD_GAS
--- Calculated from the `PillEffect` enum.
____exports.LAST_VANILLA_PILL_EFFECT = getHighestEnumValue(nil, PillEffect)
--- Calculated from the `PillEffect` enum. (There is no `PillEffect.NULL` in the custom enum, so we
-- do not have to subtract one here.)
____exports.NUM_VANILLA_PILL_EFFECTS = getEnumLength(nil, PillEffect)
--- Equal to `PillColor.BLUE_BLUE`.
____exports.FIRST_PILL_COLOR = PillColor.BLUE_BLUE
--- Equal to `PillColor.WHITE_YELLOW`.
-- 
-- Note that `PillColor.GOLD` is technically higher, but that is not considered for the purposes of
-- this constant.
____exports.LAST_NORMAL_PILL_COLOR = PillColor.WHITE_YELLOW
--- Equal to `PillColor.HORSE_BLUE_BLUE`.
____exports.FIRST_HORSE_PILL_COLOR = PillColor.HORSE_BLUE_BLUE
--- Equal to `PillColor.HORSE_WHITE_YELLOW`.
-- 
-- Note that `PillColor.HORSE_GOLD` is technically higher, but that is not considered for the
-- purposes of this constant.
____exports.LAST_HORSE_PILL_COLOR = PillColor.HORSE_WHITE_YELLOW
____exports.NUM_NORMAL_PILL_COLORS = #iRange(nil, ____exports.FIRST_PILL_COLOR, ____exports.LAST_NORMAL_PILL_COLOR)
--- Equal to `PlayerType.ISAAC`.
____exports.FIRST_CHARACTER = PlayerType.ISAAC
--- Calculated from the `PlayerType` enum.
____exports.LAST_VANILLA_CHARACTER = getHighestEnumValue(nil, PlayerType)
--- Calculated from the `Challenge` enum. `Challenge.NULL` is not included.
____exports.NUM_VANILLA_CHALLENGES = getEnumLength(nil, Challenge) - 1
return ____exports
 end,
["core.constants"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local Dimension = ____isaac_2Dtypescript_2Ddefinitions.Dimension
local DisplayFlag = ____isaac_2Dtypescript_2Ddefinitions.DisplayFlag
local ItemPoolType = ____isaac_2Dtypescript_2Ddefinitions.ItemPoolType
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local TrinketSlot = ____isaac_2Dtypescript_2Ddefinitions.TrinketSlot
local ____enums = require("functions.enums")
local getEnumLength = ____enums.getEnumLength
local ____flag = require("functions.flag")
local addFlag = ____flag.addFlag
local ____readOnly = require("functions.readOnly")
local newReadonlyColor = ____readOnly.newReadonlyColor
local newReadonlyKColor = ____readOnly.newReadonlyKColor
local newReadonlyVector = ____readOnly.newReadonlyVector
local ____types = require("functions.types")
local asCollectibleType = ____types.asCollectibleType
local ____utils = require("functions.utils")
local eRange = ____utils.eRange
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____constantsFirstLast = require("core.constantsFirstLast")
local NUM_NORMAL_PILL_COLORS = ____constantsFirstLast.NUM_NORMAL_PILL_COLORS
--- The combination of the following flags:
-- - `DisplayFlag.VISIBLE` (1 << 0)
-- - `DisplayFlag.SHADOW` (1 << 1)
-- - `DisplayFlag.SHOW_ICON` (1 << 2)
____exports.ALL_DISPLAY_FLAGS = addFlag(nil, DisplayFlag.VISIBLE, DisplayFlag.SHADOW, DisplayFlag.SHOW_ICON)
--- The distance of the laser when Azazel does not have any range up items yet. For more info, see
-- the documentation for the `getAzazelBrimstoneDistance` function.
____exports.AZAZEL_DEFAULT_BRIMSTONE_DISTANCE = 75.125
--- The path to the png file for collectible items during Curse of the Blind, making them appear with
-- a red question mark.
____exports.BLIND_ITEM_PNG_PATH = "gfx/items/collectibles/questionmark.png"
--- Bombs explode when their frame count is equal to this value.
____exports.BOMB_EXPLODE_FRAME = 45
____exports.CHEST_PICKUP_VARIANTS = {
    PickupVariant.CHEST,
    PickupVariant.BOMB_CHEST,
    PickupVariant.SPIKED_CHEST,
    PickupVariant.ETERNAL_CHEST,
    PickupVariant.MIMIC_CHEST,
    PickupVariant.OLD_CHEST,
    PickupVariant.WOODEN_CHEST,
    PickupVariant.MEGA_CHEST,
    PickupVariant.HAUNTED_CHEST,
    PickupVariant.LOCKED_CHEST,
    PickupVariant.RED_CHEST,
    PickupVariant.MOMS_CHEST
}
____exports.CHEST_PICKUP_VARIANTS_SET = __TS__New(ReadonlySet, ____exports.CHEST_PICKUP_VARIANTS)
--- This is the initial value of the `EntityPickup.Wait` field after a collectible is spawned.
____exports.COLLECTIBLE_INITIAL_WAIT = 20
____exports.DEFAULT_ITEM_POOL_TYPE = ItemPoolType.TREASURE
--- This is also the distance that a player spawns from the door that they enter a room from.
____exports.DISTANCE_OF_GRID_TILE = 40
____exports.DOGMA_ROOM_GRID_INDEX = 109
____exports.DOOR_HITBOX_RADIUS = 11
--- When Eggies take fatal damage, they go into NPCState.STATE_SUICIDE and spawn 14 Swarm Spiders
-- while their StateFrame ticks upwards. The 14th spider appears when the StateFrame is at this
-- value.
____exports.EGGY_STATE_FRAME_OF_FINAL_SPIDER = 45
--- A non-existent or completely transparent PNG file for use in clearing sprites. For more
-- information, see the documentation for the `clearSprite` helper function.
____exports.EMPTY_PNG_PATH = "gfx/none.png"
--- The random items that appear when the player has TMTRAINER are generated on the fly as they are
-- encountered by the player. The first TMTRAINER item takes the final possible 32 bit number. The
-- second TMTRAINER item subtracts one from that, and so on.
-- 
-- This is equal to 4294967295.
____exports.FIRST_GLITCHED_COLLECTIBLE_TYPE = asCollectibleType(nil, (1 << 32) - 1)
--- An array containing every flying character. This includes non-main characters such as The Soul.
____exports.FLYING_CHARACTERS = {
    PlayerType.AZAZEL,
    PlayerType.LOST,
    PlayerType.SOUL,
    PlayerType.LOST_B,
    PlayerType.JACOB_2_B,
    PlayerType.SOUL_B
}
--- Game frames are what is returned by the `Game.GetFrameCount` method.
____exports.GAME_FRAMES_PER_SECOND = 30
--- Game frames are what is returned by the `Game.GetFrameCount` method.
____exports.GAME_FRAMES_PER_MINUTE = ____exports.GAME_FRAMES_PER_SECOND * 60
--- An array containing every character that is selectable from the main menu (and has achievements
-- related to completing the various bosses and so on).
____exports.MAIN_CHARACTERS = {
    PlayerType.ISAAC,
    PlayerType.MAGDALENE,
    PlayerType.CAIN,
    PlayerType.JUDAS,
    PlayerType.BLUE_BABY,
    PlayerType.EVE,
    PlayerType.SAMSON,
    PlayerType.AZAZEL,
    PlayerType.LAZARUS,
    PlayerType.EDEN,
    PlayerType.LOST,
    PlayerType.LILITH,
    PlayerType.KEEPER,
    PlayerType.APOLLYON,
    PlayerType.FORGOTTEN,
    PlayerType.BETHANY,
    PlayerType.JACOB,
    PlayerType.ISAAC_B,
    PlayerType.MAGDALENE_B,
    PlayerType.CAIN_B,
    PlayerType.JUDAS_B,
    PlayerType.BLUE_BABY_B,
    PlayerType.EVE_B,
    PlayerType.SAMSON_B,
    PlayerType.AZAZEL_B,
    PlayerType.LAZARUS_B,
    PlayerType.EDEN_B,
    PlayerType.LOST_B,
    PlayerType.LILITH_B,
    PlayerType.KEEPER_B,
    PlayerType.APOLLYON_B,
    PlayerType.FORGOTTEN_B,
    PlayerType.BETHANY_B,
    PlayerType.JACOB_B
}
--- Render frames are what is returned by the `Isaac.GetFrameCount` method.
____exports.RENDER_FRAMES_PER_SECOND = 60
--- Render frames are what is returned by the `Isaac.GetFrameCount` method.
____exports.RENDER_FRAMES_PER_MINUTE = ____exports.RENDER_FRAMES_PER_SECOND * 60
____exports.GRID_INDEX_CENTER_OF_1X1_ROOM = 67
--- The floor is represented by a 13x13 grid. Room indexes start at 0. The first column is
-- represented by grid indexes 0, 13, 26, and so on.
____exports.LEVEL_GRID_COLUMN_HEIGHT = 13
--- The floor is represented by a 13x13 grid. Room indexes start at 0. The first row is represented
-- by grid indexes from 0 to 12. The second row is represented by grid indexes from 13 to 25, and so
-- on.
____exports.LEVEL_GRID_ROW_WIDTH = 13
--- All of the collectibles that grant vision on the map.
-- 
-- Note that:
-- - Spelunker Hat is included. Historically, Spelunker Hat was not considered to be mapping, but it
--   was buffed in Repentance to show rooms two or more away.
-- - Book of Secrets is included, which is an "active mapping" instead of passive.
-- - Luna is included, even though it is not a very powerful mapping item.
-- - Cracked Orb is included, even though it requires the player to be damaged in order for it to be
--   activated.
____exports.MAPPING_COLLECTIBLES = {
    CollectibleType.COMPASS,
    CollectibleType.TREASURE_MAP,
    CollectibleType.SPELUNKER_HAT,
    CollectibleType.CRYSTAL_BALL,
    CollectibleType.BLUE_MAP,
    CollectibleType.BOOK_OF_SECRETS,
    CollectibleType.MIND,
    CollectibleType.SOL,
    CollectibleType.LUNA,
    CollectibleType.CRACKED_ORB
}
--- The floor is represented by a 13x13 grid. Room indexes start at 0. The first row is represented
-- by grid indexes from 0 to 12. The second row is represented by grid indexes from 13 to 25, and so
-- on. The maximum room index possible is 168. (It is not 169 because we start at 0 instead of 1.)
____exports.MAX_LEVEL_GRID_INDEX = 168
--- The game has a limit on the number of currently spawned familiars and will refuse to spawn any
-- more if it reaches the limit. Blue flies and blue spiders have a lower priority and will be
-- deleted to make room for other familiars.
____exports.MAX_NUM_FAMILIARS = 64
--- The game can only handle up to four different players.
____exports.MAX_NUM_INPUTS = 4
--- With Birthright, it is possible for Magdalene to have 18 heart containers.
____exports.MAX_PLAYER_HEART_CONTAINERS = 18
--- As the player continues to move in a direction, they will accelerate. When going from one wall to
-- another in a 2x2 room at 2.0 speed (the maximum that the speed stat can rise to), the amount of
-- units moved per update frame will climb to around 9.797 as they hit the opposite wall. The
-- constant specifies a value of 9.8 to be safe.
____exports.MAX_PLAYER_SPEED_IN_UNITS = 9.8
____exports.MAX_PLAYER_TRINKET_SLOTS = getEnumLength(nil, TrinketSlot)
--- If you set `EntityPlayer.ShotSpeed` lower than this value, it will have no effect.
____exports.MIN_PLAYER_SHOT_SPEED_STAT = 0.6
--- If you set `EntityPlayer.Speed` lower than this value, it will have no effect.
____exports.MIN_PLAYER_SPEED_STAT = 0.1
--- The maximum speed stat that a player can have. Any additional speed beyond this will not take
-- effect.
____exports.MAX_SPEED_STAT = 2
--- This is in the center of the room.
____exports.NEW_FLOOR_STARTING_POSITION_NORMAL_MODE = newReadonlyVector(nil, 320, 280)
--- This is near the top door.
____exports.NEW_FLOOR_STARTING_POSITION_GREED_MODE = newReadonlyVector(nil, 320, 280)
--- This is next to the bottom door. Presumably, the player does not start in the center of the room
-- (like they do when getting to a new stage) so that the controls graphic is more visible.
____exports.NEW_RUN_PLAYER_STARTING_POSITION = newReadonlyVector(nil, 320, 380)
--- Corresponds to the maximum value for `EntityPlayer.SamsonBerserkCharge`.
____exports.MAX_TAINTED_SAMSON_BERSERK_CHARGE = 100000
--- The number of dimensions, not including `Dimension.CURRENT`. (This is derived from the
-- `Dimension` enum.)
____exports.NUM_DIMENSIONS = getEnumLength(nil, Dimension) - 1
--- An array containing every valid `Dimension`, not including `Dimension.CURRENT`. (This is derived
-- from the `NUM_DIMENSIONS` constant.)
____exports.DIMENSIONS = eRange(nil, ____exports.NUM_DIMENSIONS)
--- The pill pool for each run is comprised of one effect for each unique pill color (minus gold and
-- horse pills.)
____exports.NUM_PILL_COLORS_IN_POOL = NUM_NORMAL_PILL_COLORS
____exports.ONE_BY_ONE_ROOM_GRID_SIZE = 135
--- An array representing every valid collectible type quality. Specifically, this is: `[0, 1, 2, 3,
-- 4]`
____exports.QUALITIES = {
    0,
    1,
    2,
    3,
    4
}
____exports.MAX_QUALITY = 4
____exports.SECOND_IN_MILLISECONDS = 1000
____exports.MINUTE_IN_MILLISECONDS = 60 * ____exports.SECOND_IN_MILLISECONDS
--- This is equivalent to the bottom-right screen position when the game is in full screen mode.
____exports.RESOLUTION_FULL_SCREEN = Vector(480, 270)
--- This is equivalent to the bottom-right screen position when the game is in windowed mode in a
-- 1600x900 resolution.
____exports.RESOLUTION_1600_900 = Vector(533, 300)
--- The starting room of the floor is always at the same grid index, which is in the middle of the
-- 13x13 grid.
____exports.STARTING_ROOM_GRID_INDEX = 84
--- After taking damage, `EntityPlayer.SamsonBerserkCharge` is incremented by this amount.
____exports.TAINTED_SAMSON_BERSERK_CHARGE_FROM_TAKING_DAMAGE = 10000
--- For `GridEntityType.TELEPORTER` (23).
____exports.TELEPORTER_ACTIVATION_DISTANCE = ____exports.DISTANCE_OF_GRID_TILE / 2
--- In milliseconds, as reported by the `Isaac.GetTime` method.
____exports.TIME_GAME_OPENED = Isaac.GetTime()
--- This is the number of draw coordinates that each heart spans on the UI in the upper left hand
-- corner.
____exports.UI_HEART_WIDTH = 12
--- Equal to `Vector(1, 1)`.
-- 
-- This is a safe version of the `Vector.One` constant. (Other mods can mutate `Vector.One`, so it
-- is not safe to use.)
____exports.VectorOne = newReadonlyVector(nil, 1, 1)
--- Equal to `Vector(0, 0)`.
-- 
-- This is a safe version of the `Vector.Zero` constant. (Other mods can mutate `Vector.Zero`, so it
-- is not safe to use.)
____exports.VectorZero = newReadonlyVector(nil, 0, 0)
--- Equal to `Color(1, 1, 1)`.
-- 
-- This is a safe version of the `Color.Default` constant. (Other mods can mutate `Color.Default`,
-- so it is not safe to use.)
-- 
-- If you need to mutate this, make a copy first with the `copyColor` helper function.
____exports.ColorDefault = newReadonlyColor(nil, 1, 1, 1)
--- Equal to `KColor(1, 1, 1, 1)`.
-- 
-- If you need to mutate this, make a copy first with the `copyKColor` helper function.
____exports.KColorDefault = newReadonlyKColor(
    nil,
    1,
    1,
    1,
    1
)
return ____exports
 end,
["objects.directionToVector"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____readOnly = require("functions.readOnly")
local newReadonlyVector = ____readOnly.newReadonlyVector
____exports.DIRECTION_TO_VECTOR = {
    [Direction.NO_DIRECTION] = VectorZero,
    [Direction.LEFT] = newReadonlyVector(nil, -1, 0),
    [Direction.UP] = newReadonlyVector(nil, 0, -1),
    [Direction.RIGHT] = newReadonlyVector(nil, 1, 0),
    [Direction.DOWN] = newReadonlyVector(nil, 0, 1)
}
return ____exports
 end,
["functions.direction"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
local ____directionNames = require("objects.directionNames")
local DIRECTION_NAMES = ____directionNames.DIRECTION_NAMES
local ____directionToDegrees = require("objects.directionToDegrees")
local DIRECTION_TO_DEGREES = ____directionToDegrees.DIRECTION_TO_DEGREES
local ____directionToMoveAction = require("objects.directionToMoveAction")
local DIRECTION_TO_MOVE_ACTION = ____directionToMoveAction.DIRECTION_TO_MOVE_ACTION
local ____directionToShootAction = require("objects.directionToShootAction")
local DIRECTION_TO_SHOOT_ACTION = ____directionToShootAction.DIRECTION_TO_SHOOT_ACTION
local ____directionToVector = require("objects.directionToVector")
local DIRECTION_TO_VECTOR = ____directionToVector.DIRECTION_TO_VECTOR
--- Helper function to convert the degrees of an angle to the `Direction` enum.
-- 
-- Note that this function considers 0 degrees to be pointing to the right, which is unusual because
-- 0 normally corresponds to up. (This corresponds to how the `Vector.GetAngleDegrees` method
-- works.)
function ____exports.angleToDirection(self, angleDegrees)
    local positiveDegrees = angleDegrees
    while positiveDegrees < 0 do
        positiveDegrees = positiveDegrees + 360
    end
    local normalizedDegrees = positiveDegrees % 360
    if normalizedDegrees < 45 then
        return Direction.RIGHT
    end
    if normalizedDegrees < 135 then
        return Direction.DOWN
    end
    if normalizedDegrees < 225 then
        return Direction.LEFT
    end
    if normalizedDegrees < 315 then
        return Direction.UP
    end
    return Direction.RIGHT
end
--- Helper function to convert a direction to degrees. For example, `Direction.LEFT` (0) would return
-- 180 and `Direction.RIGHT` (2) would return 0. (This corresponds to how the
-- `Vector.GetAngleDegrees` method works.)
function ____exports.directionToDegrees(self, direction)
    return DIRECTION_TO_DEGREES[direction]
end
--- Helper function to convert a direction to a shoot `ButtonAction`. For example, `Direction.LEFT`
-- (0) would return `ButtonAction.LEFT` (0).
function ____exports.directionToMoveAction(self, direction)
    return DIRECTION_TO_MOVE_ACTION[direction]
end
--- Helper function to convert a direction to a shoot `ButtonAction`. For example, `Direction.LEFT`
-- (0) would return `ButtonAction.SHOOT_LEFT` (4).
function ____exports.directionToShootAction(self, direction)
    return DIRECTION_TO_SHOOT_ACTION[direction]
end
--- Helper function to convert a direction to a `Vector`. For example, `Direction.LEFT` (0) would
-- convert to `Vector(-1, 0).
function ____exports.directionToVector(self, direction)
    return DIRECTION_TO_VECTOR[direction]
end
--- Helper function to get the lowercase name of a direction. For example, `Direction.LEFT` (0) would
-- return "left".
function ____exports.getDirectionName(self, direction)
    return DIRECTION_NAMES[direction]
end
return ____exports
 end,
["functions.vector"] = function(...) 
local ____exports = {}
local OBJECT_NAME
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
local ____direction = require("functions.direction")
local angleToDirection = ____direction.angleToDirection
local ____isaacAPIClass = require("functions.isaacAPIClass")
local isIsaacAPIClassOfType = ____isaacAPIClass.isIsaacAPIClassOfType
local isaacAPIClassEquals = ____isaacAPIClass.isaacAPIClassEquals
local ____random = require("functions.random")
local getRandomFloat = ____random.getRandomFloat
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
local ____table = require("functions.table")
local copyUserdataValuesToTable = ____table.copyUserdataValuesToTable
local getNumbersFromTable = ____table.getNumbersFromTable
local tableHasKeys = ____table.tableHasKeys
local ____types = require("functions.types")
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to check if something is an instantiated `Vector` object.
function ____exports.isVector(self, object)
    return isIsaacAPIClassOfType(nil, object, OBJECT_NAME)
end
OBJECT_NAME = "Vector"
local KEYS = {"X", "Y"}
--- Helper function to copy a `Vector` Isaac API class.
function ____exports.copyVector(self, vector)
    if not ____exports.isVector(nil, vector) then
        error(((("Failed to copy a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    return Vector(vector.X, vector.Y)
end
--- Helper function to convert a `SerializedVector` object to a normal `RNG` object. (This is used by
-- the save data manager when reading data from the "save#.dat" file.)
function ____exports.deserializeVector(self, vector)
    if not isTable(nil, vector) then
        error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object was not a Lua table.")
    end
    local x, y = table.unpack(getNumbersFromTable(
        nil,
        vector,
        OBJECT_NAME,
        table.unpack(KEYS)
    ))
    assertDefined(nil, x, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: X")
    assertDefined(nil, y, ("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: Y")
    return Vector(x, y)
end
--- Helper function to measure a vector to see if it has a non-zero length using a threshold to
-- ignore extremely small values.
-- 
-- Use this function instead of explicitly checking if the length is 0 because vectors in the game
-- are unlikely to ever be exactly set to 0. Instead, they will always have some miniscule length.
-- 
-- @param vector The vector to measure.
-- @param threshold Optional. The threshold from 0 to consider to be a non-zero vector. Default is
-- 0.01.
function ____exports.doesVectorHaveLength(self, vector, threshold)
    if threshold == nil then
        threshold = 0.01
    end
    return vector:Length() >= threshold
end
--- Given an array of vectors, this helper function returns the closest one to a provided reference
-- vector.
-- 
-- @param referenceVector The vector to compare against.
-- @param vectors The array of vectors to look through.
function ____exports.getClosestVectorTo(self, referenceVector, vectors)
    local closestVector
    local closestDistance = math.huge
    for ____, vector in ipairs(vectors) do
        local distance = referenceVector:Distance(vector)
        if distance < closestDistance then
            closestVector = vector
            closestDistance = distance
        end
    end
    return closestVector
end
--- Helper function to get a random vector between (-1, -1) and (1, 1).
-- 
-- To get random vectors with a bigger length, multiply this with a number.
-- 
-- Use this over the `RandomVector` function when you need the vector to be seeded.
-- 
-- If you want to generate an unseeded vector, you must explicitly pass `undefined` to the
-- `seedOrRNG` parameter.
-- 
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
function ____exports.getRandomVector(self, seedOrRNG)
    local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
    local x = getRandomFloat(nil, -1, 1, rng)
    local y = getRandomFloat(nil, -1, 1, rng)
    return Vector(x, y)
end
--- Used to determine is the given table is a serialized `Vector` object created by the `deepCopy`
-- function.
function ____exports.isSerializedVector(self, object)
    if not isTable(nil, object) then
        return false
    end
    return tableHasKeys(
        nil,
        object,
        table.unpack(KEYS)
    ) and object[SerializationBrand.VECTOR] ~= nil
end
--- Helper function to convert a `Vector` object to a `SerializedVector` object. (This is used by the
-- save data manager when writing data from the "save#.dat" file.)
function ____exports.serializeVector(self, vector)
    if not ____exports.isVector(nil, vector) then
        error(((("Failed to serialize a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
    end
    local vectorTable = {}
    copyUserdataValuesToTable(nil, vector, KEYS, vectorTable)
    vectorTable[SerializationBrand.VECTOR] = ""
    return vectorTable
end
--- Helper function to compare two vectors for equality.
-- 
-- This function is useful because vectors are not directly comparable. In other words, `Vector(1.2)
-- === Vector(1.2)` will be equal to false.
function ____exports.vectorEquals(self, vector1, vector2)
    return isaacAPIClassEquals(nil, vector1, vector2, KEYS)
end
--- Helper function for finding out which way a vector is pointing.
function ____exports.vectorToDirection(self, vector)
    local angleDegrees = vector:GetAngleDegrees()
    return angleToDirection(nil, angleDegrees)
end
--- Helper function to convert a vector to a string.
-- 
-- @param vector The vector to convert.
-- @param round Optional. If true, will round the vector values to the nearest integer. Default is
-- false.
function ____exports.vectorToString(self, vector, round)
    if round == nil then
        round = false
    end
    local x = round and math.floor(vector.X + 0.5) or vector.X
    local y = round and math.floor(vector.Y + 0.5) or vector.Y
    return ((("(" .. tostring(x)) .. ", ") .. tostring(y)) .. ")"
end
return ____exports
 end,
["objects.isaacAPIClassTypeToFunctions"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CopyableIsaacAPIClassType = ____isaac_2Dtypescript_2Ddefinitions.CopyableIsaacAPIClassType
local ____bitSet128 = require("functions.bitSet128")
local copyBitSet128 = ____bitSet128.copyBitSet128
local deserializeBitSet128 = ____bitSet128.deserializeBitSet128
local isBitSet128 = ____bitSet128.isBitSet128
local isSerializedBitSet128 = ____bitSet128.isSerializedBitSet128
local serializeBitSet128 = ____bitSet128.serializeBitSet128
local ____color = require("functions.color")
local copyColor = ____color.copyColor
local deserializeColor = ____color.deserializeColor
local isColor = ____color.isColor
local isSerializedColor = ____color.isSerializedColor
local serializeColor = ____color.serializeColor
local ____kColor = require("functions.kColor")
local copyKColor = ____kColor.copyKColor
local deserializeKColor = ____kColor.deserializeKColor
local isKColor = ____kColor.isKColor
local isSerializedKColor = ____kColor.isSerializedKColor
local serializeKColor = ____kColor.serializeKColor
local ____rng = require("functions.rng")
local copyRNG = ____rng.copyRNG
local deserializeRNG = ____rng.deserializeRNG
local isRNG = ____rng.isRNG
local isSerializedRNG = ____rng.isSerializedRNG
local serializeRNG = ____rng.serializeRNG
local ____vector = require("functions.vector")
local copyVector = ____vector.copyVector
local deserializeVector = ____vector.deserializeVector
local isSerializedVector = ____vector.isSerializedVector
local isVector = ____vector.isVector
local serializeVector = ____vector.serializeVector
____exports.ISAAC_API_CLASS_TYPE_TO_FUNCTIONS = {
    [CopyableIsaacAPIClassType.BIT_SET_128] = {
        is = isBitSet128,
        isSerialized = isSerializedBitSet128,
        copy = copyBitSet128,
        serialize = serializeBitSet128,
        deserialize = deserializeBitSet128
    },
    [CopyableIsaacAPIClassType.COLOR] = {
        is = isColor,
        isSerialized = isSerializedColor,
        copy = copyColor,
        serialize = serializeColor,
        deserialize = deserializeColor
    },
    [CopyableIsaacAPIClassType.K_COLOR] = {
        is = isKColor,
        isSerialized = isSerializedKColor,
        copy = copyKColor,
        serialize = serializeKColor,
        deserialize = deserializeKColor
    },
    [CopyableIsaacAPIClassType.RNG] = {
        is = isRNG,
        isSerialized = isSerializedRNG,
        copy = copyRNG,
        serialize = serializeRNG,
        deserialize = deserializeRNG
    },
    [CopyableIsaacAPIClassType.VECTOR] = {
        is = isVector,
        isSerialized = isSerializedVector,
        copy = copyVector,
        serialize = serializeVector,
        deserialize = deserializeVector
    }
}
return ____exports
 end,
["interfaces.SaveData"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local function test(self, _saveData)
end
do
    local saveDataWithPrimitives = {run = {foo = 123, bar = "bar", baz = true, nested = {foo = 123, bar = "bar", baz = true}}}
    test(nil, saveDataWithPrimitives)
end
do
    local saveDataWithEntity = {run = {foo = {}}}
    test(nil, saveDataWithEntity)
end
do
    local saveDataWithMap = {run = {foo = __TS__New(Map)}}
    test(nil, saveDataWithMap)
end
do
    local saveDataWithMap = {run = {foo = __TS__New(Map)}}
    test(nil, saveDataWithMap)
end
do
    local saveDataWithMap = {run = {foo = __TS__New(Map)}}
    test(nil, saveDataWithMap)
end
do
    local Foo = __TS__Class()
    Foo.name = "Foo"
    function Foo.prototype.____constructor(self)
        self.someField = 123
    end
    local saveDataWithClass = {run = {foo = __TS__New(Foo)}}
    test(nil, saveDataWithClass)
end
do
    local Foo = __TS__Class()
    Foo.name = "Foo"
    function Foo.prototype.____constructor(self)
        self.someField = 123
    end
    function Foo.prototype.someMethod(self)
    end
    local saveDataWithClassWithMethod = {run = {foo = __TS__New(Foo)}}
    test(nil, saveDataWithClassWithMethod)
end
do
    local Foo = __TS__Class()
    Foo.name = "Foo"
    function Foo.prototype.____constructor(self)
        self.someField = 123
    end
    local saveDataWithNestedClass = {run = {fooMap = __TS__New(Map)}}
    test(nil, saveDataWithNestedClass)
end
return ____exports
 end,
["types.private.CallbackTuple"] = function(...) 
local ____exports = {}
return ____exports
 end,
["classes.private.Feature"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local ____exports = {}
--- The IsaacScript standard library contains many optional features, such as the ability to create
-- custom pickups. All features are optional and are only initialized when needed. This class
-- contains elements to facilitate that.
-- 
-- Additionally, all custom callbacks extend from this class.
____exports.Feature = __TS__Class()
local Feature = ____exports.Feature
Feature.name = "Feature"
function Feature.prototype.____constructor(self)
    self.initialized = false
    self.numConsumers = 0
    if ____exports.Feature.constructedClassNames:has(self.constructor.name) then
        error(("Failed to instantiate feature class \"" .. self.constructor.name) .. "\" because it has already been instantiated once.")
    end
    ____exports.Feature.constructedClassNames:add(self.constructor.name)
end
Feature.constructedClassNames = __TS__New(Set)
return ____exports
 end,
["classes.private.CustomCallback"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayFindIndex = ____lualib.__TS__ArrayFindIndex
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local ____exports = {}
local ____sort = require("functions.sort")
local sortObjectArrayByKey = ____sort.sortObjectArrayByKey
local stableSort = ____sort.stableSort
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
--- The base class for a custom callback. Individual custom callbacks (and validation callbacks) will
-- extend from this class.
____exports.CustomCallback = __TS__Class()
local CustomCallback = ____exports.CustomCallback
CustomCallback.name = "CustomCallback"
__TS__ClassExtends(CustomCallback, Feature)
function CustomCallback.prototype.____constructor(self, ...)
    Feature.prototype.____constructor(self, ...)
    self.subscriptions = {}
    self.fire = function(____, ...)
        local fireArgs = {...}
        for ____, subscription in ipairs(self.subscriptions) do
            local callbackFunc = subscription.callbackFunc
            local optionalArgs = subscription.optionalArgs
            if self:shouldFire(fireArgs, optionalArgs) then
                local value = callbackFunc(
                    nil,
                    fireArgs[1],
                    fireArgs[2],
                    fireArgs[3],
                    fireArgs[4],
                    fireArgs[5],
                    fireArgs[6],
                    fireArgs[7]
                )
                if value ~= nil then
                    return value
                end
            end
        end
        return nil
    end
    self.shouldFire = function() return true end
end
function CustomCallback.prototype.addSubscriber(self, priority, callbackFunc, ...)
    local optionalArgs = {...}
    local subscription = {priority = priority, callbackFunc = callbackFunc, optionalArgs = optionalArgs}
    local ____self_subscriptions_0 = self.subscriptions
    ____self_subscriptions_0[#____self_subscriptions_0 + 1] = subscription
    self.subscriptions = stableSort(
        nil,
        self.subscriptions,
        sortObjectArrayByKey(nil, "priority")
    )
end
function CustomCallback.prototype.removeSubscriber(self, callback)
    local subscriptionIndexMatchingCallback = __TS__ArrayFindIndex(
        self.subscriptions,
        function(____, subscription)
            local subscriptionCallback = subscription.callbackFunc
            return callback == subscriptionCallback
        end
    )
    if subscriptionIndexMatchingCallback ~= -1 then
        __TS__ArraySplice(self.subscriptions, subscriptionIndexMatchingCallback, 1)
    end
end
return ____exports
 end,
["classes.callbacks.EntityTakeDmgFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireEntity = ____shouldFire.shouldFireEntity
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.EntityTakeDmgFilter = __TS__Class()
local EntityTakeDmgFilter = ____exports.EntityTakeDmgFilter
EntityTakeDmgFilter.name = "EntityTakeDmgFilter"
__TS__ClassExtends(EntityTakeDmgFilter, CustomCallback)
function EntityTakeDmgFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireEntity
    self.entityTakeDmg = function(____, entity, amount, damageFlags, source, countdownFrames) return self:fire(
        entity,
        amount,
        damageFlags,
        source,
        countdownFrames
    ) end
    self.callbacksUsed = {{ModCallback.ENTITY_TAKE_DMG, self.entityTakeDmg}}
end
return ____exports
 end,
["classes.callbacks.EntityTakeDmgPlayer"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.EntityTakeDmgPlayer = __TS__Class()
local EntityTakeDmgPlayer = ____exports.EntityTakeDmgPlayer
EntityTakeDmgPlayer.name = "EntityTakeDmgPlayer"
__TS__ClassExtends(EntityTakeDmgPlayer, CustomCallback)
function EntityTakeDmgPlayer.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePlayer
    self.entityTakeDmgPlayer = function(____, entity, amount, damageFlags, source, countdownFrames)
        local player = entity:ToPlayer()
        if player == nil then
            return nil
        end
        return self:fire(
            player,
            amount,
            damageFlags,
            source,
            countdownFrames
        )
    end
    self.callbacksUsed = {{ModCallback.ENTITY_TAKE_DMG, self.entityTakeDmgPlayer, {EntityType.PLAYER}}}
end
return ____exports
 end,
["classes.callbacks.InputActionFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.InputActionFilter = __TS__Class()
local InputActionFilter = ____exports.InputActionFilter
InputActionFilter.name = "InputActionFilter"
__TS__ClassExtends(InputActionFilter, CustomCallback)
function InputActionFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _entity, inputHook, buttonAction = table.unpack(fireArgs)
        local callbackInputHook, callbackButtonAction = table.unpack(optionalArgs)
        return (callbackInputHook == nil or callbackInputHook == inputHook) and (callbackButtonAction == nil or callbackButtonAction == buttonAction)
    end
    self.inputAction = function(____, entity, inputHook, buttonAction) return self:fire(entity, inputHook, buttonAction) end
    self.callbacksUsed = {{ModCallback.INPUT_ACTION, self.inputAction}}
end
return ____exports
 end,
["classes.callbacks.InputActionPlayer"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.InputActionPlayer = __TS__Class()
local InputActionPlayer = ____exports.InputActionPlayer
InputActionPlayer.name = "InputActionPlayer"
__TS__ClassExtends(InputActionPlayer, CustomCallback)
function InputActionPlayer.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local player, inputHook, buttonAction = table.unpack(fireArgs)
        local callbackPlayerVariant, callbackCharacter, callbackInputHook, callbackButtonAction = table.unpack(optionalArgs)
        local character = player:GetPlayerType()
        return (callbackPlayerVariant == nil or callbackPlayerVariant == player.Variant) and (callbackCharacter == nil or callbackCharacter == character) and (callbackInputHook == nil or callbackInputHook == inputHook) and (callbackButtonAction == nil or callbackButtonAction == buttonAction)
    end
    self.inputAction = function(____, entity, inputHook, buttonAction)
        if entity == nil then
            return nil
        end
        local player = entity:ToPlayer()
        if player == nil then
            return nil
        end
        return self:fire(player, inputHook, buttonAction)
    end
    self.callbacksUsed = {{ModCallback.INPUT_ACTION, self.inputAction}}
end
return ____exports
 end,
["functions.ambush"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____AmbushType = require("enums.AmbushType")
local AmbushType = ____AmbushType.AmbushType
--- Helper function to get the corresponding ambush type for the current room. Returns undefined if
-- the current room does not correspond to any particular ambush type.
function ____exports.getAmbushType(self)
    local room = game:GetRoom()
    local roomType = room:GetType()
    repeat
        local ____switch3 = roomType
        local ____cond3 = ____switch3 == RoomType.BOSS_RUSH
        if ____cond3 then
            do
                return AmbushType.BOSS_RUSH
            end
        end
        ____cond3 = ____cond3 or ____switch3 == RoomType.CHALLENGE
        if ____cond3 then
            do
                return AmbushType.CHALLENGE_ROOM
            end
        end
        do
            do
                return nil
            end
        end
    until true
end
return ____exports
 end,
["classes.callbacks.PostAmbushFinished"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ambush = require("functions.ambush")
local getAmbushType = ____ambush.getAmbushType
local ____shouldFire = require("shouldFire")
local shouldFireAmbush = ____shouldFire.shouldFireAmbush
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {ambushDone = false}}
____exports.PostAmbushFinished = __TS__Class()
local PostAmbushFinished = ____exports.PostAmbushFinished
PostAmbushFinished.name = "PostAmbushFinished"
__TS__ClassExtends(PostAmbushFinished, CustomCallback)
function PostAmbushFinished.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireAmbush
    self.postUpdate = function()
        if v.room.ambushDone then
            return
        end
        local room = game:GetRoom()
        local ambushDone = room:IsAmbushDone()
        if not ambushDone then
            return
        end
        v.room.ambushDone = true
        local ambushType = getAmbushType(nil)
        if ambushType ~= nil then
            self:fire(ambushType)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostAmbushStarted"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ambush = require("functions.ambush")
local getAmbushType = ____ambush.getAmbushType
local ____shouldFire = require("shouldFire")
local shouldFireAmbush = ____shouldFire.shouldFireAmbush
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {ambushActive = false}}
____exports.PostAmbushStarted = __TS__Class()
local PostAmbushStarted = ____exports.PostAmbushStarted
PostAmbushStarted.name = "PostAmbushStarted"
__TS__ClassExtends(PostAmbushStarted, CustomCallback)
function PostAmbushStarted.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireAmbush
    self.postUpdate = function()
        if v.room.ambushActive then
            return
        end
        local room = game:GetRoom()
        local ambushActive = room:IsAmbushActive()
        if not ambushActive then
            return
        end
        v.room.ambushActive = true
        local ambushType = getAmbushType(nil)
        if ambushType ~= nil then
            self:fire(ambushType)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostBombExploded"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____constants = require("core.constants")
local BOMB_EXPLODE_FRAME = ____constants.BOMB_EXPLODE_FRAME
local ____shouldFire = require("shouldFire")
local shouldFireBomb = ____shouldFire.shouldFireBomb
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostBombExploded = __TS__Class()
local PostBombExploded = ____exports.PostBombExploded
PostBombExploded.name = "PostBombExploded"
__TS__ClassExtends(PostBombExploded, CustomCallback)
function PostBombExploded.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireBomb
    self.postBombUpdate = function(____, bomb)
        if bomb.FrameCount == BOMB_EXPLODE_FRAME then
            self:fire(bomb)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_BOMB_UPDATE, self.postBombUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostBombInitFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireBomb = ____shouldFire.shouldFireBomb
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostBombInitFilter = __TS__Class()
local PostBombInitFilter = ____exports.PostBombInitFilter
PostBombInitFilter.name = "PostBombInitFilter"
__TS__ClassExtends(PostBombInitFilter, CustomCallback)
function PostBombInitFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireBomb
    self.postBombInit = function(____, bomb)
        self:fire(bomb)
    end
    self.callbacksUsed = {{ModCallback.POST_BOMB_INIT, self.postBombInit}}
end
return ____exports
 end,
["classes.callbacks.PostBombInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireBomb = ____shouldFire.shouldFireBomb
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostBombInitLate = __TS__Class()
local PostBombInitLate = ____exports.PostBombInitLate
PostBombInitLate.name = "PostBombInitLate"
__TS__ClassExtends(PostBombInitLate, CustomCallback)
function PostBombInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireBomb
    self.postBombUpdate = function(____, bomb)
        local ptrHash = GetPtrHash(bomb)
        if not v.room.firedSet:has(ptrHash) then
            v.room.firedSet:add(ptrHash)
            self:fire(bomb)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_BOMB_UPDATE, self.postBombUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostBombRenderFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireBomb = ____shouldFire.shouldFireBomb
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostBombRenderFilter = __TS__Class()
local PostBombRenderFilter = ____exports.PostBombRenderFilter
PostBombRenderFilter.name = "PostBombRenderFilter"
__TS__ClassExtends(PostBombRenderFilter, CustomCallback)
function PostBombRenderFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireBomb
    self.postBombUpdate = function(____, bomb, renderOffset)
        self:fire(bomb, renderOffset)
    end
    self.callbacksUsed = {{ModCallback.POST_BOMB_RENDER, self.postBombUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostBombUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireBomb = ____shouldFire.shouldFireBomb
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostBombUpdateFilter = __TS__Class()
local PostBombUpdateFilter = ____exports.PostBombUpdateFilter
PostBombUpdateFilter.name = "PostBombUpdateFilter"
__TS__ClassExtends(PostBombUpdateFilter, CustomCallback)
function PostBombUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireBomb
    self.postBombUpdate = function(____, bomb)
        self:fire(bomb)
    end
    self.callbacksUsed = {{ModCallback.POST_BOMB_UPDATE, self.postBombUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostBoneSwing"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local Map = ____lualib.Map
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local KnifeVariant = ____isaac_2Dtypescript_2Ddefinitions.KnifeVariant
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local BONE_SWING_ANIMATIONS = __TS__New(ReadonlySet, {"Swing", "Swing2", "Spin"})
local v = {room = {boneClubAnimations = __TS__New(Map)}}
____exports.PostBoneSwing = __TS__Class()
local PostBoneSwing = ____exports.PostBoneSwing
PostBoneSwing.name = "PostBoneSwing"
__TS__ClassExtends(PostBoneSwing, CustomCallback)
function PostBoneSwing.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.postKnifeRender = function(____, knife)
        if knife.Variant == KnifeVariant.BONE_CLUB then
            self:postKnifeRenderBoneClub(knife)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_KNIFE_RENDER, self.postKnifeRender}}
end
function PostBoneSwing.prototype.postKnifeRenderBoneClub(self, knife)
    local sprite = knife:GetSprite()
    local animation = sprite:GetAnimation()
    local ptrHash = GetPtrHash(knife)
    local animationOnLastFrame = v.room.boneClubAnimations:get(ptrHash)
    v.room.boneClubAnimations:set(ptrHash, animation)
    if animationOnLastFrame ~= nil and animation ~= animationOnLastFrame then
        self:boneClubAnimationChanged(knife, animation)
    end
end
function PostBoneSwing.prototype.boneClubAnimationChanged(self, knife, animation)
    if BONE_SWING_ANIMATIONS:has(animation) then
        self:fire(knife)
    end
end
return ____exports
 end,
["classes.callbacks.PostCollectibleEmpty"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {collectibleTypeMap = __TS__New(Map)}}
____exports.PostCollectibleEmpty = __TS__Class()
local PostCollectibleEmpty = ____exports.PostCollectibleEmpty
PostCollectibleEmpty.name = "PostCollectibleEmpty"
__TS__ClassExtends(PostCollectibleEmpty, CustomCallback)
function PostCollectibleEmpty.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _collectible, oldCollectibleType = table.unpack(fireArgs)
        local callbackCollectibleType = table.unpack(optionalArgs)
        return callbackCollectibleType == nil or callbackCollectibleType == oldCollectibleType
    end
    self.postPickupUpdateCollectible = function(____, pickup)
        local collectible = pickup
        local ptrHash = GetPtrHash(collectible)
        local oldCollectibleType = v.room.collectibleTypeMap:get(ptrHash)
        if oldCollectibleType == nil then
            oldCollectibleType = collectible.SubType
        end
        v.room.collectibleTypeMap:set(ptrHash, collectible.SubType)
        if oldCollectibleType ~= collectible.SubType then
            self:collectibleTypeChanged(collectible, oldCollectibleType)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_UPDATE, self.postPickupUpdateCollectible, {PickupVariant.COLLECTIBLE}}}
end
function PostCollectibleEmpty.prototype.collectibleTypeChanged(self, collectible, oldCollectibleType)
    if collectible.SubType == CollectibleType.NULL then
        self:fire(collectible, oldCollectibleType)
    end
end
return ____exports
 end,
["functions.frames"] = function(...) 
local ____exports = {}
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
function ____exports.getElapsedGameFramesSince(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount - gameFrameCount
end
function ____exports.getElapsedRenderFramesSince(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount - renderFrameCount
end
function ____exports.getElapsedRoomFramesSince(self, roomFrameCount)
    local room = game:GetRoom()
    local thisRoomFrameCount = room:GetFrameCount()
    return thisRoomFrameCount - roomFrameCount
end
--- Helper function to check if the current game frame count is higher than a specific game frame
-- count.
function ____exports.isAfterGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount > gameFrameCount
end
--- Helper function to check if the current render frame count is higher than a specific render frame
-- count.
function ____exports.isAfterRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount > renderFrameCount
end
--- Helper function to check if the current room frame count is higher than a specific room frame
-- count.
function ____exports.isAfterRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount > roomFrameCount
end
--- Helper function to check if the current game frame count is lower than a specific game frame
-- count.
function ____exports.isBeforeGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount < gameFrameCount
end
--- Helper function to check if the current render frame count is lower than a specific render frame
-- count.
function ____exports.isBeforeRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount < renderFrameCount
end
--- Helper function to check if the current room frame count is lower than a specific room frame
-- count.
function ____exports.isBeforeRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount < roomFrameCount
end
--- Helper function to check if the current game frame count is exactly equal to a specific game
-- frame count.
-- 
-- This returns false if the submitted render frame count is null or undefined.
function ____exports.onGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount == gameFrameCount
end
--- Helper function to check if the current game frame count is equal to or higher than a specific
-- game frame count.
function ____exports.onOrAfterGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount >= gameFrameCount
end
--- Helper function to check if the current render frame count is equal to or higher than a specific
-- render frame count.
function ____exports.onOrAfterRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount >= renderFrameCount
end
--- Helper function to check if the current room frame count is equal to or higher than a specific
-- room frame count.
function ____exports.onOrAfterRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount >= roomFrameCount
end
--- Helper function to check if the current game frame count is equal to or lower than a specific
-- game frame count.
function ____exports.onOrBeforeGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount <= gameFrameCount
end
--- Helper function to check if the current render frame count is equal to or lower than a specific
-- render frame count.
function ____exports.onOrBeforeRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount <= renderFrameCount
end
--- Helper function to check if the current room frame count is equal to or lower than a specific
-- room frame count.
function ____exports.onOrBeforeRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount <= roomFrameCount
end
--- Helper function to check if the current render frame count is exactly equal to a specific render
-- frame count.
-- 
-- This returns false if the submitted render frame count is null or undefined.
function ____exports.onRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount == renderFrameCount
end
--- Helper function to check if the current room frame count is exactly equal to a specific room
-- frame count.
-- 
-- This returns false if the submitted room frame count is null or undefined.
function ____exports.onRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount == roomFrameCount
end
return ____exports
 end,
["classes.DefaultMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local Map = ____lualib.Map
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__TypeOf = ____lualib.__TS__TypeOf
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____types = require("functions.types")
local isFunction = ____types.isFunction
local isPrimitive = ____types.isPrimitive
--- `DefaultMap` is a data structure that makes working with default values easier. It extends a
-- `Map` and adds additional methods.
-- 
-- It is a common pattern to look up a value in a `Map`, and then, if the value does not exist, set
-- a default value for the key, and then return the default value. `DefaultMap` abstracts this
-- operation away by providing the `getAndSetDefault` method.
-- 
-- Using a `DefaultMap` is nice because it makes code more declarative, since you specify what the
-- default value is alongside the types of the keys/values.
-- 
-- When instantiating a new `DefaultMap`, you must specify default value as the first argument. (The
-- default value is the initial value that will be assigned to every new entry in the
-- `getAndSetDefault` method.) For example:
-- 
-- ```ts
-- // Initializes a new empty DefaultMap with a default value of "foo".
-- const defaultMapWithString = new DefaultMap<string, string>("foo");
-- 
-- const value = defaultMapWithString.getAndSetDefault("bar");
-- // value is now "foo" and an entry for "bar" is now set.
-- ```
-- 
-- Sometimes, instead of having a static initial value for every entry in the map, you will want a
-- dynamic initial value that is contingent upon the key or some other variable. In these cases, you
-- can instead specify that the `DefaultMap` should run a function that will return the initial
-- value. (This is referred to as a "factory function".) For example:
-- 
-- ```ts
-- // Initializes a new empty DefaultMap with a default value based on "someGlobalVariable".
-- const factoryFunction = () => someGlobalVariable ? 0 : 1;
-- const defaultMapWithFactoryFunction = new DefaultMap<string, string>(factoryFunction);
-- ```
-- 
-- Note that in TypeScript and Lua, booleans, numbers, and strings are "passed by value". This means
-- that when the `DefaultMap` creates a new entry, if the default value is one of these 3 types, the
-- values will be copied. On the other hand, arrays and maps and other complex data structures are
-- "passed by reference". This means that when the `DefaultMap` creates a new entry, if the default
-- value is an array, then it would not be copied. Instead, the same shared array would be assigned
-- to every entry. Thus, to solve this problem, any variable that is passed by reference must be
-- created using a factory function to ensure that each copy is unique. For example:
-- 
-- ```ts
-- // Initializes a new empty DefaultMap with a default value of a new empty array.
-- const factoryFunction = () => [];
-- const defaultMapWithArray = new DefaultMap<string, string[]>(factoryFunction);
-- ```
-- 
-- In the previous two examples, the factory functions did not have any arguments. But you can also
-- specify a factory function that takes one or more arguments:
-- 
-- ```ts
-- const factoryFunction = (arg: boolean) => arg ? 0 : 1;
-- const defaultMapWithArg = new DefaultMap<string, string, [arg: boolean]>(factoryFunction);
-- ```
-- 
-- Similar to a normal `Map`, you can also include an initializer list in the constructor as the
-- second argument:
-- 
-- ```ts
-- // Initializes a DefaultMap with a default value of "foo" and some initial values.
-- const defaultMapWithInitialValues = new DefaultMap<string, string>("foo", [
--   ["a1", "a2"],
--   ["b1", "b2"],
-- ], );
-- ```
-- 
-- Finally, note that `DefaultMap` has the following additional utility methods:
-- 
-- - `getAndSetDefault` - The method that is called inside the overridden `get` method. In most
--   cases, you can use the overridden `get` method instead of calling this function directly.
--   However, if a factory function was provided during instantiation, and the factory function has
--   one or more arguments, then you must call this method instead (and provide the corresponding
--   arguments).
-- - `getDefaultValue` - Returns the default value to be used for a new key. (If a factory function
--   was provided during instantiation, this will execute the factory function.)
-- - `getConstructorArg` - Helper method for cloning the map. Returns either the default value or
--   the reference to the factory function.
____exports.DefaultMap = __TS__Class()
local DefaultMap = ____exports.DefaultMap
DefaultMap.name = "DefaultMap"
__TS__ClassExtends(DefaultMap, Map)
function DefaultMap.prototype.____constructor(self, defaultValueOrFactoryFunction, initializerArray)
    local argIsPrimitive = isPrimitive(nil, defaultValueOrFactoryFunction)
    local argIsFunction = isFunction(nil, defaultValueOrFactoryFunction)
    if not argIsPrimitive and not argIsFunction then
        error(("Failed to instantiate a DefaultMap since the provided default value was of type \"" .. __TS__TypeOf(defaultValueOrFactoryFunction)) .. "\". This error usually means that you are trying to use an array (or some other non-primitive data structure that is passed by reference) as the default value. Instead, return the data structure in a factory function, like \"() => []\". See the DefaultMap documentation for more details.")
    end
    Map.prototype.____constructor(self, initializerArray)
    if argIsFunction then
        self.defaultValue = nil
        self.defaultValueFactory = defaultValueOrFactoryFunction
    else
        self.defaultValue = defaultValueOrFactoryFunction
        self.defaultValueFactory = nil
    end
end
function DefaultMap.prototype.getAndSetDefault(self, key, ...)
    local value = Map.prototype.get(self, key)
    if value ~= nil then
        return value
    end
    local defaultValue = self:getDefaultValue(...)
    self:set(key, defaultValue)
    return defaultValue
end
function DefaultMap.prototype.getDefaultValue(self, ...)
    if self.defaultValue ~= nil then
        return self.defaultValue
    end
    if self.defaultValueFactory ~= nil then
        return self:defaultValueFactory(...)
    end
    error("A DefaultMap was incorrectly instantiated.")
end
function DefaultMap.prototype.getConstructorArg(self)
    if self.defaultValue ~= nil then
        return self.defaultValue
    end
    if self.defaultValueFactory ~= nil then
        return self.defaultValueFactory
    end
    error("A DefaultMap was incorrectly instantiated.")
end
local function test(self)
    local myDefaultMapBoolean = __TS__New(____exports.DefaultMap, false)
    local myDefaultMapBooleanFactory = __TS__New(
        ____exports.DefaultMap,
        function() return false end
    )
    local myDefaultMapBooleanWithoutParams = __TS__New(____exports.DefaultMap, false)
    local myDefaultMapNumber = __TS__New(____exports.DefaultMap, 123)
    local myDefaultMapNumberFactory = __TS__New(
        ____exports.DefaultMap,
        function() return 123 end
    )
    local myDefaultMapNumberWithoutParams = __TS__New(____exports.DefaultMap, 123)
    local myDefaultMapString = __TS__New(____exports.DefaultMap, "foo")
    local myDefaultMapStringFactory = __TS__New(
        ____exports.DefaultMap,
        function() return "foo" end
    )
    local myDefaultMapStringWithoutParams = __TS__New(____exports.DefaultMap, "foo")
    local myDefaultMapArray = __TS__New(
        ____exports.DefaultMap,
        function() return {} end
    )
    local myDefaultMapArrayWithoutParams = __TS__New(
        ____exports.DefaultMap,
        function() return {} end
    )
    local myDefaultMapMap = __TS__New(
        ____exports.DefaultMap,
        function() return __TS__New(Map) end
    )
    local myDefaultMapMapWithoutParams = __TS__New(
        ____exports.DefaultMap,
        function() return __TS__New(Map) end
    )
end
return ____exports
 end,
["functions.playerDataStructures"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local Set = ____lualib.Set
local ____exports = {}
local ____playerIndex = require("functions.playerIndex")
local getPlayerIndex = ____playerIndex.getPlayerIndex
--- Helper function to make using maps with an index of `PlayerIndex` easier. Use this instead of the
-- `Map.set` method if you have a map of this type.
-- 
-- For example:
-- 
-- ```ts
-- const v = {
--   run: {
--     playersSpeedBoost: new Map<PlayerIndex, int>(),
--   },
-- };
-- 
-- function incrementSpeedBoost(player: EntityPlayer) {
--   const oldSpeedBoost = mapGetPlayer(v.run.playersSpeedBoost, player);
--   const newSpeedBoost = oldSpeedBoost + 0.1;
--   mapSetPlayer(v.run.playersSpeedBoost, player);
-- }
-- ```
function ____exports.mapSetPlayer(self, map, player, value)
    local playerIndex = getPlayerIndex(nil, player)
    map:set(playerIndex, value)
end
--- Helper function to make using default maps with an index of `PlayerIndex` easier. Use this
-- instead of the `DefaultMap.getAndSetDefault` method if you have a default map of this type.
-- 
-- For example:
-- 
-- ```ts
-- const v = {
--   run: {
--     playersSpeedBoost: new DefaultMap<PlayerIndex, int>(0),
--   },
-- };
-- 
-- function evaluateCacheSpeed(player: EntityPlayer) {
--   player.MoveSpeed = defaultMapGetPlayer(v.run.playersSpeedBoost, player);
-- }
-- ```
-- 
-- @allowEmptyVariadic
function ____exports.defaultMapGetPlayer(self, map, player, ...)
    local playerIndex = getPlayerIndex(nil, player)
    return map:getAndSetDefault(playerIndex, ...)
end
--- Helper function to make using maps with an index of `PlayerIndex` easier. Use this instead of the
-- `Map.set` method if you have a map of this type.
-- 
-- Since `Map` and `DefaultMap` set values in the same way, this function is simply an alias for the
-- `mapSetPlayer` helper function.
function ____exports.defaultMapSetPlayer(self, map, player, value)
    ____exports.mapSetPlayer(nil, map, player, value)
end
--- Helper function to make using maps with an type of `PlayerIndex` easier. Use this instead of the
-- `Map.delete` method if you have a set of this type.
function ____exports.mapDeletePlayer(self, map, player)
    local playerIndex = getPlayerIndex(nil, player)
    return map:delete(playerIndex)
end
--- Helper function to make using maps with an index of `PlayerIndex` easier. Use this instead of the
-- `Map.get` method if you have a map of this type.
-- 
-- For example:
-- 
-- ```ts
-- const v = {
--   run: {
--     playersSpeedBoost: new Map<PlayerIndex, int>(),
--   },
-- };
-- 
-- function incrementSpeedBoost(player: EntityPlayer) {
--   const oldSpeedBoost = mapGetPlayer(v.run.playersSpeedBoost, player);
--   const newSpeedBoost = oldSpeedBoost + 0.1;
--   mapSetPlayer(v.run.playersSpeedBoost, player);
-- }
-- ```
function ____exports.mapGetPlayer(self, map, player)
    local playerIndex = getPlayerIndex(nil, player)
    return map:get(playerIndex)
end
--- Helper function to make using maps with an index of `PlayerIndex` easier. Use this instead of the
-- `Map.has` method if you have a map of this type.
function ____exports.mapHasPlayer(self, map, player)
    local playerIndex = getPlayerIndex(nil, player)
    return map:has(playerIndex)
end
--- Helper function to make using sets with an type of `PlayerIndex` easier. Use this instead of the
-- `Set.add` method if you have a set of this type.
function ____exports.setAddPlayer(self, set, player)
    local playerIndex = getPlayerIndex(nil, player)
    set:add(playerIndex)
end
--- Helper function to make using sets with an type of `PlayerIndex` easier. Use this instead of the
-- `Set.delete` method if you have a set of this type.
function ____exports.setDeletePlayer(self, set, player)
    local playerIndex = getPlayerIndex(nil, player)
    return set:delete(playerIndex)
end
--- Helper function to make using sets with an type of `PlayerIndex` easier. Use this instead of the
-- `Set.has` method if you have a set of this type.
function ____exports.setHasPlayer(self, set, player)
    local playerIndex = getPlayerIndex(nil, player)
    return set:has(playerIndex)
end
return ____exports
 end,
["objects.characterDamageMultipliers"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
--- From: https://bindingofisaacrebirth.fandom.com/wiki/Characters#Regular_Characters
____exports.CHARACTER_DAMAGE_MULTIPLIERS = {
    [PlayerType.POSSESSOR] = 1,
    [PlayerType.ISAAC] = 1,
    [PlayerType.MAGDALENE] = 1,
    [PlayerType.CAIN] = 1.2,
    [PlayerType.JUDAS] = 1.35,
    [PlayerType.BLUE_BABY] = 1.05,
    [PlayerType.EVE] = 0.75,
    [PlayerType.SAMSON] = 1,
    [PlayerType.AZAZEL] = 1.5,
    [PlayerType.LAZARUS] = 1,
    [PlayerType.EDEN] = 1,
    [PlayerType.LOST] = 1,
    [PlayerType.LAZARUS_2] = 1.4,
    [PlayerType.DARK_JUDAS] = 2,
    [PlayerType.LILITH] = 1,
    [PlayerType.KEEPER] = 1.2,
    [PlayerType.APOLLYON] = 1,
    [PlayerType.FORGOTTEN] = 1.5,
    [PlayerType.SOUL] = 1,
    [PlayerType.BETHANY] = 1,
    [PlayerType.JACOB] = 1,
    [PlayerType.ESAU] = 1,
    [PlayerType.ISAAC_B] = 1,
    [PlayerType.MAGDALENE_B] = 0.75,
    [PlayerType.CAIN_B] = 1,
    [PlayerType.JUDAS_B] = 1,
    [PlayerType.BLUE_BABY_B] = 1,
    [PlayerType.EVE_B] = 1.2,
    [PlayerType.SAMSON_B] = 1,
    [PlayerType.AZAZEL_B] = 1.5,
    [PlayerType.LAZARUS_B] = 1,
    [PlayerType.EDEN_B] = 1,
    [PlayerType.LOST_B] = 1.3,
    [PlayerType.LILITH_B] = 1,
    [PlayerType.KEEPER_B] = 1,
    [PlayerType.APOLLYON_B] = 1,
    [PlayerType.FORGOTTEN_B] = 1.5,
    [PlayerType.BETHANY_B] = 1,
    [PlayerType.JACOB_B] = 1,
    [PlayerType.LAZARUS_2_B] = 1.5,
    [PlayerType.JACOB_2_B] = 1,
    [PlayerType.SOUL_B] = 1
}
return ____exports
 end,
["objects.characterNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
____exports.CHARACTER_NAMES = {
    [PlayerType.POSSESSOR] = "Possessor",
    [PlayerType.ISAAC] = "Isaac",
    [PlayerType.MAGDALENE] = "Magdalene",
    [PlayerType.CAIN] = "Cain",
    [PlayerType.JUDAS] = "Judas",
    [PlayerType.BLUE_BABY] = "Blue Baby",
    [PlayerType.EVE] = "Eve",
    [PlayerType.SAMSON] = "Samson",
    [PlayerType.AZAZEL] = "Azazel",
    [PlayerType.LAZARUS] = "Lazarus",
    [PlayerType.EDEN] = "Eden",
    [PlayerType.LOST] = "The Lost",
    [PlayerType.LAZARUS_2] = "Lazarus II",
    [PlayerType.DARK_JUDAS] = "Dark Judas",
    [PlayerType.LILITH] = "Lilith",
    [PlayerType.KEEPER] = "Keeper",
    [PlayerType.APOLLYON] = "Apollyon",
    [PlayerType.FORGOTTEN] = "The Forgotten",
    [PlayerType.SOUL] = "The Soul",
    [PlayerType.BETHANY] = "Bethany",
    [PlayerType.JACOB] = "Jacob",
    [PlayerType.ESAU] = "Esau",
    [PlayerType.ISAAC_B] = "Tainted Isaac",
    [PlayerType.MAGDALENE_B] = "Tainted Magdalene",
    [PlayerType.CAIN_B] = "Tainted Cain",
    [PlayerType.JUDAS_B] = "Tainted Judas",
    [PlayerType.BLUE_BABY_B] = "Tainted Blue Baby",
    [PlayerType.EVE_B] = "Tainted Eve",
    [PlayerType.SAMSON_B] = "Tainted Samson",
    [PlayerType.AZAZEL_B] = "Tainted Azazel",
    [PlayerType.LAZARUS_B] = "Tainted Lazarus",
    [PlayerType.EDEN_B] = "Tainted Eden",
    [PlayerType.LOST_B] = "Tainted Lost",
    [PlayerType.LILITH_B] = "Tainted Lilith",
    [PlayerType.KEEPER_B] = "Tainted Keeper",
    [PlayerType.APOLLYON_B] = "Tainted Apollyon",
    [PlayerType.FORGOTTEN_B] = "Tainted Forgotten",
    [PlayerType.BETHANY_B] = "Tainted Bethany",
    [PlayerType.JACOB_B] = "Tainted Jacob",
    [PlayerType.LAZARUS_2_B] = "Dead Tainted Lazarus",
    [PlayerType.JACOB_2_B] = "Dead Tainted Jacob",
    [PlayerType.SOUL_B] = "Tainted Soul"
}
return ____exports
 end,
["objects.characterSpritePNGFileNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
____exports.CHARACTER_SPRITE_PNG_FILE_NAMES = {
    [PlayerType.POSSESSOR] = "character_001_isaac.png",
    [PlayerType.ISAAC] = "character_001_isaac.png",
    [PlayerType.MAGDALENE] = "character_002_magdalene.png",
    [PlayerType.CAIN] = "character_003_cain.png",
    [PlayerType.JUDAS] = "character_004_judas.png",
    [PlayerType.BLUE_BABY] = "character_006_bluebaby.png",
    [PlayerType.EVE] = "character_005_eve.png",
    [PlayerType.SAMSON] = "character_007_samson.png",
    [PlayerType.AZAZEL] = "character_008_azazel.png",
    [PlayerType.LAZARUS] = "character_009_lazarus.png",
    [PlayerType.EDEN] = "character_009_eden.png",
    [PlayerType.LOST] = "character_012_thelost.png",
    [PlayerType.LAZARUS_2] = "character_010_lazarus2.png",
    [PlayerType.DARK_JUDAS] = "character_013_blackjudas.png",
    [PlayerType.LILITH] = "character_014_lilith.png",
    [PlayerType.KEEPER] = "character_015_keeper.png",
    [PlayerType.APOLLYON] = "character_016_apollyon.png",
    [PlayerType.FORGOTTEN] = "character_017_theforgotten.png",
    [PlayerType.SOUL] = "character_018_thesoul.png",
    [PlayerType.BETHANY] = "character_001x_bethany.png",
    [PlayerType.JACOB] = "character_002x_jacob.png",
    [PlayerType.ESAU] = "character_003x_esau.png",
    [PlayerType.ISAAC_B] = "character_001b_isaac.png",
    [PlayerType.MAGDALENE_B] = "character_002b_magdalene.png",
    [PlayerType.CAIN_B] = "character_003b_cain.png",
    [PlayerType.JUDAS_B] = "character_004b_judas.png",
    [PlayerType.BLUE_BABY_B] = "character_005b_bluebaby.png",
    [PlayerType.EVE_B] = "character_006b_eve.png",
    [PlayerType.SAMSON_B] = "character_007b_samson.png",
    [PlayerType.AZAZEL_B] = "character_008b_azazel.png",
    [PlayerType.LAZARUS_B] = "character_009b_lazarus.png",
    [PlayerType.EDEN_B] = "character_009_eden.png",
    [PlayerType.LOST_B] = "character_012b_thelost.png",
    [PlayerType.LILITH_B] = "character_014b_lilith.png",
    [PlayerType.KEEPER_B] = "character_015b_keeper.png",
    [PlayerType.APOLLYON_B] = "character_016b_apollyon.png",
    [PlayerType.FORGOTTEN_B] = "character_016b_theforgotten.png",
    [PlayerType.BETHANY_B] = "character_018b_bethany.png",
    [PlayerType.JACOB_B] = "character_019b_jacob.png",
    [PlayerType.LAZARUS_2_B] = "character_009b_lazarus2.png",
    [PlayerType.JACOB_2_B] = "character_019b_jacob2.png",
    [PlayerType.SOUL_B] = "character_017b_thesoul.png"
}
return ____exports
 end,
["objects.characterStartingCollectibleTypes"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
____exports.CHARACTER_STARTING_COLLECTIBLE_TYPES = {
    [PlayerType.POSSESSOR] = {},
    [PlayerType.ISAAC] = {CollectibleType.D6},
    [PlayerType.MAGDALENE] = {CollectibleType.YUM_HEART},
    [PlayerType.CAIN] = {CollectibleType.LUCKY_FOOT},
    [PlayerType.JUDAS] = {CollectibleType.BOOK_OF_BELIAL},
    [PlayerType.BLUE_BABY] = {CollectibleType.POOP},
    [PlayerType.EVE] = {CollectibleType.DEAD_BIRD, CollectibleType.WHORE_OF_BABYLON, CollectibleType.RAZOR_BLADE},
    [PlayerType.SAMSON] = {CollectibleType.BLOODY_LUST},
    [PlayerType.AZAZEL] = {},
    [PlayerType.LAZARUS] = {CollectibleType.ANEMIC},
    [PlayerType.EDEN] = {},
    [PlayerType.LOST] = {CollectibleType.ETERNAL_D6},
    [PlayerType.LAZARUS_2] = {CollectibleType.ANEMIC},
    [PlayerType.DARK_JUDAS] = {},
    [PlayerType.LILITH] = {CollectibleType.BOX_OF_FRIENDS, CollectibleType.CAMBION_CONCEPTION},
    [PlayerType.KEEPER] = {CollectibleType.WOODEN_NICKEL},
    [PlayerType.APOLLYON] = {CollectibleType.VOID},
    [PlayerType.FORGOTTEN] = {},
    [PlayerType.SOUL] = {},
    [PlayerType.BETHANY] = {CollectibleType.BOOK_OF_VIRTUES},
    [PlayerType.JACOB] = {},
    [PlayerType.ESAU] = {},
    [PlayerType.ISAAC_B] = {},
    [PlayerType.MAGDALENE_B] = {CollectibleType.YUM_HEART},
    [PlayerType.CAIN_B] = {CollectibleType.BAG_OF_CRAFTING},
    [PlayerType.JUDAS_B] = {CollectibleType.DARK_ARTS},
    [PlayerType.BLUE_BABY_B] = {CollectibleType.HOLD},
    [PlayerType.EVE_B] = {CollectibleType.SUMPTORIUM},
    [PlayerType.SAMSON_B] = {},
    [PlayerType.AZAZEL_B] = {},
    [PlayerType.LAZARUS_B] = {CollectibleType.FLIP},
    [PlayerType.EDEN_B] = {},
    [PlayerType.LOST_B] = {},
    [PlayerType.LILITH_B] = {},
    [PlayerType.KEEPER_B] = {},
    [PlayerType.APOLLYON_B] = {CollectibleType.ABYSS},
    [PlayerType.FORGOTTEN_B] = {},
    [PlayerType.BETHANY_B] = {CollectibleType.LEMEGETON},
    [PlayerType.JACOB_B] = {CollectibleType.ANIMA_SOLA},
    [PlayerType.LAZARUS_2_B] = {CollectibleType.FLIP},
    [PlayerType.JACOB_2_B] = {CollectibleType.ANIMA_SOLA},
    [PlayerType.SOUL_B] = {}
}
return ____exports
 end,
["objects.characterStartingTrinketTypes"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
____exports.CHARACTER_STARTING_TRINKET_TYPE = {
    [PlayerType.POSSESSOR] = nil,
    [PlayerType.ISAAC] = nil,
    [PlayerType.MAGDALENE] = nil,
    [PlayerType.CAIN] = TrinketType.PAPER_CLIP,
    [PlayerType.JUDAS] = nil,
    [PlayerType.BLUE_BABY] = nil,
    [PlayerType.EVE] = nil,
    [PlayerType.SAMSON] = TrinketType.CHILDS_HEART,
    [PlayerType.AZAZEL] = nil,
    [PlayerType.LAZARUS] = nil,
    [PlayerType.EDEN] = nil,
    [PlayerType.LOST] = nil,
    [PlayerType.LAZARUS_2] = nil,
    [PlayerType.DARK_JUDAS] = nil,
    [PlayerType.LILITH] = nil,
    [PlayerType.KEEPER] = TrinketType.STORE_KEY,
    [PlayerType.APOLLYON] = nil,
    [PlayerType.FORGOTTEN] = nil,
    [PlayerType.SOUL] = nil,
    [PlayerType.BETHANY] = nil,
    [PlayerType.JACOB] = nil,
    [PlayerType.ESAU] = nil,
    [PlayerType.ISAAC_B] = nil,
    [PlayerType.MAGDALENE_B] = nil,
    [PlayerType.CAIN_B] = nil,
    [PlayerType.JUDAS_B] = nil,
    [PlayerType.BLUE_BABY_B] = nil,
    [PlayerType.EVE_B] = nil,
    [PlayerType.SAMSON_B] = nil,
    [PlayerType.AZAZEL_B] = nil,
    [PlayerType.LAZARUS_B] = nil,
    [PlayerType.EDEN_B] = nil,
    [PlayerType.LOST_B] = nil,
    [PlayerType.LILITH_B] = nil,
    [PlayerType.KEEPER_B] = nil,
    [PlayerType.APOLLYON_B] = nil,
    [PlayerType.FORGOTTEN_B] = nil,
    [PlayerType.BETHANY_B] = nil,
    [PlayerType.JACOB_B] = nil,
    [PlayerType.LAZARUS_2_B] = nil,
    [PlayerType.JACOB_2_B] = nil,
    [PlayerType.SOUL_B] = nil
}
return ____exports
 end,
["sets.charactersThatStartWithAnActiveItemSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.CHARACTERS_THAT_START_WITH_AN_ACTIVE_ITEM_SET = __TS__New(ReadonlySet, {
    PlayerType.ISAAC,
    PlayerType.MAGDALENE,
    PlayerType.JUDAS,
    PlayerType.BLUE_BABY,
    PlayerType.EVE,
    PlayerType.EDEN,
    PlayerType.LOST,
    PlayerType.LILITH,
    PlayerType.KEEPER,
    PlayerType.APOLLYON,
    PlayerType.EDEN_B
})
return ____exports
 end,
["sets.charactersWithBlackHeartFromEternalHeartSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART_SET = __TS__New(ReadonlySet, {PlayerType.DARK_JUDAS, PlayerType.JUDAS_B})
return ____exports
 end,
["sets.charactersWithFreeDevilDealsSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.CHARACTERS_WITH_FREE_DEVIL_DEALS_SET = __TS__New(ReadonlySet, {PlayerType.LOST, PlayerType.LOST_B, PlayerType.JACOB_2_B})
return ____exports
 end,
["sets.charactersWithNoRedHeartsSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
--- The set of characters where red heart containers will be turned into soul hearts (e.g. Blue
-- Baby). This includes The Lost and Tainted Lost. This does not include Keeper or Tainted Keeper.
____exports.CHARACTERS_WITH_NO_RED_HEARTS_SET = __TS__New(ReadonlySet, {
    PlayerType.BLUE_BABY,
    PlayerType.LOST,
    PlayerType.DARK_JUDAS,
    PlayerType.JUDAS_B,
    PlayerType.BLUE_BABY_B,
    PlayerType.LOST_B,
    PlayerType.FORGOTTEN_B,
    PlayerType.BETHANY_B
})
return ____exports
 end,
["sets.charactersWithNoSoulHeartsSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
--- The set of characters where soul hearts will be automatically stripped away (e.g. Bethany). This
-- includes The Lost and Tainted Lost.
____exports.CHARACTERS_WITH_NO_SOUL_HEARTS_SET = __TS__New(ReadonlySet, {
    PlayerType.LOST,
    PlayerType.KEEPER,
    PlayerType.BETHANY,
    PlayerType.LOST_B,
    PlayerType.KEEPER_B
})
return ____exports
 end,
["sets.lostStyleCharactersSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
--- This is the set of characters that look like The Lost and play the "LostDeath" animation when
-- they die.
____exports.LOST_STYLE_CHARACTERS_SET = __TS__New(ReadonlySet, {
    PlayerType.LOST,
    PlayerType.SOUL,
    PlayerType.LOST_B,
    PlayerType.JACOB_2_B,
    PlayerType.SOUL_B
})
return ____exports
 end,
["functions.characters"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____constants = require("core.constants")
local FLYING_CHARACTERS = ____constants.FLYING_CHARACTERS
local MAIN_CHARACTERS = ____constants.MAIN_CHARACTERS
local ____constantsFirstLast = require("core.constantsFirstLast")
local LAST_VANILLA_CHARACTER = ____constantsFirstLast.LAST_VANILLA_CHARACTER
local ____characterDamageMultipliers = require("objects.characterDamageMultipliers")
local CHARACTER_DAMAGE_MULTIPLIERS = ____characterDamageMultipliers.CHARACTER_DAMAGE_MULTIPLIERS
local ____characterNames = require("objects.characterNames")
local CHARACTER_NAMES = ____characterNames.CHARACTER_NAMES
local ____characterSpritePNGFileNames = require("objects.characterSpritePNGFileNames")
local CHARACTER_SPRITE_PNG_FILE_NAMES = ____characterSpritePNGFileNames.CHARACTER_SPRITE_PNG_FILE_NAMES
local ____characterStartingCollectibleTypes = require("objects.characterStartingCollectibleTypes")
local CHARACTER_STARTING_COLLECTIBLE_TYPES = ____characterStartingCollectibleTypes.CHARACTER_STARTING_COLLECTIBLE_TYPES
local ____characterStartingTrinketTypes = require("objects.characterStartingTrinketTypes")
local CHARACTER_STARTING_TRINKET_TYPE = ____characterStartingTrinketTypes.CHARACTER_STARTING_TRINKET_TYPE
local ____charactersThatStartWithAnActiveItemSet = require("sets.charactersThatStartWithAnActiveItemSet")
local CHARACTERS_THAT_START_WITH_AN_ACTIVE_ITEM_SET = ____charactersThatStartWithAnActiveItemSet.CHARACTERS_THAT_START_WITH_AN_ACTIVE_ITEM_SET
local ____charactersWithBlackHeartFromEternalHeartSet = require("sets.charactersWithBlackHeartFromEternalHeartSet")
local CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART_SET = ____charactersWithBlackHeartFromEternalHeartSet.CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART_SET
local ____charactersWithFreeDevilDealsSet = require("sets.charactersWithFreeDevilDealsSet")
local CHARACTERS_WITH_FREE_DEVIL_DEALS_SET = ____charactersWithFreeDevilDealsSet.CHARACTERS_WITH_FREE_DEVIL_DEALS_SET
local ____charactersWithNoRedHeartsSet = require("sets.charactersWithNoRedHeartsSet")
local CHARACTERS_WITH_NO_RED_HEARTS_SET = ____charactersWithNoRedHeartsSet.CHARACTERS_WITH_NO_RED_HEARTS_SET
local ____charactersWithNoSoulHeartsSet = require("sets.charactersWithNoSoulHeartsSet")
local CHARACTERS_WITH_NO_SOUL_HEARTS_SET = ____charactersWithNoSoulHeartsSet.CHARACTERS_WITH_NO_SOUL_HEARTS_SET
local ____lostStyleCharactersSet = require("sets.lostStyleCharactersSet")
local LOST_STYLE_CHARACTERS_SET = ____lostStyleCharactersSet.LOST_STYLE_CHARACTERS_SET
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
function ____exports.isModdedCharacter(self, character)
    return not ____exports.isVanillaCharacter(nil, character)
end
function ____exports.isVanillaCharacter(self, character)
    return character <= LAST_VANILLA_CHARACTER
end
local FLYING_CHARACTERS_SET = __TS__New(ReadonlySet, FLYING_CHARACTERS)
local MAIN_CHARACTERS_SET = __TS__New(ReadonlySet, MAIN_CHARACTERS)
local PNG_PATH_PREFIX = "characters/costumes"
--- Helper function to determine if the given character can have red heart containers. Returns true
-- for characters like Isaac, Magdalene, or Cain. Returns true for Keeper and Tainted Keeper, even
-- though coin containers are not technically the same as red heart containers. Returns false for
-- characters like Blue Baby. Returns false for The Lost and Tainted Lost.
function ____exports.characterCanHaveRedHearts(self, character)
    return not CHARACTERS_WITH_NO_RED_HEARTS_SET:has(character)
end
--- Helper function to determine if the given character can have soul hearts. Returns true for
-- characters like Isaac, Magdalene, or Cain. Returns false for characters like Bethany. Returns
-- false for The Lost and Tainted Lost.
function ____exports.characterCanHaveSoulHearts(self, character)
    return not CHARACTERS_WITH_NO_SOUL_HEARTS_SET:has(character)
end
--- Helper function for determining whether the given character can take free Devil Deals. (e.g. The
-- Lost, Tainted Lost, etc.)
function ____exports.characterCanTakeFreeDevilDeals(self, character)
    return CHARACTERS_WITH_FREE_DEVIL_DEALS_SET:has(character)
end
--- Normally, characters get a red heart container upon reaching a new floor with an eternal heart,
-- but some characters grant a black heart instead. Returns true for Dark Judas and Tainted Judas.
-- Otherwise, returns false.
function ____exports.characterGetsBlackHeartFromEternalHeart(self, character)
    return CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART_SET:has(character)
end
--- Helper function to determine if the specified character starts with an active item.
-- 
-- For the purposes of this function, the save file is considered to be fully unlocked (e.g. Isaac
-- is considered to starts with the D6, but this is not the case on a brand new save file).
function ____exports.characterStartsWithActiveItem(self, character)
    return CHARACTERS_THAT_START_WITH_AN_ACTIVE_ITEM_SET:has(character)
end
--- Helper function to get the numerical damage multiplier for a character.
-- 
-- @param character The character to get.
-- @param hasWhoreOfBabylon Optional. Whether the character has the Whore of Babylon effect
-- currently active. Defaults to false. This is necessary because Eve's
-- damage multiplier changes from 0.75 to 1 when she has Whore of Babylon
-- active.
function ____exports.getCharacterDamageMultiplier(self, character, hasWhoreOfBabylon)
    if hasWhoreOfBabylon == nil then
        hasWhoreOfBabylon = false
    end
    if character == PlayerType.EVE and hasWhoreOfBabylon then
        return 1
    end
    return CHARACTER_DAMAGE_MULTIPLIERS[character]
end
--- - Most characters have a 56 frame death animation (i.e. the "Death" animation).
-- - The Lost and Tainted Lost have a 38 frame death animation (i.e. the "LostDeath" animation).
-- - Tainted Forgotten have a 20 frame death animation (i.e. the "ForgottenDeath" animation).
function ____exports.getCharacterDeathAnimationName(self, character)
    if LOST_STYLE_CHARACTERS_SET:has(character) then
        return "LostDeath"
    end
    if character == PlayerType.FORGOTTEN_B then
        return "ForgottenDeath"
    end
    return "Death"
end
--- Returns the maximum heart containers that the provided character can have. Normally, this is 12,
-- but with Keeper it is 3, and with Tainted Keeper it is 2. This does not account for Birthright or
-- Mother's Kiss; use the `getPlayerMaxHeartContainers` helper function for that.
function ____exports.getCharacterMaxHeartContainers(self, character)
    if character == PlayerType.KEEPER then
        return 3
    end
    if character == PlayerType.FORGOTTEN then
        return 6
    end
    if character == PlayerType.SOUL then
        return 6
    end
    if character == PlayerType.KEEPER_B then
        return 2
    end
    return 12
end
--- Helper function to get the name of a character. Returns "Unknown" for modded characters.
function ____exports.getCharacterName(self, character)
    if ____exports.isModdedCharacter(nil, character) then
        return "Unknown"
    end
    return CHARACTER_NAMES[character]
end
--- Helper function to get the path to the sprite for a particular character.
-- 
-- For example, the file path for `PlayerType.ISAAC` is
-- "characters/costumes/character_001_isaac.png".
function ____exports.getCharacterSpritePNGFilePath(self, character)
    local fileName = CHARACTER_SPRITE_PNG_FILE_NAMES[character]
    return (PNG_PATH_PREFIX .. "/") .. fileName
end
--- Helper function to get the collectibles that are granted to a particular character at the
-- beginning of a run.
-- 
-- Note that this will return an empty array for Eden and Tainted Eden.
function ____exports.getCharacterStartingCollectibleTypes(self, character)
    return CHARACTER_STARTING_COLLECTIBLE_TYPES[character]
end
--- Helper function to get the trinket that is granted to a particular character at the beginning of
-- a run. Returns undefined if the character does not start with a trinket.
-- 
-- Note that this will return undefined for Eden and Tainted Eden.
function ____exports.getCharacterStartingTrinketType(self, character)
    return CHARACTER_STARTING_TRINKET_TYPE[character]
end
function ____exports.isFlyingCharacter(self, character)
    return FLYING_CHARACTERS_SET:has(character)
end
--- Helper function to check if the provided character is one of the characters that are selectable
-- from the main menu (and have achievements related to completing the various bosses and so on).
function ____exports.isMainCharacter(self, character)
    return MAIN_CHARACTERS_SET:has(character)
end
return ____exports
 end,
["functions.players"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySome = ____lualib.__TS__ArraySome
local __TS__New = ____lualib.__TS__New
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArrayAt = ____lualib.__TS__ArrayAt
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local ____exports = {}
local isTaintedModded
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ControllerIndex = ____isaac_2Dtypescript_2Ddefinitions.ControllerIndex
local NullItemID = ____isaac_2Dtypescript_2Ddefinitions.NullItemID
local PlayerForm = ____isaac_2Dtypescript_2Ddefinitions.PlayerForm
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local TearFlag = ____isaac_2Dtypescript_2Ddefinitions.TearFlag
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____characters = require("functions.characters")
local getCharacterName = ____characters.getCharacterName
local isVanillaCharacter = ____characters.isVanillaCharacter
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____playerIndex = require("functions.playerIndex")
local getAllPlayers = ____playerIndex.getAllPlayers
local getPlayerIndexVanilla = ____playerIndex.getPlayerIndexVanilla
local getPlayers = ____playerIndex.getPlayers
local ____types = require("functions.types")
local isNumber = ____types.isNumber
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____repeat = ____utils["repeat"]
--- Helper function to get an array containing the characters of all of the current players.
function ____exports.getCharacters(self)
    local players = getPlayers(nil)
    return __TS__ArrayMap(
        players,
        function(____, player) return player:GetPlayerType() end
    )
end
function ____exports.isModdedPlayer(self, player)
    return not ____exports.isVanillaPlayer(nil, player)
end
function ____exports.isVanillaPlayer(self, player)
    local character = player:GetPlayerType()
    return isVanillaCharacter(nil, character)
end
function isTaintedModded(self, player)
    local character = player:GetPlayerType()
    local name = player:GetName()
    local taintedCharacter = Isaac.GetPlayerTypeByName(name, true)
    return character == taintedCharacter
end
--- Helper function to check to see if any player is holding up an item (from e.g. an active item
-- activation, a poop from IBS, etc.).
function ____exports.anyPlayerHoldingItem(self)
    local players = getAllPlayers(nil)
    return __TS__ArraySome(
        players,
        function(____, player) return player:IsHoldingItem() end
    )
end
--- Helper function to determine if the given character is present.
-- 
-- This function is variadic, meaning that you can supply as many characters as you want to check
-- for. Returns true if any of the characters supplied are present.
function ____exports.anyPlayerIs(self, ...)
    local matchingCharacters = {...}
    local matchingCharacterSet = __TS__New(ReadonlySet, matchingCharacters)
    local characters = ____exports.getCharacters(nil)
    return __TS__ArraySome(
        characters,
        function(____, character) return matchingCharacterSet:has(character) end
    )
end
--- Helper function to determine if a player will destroy a rock/pot/skull if they walk over it.
-- 
-- The following situations allow for this to be true:
-- - the player has Leo (collectible 302)
-- - the player has Thunder Thighs (collectible 314)
-- - the player is under the effects of Mega Mush (collectible 625)
-- - the player has Stompy (transformation 13)
function ____exports.canPlayerCrushRocks(self, player)
    local effects = player:GetEffects()
    return player:HasCollectible(CollectibleType.LEO) or player:HasCollectible(CollectibleType.THUNDER_THIGHS) or effects:HasCollectibleEffect(CollectibleType.MEGA_MUSH) or player:HasPlayerForm(PlayerForm.STOMPY)
end
--- Helper function to remove a collectible or trinket that is currently queued to go into a player's
-- inventory (i.e. the item is being held over their head).
-- 
-- If the player does not have an item currently queued, then this function will be a no-op.
-- 
-- Returns whether an item was actually dequeued.
-- 
-- Under the hood, this clones the `QueuedItemData`, since directly setting the `Item` field to
-- `undefined` does not work for some reason.
function ____exports.dequeueItem(self, player)
    if player.QueuedItem.Item == nil then
        return false
    end
    local queue = player.QueuedItem
    queue.Item = nil
    player.QueuedItem = queue
    return true
end
--- Helper function to get how long Azazel's Brimstone laser should be. You can pass either an
-- `EntityPlayer` object or a tear height stat.
-- 
-- The formula for calculating it is: 32 - 2.5 * tearHeight
function ____exports.getAzazelBrimstoneDistance(self, playerOrTearHeight)
    local tearHeight = isNumber(nil, playerOrTearHeight) and playerOrTearHeight or playerOrTearHeight.TearHeight
    return 32 - 2.5 * tearHeight
end
--- Helper function to get the closest player to a certain position. Note that this will never
-- include players with a non-undefined parent, since they are not real players (e.g. the Strawman
-- Keeper).
function ____exports.getClosestPlayer(self, position)
    local closestPlayer
    local closestDistance = math.huge
    for ____, player in ipairs(getPlayers(nil)) do
        local distance = position:Distance(player.Position)
        if distance < closestDistance then
            closestPlayer = player
            closestDistance = distance
        end
    end
    assertDefined(nil, closestPlayer, "Failed to find the closest player.")
    return closestPlayer
end
--- Helper function to return the player with the highest ID, according to the `Isaac.GetPlayer`
-- method.
function ____exports.getFinalPlayer(self)
    local players = getPlayers(nil)
    local lastPlayer = __TS__ArrayAt(players, -1)
    assertDefined(nil, lastPlayer, "Failed to get the final player since there were 0 players.")
    return lastPlayer
end
--- Helper function to get the first player with the lowest frame count. Useful to find a freshly
-- spawned player after using items like Esau Jr. Don't use this function if two or more players
-- will be spawned on the same frame.
function ____exports.getNewestPlayer(self)
    local newestPlayer
    local lowestFrame = math.huge
    for ____, player in ipairs(getPlayers(nil)) do
        if player.FrameCount < lowestFrame then
            newestPlayer = player
            lowestFrame = player.FrameCount
        end
    end
    assertDefined(nil, newestPlayer, "Failed to find the newest player.")
    return newestPlayer
end
--- Iterates over all players and checks if any are close enough to the specified position.
-- 
-- @returns The first player found when iterating upwards from index 0.
function ____exports.getPlayerCloserThan(self, position, distance)
    local players = getPlayers(nil)
    return __TS__ArrayFind(
        players,
        function(____, player) return player.Position:Distance(position) <= distance end
    )
end
--- Helper function to get the player from a tear, laser, bomb, etc. Returns undefined if the entity
-- does not correspond to any particular player.
-- 
-- This function works by looking at the `Parent` and the `SpawnerEntity` fields (in that order). As
-- a last resort, it will attempt to use the `Entity.ToPlayer` method on the entity itself.
function ____exports.getPlayerFromEntity(self, entity)
    if entity.Parent ~= nil then
        local player = entity.Parent:ToPlayer()
        if player ~= nil then
            return player
        end
        local familiar = entity.Parent:ToFamiliar()
        if familiar ~= nil then
            return familiar.Player
        end
    end
    if entity.SpawnerEntity ~= nil then
        local player = entity.SpawnerEntity:ToPlayer()
        if player ~= nil then
            return player
        end
        local familiar = entity.SpawnerEntity:ToFamiliar()
        if familiar ~= nil then
            return familiar.Player
        end
    end
    return entity:ToPlayer()
end
--- Helper function to get an `EntityPlayer` object from an `EntityPtr`. Returns undefined if the
-- entity has gone out of scope or if the associated entity is not a player.
function ____exports.getPlayerFromPtr(self, entityPtr)
    local entity = entityPtr.Ref
    if entity == nil then
        return nil
    end
    return entity:ToPlayer()
end
--- Helper function to get the proper name of the player. Use this instead of the
-- `EntityPlayer.GetName` method because it accounts for Blue Baby, Lazarus II, and Tainted
-- characters.
function ____exports.getPlayerName(self, player)
    local character = player:GetPlayerType()
    return ____exports.isModdedPlayer(nil, player) and player:GetName() or getCharacterName(nil, character)
end
--- Returns the combined value of all of the player's red hearts, soul/black hearts, and bone hearts,
-- minus the value of the player's rotten hearts.
-- 
-- This is equivalent to the number of hits that the player can currently take, but does not take
-- into account double damage from champion enemies and/or being on later floors. (For example, on
-- Womb 1, players who have 1 soul heart remaining would die in 1 hit to anything, even though this
-- function would report that they have 2 hits remaining.)
function ____exports.getPlayerNumHitsRemaining(self, player)
    local hearts = player:GetHearts()
    local soulHearts = player:GetSoulHearts()
    local boneHearts = player:GetBoneHearts()
    local eternalHearts = player:GetEternalHearts()
    local rottenHearts = player:GetRottenHearts()
    return hearts + soulHearts + boneHearts + eternalHearts - rottenHearts
end
--- Helper function to get all of the players that are a certain character.
-- 
-- This function is variadic, meaning that you can supply as many characters as you want to check
-- for. Returns true if any of the characters supplied are present.
function ____exports.getPlayersOfType(self, ...)
    local characters = {...}
    local charactersSet = __TS__New(ReadonlySet, characters)
    local players = getPlayers(nil)
    return __TS__ArrayFilter(
        players,
        function(____, player)
            local character = player:GetPlayerType()
            return charactersSet:has(character)
        end
    )
end
--- Helper function to get all of the players that are using keyboard (i.e.
-- `ControllerIndex.KEYBOARD`). This function returns an array of players because it is possible
-- that there is more than one player with the same controller index (e.g. Jacob & Esau).
-- 
-- Note that this function includes players with a non-undefined parent like e.g. the Strawman
-- Keeper.
function ____exports.getPlayersOnKeyboard(self)
    local players = getAllPlayers(nil)
    return __TS__ArrayFilter(
        players,
        function(____, player) return player.ControllerIndex == ControllerIndex.KEYBOARD end
    )
end
--- Helper function to get all of the players that match the provided controller index. This function
-- returns an array of players because it is possible that there is more than one player with the
-- same controller index (e.g. Jacob & Esau).
-- 
-- Note that this function includes players with a non-undefined parent like e.g. the Strawman
-- Keeper.
function ____exports.getPlayersWithControllerIndex(self, controllerIndex)
    local players = getAllPlayers(nil)
    return __TS__ArrayFilter(
        players,
        function(____, player) return player.ControllerIndex == controllerIndex end
    )
end
--- Helper function to check to see if a player has one or more transformations.
-- 
-- This function is variadic, meaning that you can supply as many transformations as you want to
-- check for. Returns true if the player has any of the supplied transformations.
function ____exports.hasForm(self, player, ...)
    local playerForms = {...}
    return __TS__ArraySome(
        playerForms,
        function(____, playerForm) return player:HasPlayerForm(playerForm) end
    )
end
--- Helper function to check if a player has homing tears.
-- 
-- Under the hood, this checks the `EntityPlayer.TearFlags` variable for `TearFlag.HOMING` (1 << 2).
function ____exports.hasHoming(self, player)
    return hasFlag(nil, player.TearFlags, TearFlag.HOMING)
end
--- After touching a white fire, a player will turn into The Lost until they clear a room.
function ____exports.hasLostCurse(self, player)
    local effects = player:GetEffects()
    return effects:HasNullEffect(NullItemID.LOST_CURSE)
end
--- Helper function to check if a player has piercing tears.
-- 
-- Under the hood, this checks the `EntityPlayer.TearFlags` variable for `TearFlag.PIERCING` (1 <<
-- 1).
function ____exports.hasPiercing(self, player)
    return hasFlag(nil, player.TearFlags, TearFlag.PIERCING)
end
--- Helper function to check if a player has spectral tears.
-- 
-- Under the hood, this checks the `EntityPlayer.TearFlags` variable for `TearFlag.SPECTRAL` (1 <<
-- 0).
function ____exports.hasSpectral(self, player)
    return hasFlag(nil, player.TearFlags, TearFlag.SPECTRAL)
end
--- Helper function for detecting when a player is Bethany or Tainted Bethany. This is useful if you
-- need to adjust UI elements to account for Bethany's soul charges or Tainted Bethany's blood
-- charges.
function ____exports.isBethany(self, player)
    local character = player:GetPlayerType()
    return character == PlayerType.BETHANY or character == PlayerType.BETHANY_B
end
--- Helper function to check if a player is a specific character (i.e. `PlayerType`).
-- 
-- This function is variadic, meaning that you can supply as many characters as you want to check
-- for. Returns true if the player is any of the supplied characters.
function ____exports.isCharacter(self, player, ...)
    local characters = {...}
    local characterSet = __TS__New(ReadonlySet, characters)
    local character = player:GetPlayerType()
    return characterSet:has(character)
end
--- Helper function to see if a damage source is from a player. Use this instead of comparing to the
-- entity directly because it takes familiars into account.
function ____exports.isDamageFromPlayer(self, damageSource)
    local player = damageSource:ToPlayer()
    if player ~= nil then
        return true
    end
    local indirectPlayer = ____exports.getPlayerFromEntity(nil, damageSource)
    return indirectPlayer ~= nil
end
--- Helper function for detecting when a player is Eden or Tainted Eden. Useful for situations where
-- you want to know if the starting stats were randomized, for example.
function ____exports.isEden(self, player)
    local character = player:GetPlayerType()
    return character == PlayerType.EDEN or character == PlayerType.EDEN_B
end
function ____exports.isFirstPlayer(self, player)
    return getPlayerIndexVanilla(nil, player) == 0
end
--- Helper function for detecting when a player is Jacob or Esau. This will only match the
-- non-tainted versions of these characters.
function ____exports.isJacobOrEsau(self, player)
    local character = player:GetPlayerType()
    return character == PlayerType.JACOB or character == PlayerType.ESAU
end
--- Helper function for detecting when a player is Keeper or Tainted Keeper. Useful for situations
-- where you want to know if the health is coin hearts, for example.
function ____exports.isKeeper(self, player)
    local character = player:GetPlayerType()
    return character == PlayerType.KEEPER or character == PlayerType.KEEPER_B
end
--- Helper function for detecting when a player is The Lost or Tainted Lost.
function ____exports.isLost(self, player)
    local character = player:GetPlayerType()
    return character == PlayerType.LOST or character == PlayerType.LOST_B
end
--- Helper function for determining if a player is able to turn their head by pressing the shooting
-- buttons.
-- 
-- Under the hood, this function uses the `EntityPlayer.IsExtraAnimationFinished` method.
function ____exports.isPlayerAbleToAim(self, player)
    return player:IsExtraAnimationFinished()
end
--- Helper function for detecting if a player is one of the Tainted characters.
function ____exports.isTainted(self, player)
    local character = player:GetPlayerType()
    local ____isVanillaPlayer_result_0
    if ____exports.isVanillaPlayer(nil, player) then
        ____isVanillaPlayer_result_0 = character >= PlayerType.ISAAC_B
    else
        ____isVanillaPlayer_result_0 = isTaintedModded(nil, player)
    end
    return ____isVanillaPlayer_result_0
end
--- Helper function for detecting when a player is Tainted Lazarus or Dead Tainted Lazarus.
function ____exports.isTaintedLazarus(self, player)
    local character = player:GetPlayerType()
    return character == PlayerType.LAZARUS_B or character == PlayerType.LAZARUS_2_B
end
--- Helper function to remove the Dead Eye multiplier from a player.
-- 
-- Note that each time the `EntityPlayer.ClearDeadEyeCharge` method is called, it only has a chance
-- of working, so this function calls it 100 times to be safe.
function ____exports.removeDeadEyeMultiplier(self, player)
    ____repeat(
        nil,
        100,
        function()
            player:ClearDeadEyeCharge()
        end
    )
end
--- Helper function to blindfold the player by using a hack with the challenge variable.
-- 
-- Note that if the player dies and respawns (from e.g. Dead Cat), the blindfold will have to be
-- reapplied.
-- 
-- Under the hood, this function sets the challenge to one with a blindfold, changes the player to
-- the same character that they currently are, and then changes the challenge back. This method was
-- discovered by im_tem.
-- 
-- @param player The player to apply or remove the blindfold state from.
-- @param enabled Whether to apply or remove the blindfold.
-- @param modifyCostume Optional. Whether to add or remove the blindfold costume. Default is true.
function ____exports.setBlindfold(self, player, enabled, modifyCostume)
    if modifyCostume == nil then
        modifyCostume = true
    end
    local character = player:GetPlayerType()
    local challenge = Isaac.GetChallenge()
    if enabled then
        game.Challenge = Challenge.SOLAR_SYSTEM
        player:ChangePlayerType(character)
        game.Challenge = challenge
        if not modifyCostume then
            player:TryRemoveNullCostume(NullItemID.BLINDFOLD)
        end
    else
        game.Challenge = Challenge.NULL
        player:ChangePlayerType(character)
        game.Challenge = challenge
        if modifyCostume then
            player:TryRemoveNullCostume(NullItemID.BLINDFOLD)
        end
    end
end
return ____exports
 end,
["classes.callbacks.PostCursedTeleport"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local DamageFlag = ____isaac_2Dtypescript_2Ddefinitions.DamageFlag
local PlayerVariant = ____isaac_2Dtypescript_2Ddefinitions.PlayerVariant
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____frames = require("functions.frames")
local onGameFrame = ____frames.onGameFrame
local ____playerDataStructures = require("functions.playerDataStructures")
local mapGetPlayer = ____playerDataStructures.mapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____players = require("functions.players")
local getPlayerNumHitsRemaining = ____players.getPlayerNumHitsRemaining
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {
    run = {playersDamageFrameMap = __TS__New(Map)},
    level = {numSacrifices = 0}
}
____exports.PostCursedTeleport = __TS__Class()
local PostCursedTeleport = ____exports.PostCursedTeleport
PostCursedTeleport.name = "PostCursedTeleport"
__TS__ClassExtends(PostCursedTeleport, CustomCallback)
function PostCursedTeleport.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePlayer
    self.entityTakeDmgPlayer = function(____, player, _amount, damageFlags, _source, _countdownFrames)
        self:incrementNumSacrifices(damageFlags)
        self:setDamageFrame(player, damageFlags)
        return nil
    end
    self.postPlayerRenderReorderedPlayer = function(____, player, _renderOffset)
        local trackingArray = mapGetPlayer(nil, v.run.playersDamageFrameMap, player)
        if trackingArray == nil then
            return
        end
        local lastDamageFrame, callbackActivatedOnThisFrame = table.unpack(trackingArray)
        if not self:playerIsTeleportingFromCursedTeleport(player, lastDamageFrame) then
            return
        end
        if callbackActivatedOnThisFrame then
            return
        end
        local gameFrameCount = game:GetFrameCount()
        local newTrackingArray = {gameFrameCount, true}
        mapSetPlayer(nil, v.run.playersDamageFrameMap, player, newTrackingArray)
        self:fire(player)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.ENTITY_TAKE_DMG_PLAYER, self.entityTakeDmgPlayer}, {ModCallbackCustom.POST_PLAYER_RENDER_REORDERED, self.postPlayerRenderReorderedPlayer, {PlayerVariant.PLAYER}}}
end
function PostCursedTeleport.prototype.incrementNumSacrifices(self, damageFlags)
    local room = game:GetRoom()
    local roomType = room:GetType()
    local isSpikeDamage = hasFlag(nil, damageFlags, DamageFlag.SPIKES)
    if roomType == RoomType.SACRIFICE and isSpikeDamage then
        local ____v_level_0, ____numSacrifices_1 = v.level, "numSacrifices"
        ____v_level_0[____numSacrifices_1] = ____v_level_0[____numSacrifices_1] + 1
    end
end
function PostCursedTeleport.prototype.setDamageFrame(self, player, damageFlags)
    local gameFrameCount = game:GetFrameCount()
    local trackingArray = mapGetPlayer(nil, v.run.playersDamageFrameMap, player)
    if trackingArray ~= nil then
        local lastDamageFrame, callbackFiredOnThisFrame = table.unpack(trackingArray)
        if lastDamageFrame == gameFrameCount and callbackFiredOnThisFrame then
            return
        end
    end
    if self:isPotentialNaturalTeleportFromSacrificeRoom(damageFlags) then
        return
    end
    local newTrackingArray = {gameFrameCount, false}
    mapSetPlayer(nil, v.run.playersDamageFrameMap, player, newTrackingArray)
end
function PostCursedTeleport.prototype.isPotentialNaturalTeleportFromSacrificeRoom(self, damageFlags)
    local room = game:GetRoom()
    local roomType = room:GetType()
    local isSpikeDamage = hasFlag(nil, damageFlags, DamageFlag.SPIKES)
    return roomType == RoomType.SACRIFICE and isSpikeDamage and (v.level.numSacrifices == 6 or v.level.numSacrifices >= 12)
end
function PostCursedTeleport.prototype.playerIsTeleportingFromCursedTeleport(self, player, lastDamageFrame)
    if not onGameFrame(nil, lastDamageFrame) then
        return false
    end
    local sprite = player:GetSprite()
    if not sprite:IsPlaying("TeleportUp") or sprite:GetFrame() ~= 1 then
        return false
    end
    if player:HasCollectible(CollectibleType.CURSED_EYE) then
        return true
    end
    local numHitsRemaining = getPlayerNumHitsRemaining(nil, player)
    if player:HasTrinket(TrinketType.CURSED_SKULL) and numHitsRemaining == 1 then
        return true
    end
    return false
end
return ____exports
 end,
["classes.callbacks.PostCustomRevive"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostCustomRevive = __TS__Class()
local PostCustomRevive = ____exports.PostCustomRevive
PostCustomRevive.name = "PostCustomRevive"
__TS__ClassExtends(PostCustomRevive, CustomCallback)
function PostCustomRevive.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _player, revivalType = table.unpack(fireArgs)
        local callbackRevivalType = table.unpack(optionalArgs)
        return callbackRevivalType == nil or revivalType == callbackRevivalType
    end
    self.featuresUsed = {ISCFeature.CUSTOM_REVIVE}
end
return ____exports
 end,
["functions.math"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
local ____direction = require("functions.direction")
local directionToVector = ____direction.directionToVector
--- Helper function to normalize a number, ensuring that it is within a certain range.
-- 
-- - If `num` is less than `min`, then it will be clamped to `min`.
-- - If `num` is greater than `max`, then it will be clamped to `max`.
function ____exports.clamp(self, num, min, max)
    return math.max(
        min,
        math.min(num, max)
    )
end
function ____exports.getAngleDifference(self, angle1, angle2)
    local subtractedAngle = angle1 - angle2
    return (subtractedAngle + 180) % 360 - 180
end
--- Helper function to get an array of equidistant points on the circumference around a circle.
-- Useful for equally distributing things in a circle pattern.
-- 
-- @param centerPos A position that represents the center of the center to get the points from.
-- @param radius The radius of the circle.
-- @param numPoints The number of points on the circumference of the circle to get.
-- @param xMultiplier An optional multiplier to get the points around an oval. Default is 1.
-- @param yMultiplier An optional multiplier to get the points around an oval. Default is 1.
-- @param initialDirection By default, the first point on the circle will be on the top center, but
-- this can be optionally changed by specifying this argument.
function ____exports.getCircleDiscretizedPoints(self, centerPos, radius, numPoints, xMultiplier, yMultiplier, initialDirection)
    if xMultiplier == nil then
        xMultiplier = 1
    end
    if yMultiplier == nil then
        yMultiplier = 1
    end
    if initialDirection == nil then
        initialDirection = Direction.UP
    end
    local vector = directionToVector(nil, initialDirection)
    local initialPosition = vector * radius
    local positions = {}
    do
        local i = 0
        while i < numPoints do
            local rotatedPosition = initialPosition:Rotated(i * 360 / numPoints)
            rotatedPosition.X = rotatedPosition.X * xMultiplier
            rotatedPosition.Y = rotatedPosition.Y * yMultiplier
            local positionFromCenter = centerPos + rotatedPosition
            positions[#positions + 1] = positionFromCenter
            i = i + 1
        end
    end
    return positions
end
--- Helper function to check if a given position is within a given rectangle.
-- 
-- This is an inclusive check, meaning that it will return true if the position is on the border of
-- the rectangle.
function ____exports.inRectangle(self, position, topLeft, bottomRight)
    return position.X >= topLeft.X and position.X <= bottomRight.X and position.Y >= topLeft.Y and position.Y <= bottomRight.Y
end
--- From: https://www.geeksforgeeks.org/check-if-any-point-overlaps-the-given-circle-and-rectangle/
function ____exports.isCircleIntersectingRectangle(self, circleCenter, circleRadius, rectangleTopLeft, rectangleBottomRight)
    local nearestX = math.max(
        rectangleTopLeft.X,
        math.min(circleCenter.X, rectangleBottomRight.X)
    )
    local nearestY = math.max(
        rectangleTopLeft.Y,
        math.min(circleCenter.Y, rectangleBottomRight.Y)
    )
    local nearestPointToCircleOnRectangle = Vector(nearestX, nearestY)
    local distanceToCenterOfCircle = nearestPointToCircleOnRectangle:Distance(circleCenter)
    return distanceToCenterOfCircle <= circleRadius
end
function ____exports.isEven(self, num)
    return num & 1 == 0
end
function ____exports.isOdd(self, num)
    return num & 1 == 1
end
function ____exports.lerp(self, a, b, pos)
    return a + (b - a) * pos
end
function ____exports.lerpAngleDegrees(self, aStart, aEnd, percent)
    return aStart + ____exports.getAngleDifference(nil, aStart, aEnd) * percent
end
--- If rounding fails, this function returns 0.
-- 
-- From: http://lua-users.org/wiki/SimpleRound
-- 
-- @param num The number to round.
-- @param numDecimalPlaces Optional. Default is 0.
function ____exports.round(self, num, numDecimalPlaces)
    if numDecimalPlaces == nil then
        numDecimalPlaces = 0
    end
    local roundedNum = tonumber(string.format(
        ("%." .. tostring(numDecimalPlaces)) .. "f",
        num
    ))
    return roundedNum or 0
end
---
-- @returns 1 if n is positive, -1 if n is negative, or 0 if n is 0.
function ____exports.sign(self, n)
    if n > 0 then
        return 1
    end
    if n < 0 then
        return -1
    end
    return 0
end
--- Breaks a number into chunks of a given size. This is similar to the `String.split` method, but
-- for a number instead of a string.
-- 
-- For example, `splitNumber(90, 25)` would return an array with four elements:
-- 
-- - [1, 25]
-- - [26, 50]
-- - [51, 75]
-- - [76, 90]
-- 
-- @param num The number to split into chunks. This must be a positive integer.
-- @param size The size of each chunk. This must be a positive integer.
-- @param startAtZero Whether to start at 0. Defaults to false. If true, the chunks will start at 0
-- instead of 1.
function ____exports.splitNumber(self, num, size, startAtZero)
    if startAtZero == nil then
        startAtZero = false
    end
    if num <= 0 then
        error("The number to split needs to be a positive number and is instead: " .. tostring(num))
    end
    if size <= 0 then
        error("The size to split needs to be a positive number and is instead: " .. tostring(num))
    end
    local chunks = {}
    local start = startAtZero and 0 or 1
    while start <= num do
        local ____end = math.min(start + size - 1, num)
        chunks[#chunks + 1] = {start, ____end}
        start = start + size
    end
    return chunks
end
function ____exports.tanh(self, x)
    return (math.exp(x) - math.exp(-x)) / (math.exp(x) + math.exp(-x))
end
return ____exports
 end,
["functions.effects"] = function(...) 
local ____exports = {}
local ____math = require("functions.math")
local inRectangle = ____math.inRectangle
--- For `EntityType.EFFECT` (1000), `EffectVariant.DICE_FLOOR` (76).
____exports.DICE_FLOOR_TRIGGER_SQUARE_SIZE = 75
--- Helper function to see if a player is close enough to activate a Dice Room floor.
function ____exports.isCloseEnoughToTriggerDiceFloor(self, player, diceFloor)
    local topLeft = diceFloor.Position + Vector(-____exports.DICE_FLOOR_TRIGGER_SQUARE_SIZE, -____exports.DICE_FLOOR_TRIGGER_SQUARE_SIZE)
    local bottomRight = diceFloor.Position + Vector(____exports.DICE_FLOOR_TRIGGER_SQUARE_SIZE, ____exports.DICE_FLOOR_TRIGGER_SQUARE_SIZE)
    return inRectangle(nil, player.Position, topLeft, bottomRight)
end
return ____exports
 end,
["classes.callbacks.PostDiceRoomActivated"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EffectVariant = ____isaac_2Dtypescript_2Ddefinitions.EffectVariant
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____effects = require("functions.effects")
local isCloseEnoughToTriggerDiceFloor = ____effects.isCloseEnoughToTriggerDiceFloor
local ____players = require("functions.players")
local getClosestPlayer = ____players.getClosestPlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {diceRoomActivated = false}}
____exports.PostDiceRoomActivated = __TS__Class()
local PostDiceRoomActivated = ____exports.PostDiceRoomActivated
PostDiceRoomActivated.name = "PostDiceRoomActivated"
__TS__ClassExtends(PostDiceRoomActivated, CustomCallback)
function PostDiceRoomActivated.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _player, diceFloorSubType = table.unpack(fireArgs)
        local callbackDiceFloorSubType = table.unpack(optionalArgs)
        return callbackDiceFloorSubType == nil or diceFloorSubType == callbackDiceFloorSubType
    end
    self.postEffectUpdateDiceFloor = function(____, effect)
        if v.room.diceRoomActivated then
            return
        end
        if effect.FrameCount == 0 then
            return
        end
        local closestPlayer = getClosestPlayer(nil, effect.Position)
        if isCloseEnoughToTriggerDiceFloor(nil, closestPlayer, effect) then
            v.room.diceRoomActivated = true
            self:fire(closestPlayer, effect.SubType)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_EFFECT_UPDATE, self.postEffectUpdateDiceFloor, {EffectVariant.DICE_FLOOR}}}
end
return ____exports
 end,
["arrays.cachedEnumValues"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ActiveSlot = ____isaac_2Dtypescript_2Ddefinitions.ActiveSlot
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local CacheFlag = ____isaac_2Dtypescript_2Ddefinitions.CacheFlag
local ControllerIndex = ____isaac_2Dtypescript_2Ddefinitions.ControllerIndex
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
local DoorSlotFlag = ____isaac_2Dtypescript_2Ddefinitions.DoorSlotFlag
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local GridEntityXMLType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityXMLType
local ItemConfigCardType = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigCardType
local ItemConfigTag = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigTag
local ItemPoolType = ____isaac_2Dtypescript_2Ddefinitions.ItemPoolType
local Keyboard = ____isaac_2Dtypescript_2Ddefinitions.Keyboard
local PillColor = ____isaac_2Dtypescript_2Ddefinitions.PillColor
local PlayerForm = ____isaac_2Dtypescript_2Ddefinitions.PlayerForm
local PocketItemSlot = ____isaac_2Dtypescript_2Ddefinitions.PocketItemSlot
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local SeedEffect = ____isaac_2Dtypescript_2Ddefinitions.SeedEffect
local SoundEffect = ____isaac_2Dtypescript_2Ddefinitions.SoundEffect
local TrinketSlot = ____isaac_2Dtypescript_2Ddefinitions.TrinketSlot
local ____HealthType = require("enums.HealthType")
local HealthType = ____HealthType.HealthType
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____PlayerStat = require("enums.PlayerStat")
local PlayerStat = ____PlayerStat.PlayerStat
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
local ____enums = require("functions.enums")
local getEnumValues = ____enums.getEnumValues
____exports.ACTIVE_SLOT_VALUES = getEnumValues(nil, ActiveSlot)
____exports.BOSS_ID_VALUES = getEnumValues(nil, BossID)
____exports.CACHE_FLAG_VALUES = getEnumValues(nil, CacheFlag)
____exports.CONTROLLER_INDEX_VALUES = getEnumValues(nil, ControllerIndex)
____exports.DOOR_SLOT_FLAG_VALUES = getEnumValues(nil, DoorSlotFlag)
____exports.DOOR_SLOT_VALUES = getEnumValues(nil, DoorSlot)
____exports.GRID_ENTITY_TYPE_VALUES = getEnumValues(nil, GridEntityType)
____exports.GRID_ENTITY_XML_TYPE_VALUES = getEnumValues(nil, GridEntityXMLType)
____exports.MOD_CALLBACK_CUSTOM_VALUES = getEnumValues(nil, ModCallbackCustom)
____exports.ITEM_CONFIG_TAG_VALUES = getEnumValues(nil, ItemConfigTag)
____exports.ITEM_CONFIG_CARD_TYPE_VALUES = getEnumValues(nil, ItemConfigCardType)
____exports.ITEM_POOL_TYPE_VALUES = getEnumValues(nil, ItemPoolType)
____exports.KEYBOARD_VALUES = getEnumValues(nil, Keyboard)
____exports.HEALTH_TYPE_VALUES = getEnumValues(nil, HealthType)
____exports.PILL_COLOR_VALUES = getEnumValues(nil, PillColor)
____exports.PLAYER_FORM_VALUES = getEnumValues(nil, PlayerForm)
____exports.POCKET_ITEM_SLOT_VALUES = getEnumValues(nil, PocketItemSlot)
____exports.ROOM_SHAPE_VALUES = getEnumValues(nil, RoomShape)
____exports.SEED_EFFECTS = getEnumValues(nil, SeedEffect)
____exports.SERIALIZATION_BRAND_VALUES = getEnumValues(nil, SerializationBrand)
____exports.SOUND_EFFECT_VALUES = getEnumValues(nil, SoundEffect)
____exports.PLAYER_STAT_VALUES = getEnumValues(nil, PlayerStat)
____exports.TRINKET_SLOT_VALUES = getEnumValues(nil, TrinketSlot)
return ____exports
 end,
["objects.doorSlotFlagToDoorSlot"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
local DoorSlotFlag = ____isaac_2Dtypescript_2Ddefinitions.DoorSlotFlag
____exports.DEFAULT_DOOR_SLOT = DoorSlot.NO_DOOR_SLOT
____exports.DOOR_SLOT_FLAG_TO_DOOR_SLOT = {
    [DoorSlotFlag.LEFT_0] = DoorSlot.LEFT_0,
    [DoorSlotFlag.UP_0] = DoorSlot.UP_0,
    [DoorSlotFlag.RIGHT_0] = DoorSlot.RIGHT_0,
    [DoorSlotFlag.DOWN_0] = DoorSlot.DOWN_0,
    [DoorSlotFlag.LEFT_1] = DoorSlot.LEFT_1,
    [DoorSlotFlag.UP_1] = DoorSlot.UP_1,
    [DoorSlotFlag.RIGHT_1] = DoorSlot.RIGHT_1,
    [DoorSlotFlag.DOWN_1] = DoorSlot.DOWN_1
}
return ____exports
 end,
["objects.doorSlotToDirection"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
____exports.DOOR_SLOT_TO_DIRECTION = {
    [DoorSlot.NO_DOOR_SLOT] = Direction.NO_DIRECTION,
    [DoorSlot.LEFT_0] = Direction.LEFT,
    [DoorSlot.UP_0] = Direction.UP,
    [DoorSlot.RIGHT_0] = Direction.RIGHT,
    [DoorSlot.DOWN_0] = Direction.DOWN,
    [DoorSlot.LEFT_1] = Direction.LEFT,
    [DoorSlot.UP_1] = Direction.UP,
    [DoorSlot.RIGHT_1] = Direction.RIGHT,
    [DoorSlot.DOWN_1] = Direction.DOWN
}
return ____exports
 end,
["objects.doorSlotToDoorSlotFlag"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
local DoorSlotFlag = ____isaac_2Dtypescript_2Ddefinitions.DoorSlotFlag
local DoorSlotFlagZero = ____isaac_2Dtypescript_2Ddefinitions.DoorSlotFlagZero
____exports.DOOR_SLOT_TO_DOOR_SLOT_FLAG = {
    [DoorSlot.NO_DOOR_SLOT] = DoorSlotFlagZero,
    [DoorSlot.LEFT_0] = DoorSlotFlag.LEFT_0,
    [DoorSlot.UP_0] = DoorSlotFlag.UP_0,
    [DoorSlot.RIGHT_0] = DoorSlotFlag.RIGHT_0,
    [DoorSlot.DOWN_0] = DoorSlotFlag.DOWN_0,
    [DoorSlot.LEFT_1] = DoorSlotFlag.LEFT_1,
    [DoorSlot.UP_1] = DoorSlotFlag.UP_1,
    [DoorSlot.RIGHT_1] = DoorSlotFlag.RIGHT_1,
    [DoorSlot.DOWN_1] = DoorSlotFlag.DOWN_1
}
return ____exports
 end,
["objects.oppositeDoorSlots"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
____exports.OPPOSITE_DOOR_SLOTS = {
    [DoorSlot.NO_DOOR_SLOT] = nil,
    [DoorSlot.LEFT_0] = DoorSlot.RIGHT_0,
    [DoorSlot.UP_0] = DoorSlot.DOWN_0,
    [DoorSlot.RIGHT_0] = DoorSlot.LEFT_0,
    [DoorSlot.DOWN_0] = DoorSlot.UP_0,
    [DoorSlot.LEFT_1] = DoorSlot.RIGHT_1,
    [DoorSlot.UP_1] = DoorSlot.DOWN_1,
    [DoorSlot.RIGHT_1] = DoorSlot.LEFT_1,
    [DoorSlot.DOWN_1] = DoorSlot.UP_1
}
return ____exports
 end,
["objects.roomShapeToDoorSlotCoordinates"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
--- The coordinates correspond to the x and y values that are present in a room's XML file.
-- 
-- e.g. `<door exists="False" x="-1" y="3" />`
____exports.ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES = {
    [RoomShape.SHAPE_1x1] = {[DoorSlot.LEFT_0] = {-1, 3}, [DoorSlot.UP_0] = {6, -1}, [DoorSlot.RIGHT_0] = {13, 3}, [DoorSlot.DOWN_0] = {6, 7}},
    [RoomShape.IH] = {[DoorSlot.LEFT_0] = {-1, 3}, [DoorSlot.RIGHT_0] = {13, 3}},
    [RoomShape.IV] = {[DoorSlot.UP_0] = {6, -1}, [DoorSlot.DOWN_0] = {6, 7}},
    [RoomShape.SHAPE_1x2] = {
        [DoorSlot.LEFT_0] = {-1, 3},
        [DoorSlot.UP_0] = {6, -1},
        [DoorSlot.RIGHT_0] = {13, 3},
        [DoorSlot.DOWN_0] = {6, 14},
        [DoorSlot.LEFT_1] = {-1, 10},
        [DoorSlot.RIGHT_1] = {13, 10}
    },
    [RoomShape.IIV] = {[DoorSlot.UP_0] = {6, -1}, [DoorSlot.DOWN_0] = {6, 14}},
    [RoomShape.SHAPE_2x1] = {
        [DoorSlot.LEFT_0] = {-1, 3},
        [DoorSlot.UP_0] = {6, -1},
        [DoorSlot.RIGHT_0] = {26, 3},
        [DoorSlot.DOWN_0] = {6, 7},
        [DoorSlot.UP_1] = {19, -1},
        [DoorSlot.DOWN_1] = {19, 7}
    },
    [RoomShape.IIH] = {[DoorSlot.LEFT_0] = {-1, 3}, [DoorSlot.RIGHT_0] = {26, 3}},
    [RoomShape.SHAPE_2x2] = {
        [DoorSlot.LEFT_0] = {-1, 3},
        [DoorSlot.UP_0] = {6, -1},
        [DoorSlot.RIGHT_0] = {26, 3},
        [DoorSlot.DOWN_0] = {6, 14},
        [DoorSlot.LEFT_1] = {-1, 10},
        [DoorSlot.UP_1] = {19, -1},
        [DoorSlot.RIGHT_1] = {26, 10},
        [DoorSlot.DOWN_1] = {19, 14}
    },
    [RoomShape.LTL] = {
        [DoorSlot.LEFT_0] = {12, 3},
        [DoorSlot.UP_0] = {6, 6},
        [DoorSlot.RIGHT_0] = {26, 3},
        [DoorSlot.DOWN_0] = {6, 14},
        [DoorSlot.LEFT_1] = {-1, 10},
        [DoorSlot.UP_1] = {19, -1},
        [DoorSlot.RIGHT_1] = {26, 10},
        [DoorSlot.DOWN_1] = {19, 14}
    },
    [RoomShape.LTR] = {
        [DoorSlot.LEFT_0] = {-1, 3},
        [DoorSlot.UP_0] = {6, -1},
        [DoorSlot.RIGHT_0] = {13, 3},
        [DoorSlot.DOWN_0] = {6, 14},
        [DoorSlot.LEFT_1] = {-1, 10},
        [DoorSlot.UP_1] = {19, 6},
        [DoorSlot.RIGHT_1] = {26, 10},
        [DoorSlot.DOWN_1] = {19, 14}
    },
    [RoomShape.LBL] = {
        [DoorSlot.LEFT_0] = {-1, 3},
        [DoorSlot.UP_0] = {6, -1},
        [DoorSlot.RIGHT_0] = {26, 3},
        [DoorSlot.DOWN_0] = {6, 7},
        [DoorSlot.LEFT_1] = {12, 10},
        [DoorSlot.UP_1] = {19, -1},
        [DoorSlot.RIGHT_1] = {26, 10},
        [DoorSlot.DOWN_1] = {19, 14}
    },
    [RoomShape.LBR] = {
        [DoorSlot.LEFT_0] = {-1, 3},
        [DoorSlot.UP_0] = {6, -1},
        [DoorSlot.RIGHT_0] = {26, 3},
        [DoorSlot.DOWN_0] = {6, 14},
        [DoorSlot.LEFT_1] = {-1, 10},
        [DoorSlot.UP_1] = {19, -1},
        [DoorSlot.RIGHT_1] = {13, 10},
        [DoorSlot.DOWN_1] = {19, 7}
    }
}
return ____exports
 end,
["objects.roomShapeToDoorSlots"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ALL_DOOR_SLOTS_SET = __TS__New(ReadonlySet, {
    DoorSlot.LEFT_0,
    DoorSlot.UP_0,
    DoorSlot.RIGHT_0,
    DoorSlot.DOWN_0,
    DoorSlot.LEFT_1,
    DoorSlot.UP_1,
    DoorSlot.RIGHT_1,
    DoorSlot.DOWN_1
})
____exports.ROOM_SHAPE_TO_DOOR_SLOTS = {
    [RoomShape.SHAPE_1x1] = __TS__New(ReadonlySet, {DoorSlot.LEFT_0, DoorSlot.UP_0, DoorSlot.RIGHT_0, DoorSlot.DOWN_0}),
    [RoomShape.IH] = __TS__New(ReadonlySet, {DoorSlot.LEFT_0, DoorSlot.RIGHT_0}),
    [RoomShape.IV] = __TS__New(ReadonlySet, {DoorSlot.UP_0, DoorSlot.DOWN_0}),
    [RoomShape.SHAPE_1x2] = __TS__New(ReadonlySet, {
        DoorSlot.LEFT_0,
        DoorSlot.UP_0,
        DoorSlot.RIGHT_0,
        DoorSlot.DOWN_0,
        DoorSlot.LEFT_1,
        DoorSlot.RIGHT_1
    }),
    [RoomShape.IIV] = __TS__New(ReadonlySet, {DoorSlot.UP_0, DoorSlot.DOWN_0}),
    [RoomShape.SHAPE_2x1] = __TS__New(ReadonlySet, {
        DoorSlot.LEFT_0,
        DoorSlot.UP_0,
        DoorSlot.RIGHT_0,
        DoorSlot.DOWN_0,
        DoorSlot.UP_1,
        DoorSlot.DOWN_1
    }),
    [RoomShape.IIH] = __TS__New(ReadonlySet, {DoorSlot.LEFT_0, DoorSlot.RIGHT_0}),
    [RoomShape.SHAPE_2x2] = ALL_DOOR_SLOTS_SET,
    [RoomShape.LTL] = ALL_DOOR_SLOTS_SET,
    [RoomShape.LTR] = ALL_DOOR_SLOTS_SET,
    [RoomShape.LBL] = ALL_DOOR_SLOTS_SET,
    [RoomShape.LBR] = ALL_DOOR_SLOTS_SET
}
return ____exports
 end,
["functions.bitwise"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ParseInt = ____lualib.__TS__ParseInt
local __TS__NumberToString = ____lualib.__TS__NumberToString
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__ArrayUnshift = ____lualib.__TS__ArrayUnshift
local ____exports = {}
local ____flag = require("functions.flag")
local addFlag = ____flag.addFlag
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to convert a set of flags to a single `BitFlags` object.
function ____exports.arrayToBitFlags(self, array)
    local flags = 0
    for ____, flag in ipairs(array) do
        flags = addFlag(nil, flags, flag)
    end
    return flags
end
--- Helper function to convert an array of bits to the resulting decimal number.
function ____exports.convertBinaryToDecimal(self, bits)
    local bitsString = table.concat(bits, "")
    return __TS__ParseInt(bitsString, 2)
end
--- Helper function to convert a number to an array of bits.
-- 
-- @param num The number to convert.
-- @param minLength Optional. Equal to the minimum amount of bits that should be returned. If the
-- converted number of bits is below this number, 0's will be padded to the left
-- side until the minimum length is met. Default is undefined (which will not cause
-- any padding).
function ____exports.convertDecimalToBinary(self, num, minLength)
    local bits = {}
    local bitsString = __TS__NumberToString(num, 2)
    for ____, bitString in __TS__Iterator(bitsString) do
        local bit = tonumber(bitString)
        assertDefined(
            nil,
            bit,
            "Failed to convert the following number to binary: " .. tostring(num)
        )
        bits[#bits + 1] = bit
    end
    if minLength ~= nil then
        while #bits < minLength do
            __TS__ArrayUnshift(bits, 0)
        end
    end
    return bits
end
--- Helper function to count the number of bits that are set to 1 in a binary representation of a
-- number.
function ____exports.countSetBits(self, num)
    local count = 0
    while num > 0 do
        num = num & num - 1
        count = count + 1
    end
    return count
end
--- Helper function to get the value of a specific but in a binary representation of a number.
function ____exports.getKBitOfN(self, k, n)
    return n >> k & 1
end
--- Helper function to get the number of bits in a binary representation of a number.
function ____exports.getNumBitsOfN(self, n)
    local numBits = 0
    while n > 0 do
        numBits = numBits + 1
        n = n >> 1
    end
    return numBits
end
--- Helper function to convert a set of flags to a single `BitFlags` object.
function ____exports.setToBitFlags(self, set)
    local flags = 0
    for ____, flag in __TS__Iterator(set) do
        flags = addFlag(nil, flags, flag)
    end
    return flags
end
return ____exports
 end,
["interfaces.TSTLClassMetatable"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.TSTLClass"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.tstlClass"] = function(...) 
local ____exports = {}
local ____types = require("functions.types")
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to get the constructor from an instantiated TypeScriptToLua class, which is
-- located on the metatable.
-- 
-- Returns undefined if passed a non-table or if the provided table does not have a metatable.
function ____exports.getTSTLClassConstructor(self, object)
    if not isTable(nil, object) then
        return nil
    end
    local metatable = getmetatable(object)
    if metatable == nil then
        return nil
    end
    return metatable.constructor
end
--- Helper function to get the name of a TypeScriptToLua class from the instantiated class object.
-- 
-- TSTL classes are Lua tables created with the `__TS__Class` Lua function from the TSTL lualib.
-- Their name is contained within "constructor.name" metatable key.
-- 
-- For example, a `Map` class is has a name of "Map".
-- 
-- Returns undefined if passed a non-table or if the provided table does not have a metatable.
function ____exports.getTSTLClassName(self, object)
    local constructor = ____exports.getTSTLClassConstructor(nil, object)
    if constructor == nil then
        return nil
    end
    return constructor.name
end
--- Helper function to determine if a given object is a TypeScriptToLua `Map`.
-- 
-- It is not reliable to use the `instanceof` operator to determine this because each Lua module has
-- their own copies of the entire lualib and thus their own instantiated version of a `Map`.
function ____exports.isDefaultMap(self, object)
    local className = ____exports.getTSTLClassName(nil, object)
    return className == "DefaultMap"
end
--- Helper function to check if a given table is a class table created by TypeScriptToLua.
function ____exports.isTSTLClass(self, object)
    local tstlClassName = ____exports.getTSTLClassName(nil, object)
    return tstlClassName ~= nil
end
--- Helper function to determine if a given object is a TypeScriptToLua `Map`.
-- 
-- It is not reliable to use the `instanceof` operator to determine this because each Lua module
-- might have their own copy of the entire lualib and thus their own instantiated version of a
-- `Map`.
function ____exports.isTSTLMap(self, object)
    local className = ____exports.getTSTLClassName(nil, object)
    return className == "Map"
end
--- Helper function to determine if a given object is a TypeScriptToLua `Set`.
-- 
-- It is not reliable to use the `instanceof` operator to determine this because each Lua module
-- might have their own copy of the entire lualib and thus their own instantiated version of a
-- `Set`.
function ____exports.isTSTLSet(self, object)
    local className = ____exports.getTSTLClassName(nil, object)
    return className == "Set"
end
--- Initializes a new TypeScriptToLua class in the situation where you do not know what kind of class
-- it is. This function requires that you provide an instantiated class of the same type, as it will
-- use the class constructor that is present on the other object's metatable to initialize the new
-- class.
function ____exports.newTSTLClass(self, oldClass)
    local constructor = ____exports.getTSTLClassConstructor(nil, oldClass)
    assertDefined(nil, constructor, "Failed to instantiate a new TypeScriptToLua class since the provided old class does not have a metatable/constructor.")
    local newClass = {}
    local newClassMetatable = setmetatable(newClass, constructor.prototype)
    newClassMetatable:____constructor()
    return newClass
end
return ____exports
 end,
["functions.doors"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__Spread = ____lualib.__TS__Spread
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local __TS__New = ____lualib.__TS__New
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
local DoorState = ____isaac_2Dtypescript_2Ddefinitions.DoorState
local DoorVariant = ____isaac_2Dtypescript_2Ddefinitions.DoorVariant
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local GridRoom = ____isaac_2Dtypescript_2Ddefinitions.GridRoom
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local DOOR_SLOT_FLAG_VALUES = ____cachedEnumValues.DOOR_SLOT_FLAG_VALUES
local DOOR_SLOT_VALUES = ____cachedEnumValues.DOOR_SLOT_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local DISTANCE_OF_GRID_TILE = ____constants.DISTANCE_OF_GRID_TILE
local ____doorSlotFlagToDoorSlot = require("objects.doorSlotFlagToDoorSlot")
local DEFAULT_DOOR_SLOT = ____doorSlotFlagToDoorSlot.DEFAULT_DOOR_SLOT
local DOOR_SLOT_FLAG_TO_DOOR_SLOT = ____doorSlotFlagToDoorSlot.DOOR_SLOT_FLAG_TO_DOOR_SLOT
local ____doorSlotToDirection = require("objects.doorSlotToDirection")
local DOOR_SLOT_TO_DIRECTION = ____doorSlotToDirection.DOOR_SLOT_TO_DIRECTION
local ____doorSlotToDoorSlotFlag = require("objects.doorSlotToDoorSlotFlag")
local DOOR_SLOT_TO_DOOR_SLOT_FLAG = ____doorSlotToDoorSlotFlag.DOOR_SLOT_TO_DOOR_SLOT_FLAG
local ____oppositeDoorSlots = require("objects.oppositeDoorSlots")
local OPPOSITE_DOOR_SLOTS = ____oppositeDoorSlots.OPPOSITE_DOOR_SLOTS
local ____roomShapeToDoorSlotCoordinates = require("objects.roomShapeToDoorSlotCoordinates")
local ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES = ____roomShapeToDoorSlotCoordinates.ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES
local ____roomShapeToDoorSlots = require("objects.roomShapeToDoorSlots")
local ROOM_SHAPE_TO_DOOR_SLOTS = ____roomShapeToDoorSlots.ROOM_SHAPE_TO_DOOR_SLOTS
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____bitwise = require("functions.bitwise")
local arrayToBitFlags = ____bitwise.arrayToBitFlags
local ____direction = require("functions.direction")
local directionToVector = ____direction.directionToVector
local ____enums = require("functions.enums")
local isEnumValue = ____enums.isEnumValue
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____tstlClass = require("functions.tstlClass")
local isTSTLSet = ____tstlClass.isTSTLSet
local ____types = require("functions.types")
local parseIntSafe = ____types.parseIntSafe
function ____exports.doorSlotToDirection(self, doorSlot)
    return DOOR_SLOT_TO_DIRECTION[doorSlot]
end
--- Helper function to get the offset from a door position that a player will enter a room at.
-- 
-- When players enter a room, they do not appear exactly on the location of the door, because then
-- they would immediately collide with the loading zone. Instead, they appear on the grid tile next
-- to the door.
function ____exports.getDoorSlotEnterPositionOffset(self, doorSlot)
    local direction = ____exports.doorSlotToDirection(nil, doorSlot)
    local vector = directionToVector(nil, direction)
    local oppositeVector = vector * -1
    return oppositeVector * DISTANCE_OF_GRID_TILE
end
--- Helper function to get the possible door slots that can exist for a given room shape.
function ____exports.getDoorSlotsForRoomShape(self, roomShape)
    return ROOM_SHAPE_TO_DOOR_SLOTS[roomShape]
end
--- Helper function to get all of the doors in the room. By default, it will return every door.
-- 
-- You can optionally specify one or more room types to return only the doors that match the
-- specified room types.
-- 
-- @allowEmptyVariadic
function ____exports.getDoors(self, ...)
    local roomTypes = {...}
    local room = game:GetRoom()
    local roomShape = room:GetRoomShape()
    local roomTypesSet = __TS__New(ReadonlySet, roomTypes)
    local possibleDoorSlots = ____exports.getDoorSlotsForRoomShape(nil, roomShape)
    local doors = {}
    for ____, doorSlot in __TS__Iterator(possibleDoorSlots) do
        do
            local door = room:GetDoor(doorSlot)
            if door == nil then
                goto __continue27
            end
            local gridEntityType = door:GetType()
            if gridEntityType ~= GridEntityType.DOOR then
                goto __continue27
            end
            if roomTypesSet.size == 0 or roomTypesSet:has(door.TargetRoomType) then
                doors[#doors + 1] = door
            end
        end
        ::__continue27::
    end
    return doors
end
--- Helper function to check if the provided door is the one that leads to the off-grid room that
-- contains the hole to the Blue Womb. (In vanilla, the door will only appear in the It Lives Boss
-- Room.)
function ____exports.isBlueWombDoor(self, door)
    return door.TargetRoomIndex == GridRoom.BLUE_WOMB
end
--- Helper function to check if the provided door is the one that leads to the Boss Rush room. (In
-- vanilla, the door will only appear in the Boss Room of the sixth floor.)
function ____exports.isBossRushDoor(self, door)
    return door.TargetRoomIndex == GridRoom.BOSS_RUSH
end
--- Helper function to check if the provided door is the one that leads to the Mega Satan Boss Room.
-- (In vanilla, the door will only appear in the starting room of The Chest / Dark Room.)
function ____exports.isMegaSatanDoor(self, door)
    return door.TargetRoomIndex == GridRoom.MEGA_SATAN
end
--- Helper function to check if the provided door leads to the "secret exit" off-grid room that takes
-- you to the Repentance floor.
function ____exports.isRepentanceDoor(self, door)
    return door.TargetRoomIndex == GridRoom.SECRET_EXIT
end
--- This refers to the hole in the wall that appears after bombing the entrance to a secret room.
-- Note that the door still exists before it has been bombed open. It has a sprite filename of
-- "gfx/grid/door_08_holeinwall.anm2".
-- 
-- Note that since Ultra Secret Rooms do not use holes, this function will not detect an Ultra
-- Secret Room door.
function ____exports.isSecretRoomDoor(self, door)
    local sprite = door:GetSprite()
    local fileName = sprite:GetFilename()
    return string.lower(fileName) == "gfx/grid/door_08_holeinwall.anm2"
end
--- Helper function to check if the provided door is the one that leads to the off-grid room that
-- contains the portal to The Void. (In vanilla, the door will only appear in the Hush Boss Room.)
function ____exports.isVoidDoor(self, door)
    return door.TargetRoomIndex == GridRoom.VOID
end
--- Helper function to remove a single door.
function ____exports.removeDoor(self, door)
    local room = game:GetRoom()
    room:RemoveDoor(door.Slot)
end
--- Helper function to remove the doors provided.
-- 
-- This function is variadic, meaning that you can specify as many doors as you want to remove.
function ____exports.removeDoors(self, ...)
    local doors = {...}
    for ____, door in ipairs(doors) do
        ____exports.removeDoor(nil, door)
    end
end
function ____exports.closeAllDoors(self)
    for ____, door in ipairs(____exports.getDoors(nil)) do
        door:Close(true)
    end
end
--- Use this instead of the `GridEntityDoor.Close` method if you want the door to immediately close
-- without an animation.
function ____exports.closeDoorFast(self, door)
    door.State = DoorState.CLOSED
    local sprite = door:GetSprite()
    sprite:Play("Closed", true)
end
function ____exports.doorSlotFlagToDoorSlot(self, doorSlotFlag)
    local doorSlot = DOOR_SLOT_FLAG_TO_DOOR_SLOT[doorSlotFlag]
    return doorSlot or DEFAULT_DOOR_SLOT
end
function ____exports.doorSlotFlagsToDoorSlots(self, doorSlotFlags)
    local doorSlots = {}
    for ____, doorSlotFlag in ipairs(DOOR_SLOT_FLAG_VALUES) do
        if hasFlag(nil, doorSlotFlags, doorSlotFlag) then
            local doorSlot = ____exports.doorSlotFlagToDoorSlot(nil, doorSlotFlag)
            doorSlots[#doorSlots + 1] = doorSlot
        end
    end
    return doorSlots
end
function ____exports.doorSlotToDoorSlotFlag(self, doorSlot)
    return DOOR_SLOT_TO_DOOR_SLOT_FLAG[doorSlot]
end
--- Helper function to convert an array of door slots or a set of door slots to the resulting bit
-- flag number.
function ____exports.doorSlotsToDoorSlotFlags(self, doorSlots)
    local doorSlotsMutable = doorSlots
    local doorSlotArray = isTSTLSet(nil, doorSlotsMutable) and ({__TS__Spread(doorSlotsMutable:values())}) or doorSlotsMutable
    local doorSlotFlagArray = __TS__ArrayMap(
        doorSlotArray,
        function(____, doorSlot) return ____exports.doorSlotToDoorSlotFlag(nil, doorSlot) end
    )
    return arrayToBitFlags(nil, doorSlotFlagArray)
end
function ____exports.getAngelRoomDoor(self)
    local angelRoomDoors = ____exports.getDoors(nil, RoomType.ANGEL)
    local ____temp_0
    if #angelRoomDoors == 0 then
        ____temp_0 = nil
    else
        ____temp_0 = angelRoomDoors[1]
    end
    return ____temp_0
end
--- Helper function to get the door that leads to the off-grid room that contains the hole to the
-- Blue Womb. (In vanilla, the door will only appear in the It Lives Boss Room.)
-- 
-- Returns undefined if the room has no Blue Womb doors.
function ____exports.getBlueWombDoor(self)
    local doors = ____exports.getDoors(nil)
    return __TS__ArrayFind(
        doors,
        function(____, door) return ____exports.isBlueWombDoor(nil, door) end
    )
end
--- Helper function to get the door that leads to the Boss Rush. (In vanilla, the door will only
-- appear in the Boss Room of the sixth floor.)
-- 
-- Returns undefined if the room has no Boss Rush doors.
function ____exports.getBossRushDoor(self)
    local doors = ____exports.getDoors(nil)
    return __TS__ArrayFind(
        doors,
        function(____, door) return ____exports.isBossRushDoor(nil, door) end
    )
end
function ____exports.getDevilRoomDoor(self)
    local devilRoomDoors = ____exports.getDoors(nil, RoomType.DEVIL)
    local ____temp_1
    if #devilRoomDoors == 0 then
        ____temp_1 = nil
    else
        ____temp_1 = devilRoomDoors[1]
    end
    return ____temp_1
end
--- If there is both a Devil Room and an Angel Room door, this function will return door with the
-- lowest slot number.
function ____exports.getDevilRoomOrAngelRoomDoor(self)
    local devilRoomOrAngelRoomDoors = ____exports.getDoors(nil, RoomType.DEVIL, RoomType.ANGEL)
    local ____temp_2
    if #devilRoomOrAngelRoomDoors == 0 then
        ____temp_2 = nil
    else
        ____temp_2 = devilRoomOrAngelRoomDoors[1]
    end
    return ____temp_2
end
--- Helper function to get the position that a player will enter a room at corresponding to a door.
-- 
-- When players enter a room, they do not appear exactly on the location of the door, because then
-- they would immediately collide with the loading zone. Instead, they appear on the grid tile next
-- to the door.
function ____exports.getDoorEnterPosition(self, door)
    local offset = ____exports.getDoorSlotEnterPositionOffset(nil, door.Slot)
    return door.Position + offset
end
--- Helper function to get the position that a player will enter a room at corresponding to a door
-- slot.
-- 
-- When players enter a room, they do not appear exactly on the location of the door, because then
-- they would immediately collide with the loading zone. Instead, they appear on the grid tile next
-- to the door.
function ____exports.getDoorSlotEnterPosition(self, doorSlot)
    local room = game:GetRoom()
    local position = room:GetDoorSlotPosition(doorSlot)
    local offset = ____exports.getDoorSlotEnterPositionOffset(nil, doorSlot)
    return position + offset
end
--- Helper function to get all of the doors in the room that lead to the provided room index.
-- 
-- This function is variadic, meaning that you can specify N arguments to return all of the doors
-- that match any of the N room grid indexes.
function ____exports.getDoorsToRoomIndex(self, ...)
    local roomGridIndex = {...}
    local roomGridIndexesSet = __TS__New(ReadonlySet, roomGridIndex)
    local doors = ____exports.getDoors(nil)
    return __TS__ArrayFilter(
        doors,
        function(____, door) return roomGridIndexesSet:has(door.TargetRoomIndex) end
    )
end
--- Helper function to get the door that leads to the Mega Satan Boss Room. (In vanilla, the door
-- will only appear in the starting room of The Chest / Dark Room.)
-- 
-- Returns undefined if the room has no Mega Satan doors.
function ____exports.getMegaSatanDoor(self)
    local doors = ____exports.getDoors(nil)
    return __TS__ArrayFind(
        doors,
        function(____, door) return ____exports.isMegaSatanDoor(nil, door) end
    )
end
function ____exports.getOppositeDoorSlot(self, doorSlot)
    return OPPOSITE_DOOR_SLOTS[doorSlot]
end
--- Helper function to get the door that leads to the "secret exit" off-grid room that takes you to
-- the Repentance floor or to the version of Depths 2 that has Dad's Key.
-- 
-- Returns undefined if the room has no Repentance doors.
function ____exports.getRepentanceDoor(self)
    local doors = ____exports.getDoors(nil)
    return __TS__ArrayFind(
        doors,
        function(____, door) return ____exports.isRepentanceDoor(nil, door) end
    )
end
--- Helper function to get the corresponding door slot for a given room shape and grid coordinates.
function ____exports.getRoomShapeDoorSlot(self, roomShape, x, y)
    local doorSlotCoordinates = ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES[roomShape]
    for ____, ____value in ipairs(__TS__ObjectEntries(doorSlotCoordinates)) do
        local doorSlotString = ____value[1]
        local coordinates = ____value[2]
        do
            local doorSlot = parseIntSafe(nil, doorSlotString)
            if doorSlot == nil or not isEnumValue(nil, doorSlot, DoorSlot) then
                goto __continue40
            end
            local doorX, doorY = table.unpack(coordinates)
            if x == doorX and y == doorY then
                return doorSlot
            end
        end
        ::__continue40::
    end
    return nil
end
--- Helper function to get the room grid coordinates for a specific room shape and door slot
-- combination.
function ____exports.getRoomShapeDoorSlotCoordinates(self, roomShape, doorSlot)
    local doorSlotCoordinates = ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES[roomShape]
    return doorSlotCoordinates[doorSlot]
end
--- Helper function to find unused door slots in the current room that can be used to make custom
-- doors.
function ____exports.getUnusedDoorSlots(self)
    local room = game:GetRoom()
    return __TS__ArrayFilter(
        DOOR_SLOT_VALUES,
        function(____, doorSlot) return doorSlot ~= DoorSlot.NO_DOOR_SLOT and room:IsDoorSlotAllowed(doorSlot) and room:GetDoor(doorSlot) == nil end
    )
end
--- Helper function to get the door that leads to the off-grid room that contains the portal to The
-- Void. (In vanilla, the door will only appear in the Hush Boss Room.)
-- 
-- Returns undefined if the room has no Void doors.
function ____exports.getVoidDoor(self)
    local doors = ____exports.getDoors(nil)
    return __TS__ArrayFind(
        doors,
        function(____, door) return ____exports.isVoidDoor(nil, door) end
    )
end
--- Helper function to check if the current room has one or more doors that lead to the given room
-- type.
-- 
-- This function is variadic, meaning that you can supply as many door types as you want to check
-- for. This function will return true if one or more room types match.
function ____exports.hasDoorType(self, ...)
    local roomTypes = {...}
    local doors = ____exports.getDoors(nil)
    local doorsOfThisRoomType = __TS__ArrayFilter(
        doors,
        function(____, door) return __TS__ArraySome(
            roomTypes,
            function(____, roomType) return door:IsRoomType(roomType) end
        ) end
    )
    return #doorsOfThisRoomType > 0
end
--- Helper function to check if the current room has one or more open door slots that can be used to
-- make custom doors.
function ____exports.hasUnusedDoorSlot(self)
    local unusedDoorSlots = ____exports.getUnusedDoorSlots(nil)
    return #unusedDoorSlots > 0
end
function ____exports.isAngelRoomDoor(self, door)
    return door.TargetRoomType == RoomType.ANGEL
end
function ____exports.isDevilRoomDoor(self, door)
    return door.TargetRoomType == RoomType.DEVIL
end
--- Helper function to see if a door slot could exist for a given room shape.
function ____exports.isDoorSlotInRoomShape(self, doorSlot, roomShape)
    local doorSlots = ____exports.getDoorSlotsForRoomShape(nil, roomShape)
    return doorSlots:has(doorSlot)
end
--- This refers to the Repentance door that spawns in a boss room after defeating the boss. You have
-- to spend one key to open it. It has a sprite filename of "gfx/grid/door_downpour.anm2".
function ____exports.isDoorToDownpour(self, door)
    if not ____exports.isRepentanceDoor(nil, door) then
        return false
    end
    local sprite = door:GetSprite()
    local fileName = sprite:GetFilename()
    return string.lower(fileName) == "gfx/grid/door_downpour.anm2"
end
--- This refers to the Repentance door that spawns in a boss room after defeating the boss. You have
-- to spend two hearts to open it. It has a sprite filename of "gfx/grid/door_mausoleum.anm2".
function ____exports.isDoorToMausoleum(self, door)
    if not ____exports.isRepentanceDoor(nil, door) then
        return false
    end
    local sprite = door:GetSprite()
    local fileName = sprite:GetFilename()
    return string.lower(fileName) == "gfx/grid/door_mausoleum.anm2"
end
--- This refers to the "strange door" located on the first room of Depths 2. You open it with either
-- a Polaroid or a Negative. It has a sprite filename of "gfx/grid/door_mausoleum_alt.anm2".
function ____exports.isDoorToMausoleumAscent(self, door)
    if not ____exports.isRepentanceDoor(nil, door) then
        return false
    end
    local sprite = door:GetSprite()
    local fileName = sprite:GetFilename()
    return string.lower(fileName) == "gfx/grid/door_mausoleum_alt.anm2"
end
--- This refers to the Repentance door that spawns in a boss room after defeating the boss. You have
-- to spend two bombs to open it. It has a sprite filename of "gfx/grid/door_mines.anm2".
function ____exports.isDoorToMines(self, door)
    if not ____exports.isRepentanceDoor(nil, door) then
        return false
    end
    local sprite = door:GetSprite()
    local fileName = sprite:GetFilename()
    return string.lower(fileName) == "gfx/grid/door_mines.anm2"
end
--- This refers to the Repentance door that spawns after defeating Mom. You open it with the
-- completed knife. It has a sprite filename of "gfx/grid/door_momsheart.anm2".
function ____exports.isDoorToMomsHeart(self, door)
    if not ____exports.isRepentanceDoor(nil, door) then
        return false
    end
    local sprite = door:GetSprite()
    local fileName = sprite:GetFilename()
    return string.lower(fileName) == "gfx/grid/door_momsheart.anm2"
end
function ____exports.isHiddenSecretRoomDoor(self, door)
    local sprite = door:GetSprite()
    local animation = sprite:GetAnimation()
    return ____exports.isSecretRoomDoor(nil, door) and animation == "Hidden"
end
--- Helper function to reset an unlocked door back to a locked state. Doing this is non-trivial
-- because in addition to calling the `GridEntityDoor.SetLocked` method, you must also:
-- 
-- - Set the `VisitedCount` of the room's `RoomDescription` to 0.
-- - Set the variant to `DoorVariant.DOOR_LOCKED`.
-- - Close the door.
function ____exports.lockDoor(self, door)
    local level = game:GetLevel()
    local roomDescriptor = level:GetRoomByIdx(door.TargetRoomIndex)
    roomDescriptor.VisitedCount = 0
    door:SetVariant(DoorVariant.LOCKED)
    door:SetLocked(true)
    door:Close(true)
end
--- For the purposes of this function, doors to Secret Rooms or Super Secret Rooms that have not been
-- discovered yet will not be opened.
function ____exports.openAllDoors(self)
    for ____, door in ipairs(____exports.getDoors(nil)) do
        door:Open()
    end
end
--- Use this instead of the `GridEntityDoor.Open` method if you want the door to immediately open
-- without an animation.
function ____exports.openDoorFast(self, door)
    door.State = DoorState.OPEN
    local sprite = door:GetSprite()
    sprite:Play("Opened", true)
end
--- Helper function to remove all of the doors in the room. By default, it will remove every door.
-- You can optionally specify one or more room types to remove only the doors that match the
-- specified room types.
-- 
-- @returns The number of doors removed.
-- @allowEmptyVariadic
function ____exports.removeAllDoors(self, ...)
    local doors = ____exports.getDoors(nil, ...)
    ____exports.removeDoors(
        nil,
        table.unpack(doors)
    )
    return #doors
end
return ____exports
 end,
["classes.callbacks.PostDoorRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____doors = require("functions.doors")
local getDoors = ____doors.getDoors
local ____shouldFire = require("shouldFire")
local shouldFireDoor = ____shouldFire.shouldFireDoor
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostDoorRender = __TS__Class()
local PostDoorRender = ____exports.PostDoorRender
PostDoorRender.name = "PostDoorRender"
__TS__ClassExtends(PostDoorRender, CustomCallback)
function PostDoorRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireDoor
    self.postRender = function()
        for ____, door in ipairs(getDoors(nil)) do
            self:fire(door)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
return ____exports
 end,
["classes.callbacks.PostDoorUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____doors = require("functions.doors")
local getDoors = ____doors.getDoors
local ____shouldFire = require("shouldFire")
local shouldFireDoor = ____shouldFire.shouldFireDoor
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostDoorUpdate = __TS__Class()
local PostDoorUpdate = ____exports.PostDoorUpdate
PostDoorUpdate.name = "PostDoorUpdate"
__TS__ClassExtends(PostDoorUpdate, CustomCallback)
function PostDoorUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireDoor
    self.postUpdate = function()
        for ____, door in ipairs(getDoors(nil)) do
            self:fire(door)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostEffectInitFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireEffect = ____shouldFire.shouldFireEffect
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostEffectInitFilter = __TS__Class()
local PostEffectInitFilter = ____exports.PostEffectInitFilter
PostEffectInitFilter.name = "PostEffectInitFilter"
__TS__ClassExtends(PostEffectInitFilter, CustomCallback)
function PostEffectInitFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireEffect
    self.postEffectInit = function(____, effect)
        self:fire(effect)
    end
    self.callbacksUsed = {{ModCallback.POST_EFFECT_INIT, self.postEffectInit}}
end
return ____exports
 end,
["classes.callbacks.PostEffectInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireEffect = ____shouldFire.shouldFireEffect
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostEffectInitLate = __TS__Class()
local PostEffectInitLate = ____exports.PostEffectInitLate
PostEffectInitLate.name = "PostEffectInitLate"
__TS__ClassExtends(PostEffectInitLate, CustomCallback)
function PostEffectInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireEffect
    self.postEffectUpdate = function(____, effect)
        local index = GetPtrHash(effect)
        if not v.room.firedSet:has(index) then
            v.room.firedSet:add(index)
            self:fire(effect)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_EFFECT_UPDATE, self.postEffectUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostEffectRenderFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireEffect = ____shouldFire.shouldFireEffect
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostEffectRenderFilter = __TS__Class()
local PostEffectRenderFilter = ____exports.PostEffectRenderFilter
PostEffectRenderFilter.name = "PostEffectRenderFilter"
__TS__ClassExtends(PostEffectRenderFilter, CustomCallback)
function PostEffectRenderFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireEffect
    self.postEffectRender = function(____, effect, renderOffset)
        self:fire(effect, renderOffset)
    end
    self.callbacksUsed = {{ModCallback.POST_EFFECT_RENDER, self.postEffectRender}}
end
return ____exports
 end,
["classes.callbacks.PostEffectStateChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireEffect = ____shouldFire.shouldFireEffect
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {stateMap = __TS__New(
    DefaultMap,
    function(____, state) return state end
)}}
____exports.PostEffectStateChanged = __TS__Class()
local PostEffectStateChanged = ____exports.PostEffectStateChanged
PostEffectStateChanged.name = "PostEffectStateChanged"
__TS__ClassExtends(PostEffectStateChanged, CustomCallback)
function PostEffectStateChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireEffect
    self.postEffectUpdate = function(____, effect)
        local ptrHash = GetPtrHash(effect)
        local previousState = v.run.stateMap:getAndSetDefault(ptrHash, effect.State)
        local currentState = effect.State
        v.run.stateMap:set(ptrHash, currentState)
        if previousState ~= currentState then
            self:fire(effect, previousState, currentState)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_EFFECT_UPDATE, self.postEffectUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostEffectUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireEffect = ____shouldFire.shouldFireEffect
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostEffectUpdateFilter = __TS__Class()
local PostEffectUpdateFilter = ____exports.PostEffectUpdateFilter
PostEffectUpdateFilter.name = "PostEffectUpdateFilter"
__TS__ClassExtends(PostEffectUpdateFilter, CustomCallback)
function PostEffectUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireEffect
    self.postEffectUpdate = function(____, effect)
        self:fire(effect)
    end
    self.callbacksUsed = {{ModCallback.POST_EFFECT_UPDATE, self.postEffectUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostEntityKillFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireEntity = ____shouldFire.shouldFireEntity
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostEntityKillFilter = __TS__Class()
local PostEntityKillFilter = ____exports.PostEntityKillFilter
PostEntityKillFilter.name = "PostEntityKillFilter"
__TS__ClassExtends(PostEntityKillFilter, CustomCallback)
function PostEntityKillFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireEntity
    self.postEntityKill = function(____, entity)
        self:fire(entity)
    end
    self.callbacksUsed = {{ModCallback.POST_ENTITY_KILL, self.postEntityKill}}
end
return ____exports
 end,
["classes.callbacks.PostEsauJr"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostEsauJr = __TS__Class()
local PostEsauJr = ____exports.PostEsauJr
PostEsauJr.name = "PostEsauJr"
__TS__ClassExtends(PostEsauJr, CustomCallback)
function PostEsauJr.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.featuresUsed = {ISCFeature.ESAU_JR_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostFamiliarInitFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireFamiliar = ____shouldFire.shouldFireFamiliar
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostFamiliarInitFilter = __TS__Class()
local PostFamiliarInitFilter = ____exports.PostFamiliarInitFilter
PostFamiliarInitFilter.name = "PostFamiliarInitFilter"
__TS__ClassExtends(PostFamiliarInitFilter, CustomCallback)
function PostFamiliarInitFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireFamiliar
    self.postFamiliarInit = function(____, familiar)
        self:fire(familiar)
    end
    self.callbacksUsed = {{ModCallback.POST_FAMILIAR_INIT, self.postFamiliarInit}}
end
return ____exports
 end,
["classes.callbacks.PostFamiliarInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireFamiliar = ____shouldFire.shouldFireFamiliar
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostFamiliarInitLate = __TS__Class()
local PostFamiliarInitLate = ____exports.PostFamiliarInitLate
PostFamiliarInitLate.name = "PostFamiliarInitLate"
__TS__ClassExtends(PostFamiliarInitLate, CustomCallback)
function PostFamiliarInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireFamiliar
    self.postFamiliarUpdate = function(____, familiar)
        local index = GetPtrHash(familiar)
        if not v.room.firedSet:has(index) then
            v.room.firedSet:add(index)
            self:fire(familiar)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_FAMILIAR_UPDATE, self.postFamiliarUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostFamiliarRenderFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireFamiliar = ____shouldFire.shouldFireFamiliar
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostFamiliarRenderFilter = __TS__Class()
local PostFamiliarRenderFilter = ____exports.PostFamiliarRenderFilter
PostFamiliarRenderFilter.name = "PostFamiliarRenderFilter"
__TS__ClassExtends(PostFamiliarRenderFilter, CustomCallback)
function PostFamiliarRenderFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireFamiliar
    self.postFamiliarRender = function(____, familiar, renderOffset)
        self:fire(familiar, renderOffset)
    end
    self.callbacksUsed = {{ModCallback.POST_FAMILIAR_RENDER, self.postFamiliarRender}}
end
return ____exports
 end,
["classes.callbacks.PostFamiliarStateChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireFamiliar = ____shouldFire.shouldFireFamiliar
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {stateMap = __TS__New(
    DefaultMap,
    function(____, state) return state end
)}}
____exports.PostFamiliarStateChanged = __TS__Class()
local PostFamiliarStateChanged = ____exports.PostFamiliarStateChanged
PostFamiliarStateChanged.name = "PostFamiliarStateChanged"
__TS__ClassExtends(PostFamiliarStateChanged, CustomCallback)
function PostFamiliarStateChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireFamiliar
    self.postFamiliarUpdate = function(____, familiar)
        local ptrHash = GetPtrHash(familiar)
        local previousState = v.run.stateMap:getAndSetDefault(ptrHash, familiar.State)
        local currentState = familiar.State
        v.run.stateMap:set(ptrHash, currentState)
        if previousState ~= currentState then
            self:fire(familiar, previousState, currentState)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_FAMILIAR_UPDATE, self.postFamiliarUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostFamiliarUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireFamiliar = ____shouldFire.shouldFireFamiliar
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostFamiliarUpdateFilter = __TS__Class()
local PostFamiliarUpdateFilter = ____exports.PostFamiliarUpdateFilter
PostFamiliarUpdateFilter.name = "PostFamiliarUpdateFilter"
__TS__ClassExtends(PostFamiliarUpdateFilter, CustomCallback)
function PostFamiliarUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireFamiliar
    self.postFamiliarUpdate = function(____, familiar)
        self:fire(familiar)
    end
    self.callbacksUsed = {{ModCallback.POST_FAMILIAR_UPDATE, self.postFamiliarUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostFirstEsauJr"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostFirstEsauJr = __TS__Class()
local PostFirstEsauJr = ____exports.PostFirstEsauJr
PostFirstEsauJr.name = "PostFirstEsauJr"
__TS__ClassExtends(PostFirstEsauJr, CustomCallback)
function PostFirstEsauJr.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.featuresUsed = {ISCFeature.ESAU_JR_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostFirstFlip"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostFirstFlip = __TS__Class()
local PostFirstFlip = ____exports.PostFirstFlip
PostFirstFlip.name = "PostFirstFlip"
__TS__ClassExtends(PostFirstFlip, CustomCallback)
function PostFirstFlip.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.featuresUsed = {ISCFeature.FLIP_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostFlip"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostFlip = __TS__Class()
local PostFlip = ____exports.PostFlip
PostFlip.name = "PostFlip"
__TS__ClassExtends(PostFlip, CustomCallback)
function PostFlip.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.featuresUsed = {ISCFeature.FLIP_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGameEndFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireBoolean = ____shouldFire.shouldFireBoolean
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGameEndFilter = __TS__Class()
local PostGameEndFilter = ____exports.PostGameEndFilter
PostGameEndFilter.name = "PostGameEndFilter"
__TS__ClassExtends(PostGameEndFilter, CustomCallback)
function PostGameEndFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireBoolean
    self.postGameEnd = function(____, isGameOver)
        self:fire(isGameOver)
    end
    self.callbacksUsed = {{ModCallback.POST_GAME_END, self.postGameEnd}}
end
return ____exports
 end,
["classes.callbacks.PostGameStartedReordered"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireBoolean = ____shouldFire.shouldFireBoolean
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGameStartedReordered = __TS__Class()
local PostGameStartedReordered = ____exports.PostGameStartedReordered
PostGameStartedReordered.name = "PostGameStartedReordered"
__TS__ClassExtends(PostGameStartedReordered, CustomCallback)
function PostGameStartedReordered.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireBoolean
    self.featuresUsed = {ISCFeature.GAME_REORDERED_CALLBACKS}
end
return ____exports
 end,
["classes.callbacks.PostGameStartedReorderedLast"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireBoolean = ____shouldFire.shouldFireBoolean
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGameStartedReorderedLast = __TS__Class()
local PostGameStartedReorderedLast = ____exports.PostGameStartedReorderedLast
PostGameStartedReorderedLast.name = "PostGameStartedReorderedLast"
__TS__ClassExtends(PostGameStartedReorderedLast, CustomCallback)
function PostGameStartedReorderedLast.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireBoolean
    self.featuresUsed = {ISCFeature.GAME_REORDERED_CALLBACKS}
end
return ____exports
 end,
["classes.callbacks.PostGreedModeWave"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {currentGreedWave = 0}}
____exports.PostGreedModeWave = __TS__Class()
local PostGreedModeWave = ____exports.PostGreedModeWave
PostGreedModeWave.name = "PostGreedModeWave"
__TS__ClassExtends(PostGreedModeWave, CustomCallback)
function PostGreedModeWave.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.postUpdate = function()
        if not game:IsGreedMode() then
            return
        end
        local level = game:GetLevel()
        local newWave = level.GreedModeWave
        local oldWave = v.run.currentGreedWave
        v.run.currentGreedWave = newWave
        if newWave > oldWave then
            self:fire(oldWave, newWave)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityBroken"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntity = ____shouldFire.shouldFireGridEntity
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityBroken = __TS__Class()
local PostGridEntityBroken = ____exports.PostGridEntityBroken
PostGridEntityBroken.name = "PostGridEntityBroken"
__TS__ClassExtends(PostGridEntityBroken, CustomCallback)
function PostGridEntityBroken.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntity
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityCollision"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityCollision = __TS__Class()
local PostGridEntityCollision = ____exports.PostGridEntityCollision
PostGridEntityCollision.name = "PostGridEntityCollision"
__TS__ClassExtends(PostGridEntityCollision, CustomCallback)
function PostGridEntityCollision.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local gridEntity, entity = table.unpack(fireArgs)
        local callbackGridEntityType, callbackGridEntityVariant, callbackEntityType, callbackEntityVariant, callbackEntitySubType = table.unpack(optionalArgs)
        local gridEntityType = gridEntity:GetType()
        local gridEntityVariant = gridEntity:GetVariant()
        return (callbackGridEntityType == nil or callbackGridEntityType == gridEntityType) and (callbackGridEntityVariant == nil or callbackGridEntityVariant == gridEntityVariant) and (callbackEntityType == nil or callbackEntityType == entity.Type) and (callbackEntityVariant == nil or callbackEntityVariant == entity.Variant) and (callbackEntitySubType == nil or callbackEntitySubType == entity.SubType)
    end
    self.featuresUsed = {ISCFeature.GRID_ENTITY_COLLISION_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityCustomBroken"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntityCustom = ____shouldFire.shouldFireGridEntityCustom
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityCustomBroken = __TS__Class()
local PostGridEntityCustomBroken = ____exports.PostGridEntityCustomBroken
PostGridEntityCustomBroken.name = "PostGridEntityCustomBroken"
__TS__ClassExtends(PostGridEntityCustomBroken, CustomCallback)
function PostGridEntityCustomBroken.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntityCustom
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityCustomCollision"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityCustomCollision = __TS__Class()
local PostGridEntityCustomCollision = ____exports.PostGridEntityCustomCollision
PostGridEntityCustomCollision.name = "PostGridEntityCustomCollision"
__TS__ClassExtends(PostGridEntityCustomCollision, CustomCallback)
function PostGridEntityCustomCollision.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _gridEntity, gridEntityTypeCustom, entity = table.unpack(fireArgs)
        local callbackGridEntityTypeCustom, callbackEntityType, callbackEntityVariant, callbackEntitySubType = table.unpack(optionalArgs)
        return (callbackGridEntityTypeCustom == nil or callbackGridEntityTypeCustom == gridEntityTypeCustom) and (callbackEntityType == nil or callbackEntityType == entity.Type) and (callbackEntityVariant == nil or callbackEntityVariant == entity.Variant) and (callbackEntitySubType == nil or callbackEntitySubType == entity.SubType)
    end
    self.featuresUsed = {ISCFeature.GRID_ENTITY_COLLISION_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityCustomInit"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntityCustom = ____shouldFire.shouldFireGridEntityCustom
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityCustomInit = __TS__Class()
local PostGridEntityCustomInit = ____exports.PostGridEntityCustomInit
PostGridEntityCustomInit.name = "PostGridEntityCustomInit"
__TS__ClassExtends(PostGridEntityCustomInit, CustomCallback)
function PostGridEntityCustomInit.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntityCustom
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityCustomRemove"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityCustomRemove = __TS__Class()
local PostGridEntityCustomRemove = ____exports.PostGridEntityCustomRemove
PostGridEntityCustomRemove.name = "PostGridEntityCustomRemove"
__TS__ClassExtends(PostGridEntityCustomRemove, CustomCallback)
function PostGridEntityCustomRemove.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _gridIndex, gridEntityTypeCustom = table.unpack(fireArgs)
        local callbackGridEntityTypeCustom = table.unpack(optionalArgs)
        return callbackGridEntityTypeCustom == nil or callbackGridEntityTypeCustom == gridEntityTypeCustom
    end
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityCustomRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntityCustom = ____shouldFire.shouldFireGridEntityCustom
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityCustomRender = __TS__Class()
local PostGridEntityCustomRender = ____exports.PostGridEntityCustomRender
PostGridEntityCustomRender.name = "PostGridEntityCustomRender"
__TS__ClassExtends(PostGridEntityCustomRender, CustomCallback)
function PostGridEntityCustomRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntityCustom
    self.featuresUsed = {ISCFeature.GRID_ENTITY_RENDER_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityCustomStateChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntityCustom = ____shouldFire.shouldFireGridEntityCustom
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityCustomStateChanged = __TS__Class()
local PostGridEntityCustomStateChanged = ____exports.PostGridEntityCustomStateChanged
PostGridEntityCustomStateChanged.name = "PostGridEntityCustomStateChanged"
__TS__ClassExtends(PostGridEntityCustomStateChanged, CustomCallback)
function PostGridEntityCustomStateChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntityCustom
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityCustomUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntityCustom = ____shouldFire.shouldFireGridEntityCustom
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityCustomUpdate = __TS__Class()
local PostGridEntityCustomUpdate = ____exports.PostGridEntityCustomUpdate
PostGridEntityCustomUpdate.name = "PostGridEntityCustomUpdate"
__TS__ClassExtends(PostGridEntityCustomUpdate, CustomCallback)
function PostGridEntityCustomUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntityCustom
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityInit"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntity = ____shouldFire.shouldFireGridEntity
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityInit = __TS__Class()
local PostGridEntityInit = ____exports.PostGridEntityInit
PostGridEntityInit.name = "PostGridEntityInit"
__TS__ClassExtends(PostGridEntityInit, CustomCallback)
function PostGridEntityInit.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntity
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityRemove"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityRemove = __TS__Class()
local PostGridEntityRemove = ____exports.PostGridEntityRemove
PostGridEntityRemove.name = "PostGridEntityRemove"
__TS__ClassExtends(PostGridEntityRemove, CustomCallback)
function PostGridEntityRemove.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _gridIndex, gridEntityType, variant = table.unpack(fireArgs)
        local callbackGridEntityType, callbackVariant = table.unpack(optionalArgs)
        return (callbackGridEntityType == nil or callbackGridEntityType == gridEntityType) and (callbackVariant == nil or callbackVariant == variant)
    end
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntity = ____shouldFire.shouldFireGridEntity
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityRender = __TS__Class()
local PostGridEntityRender = ____exports.PostGridEntityRender
PostGridEntityRender.name = "PostGridEntityRender"
__TS__ClassExtends(PostGridEntityRender, CustomCallback)
function PostGridEntityRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntity
    self.featuresUsed = {ISCFeature.GRID_ENTITY_RENDER_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityStateChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntity = ____shouldFire.shouldFireGridEntity
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityStateChanged = __TS__Class()
local PostGridEntityStateChanged = ____exports.PostGridEntityStateChanged
PostGridEntityStateChanged.name = "PostGridEntityStateChanged"
__TS__ClassExtends(PostGridEntityStateChanged, CustomCallback)
function PostGridEntityStateChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntity
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostGridEntityUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireGridEntity = ____shouldFire.shouldFireGridEntity
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostGridEntityUpdate = __TS__Class()
local PostGridEntityUpdate = ____exports.PostGridEntityUpdate
PostGridEntityUpdate.name = "PostGridEntityUpdate"
__TS__ClassExtends(PostGridEntityUpdate, CustomCallback)
function PostGridEntityUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireGridEntity
    self.featuresUsed = {ISCFeature.GRID_ENTITY_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostHolyMantleRemoved"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____frames = require("functions.frames")
local isAfterRoomFrame = ____frames.isAfterRoomFrame
local ____playerDataStructures = require("functions.playerDataStructures")
local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {playersHolyMantleMap = __TS__New(DefaultMap, 0)}}
____exports.PostHolyMantleRemoved = __TS__Class()
local PostHolyMantleRemoved = ____exports.PostHolyMantleRemoved
PostHolyMantleRemoved.name = "PostHolyMantleRemoved"
__TS__ClassExtends(PostHolyMantleRemoved, CustomCallback)
function PostHolyMantleRemoved.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePlayer
    self.postPEffectUpdateReordered = function(____, player)
        local effects = player:GetEffects()
        local newNumHolyMantles = effects:GetCollectibleEffectNum(CollectibleType.HOLY_MANTLE)
        local oldNumHolyMantles = defaultMapGetPlayer(nil, v.run.playersHolyMantleMap, player)
        mapSetPlayer(nil, v.run.playersHolyMantleMap, player, newNumHolyMantles)
        if newNumHolyMantles < oldNumHolyMantles and isAfterRoomFrame(nil, 0) then
            self:fire(player, oldNumHolyMantles, newNumHolyMantles)
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
return ____exports
 end,
["core.constantsVanilla"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____types = require("functions.types")
local asCardType = ____types.asCardType
local asCollectibleType = ____types.asCollectibleType
local asPillEffect = ____types.asPillEffect
local asTrinketType = ____types.asTrinketType
local ____utils = require("functions.utils")
local iRange = ____utils.iRange
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____cachedClasses = require("core.cachedClasses")
local itemConfig = ____cachedClasses.itemConfig
local ____constantsFirstLast = require("core.constantsFirstLast")
local FIRST_CARD_TYPE = ____constantsFirstLast.FIRST_CARD_TYPE
local FIRST_COLLECTIBLE_TYPE = ____constantsFirstLast.FIRST_COLLECTIBLE_TYPE
local FIRST_PILL_EFFECT = ____constantsFirstLast.FIRST_PILL_EFFECT
local FIRST_TRINKET_TYPE = ____constantsFirstLast.FIRST_TRINKET_TYPE
local LAST_VANILLA_CARD_TYPE = ____constantsFirstLast.LAST_VANILLA_CARD_TYPE
local LAST_VANILLA_COLLECTIBLE_TYPE = ____constantsFirstLast.LAST_VANILLA_COLLECTIBLE_TYPE
local LAST_VANILLA_PILL_EFFECT = ____constantsFirstLast.LAST_VANILLA_PILL_EFFECT
local LAST_VANILLA_TRINKET_TYPE = ____constantsFirstLast.LAST_VANILLA_TRINKET_TYPE
--- An array that represents the range from the first vanilla collectible type to the last vanilla
-- collectible type. This will include integers that do not represent any valid collectible types.
-- 
-- This function is only useful when building collectible type objects. For most purposes, you
-- should use the `VANILLA_COLLECTIBLE_TYPES` or `VANILLA_COLLECTIBLE_TYPES_SET` constants instead.
____exports.VANILLA_COLLECTIBLE_TYPE_RANGE = iRange(nil, FIRST_COLLECTIBLE_TYPE, LAST_VANILLA_COLLECTIBLE_TYPE)
--- An array that contains every valid vanilla collectible type, as verified by the
-- `ItemConfig.GetCollectible` method. Vanilla collectible types are not contiguous, so every valid
-- must be verified. (There are several gaps, e.g. 666.)
-- 
-- If you need to do O(1) lookups, use the `VANILLA_COLLECTIBLE_TYPES_SET` constant instead.
____exports.VANILLA_COLLECTIBLE_TYPES = __TS__ArrayFilter(
    ____exports.VANILLA_COLLECTIBLE_TYPE_RANGE,
    function(____, potentialCollectibleType)
        local collectibleType = asCollectibleType(nil, potentialCollectibleType)
        local itemConfigItem = itemConfig:GetCollectible(collectibleType)
        return itemConfigItem ~= nil
    end
)
--- A set that contains every valid vanilla collectible type, as verified by the
-- `ItemConfig.GetCollectible` method. Vanilla collectible types are not contiguous, so every valid
-- must be verified. (There are several gaps, e.g. 666.)
____exports.VANILLA_COLLECTIBLE_TYPES_SET = __TS__New(ReadonlySet, ____exports.VANILLA_COLLECTIBLE_TYPES)
--- An array that represents the range from the first vanilla trinket type to the last vanilla
-- trinket type. This will include integers that do not represent any valid trinket types.
-- 
-- This function is only useful when building trinket type objects. For most purposes, you should
-- use the `VANILLA_TRINKET_TYPES` or `VANILLA_TRINKET_TYPES_SET` constants instead.
____exports.VANILLA_TRINKET_TYPE_RANGE = iRange(nil, FIRST_TRINKET_TYPE, LAST_VANILLA_TRINKET_TYPE)
--- An array that contains every valid vanilla trinket type, as verified by the
-- `ItemConfig.GetTrinket` method. Vanilla trinket types are not contiguous, so every valid must be
-- verified. (The only gap is 47 for `POLAROID_OBSOLETE`.)
-- 
-- If you need to do O(1) lookups, use the `VANILLA_TRINKET_TYPES_SET` constant instead.
____exports.VANILLA_TRINKET_TYPES = __TS__ArrayFilter(
    ____exports.VANILLA_TRINKET_TYPE_RANGE,
    function(____, potentialTrinketType)
        local trinketType = asTrinketType(nil, potentialTrinketType)
        local itemConfigTrinket = itemConfig:GetTrinket(trinketType)
        return itemConfigTrinket ~= nil
    end
)
--- A set that contains every valid vanilla trinket type, as verified by the `ItemConfig.GetTrinket`
-- method. Vanilla trinket types are not contiguous, so every valid must be verified. (The only gap
-- is 47 for `POLAROID_OBSOLETE`.)
____exports.VANILLA_TRINKET_TYPES_SET = __TS__New(ReadonlySet, ____exports.VANILLA_TRINKET_TYPES)
--- An array that represents the range from the first vanilla card type to the last vanilla card
-- type.
-- 
-- This function is only useful when building card type objects. For most purposes, you should use
-- the `VANILLA_CARD_TYPES` or `VANILLA_CARD_TYPES_SET` constants instead.
____exports.VANILLA_CARD_TYPE_RANGE = iRange(nil, FIRST_CARD_TYPE, LAST_VANILLA_CARD_TYPE)
--- An array that contains every valid vanilla card type, as verified by the `ItemConfig.GetCard`
-- method. Vanilla card types are contiguous, but we validate every entry to double check.
-- 
-- If you need to do O(1) lookups, use the `VANILLA_CARD_TYPES_SET` constant instead.
____exports.VANILLA_CARD_TYPES = __TS__ArrayFilter(
    ____exports.VANILLA_CARD_TYPE_RANGE,
    function(____, potentialCardType)
        local cardType = asCardType(nil, potentialCardType)
        local itemConfigCard = itemConfig:GetCard(cardType)
        return itemConfigCard ~= nil
    end
)
--- A set that contains every valid vanilla card type, as verified by the `ItemConfig.GetCard`
-- method. Vanilla card types are contiguous, but we validate every entry to double check.
____exports.VANILLA_CARD_TYPES_SET = __TS__New(ReadonlySet, ____exports.VANILLA_CARD_TYPES)
--- An array that represents the range from the first vanilla pill effect to the last vanilla pill
-- effect.
-- 
-- This function is only useful when building pill effect objects. For most purposes, you should use
-- the `VANILLA_PILL_EFFECTS` or `VANILLA_PILL_EFFECTS_SET` constants instead.
____exports.VANILLA_PILL_EFFECT_RANGE = iRange(nil, FIRST_PILL_EFFECT, LAST_VANILLA_PILL_EFFECT)
--- An array that contains every valid vanilla pill effect, as verified by the
-- `ItemConfig.GetPillEffect` method. Vanilla pill effects are contiguous, but we validate every
-- entry to double check.
-- 
-- If you need to do O(1) lookups, use the `VANILLA_PILL_EFFECT_SET` constant instead.
____exports.VANILLA_PILL_EFFECTS = __TS__ArrayFilter(
    ____exports.VANILLA_PILL_EFFECT_RANGE,
    function(____, potentialPillEffect)
        local pillEffect = asPillEffect(nil, potentialPillEffect)
        local itemConfigPillEffect = itemConfig:GetPillEffect(pillEffect)
        return itemConfigPillEffect ~= nil
    end
)
--- A set that contains every valid vanilla pill effect, as verified by the
-- `ItemConfig.GetPillEffect` method. Vanilla pill effects are contiguous, but we validate every
-- entry to double check.
____exports.VANILLA_PILL_EFFECTS_SET = __TS__New(ReadonlySet, ____exports.VANILLA_PILL_EFFECTS)
return ____exports
 end,
["objects.collectibleDescriptions"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
____exports.DEFAULT_COLLECTIBLE_DESCRIPTION = "Unknown"
--- Maps collectible types to the real English descriptions from the "stringtable.sta" file.
____exports.COLLECTIBLE_DESCRIPTIONS = {
    [CollectibleType.NULL] = ____exports.DEFAULT_COLLECTIBLE_DESCRIPTION,
    [CollectibleType.SAD_ONION] = "Tears up",
    [CollectibleType.INNER_EYE] = "Triple shot",
    [CollectibleType.SPOON_BENDER] = "Homing shots",
    [CollectibleType.CRICKETS_HEAD] = "DMG up",
    [CollectibleType.MY_REFLECTION] = "Boomerang tears",
    [CollectibleType.NUMBER_ONE] = "Tears up + range down",
    [CollectibleType.BLOOD_OF_THE_MARTYR] = "DMG up",
    [CollectibleType.BROTHER_BOBBY] = "Friends 'till the end",
    [CollectibleType.SKATOLE] = "Fly love",
    [CollectibleType.HALO_OF_FLIES] = "Projectile protection",
    [CollectibleType.ONE_UP] = "Extra life",
    [CollectibleType.MAGIC_MUSHROOM] = "All stats up!",
    [CollectibleType.VIRUS] = "Poison touch + speed up",
    [CollectibleType.ROID_RAGE] = "Speed and range up",
    [CollectibleType.HEART] = "HP up",
    [CollectibleType.RAW_LIVER] = "HP up",
    [CollectibleType.SKELETON_KEY] = "99 keys",
    [CollectibleType.DOLLAR] = "$$$",
    [CollectibleType.BOOM] = "10 bombs",
    [CollectibleType.TRANSCENDENCE] = "We all float down here...",
    [CollectibleType.COMPASS] = "The end is near",
    [CollectibleType.LUNCH] = "HP up",
    [CollectibleType.DINNER] = "HP up",
    [CollectibleType.DESSERT] = "HP up",
    [CollectibleType.BREAKFAST] = "HP up",
    [CollectibleType.ROTTEN_MEAT] = "HP up",
    [CollectibleType.WOODEN_SPOON] = "Speed up",
    [CollectibleType.BELT] = "Speed up",
    [CollectibleType.MOMS_UNDERWEAR] = "Range up",
    [CollectibleType.MOMS_HEELS] = "Range up",
    [CollectibleType.MOMS_LIPSTICK] = "Range up",
    [CollectibleType.WIRE_COAT_HANGER] = "Tears up",
    [CollectibleType.BIBLE] = "Temporary flight",
    [CollectibleType.BOOK_OF_BELIAL] = "Temporary DMG up",
    [CollectibleType.NECRONOMICON] = "Mass room damage",
    [CollectibleType.POOP] = "Plop!",
    [CollectibleType.MR_BOOM] = "Reusable bomb buddy",
    [CollectibleType.TAMMYS_HEAD] = "Reusable tear burst",
    [CollectibleType.MOMS_BRA] = "Mass paralysis",
    [CollectibleType.KAMIKAZE] = "Become the bomb!",
    [CollectibleType.MOMS_PAD] = "Mass fear",
    [CollectibleType.BOBS_ROTTEN_HEAD] = "Reusable ranged bomb",
    [CollectibleType.TELEPORT] = "Teleport!",
    [CollectibleType.YUM_HEART] = "Reusable regeneration",
    [CollectibleType.LUCKY_FOOT] = "Luck up",
    [CollectibleType.DOCTORS_REMOTE] = "Reusable air strike",
    [CollectibleType.CUPIDS_ARROW] = "Piercing shots",
    [CollectibleType.SHOOP_DA_WHOOP] = "BLLLARRRRGGG!",
    [CollectibleType.STEVEN] = "DMG up",
    [CollectibleType.PENTAGRAM] = "DMG up",
    [CollectibleType.DR_FETUS] = "???",
    [CollectibleType.MAGNETO] = "Item snatcher",
    [CollectibleType.TREASURE_MAP] = "Full visible map",
    [CollectibleType.MOMS_EYE] = "Eye in the back of your head",
    [CollectibleType.LEMON_MISHAP] = "Oops...",
    [CollectibleType.DISTANT_ADMIRATION] = "Attack fly",
    [CollectibleType.BOOK_OF_SHADOWS] = "Temporary invincibility",
    [CollectibleType.BOOK_OF_BELIAL_BIRTHRIGHT] = "Temporary DMG up",
    [CollectibleType.LADDER] = "Building bridges",
    [CollectibleType.CHARM_OF_THE_VAMPIRE] = "Kills heal",
    [CollectibleType.BATTERY] = "Stores energy",
    [CollectibleType.STEAM_SALE] = "50% off",
    [CollectibleType.ANARCHIST_COOKBOOK] = "Summon bombs",
    [CollectibleType.HOURGLASS] = "Temporary enemy slowdown",
    [CollectibleType.SISTER_MAGGY] = "Friends 'till the end",
    [CollectibleType.TECHNOLOGY] = "Laser tears",
    [CollectibleType.CHOCOLATE_MILK] = "Charge shots",
    [CollectibleType.GROWTH_HORMONES] = "Speed + DMG up",
    [CollectibleType.MINI_MUSH] = "Speed + range up",
    [CollectibleType.ROSARY] = "Tears + faith up",
    [CollectibleType.CUBE_OF_MEAT] = "Gotta meat 'em all",
    [CollectibleType.QUARTER] = "+25 coins",
    [CollectibleType.PHD] = "Better pills",
    [CollectibleType.XRAY_VISION] = "I've seen everything",
    [CollectibleType.MY_LITTLE_UNICORN] = "Temporary badass",
    [CollectibleType.BOOK_OF_REVELATIONS] = "Reusable soul protection",
    [CollectibleType.MARK] = "DMG + speed up",
    [CollectibleType.PACT] = "DMG + tears up",
    [CollectibleType.DEAD_CAT] = "9 lives",
    [CollectibleType.LORD_OF_THE_PIT] = "Demon wings",
    [CollectibleType.NAIL] = "Temporary demon form",
    [CollectibleType.WE_NEED_TO_GO_DEEPER] = "Reusable level skip",
    [CollectibleType.DECK_OF_CARDS] = "Reusable card generator ",
    [CollectibleType.MONSTROS_TOOTH] = "Summon Monstro",
    [CollectibleType.LOKIS_HORNS] = "Cross tears",
    [CollectibleType.LITTLE_CHUBBY] = "Attack buddy",
    [CollectibleType.SPIDER_BITE] = "Slow effect",
    [CollectibleType.SMALL_ROCK] = "DMG up",
    [CollectibleType.SPELUNKER_HAT] = "See-through doors",
    [CollectibleType.SUPER_BANDAGE] = "+2 hearts",
    [CollectibleType.GAMEKID] = "Temporary Man-Pac",
    [CollectibleType.SACK_OF_PENNIES] = "Gives money",
    [CollectibleType.ROBO_BABY] = "Friends 'till the bbbbzzzt",
    [CollectibleType.LITTLE_CHAD] = "Gives kisses",
    [CollectibleType.BOOK_OF_SIN] = "Reusable item generator",
    [CollectibleType.RELIC] = "Soul generator",
    [CollectibleType.LITTLE_GISH] = "Sticky friend",
    [CollectibleType.LITTLE_STEVEN] = "Psychic friend",
    [CollectibleType.HALO] = "All stats up",
    [CollectibleType.MOMS_BOTTLE_OF_PILLS] = "Reusable pill generator",
    [CollectibleType.COMMON_COLD] = "Poison damage",
    [CollectibleType.PARASITE] = "Split shot",
    [CollectibleType.D6] = "Reroll your destiny",
    [CollectibleType.MR_MEGA] = "Bigger boom",
    [CollectibleType.PINKING_SHEARS] = "Cut and run",
    [CollectibleType.WAFER] = "Damage resistance",
    [CollectibleType.MONEY_EQUALS_POWER] = "$$$ = DMG",
    [CollectibleType.MOMS_CONTACTS] = "Freeze effect",
    [CollectibleType.BEAN] = "Toot on command",
    [CollectibleType.GUARDIAN_ANGEL] = "Extra protection",
    [CollectibleType.DEMON_BABY] = "Auto-turret friend",
    [CollectibleType.MOMS_KNIFE] = "Stab stab stab",
    [CollectibleType.OUIJA_BOARD] = "Spectral tears",
    [CollectibleType.NINE_VOLT] = "Quicker charge",
    [CollectibleType.DEAD_BIRD] = "Protective buddy",
    [CollectibleType.BRIMSTONE] = "Blood laser barrage",
    [CollectibleType.BLOOD_BAG] = "HP up",
    [CollectibleType.ODD_MUSHROOM_THIN] = "Tears + speed up, DMG down",
    [CollectibleType.ODD_MUSHROOM_LARGE] = "HP + DMG up, speed down",
    [CollectibleType.WHORE_OF_BABYLON] = "Curse up",
    [CollectibleType.MONSTER_MANUAL] = "Temporary buddy generator",
    [CollectibleType.DEAD_SEA_SCROLLS] = "It's a mystery",
    [CollectibleType.BOBBY_BOMB] = "Homing bombs",
    [CollectibleType.RAZOR_BLADE] = "Feel my pain",
    [CollectibleType.FORGET_ME_NOW] = "I don't remember...",
    [CollectibleType.FOREVER_ALONE] = "Attack fly",
    [CollectibleType.BUCKET_OF_LARD] = "HP up",
    [CollectibleType.PONY] = "Flight + dash attack",
    [CollectibleType.BOMB_BAG] = "Gives bombs",
    [CollectibleType.LUMP_OF_COAL] = "My Xmas present",
    [CollectibleType.GUPPYS_PAW] = "Soul converter",
    [CollectibleType.GUPPYS_TAIL] = "Cursed?",
    [CollectibleType.IV_BAG] = "Portable blood bank",
    [CollectibleType.BEST_FRIEND] = "Friends 'till the end",
    [CollectibleType.REMOTE_DETONATOR] = "Remote bomb detonation",
    [CollectibleType.STIGMATA] = "DMG + HP up",
    [CollectibleType.MOMS_PURSE] = "More trinket room",
    [CollectibleType.BOBS_CURSE] = "+5 poison bombs",
    [CollectibleType.PAGEANT_BOY] = "Ultimate grand supreme",
    [CollectibleType.SCAPULAR] = "Pray for a miracle",
    [CollectibleType.SPEED_BALL] = "Speed + shot speed up",
    [CollectibleType.BUM_FRIEND] = "He's greedy",
    [CollectibleType.GUPPYS_HEAD] = "Reusable fly hive",
    [CollectibleType.PRAYER_CARD] = "Reusable eternity ",
    [CollectibleType.NOTCHED_AXE] = "Rocks don't stand a chance",
    [CollectibleType.INFESTATION] = "Fly revenge",
    [CollectibleType.IPECAC] = "Explosive shots",
    [CollectibleType.TOUGH_LOVE] = "Tooth shot",
    [CollectibleType.MULLIGAN] = "They grow inside",
    [CollectibleType.TECHNOLOGY_2] = "Extra laser",
    [CollectibleType.MUTANT_SPIDER] = "Quad shot",
    [CollectibleType.CHEMICAL_PEEL] = "DMG up",
    [CollectibleType.PEEPER] = "Plop!",
    [CollectibleType.HABIT] = "Item martyr",
    [CollectibleType.BLOODY_LUST] = "RAGE!",
    [CollectibleType.CRYSTAL_BALL] = "I see my future",
    [CollectibleType.SPIRIT_OF_THE_NIGHT] = "Scary",
    [CollectibleType.CRACK_THE_SKY] = "Holy white death",
    [CollectibleType.ANKH] = "Eternal life?",
    [CollectibleType.CELTIC_CROSS] = "Blessing of protection",
    [CollectibleType.GHOST_BABY] = "Spectral buddy",
    [CollectibleType.CANDLE] = "Reusable flames",
    [CollectibleType.CAT_O_NINE_TAILS] = "Shot speed + damage up",
    [CollectibleType.D20] = "Reroll the basics",
    [CollectibleType.HARLEQUIN_BABY] = "Double shot buddy",
    [CollectibleType.EPIC_FETUS] = "On-demand air strike",
    [CollectibleType.POLYPHEMUS] = "Mega tears",
    [CollectibleType.DADDY_LONGLEGS] = "Daddy's love",
    [CollectibleType.SPIDER_BUTT] = "Mass enemy slowdown + damage",
    [CollectibleType.SACRIFICIAL_DAGGER] = "My fate protects me",
    [CollectibleType.MITRE] = "Blessing of purity",
    [CollectibleType.RAINBOW_BABY] = "Random buddy",
    [CollectibleType.DADS_KEY] = "Opens all doors...",
    [CollectibleType.STEM_CELLS] = "HP + shot speed up",
    [CollectibleType.PORTABLE_SLOT] = "Gamble 24/7",
    [CollectibleType.HOLY_WATER] = "Splash!",
    [CollectibleType.FATE] = "Flight eternal",
    [CollectibleType.BLACK_BEAN] = "Toot on touch",
    [CollectibleType.WHITE_PONY] = "Flight + holy death",
    [CollectibleType.SACRED_HEART] = "Homing shots + DMG up",
    [CollectibleType.TOOTH_PICKS] = "Tears + shot speed up",
    [CollectibleType.HOLY_GRAIL] = "Flight + HP up",
    [CollectibleType.DEAD_DOVE] = "Flight + spectral tears",
    [CollectibleType.BLOOD_RIGHTS] = "Mass enemy damage at a cost",
    [CollectibleType.GUPPYS_HAIRBALL] = "Swing it",
    [CollectibleType.ABEL] = "Mirrored buddy",
    [CollectibleType.SMB_SUPER_FAN] = "All stats up",
    [CollectibleType.PYRO] = "99 bombs",
    [CollectibleType.THREE_DOLLAR_BILL] = "Rainbow tears",
    [CollectibleType.TELEPATHY_BOOK] = "Temporary psychic shot",
    [CollectibleType.MEAT] = "DMG + HP up",
    [CollectibleType.MAGIC_8_BALL] = "Shot speed up",
    [CollectibleType.MOMS_COIN_PURSE] = "What's all this...?",
    [CollectibleType.SQUEEZY] = "Tears up",
    [CollectibleType.JESUS_JUICE] = "Damage + range up",
    [CollectibleType.BOX] = "Stuff",
    [CollectibleType.MOMS_KEY] = "Better chest loot +2 keys",
    [CollectibleType.MOMS_EYESHADOW] = "Charm tears",
    [CollectibleType.IRON_BAR] = "DMG up + concussive tears",
    [CollectibleType.MIDAS_TOUCH] = "Golden touch",
    [CollectibleType.HUMBLEING_BUNDLE] = "1+1 free 4Evar",
    [CollectibleType.FANNY_PACK] = "Filled with goodies",
    [CollectibleType.SHARP_PLUG] = "Infinite charge... at a cost",
    [CollectibleType.GUILLOTINE] = "DMG + tears up. An out-of-body experience!",
    [CollectibleType.BALL_OF_BANDAGES] = "Gotta lick 'em all!",
    [CollectibleType.CHAMPION_BELT] = "DMG + challenge up",
    [CollectibleType.BUTT_BOMBS] = "Toxic blast +5 bombs",
    [CollectibleType.GNAWED_LEAF] = "Unbreakable",
    [CollectibleType.SPIDERBABY] = "Spider revenge",
    [CollectibleType.GUPPYS_COLLAR] = "Eternal life?",
    [CollectibleType.LOST_CONTACT] = "Shielded tears",
    [CollectibleType.ANEMIC] = "Toxic blood",
    [CollectibleType.GOAT_HEAD] = "He accepts your offering",
    [CollectibleType.CEREMONIAL_ROBES] = "DMG + evil up",
    [CollectibleType.MOMS_WIG] = "You feel itchy...",
    [CollectibleType.PLACENTA] = "Regeneration + HP up",
    [CollectibleType.OLD_BANDAGE] = "HP up",
    [CollectibleType.SAD_BOMBS] = "Tear blasts +5 bombs",
    [CollectibleType.RUBBER_CEMENT] = "Bouncing tears",
    [CollectibleType.ANTI_GRAVITY] = "Anti-gravity tears + tears up",
    [CollectibleType.PYROMANIAC] = "It hurts so good +5 bombs",
    [CollectibleType.CRICKETS_BODY] = "Bursting shots + tears up",
    [CollectibleType.GIMPY] = "Sweet suffering",
    [CollectibleType.BLACK_LOTUS] = "HP up x3",
    [CollectibleType.PIGGY_BANK] = "My life savings",
    [CollectibleType.MOMS_PERFUME] = "Fear shot + tears up",
    [CollectibleType.MONSTROS_LUNG] = "Charged burst attack",
    [CollectibleType.ABADDON] = "Evil + DMG up + fear shot",
    [CollectibleType.BALL_OF_TAR] = "Sticky feet...",
    [CollectibleType.STOP_WATCH] = "Let's slow this down a bit...",
    [CollectibleType.TINY_PLANET] = "Orbiting tears + range up",
    [CollectibleType.INFESTATION_2] = "Infestation shot",
    [CollectibleType.E_COLI] = "Turdy touch",
    [CollectibleType.DEATHS_TOUCH] = "Piercing shots + DMG up",
    [CollectibleType.KEY_PIECE_1] = "???",
    [CollectibleType.KEY_PIECE_2] = "???",
    [CollectibleType.EXPERIMENTAL_TREATMENT] = "Some stats up, some stats down",
    [CollectibleType.CONTRACT_FROM_BELOW] = "Wealth... but at what cost?",
    [CollectibleType.INFAMY] = "Blocks damage... sometimes",
    [CollectibleType.TRINITY_SHIELD] = "You feel guarded",
    [CollectibleType.TECH_5] = "It's still being tested...",
    [CollectibleType.TWENTY_TWENTY] = "Double shot",
    [CollectibleType.BLUE_MAP] = "Secrets",
    [CollectibleType.BFFS] = "Your friends rule",
    [CollectibleType.HIVE_MIND] = "Giant spiders and flies",
    [CollectibleType.THERES_OPTIONS] = "More options",
    [CollectibleType.BOGO_BOMBS] = "1+1 BOOM!",
    [CollectibleType.STARTER_DECK] = "Extra card room",
    [CollectibleType.LITTLE_BAGGY] = "Extra pill room",
    [CollectibleType.MAGIC_SCAB] = "HP + luck up",
    [CollectibleType.BLOOD_CLOT] = "DMG + range up",
    [CollectibleType.SCREW] = "Tears + shot speed up",
    [CollectibleType.HOT_BOMBS] = "Burning blast +5 bombs",
    [CollectibleType.FIRE_MIND] = "Flaming tears",
    [CollectibleType.MISSING_NO] = "Syntax error",
    [CollectibleType.DARK_MATTER] = "DMG up + fear shot",
    [CollectibleType.BLACK_CANDLE] = "Curse immunity + evil up",
    [CollectibleType.PROPTOSIS] = "Short range mega tears",
    [CollectibleType.MISSING_PAGE_2] = "Evil up. Your enemies will pay!",
    [CollectibleType.CLEAR_RUNE] = "Rune mimic",
    [CollectibleType.SMART_FLY] = "Revenge fly",
    [CollectibleType.DRY_BABY] = "Immortal friend",
    [CollectibleType.JUICY_SACK] = "Sticky babies",
    [CollectibleType.ROBO_BABY_2] = "We worked out all the kinks",
    [CollectibleType.ROTTEN_BABY] = "Infested friend",
    [CollectibleType.HEADLESS_BABY] = "Bloody friend",
    [CollectibleType.LEECH] = "Blood sucker",
    [CollectibleType.MYSTERY_SACK] = "?",
    [CollectibleType.BBF] = "Big Beautiful Fly",
    [CollectibleType.BOBS_BRAIN] = "Explosive thoughts",
    [CollectibleType.BEST_BUD] = "Sworn protector",
    [CollectibleType.LIL_BRIMSTONE] = "Evil friend",
    [CollectibleType.ISAACS_HEART] = "Protect it",
    [CollectibleType.LIL_HAUNT] = "Fear him",
    [CollectibleType.DARK_BUM] = "He wants to take your life",
    [CollectibleType.BIG_FAN] = "Fat protector",
    [CollectibleType.SISSY_LONGLEGS] = "She loves you",
    [CollectibleType.PUNCHING_BAG] = "Scape goat",
    [CollectibleType.HOW_TO_JUMP] = "It's time you learned how",
    [CollectibleType.D100] = "REEROLLLLL!",
    [CollectibleType.D4] = "Reroll into something else",
    [CollectibleType.D10] = "Reroll enemies",
    [CollectibleType.BLANK_CARD] = "Card mimic",
    [CollectibleType.BOOK_OF_SECRETS] = "Tome of knowledge",
    [CollectibleType.BOX_OF_SPIDERS] = "It's a box of spiders",
    [CollectibleType.RED_CANDLE] = "Flame on",
    [CollectibleType.JAR] = "Save your life",
    [CollectibleType.FLUSH] = "...",
    [CollectibleType.SATANIC_BIBLE] = "Reusable evil... but at what cost?",
    [CollectibleType.HEAD_OF_KRAMPUS] = "Krampus rage",
    [CollectibleType.BUTTER_BEAN] = "Reusable knock-back",
    [CollectibleType.MAGIC_FINGERS] = "Pay to win",
    [CollectibleType.CONVERTER] = "Convert your soul",
    [CollectibleType.BLUE_BOX] = "? ?",
    [CollectibleType.UNICORN_STUMP] = "You feel stumped",
    [CollectibleType.TAURUS] = "Speed down + rage is building",
    [CollectibleType.ARIES] = "Ramming speed",
    [CollectibleType.CANCER] = "HP up + you feel protected",
    [CollectibleType.LEO] = "Stompy",
    [CollectibleType.VIRGO] = "You feel refreshed and protected",
    [CollectibleType.LIBRA] = "You feel balanced",
    [CollectibleType.SCORPIO] = "Poison tears",
    [CollectibleType.SAGITTARIUS] = "Piercing shots + speed up",
    [CollectibleType.CAPRICORN] = "All stats up",
    [CollectibleType.AQUARIUS] = "Trail of tears",
    [CollectibleType.PISCES] = "Tears up + knock-back shot",
    [CollectibleType.EVES_MASCARA] = "DMG up, tears + shot speed down",
    [CollectibleType.JUDAS_SHADOW] = "Sweet revenge",
    [CollectibleType.MAGGYS_BOW] = "HP up + you feel healthy",
    [CollectibleType.HOLY_MANTLE] = "Holy shield",
    [CollectibleType.THUNDER_THIGHS] = "HP up + speed down + you feel stompy",
    [CollectibleType.STRANGE_ATTRACTOR] = "Magnetic tears",
    [CollectibleType.CURSED_EYE] = "Cursed charge shot",
    [CollectibleType.MYSTERIOUS_LIQUID] = "Toxic splash damage",
    [CollectibleType.GEMINI] = "Conjoined friend",
    [CollectibleType.CAINS_OTHER_EYE] = "Near-sighted friend",
    [CollectibleType.BLUE_BABYS_ONLY_FRIEND] = "Controlled friend",
    [CollectibleType.SAMSONS_CHAINS] = "The ol' ball and chain",
    [CollectibleType.MONGO_BABY] = "Mongo friend",
    [CollectibleType.ISAACS_TEARS] = "Collected tears",
    [CollectibleType.UNDEFINED] = "Undefined",
    [CollectibleType.SCISSORS] = "Lose your head",
    [CollectibleType.BREATH_OF_LIFE] = "Invincibility at a cost",
    [CollectibleType.POLAROID] = "Fate chosen",
    [CollectibleType.NEGATIVE] = "Fate chosen",
    [CollectibleType.LUDOVICO_TECHNIQUE] = "Controlled tears",
    [CollectibleType.SOY_MILK] = "DMG down + tears way up",
    [CollectibleType.GODHEAD] = "God tears",
    [CollectibleType.LAZARUS_RAGS] = "Eternal life?",
    [CollectibleType.MIND] = "I know all",
    [CollectibleType.BODY] = "I feel all",
    [CollectibleType.SOUL] = "I am all",
    [CollectibleType.DEAD_ONION] = "Toxic aura tears",
    [CollectibleType.BROKEN_WATCH] = "I think it's broken",
    [CollectibleType.BOOMERANG] = "It will never leave you",
    [CollectibleType.SAFETY_PIN] = "Evil + range + shot speed up",
    [CollectibleType.CAFFEINE_PILL] = "Speed up + size down",
    [CollectibleType.TORN_PHOTO] = "Tears + shot speed up",
    [CollectibleType.BLUE_CAP] = "HP + tears up + shot speed down",
    [CollectibleType.LATCH_KEY] = "Luck up",
    [CollectibleType.MATCH_BOOK] = "Evil up",
    [CollectibleType.SYNTHOIL] = "DMG + range up",
    [CollectibleType.SNACK] = "HP up",
    [CollectibleType.DIPLOPIA] = "Double item vision",
    [CollectibleType.PLACEBO] = "Pill mimic",
    [CollectibleType.WOODEN_NICKEL] = "Flip a coin",
    [CollectibleType.TOXIC_SHOCK] = "Mass poison",
    [CollectibleType.MEGA_BEAN] = "Giga fart!",
    [CollectibleType.GLASS_CANNON] = "Be gentle...",
    [CollectibleType.BOMBER_BOY] = "Cross blast + 5 bombs",
    [CollectibleType.CRACK_JACKS] = "HP up. Don't swallow the prize!",
    [CollectibleType.MOMS_PEARLS] = "Range + luck up",
    [CollectibleType.CAR_BATTERY] = "Active power up",
    [CollectibleType.BOX_OF_FRIENDS] = "Double your friends",
    [CollectibleType.WIZ] = "Double wiz shot!",
    [CollectibleType.EIGHT_INCH_NAILS] = "Stick it to 'em!",
    [CollectibleType.INCUBUS] = "Dark friend",
    [CollectibleType.FATES_REWARD] = "Your fate beside you",
    [CollectibleType.LIL_CHEST] = "What's in the box?",
    [CollectibleType.SWORN_PROTECTOR] = "Protective friend",
    [CollectibleType.FRIEND_ZONE] = "Friendly fly",
    [CollectibleType.LOST_FLY] = "Lost protector",
    [CollectibleType.SCATTER_BOMBS] = "We put bombs in your bombs!",
    [CollectibleType.STICKY_BOMBS] = "Egg sack bombs!",
    [CollectibleType.EPIPHORA] = "Intensifying tears",
    [CollectibleType.CONTINUUM] = "Transcendent tears",
    [CollectibleType.MR_DOLLY] = "Range + tears up",
    [CollectibleType.CURSE_OF_THE_TOWER] = "Embrace chaos",
    [CollectibleType.CHARGED_BABY] = "Bbbzzzzzt! ",
    [CollectibleType.DEAD_EYE] = "Accuracy brings power",
    [CollectibleType.HOLY_LIGHT] = "Holy death shot",
    [CollectibleType.HOST_HAT] = "Blast resistance",
    [CollectibleType.RESTOCK] = "Never ending stores!",
    [CollectibleType.BURSTING_SACK] = "Spider love",
    [CollectibleType.NUMBER_TWO] = "Uh oh...",
    [CollectibleType.PUPULA_DUPLEX] = "Wide shot",
    [CollectibleType.PAY_TO_PLAY] = "Money talks",
    [CollectibleType.EDENS_BLESSING] = "Tears up + your future shines brighter",
    [CollectibleType.FRIEND_BALL] = "Gotta fetch 'em all!",
    [CollectibleType.TEAR_DETONATOR] = "Remote tear detonation",
    [CollectibleType.LIL_GURDY] = "A gurd of your own!",
    [CollectibleType.BUMBO] = "Bumbo want coin!",
    [CollectibleType.D12] = "Rerolls rocks",
    [CollectibleType.CENSER] = "Peace be with you",
    [CollectibleType.KEY_BUM] = "He wants your keys!",
    [CollectibleType.RUNE_BAG] = "Rune generator",
    [CollectibleType.SERAPHIM] = "Sworn friend",
    [CollectibleType.BETRAYAL] = "Turn your enemy",
    [CollectibleType.ZODIAC] = "The heavens will change you",
    [CollectibleType.SERPENTS_KISS] = "The kiss of death",
    [CollectibleType.MARKED] = "Directed tears",
    [CollectibleType.TECH_X] = "Laser ring tears",
    [CollectibleType.VENTRICLE_RAZOR] = "Short cutter",
    [CollectibleType.TRACTOR_BEAM] = "Controlled tears",
    [CollectibleType.GODS_FLESH] = "Shrink shot!",
    [CollectibleType.MAW_OF_THE_VOID] = "Consume thy enemy!",
    [CollectibleType.SPEAR_OF_DESTINY] = "Your destiny",
    [CollectibleType.EXPLOSIVO] = "Sticky bomb shot",
    [CollectibleType.CHAOS] = "!!!",
    [CollectibleType.SPIDER_MOD] = "Mod buddy",
    [CollectibleType.FARTING_BABY] = "He farts",
    [CollectibleType.GB_BUG] = "Double tap glitch",
    [CollectibleType.D8] = "Reroll stats",
    [CollectibleType.PURITY] = "Aura stat boost",
    [CollectibleType.ATHAME] = "Call to the void",
    [CollectibleType.EMPTY_VESSEL] = "I reward an empty vessel",
    [CollectibleType.EVIL_EYE] = "Eye shot",
    [CollectibleType.LUSTY_BLOOD] = "Their blood brings rage!",
    [CollectibleType.CAMBION_CONCEPTION] = "Feed them hate",
    [CollectibleType.IMMACULATE_CONCEPTION] = "Feed them love",
    [CollectibleType.MORE_OPTIONS] = "There's options",
    [CollectibleType.CROWN_OF_LIGHT] = "The untainted gain power",
    [CollectibleType.DEEP_POCKETS] = "More money!",
    [CollectibleType.SUCCUBUS] = "Damage booster",
    [CollectibleType.FRUIT_CAKE] = "Rainbow effects!",
    [CollectibleType.TELEPORT_2] = "I-Teleport!",
    [CollectibleType.BLACK_POWDER] = "Spin the black circle!",
    [CollectibleType.KIDNEY_BEAN] = "Love toots",
    [CollectibleType.GLOWING_HOUR_GLASS] = "Turn back time",
    [CollectibleType.CIRCLE_OF_PROTECTION] = "Protect me from myself",
    [CollectibleType.SACK_HEAD] = "More sacks!",
    [CollectibleType.NIGHT_LIGHT] = "Scared of the dark?",
    [CollectibleType.OBSESSED_FAN] = "Follows my every move...",
    [CollectibleType.MINE_CRAFTER] = "Booom!",
    [CollectibleType.PJS] = "You feel cozy",
    [CollectibleType.HEAD_OF_THE_KEEPER] = "Penny tears",
    [CollectibleType.PAPA_FLY] = "Turret follower",
    [CollectibleType.MULTIDIMENSIONAL_BABY] = "ydduB Buddy",
    [CollectibleType.GLITTER_BOMBS] = "Prize bombs",
    [CollectibleType.MY_SHADOW] = "Me! And my shaaaadow!",
    [CollectibleType.JAR_OF_FLIES] = "Bug catcher",
    [CollectibleType.LIL_LOKI] = "4-way buddy!",
    [CollectibleType.MILK] = "Don't cry over it...",
    [CollectibleType.D7] = "Roll again",
    [CollectibleType.BINKY] = "Tears up",
    [CollectibleType.MOMS_BOX] = "What's inside?",
    [CollectibleType.KIDNEY_STONE] = "Matt's kidney stone",
    [CollectibleType.MEGA_BLAST] = "Laser breath",
    [CollectibleType.DARK_PRINCES_CROWN] = "Loss is power",
    [CollectibleType.APPLE] = "Trick or treat?",
    [CollectibleType.LEAD_PENCIL] = "He's a bleeder!",
    [CollectibleType.DOG_TOOTH] = "Bark at the moon!",
    [CollectibleType.DEAD_TOOTH] = "Toxic breath",
    [CollectibleType.LINGER_BEAN] = "Crying makes me toot",
    [CollectibleType.SHARD_OF_GLASS] = "Blood and guts!",
    [CollectibleType.METAL_PLATE] = "It itches...",
    [CollectibleType.EYE_OF_GREED] = "Gold tears!",
    [CollectibleType.TAROT_CLOTH] = "I see the future",
    [CollectibleType.VARICOSE_VEINS] = "I'm leaking...",
    [CollectibleType.COMPOUND_FRACTURE] = "Bone tears!",
    [CollectibleType.POLYDACTYLY] = "Hold me!",
    [CollectibleType.DADS_LOST_COIN] = "I remember this...",
    [CollectibleType.MIDNIGHT_SNACK] = "HP up",
    [CollectibleType.CONE_HEAD] = "Hard headed!",
    [CollectibleType.BELLY_BUTTON] = "What's in there?",
    [CollectibleType.SINUS_INFECTION] = "Booger tears!",
    [CollectibleType.GLAUCOMA] = "Blind tears!",
    [CollectibleType.PARASITOID] = "Egg tears!",
    [CollectibleType.EYE_OF_BELIAL] = "Possessed tears!",
    [CollectibleType.SULFURIC_ACID] = "Acid tears!",
    [CollectibleType.GLYPH_OF_BALANCE] = "A gift from above",
    [CollectibleType.ANALOG_STICK] = "360 tears!",
    [CollectibleType.CONTAGION] = "Outbreak!",
    [CollectibleType.FINGER] = "Watch where you point that!",
    [CollectibleType.SHADE] = "It follows",
    [CollectibleType.DEPRESSION] = ":(",
    [CollectibleType.HUSHY] = "Lil hush!",
    [CollectibleType.LIL_MONSTRO] = "Ain't he cute?",
    [CollectibleType.KING_BABY] = "Hail to the king baby",
    [CollectibleType.BIG_CHUBBY] = "Chub chub",
    [CollectibleType.BROKEN_GLASS_CANNON] = "You broke it!",
    [CollectibleType.PLAN_C] = "My last resort",
    [CollectibleType.D1] = "What will it be?",
    [CollectibleType.VOID] = "Consume",
    [CollectibleType.PAUSE] = "Stop!",
    [CollectibleType.SMELTER] = "Trinket melter!",
    [CollectibleType.COMPOST] = "Gain more friends!",
    [CollectibleType.DATAMINER] = "109",
    [CollectibleType.CLICKER] = "Change",
    [CollectibleType.MAMA_MEGA] = "BOOOOOOOOOM!",
    [CollectibleType.WAIT_WHAT] = "I can't believe it's not butter bean!",
    [CollectibleType.CROOKED_PENNY] = "50/50",
    [CollectibleType.DULL_RAZOR] = "I feel numb...",
    [CollectibleType.POTATO_PEELER] = "A pound of flesh...",
    [CollectibleType.METRONOME] = "Waggles a finger",
    [CollectibleType.D_INFINITY] = "Reroll forever",
    [CollectibleType.EDENS_SOUL] = "...",
    [CollectibleType.ACID_BABY] = "Pills pills pills!",
    [CollectibleType.YO_LISTEN] = "Yo listen!",
    [CollectibleType.ADRENALINE] = "Panic = power",
    [CollectibleType.JACOBS_LADDER] = "Electric tears",
    [CollectibleType.GHOST_PEPPER] = "Flame tears",
    [CollectibleType.EUTHANASIA] = "Needle shot",
    [CollectibleType.CAMO_UNDIES] = "Camo kid",
    [CollectibleType.DUALITY] = "You feel very balanced",
    [CollectibleType.EUCHARIST] = "Peace be with you",
    [CollectibleType.SACK_OF_SACKS] = "Gives sacks",
    [CollectibleType.GREEDS_GULLET] = "Money = health!",
    [CollectibleType.LARGE_ZIT] = "Creep shots",
    [CollectibleType.LITTLE_HORN] = "Big brother is watching",
    [CollectibleType.BROWN_NUGGET] = "Friendly fly",
    [CollectibleType.POKE_GO] = "Gotta catch em...",
    [CollectibleType.BACKSTABBER] = "Watch your back!",
    [CollectibleType.SHARP_STRAW] = "More blood!",
    [CollectibleType.MOMS_RAZOR] = "It's sharp!",
    [CollectibleType.BLOODSHOT_EYE] = "Bloody friend",
    [CollectibleType.DELIRIOUS] = "Unleash the power!",
    [CollectibleType.ANGRY_FLY] = "He's violent",
    [CollectibleType.BLACK_HOLE] = "Nothing can escape",
    [CollectibleType.BOZO] = "Party time!",
    [CollectibleType.BROKEN_MODEM] = "Lag!",
    [CollectibleType.MYSTERY_GIFT] = "Wrapped up nice for you!",
    [CollectibleType.SPRINKLER] = "Sprinkles.",
    [CollectibleType.FAST_BOMBS] = "Rapid bomb drops",
    [CollectibleType.BUDDY_IN_A_BOX] = "What could it be?!",
    [CollectibleType.LIL_DELIRIUM] = "Delirious friend",
    [CollectibleType.JUMPER_CABLES] = "Bloody recharge",
    [CollectibleType.COUPON] = "Allow 6 weeks for delivery",
    [CollectibleType.TELEKINESIS] = "Power of the mind",
    [CollectibleType.MOVING_BOX] = "Pack and unpack",
    [CollectibleType.TECHNOLOGY_ZERO] = "Static tears",
    [CollectibleType.LEPROSY] = "You're tearing me apart!",
    [CollectibleType.SEVEN_SEALS] = "Lil harbingers!",
    [CollectibleType.MR_ME] = "Caaan do!",
    [CollectibleType.ANGELIC_PRISM] = "Eclipsed by the moon",
    [CollectibleType.POP] = "Eyeball tears",
    [CollectibleType.DEATHS_LIST] = "Just hope you're not next...",
    [CollectibleType.HAEMOLACRIA] = "I'm seeing red...",
    [CollectibleType.LACHRYPHAGY] = "Feed them!",
    [CollectibleType.TRISAGION] = "Smite thy enemy",
    [CollectibleType.SCHOOLBAG] = "Extra active item room",
    [CollectibleType.BLANKET] = "You feel safe",
    [CollectibleType.SACRIFICIAL_ALTAR] = "He demands a sacrifice",
    [CollectibleType.LIL_SPEWER] = "Puking buddy",
    [CollectibleType.MARBLES] = "Choking hazard",
    [CollectibleType.MYSTERY_EGG] = "Sacrificial insemination",
    [CollectibleType.FLAT_STONE] = "Skipping tears",
    [CollectibleType.MARROW] = "HP up?",
    [CollectibleType.SLIPPED_RIB] = "Projectile shield",
    [CollectibleType.HALLOWED_GROUND] = "Portable sanctuary",
    [CollectibleType.POINTY_RIB] = "Stabbing time",
    [CollectibleType.BOOK_OF_THE_DEAD] = "Rise from the grave",
    [CollectibleType.DADS_RING] = "Father's blessing",
    [CollectibleType.DIVORCE_PAPERS] = "Tears up + you feel empty",
    [CollectibleType.JAW_BONE] = "Fetch!",
    [CollectibleType.BRITTLE_BONES] = "Everything hurts",
    [CollectibleType.BROKEN_SHOVEL_1] = "It feels cursed",
    [CollectibleType.BROKEN_SHOVEL_2] = "It feels cursed",
    [CollectibleType.MOMS_SHOVEL] = "Lost but not forgotten",
    [CollectibleType.MUCORMYCOSIS] = "Spore shot",
    [CollectibleType.TWO_SPOOKY] = "4me",
    [CollectibleType.GOLDEN_RAZOR] = "Pain from gain",
    [CollectibleType.SULFUR] = "Temporary demon form",
    [CollectibleType.FORTUNE_COOKIE] = "Reusable fortunes",
    [CollectibleType.EYE_SORE] = "More eyes",
    [CollectibleType.ONE_HUNDRED_TWENTY_VOLT] = "Zap!",
    [CollectibleType.IT_HURTS] = "No it doesn't...",
    [CollectibleType.ALMOND_MILK] = "DMG down + tears up + you feel nutty",
    [CollectibleType.ROCK_BOTTOM] = "It's only up from there",
    [CollectibleType.NANCY_BOMBS] = "Random blast +5 bombs",
    [CollectibleType.BAR_OF_SOAP] = "Tears + shot speed up",
    [CollectibleType.BLOOD_PUPPY] = "What a cute little thing!",
    [CollectibleType.DREAM_CATCHER] = "Sweet dreams",
    [CollectibleType.PASCHAL_CANDLE] = "Keep the flame burning",
    [CollectibleType.DIVINE_INTERVENTION] = "Double tap shield",
    [CollectibleType.BLOOD_OATH] = "Bleed me dry",
    [CollectibleType.PLAYDOUGH_COOKIE] = "Tasty rainbow",
    [CollectibleType.ORPHAN_SOCKS] = "Speed up + your feet feel stronger",
    [CollectibleType.EYE_OF_THE_OCCULT] = "DMG up + range up + controlled tears",
    [CollectibleType.IMMACULATE_HEART] = "Halo of tears",
    [CollectibleType.MONSTRANCE] = "Purifying light",
    [CollectibleType.INTRUDER] = "Invasive friend",
    [CollectibleType.DIRTY_MIND] = "Filthy friends",
    [CollectibleType.DAMOCLES] = "A king's fortune... but at what cost?",
    [CollectibleType.FREE_LEMONADE] = "Party time!",
    [CollectibleType.SPIRIT_SWORD] = "Divine blade",
    [CollectibleType.RED_KEY] = "Explore the other side",
    [CollectibleType.PSY_FLY] = "Flamboyant protector",
    [CollectibleType.WAVY_CAP] = "Tears up. A mind changing experience!",
    [CollectibleType.ROCKET_IN_A_JAR] = "Rocket propulsion +5 bombs",
    [CollectibleType.BOOK_OF_VIRTUES] = "Spiritual companionship",
    [CollectibleType.ALABASTER_BOX] = "A sacred offering",
    [CollectibleType.STAIRWAY] = "May you get what you came for",
    [CollectibleType.SOL] = "Radiant victory",
    [CollectibleType.LUNA] = "The moon's blessing shines upon you",
    [CollectibleType.MERCURIUS] = "Speed up + you feel elusive",
    [CollectibleType.VENUS] = "HP up + you feel pretty",
    [CollectibleType.TERRA] = "Born to rock",
    [CollectibleType.MARS] = "Double tap dash",
    [CollectibleType.JUPITER] = "You're a gas giant!",
    [CollectibleType.SATURNUS] = "Ring of tears",
    [CollectibleType.URANUS] = "Ice tears",
    [CollectibleType.NEPTUNUS] = "Open the floodgates",
    [CollectibleType.PLUTO] = "Size down",
    [CollectibleType.VOODOO_HEAD] = "Extra curse rooms",
    [CollectibleType.EYE_DROPS] = "Tears up",
    [CollectibleType.ACT_OF_CONTRITION] = "Tears up, you feel forgiven",
    [CollectibleType.MEMBER_CARD] = "Exclusive access!",
    [CollectibleType.BATTERY_PACK] = "Instant energy!",
    [CollectibleType.MOMS_BRACELET] = "Mother's strength",
    [CollectibleType.SCOOPER] = "Plop!",
    [CollectibleType.OCULAR_RIFT] = "Stare into the abyss",
    [CollectibleType.BOILED_BABY] = "Messy friend",
    [CollectibleType.FREEZER_BABY] = "Iced iced baby",
    [CollectibleType.ETERNAL_D6] = "???",
    [CollectibleType.BIRD_CAGE] = "Fat buddy",
    [CollectibleType.LARYNX] = "Hear my pain",
    [CollectibleType.LOST_SOUL] = "Protect him",
    [CollectibleType.BLOOD_BOMBS] = "Bloody blast + HP up",
    [CollectibleType.LIL_DUMPY] = "Puffy buddy",
    [CollectibleType.BIRDS_EYE] = "It burns",
    [CollectibleType.LODESTONE] = "Magnetizing tears",
    [CollectibleType.ROTTEN_TOMATO] = "Delicious!",
    [CollectibleType.BIRTHRIGHT] = "???",
    [CollectibleType.RED_STEW] = "Full HP + temporary DMG up",
    [CollectibleType.GENESIS] = "In the beginning",
    [CollectibleType.SHARP_KEY] = "Open your enemies",
    [CollectibleType.BOOSTER_PACK] = "Collect them all!",
    [CollectibleType.MEGA_MUSH] = "I'm a big boy now!",
    [CollectibleType.KNIFE_PIECE_1] = "???",
    [CollectibleType.KNIFE_PIECE_2] = "???",
    [CollectibleType.DEATH_CERTIFICATE] = "Where am I?",
    [CollectibleType.BOT_FLY] = "Defense drone",
    [CollectibleType.MEAT_CLEAVER] = "Slice but no dice",
    [CollectibleType.EVIL_CHARM] = "Luck up + you feel protected",
    [CollectibleType.DOGMA] = "Ascended",
    [CollectibleType.PURGATORY] = "Help from beyond",
    [CollectibleType.STITCHES] = "Bait and switch",
    [CollectibleType.R_KEY] = "Time to start over",
    [CollectibleType.KNOCKOUT_DROPS] = "They pack a punch!",
    [CollectibleType.ERASER] = "Erase thy enemy",
    [CollectibleType.YUCK_HEART] = "Gross!",
    [CollectibleType.URN_OF_SOULS] = "Unleash their sorrow",
    [CollectibleType.AKELDAMA] = "Spill your guts",
    [CollectibleType.MAGIC_SKIN] = "All your desires fulfilled",
    [CollectibleType.REVELATION] = "Awaken your faith",
    [CollectibleType.CONSOLATION_PRIZE] = "+1 to lowest stat",
    [CollectibleType.TINYTOMA] = "Itching for revenge",
    [CollectibleType.BRIMSTONE_BOMBS] = "Demon blast +5 bombs",
    [CollectibleType.FOUR_FIVE_VOLT] = "Beat the juice out of them!",
    [CollectibleType.FRUITY_PLUM] = "Bouncy friend",
    [CollectibleType.PLUM_FLUTE] = "Play time!",
    [CollectibleType.STAR_OF_BETHLEHEM] = "Follow the light",
    [CollectibleType.CUBE_BABY] = "Kick it!",
    [CollectibleType.VADE_RETRO] = "Begone!",
    [CollectibleType.FALSE_PHD] = "Worse pills + evil up",
    [CollectibleType.SPIN_TO_WIN] = "Let it rip!",
    [CollectibleType.DAMOCLES_PASSIVE] = "A king's fortune... but at what cost?",
    [CollectibleType.VASCULITIS] = "Clogged enemies",
    [CollectibleType.GIANT_CELL] = "Micro friends",
    [CollectibleType.TROPICAMIDE] = "Tear size + range up",
    [CollectibleType.CARD_READING] = "A link to your future",
    [CollectibleType.QUINTS] = "They lurk inside",
    [CollectibleType.TOOTH_AND_NAIL] = "You feel prickly",
    [CollectibleType.BINGE_EATER] = "All you can eat",
    [CollectibleType.GUPPYS_EYE] = "An eye for secrets",
    [CollectibleType.STRAWMAN] = "A helping hand",
    [CollectibleType.DADS_NOTE] = "...",
    [CollectibleType.SAUSAGE] = "All stats up",
    [CollectibleType.OPTIONS] = "There might be options",
    [CollectibleType.CANDY_HEART] = "Power of love",
    [CollectibleType.POUND_OF_FLESH] = "Blood money",
    [CollectibleType.REDEMPTION] = "Deliver me from evil",
    [CollectibleType.SPIRIT_SHACKLES] = "Unfinished business",
    [CollectibleType.CRACKED_ORB] = "Shards of knowledge",
    [CollectibleType.EMPTY_HEART] = "It multiplies",
    [CollectibleType.ASTRAL_PROJECTION] = "The true out-of-body experience!",
    [CollectibleType.C_SECTION] = "Fetus shots",
    [CollectibleType.LIL_ABADDON] = "Abyssal friend",
    [CollectibleType.MONTEZUMAS_REVENGE] = "Oh no...",
    [CollectibleType.LIL_PORTAL] = "It hungers",
    [CollectibleType.WORM_FRIEND] = "Clingy buddy",
    [CollectibleType.BONE_SPURS] = "Break your enemies",
    [CollectibleType.HUNGRY_SOUL] = "Out for blood",
    [CollectibleType.JAR_OF_WISPS] = "Your faith grows",
    [CollectibleType.SOUL_LOCKET] = "Power of faith",
    [CollectibleType.FRIEND_FINDER] = "Best friends forever!",
    [CollectibleType.INNER_CHILD] = "Let him free",
    [CollectibleType.GLITCHED_CROWN] = "?????",
    [CollectibleType.JELLY_BELLY] = "Bounce away!",
    [CollectibleType.SACRED_ORB] = "Destined for greatness",
    [CollectibleType.SANGUINE_BOND] = "He awaits your offering",
    [CollectibleType.SWARM] = "Infest",
    [CollectibleType.HEARTBREAK] = "Eternal sorrow",
    [CollectibleType.BLOODY_GUST] = "May your rage bring haste",
    [CollectibleType.SALVATION] = "Divine protection",
    [CollectibleType.VANISHING_TWIN] = "He wants revenge",
    [CollectibleType.TWISTED_PAIR] = "Double trouble!",
    [CollectibleType.AZAZELS_RAGE] = "Ancient power",
    [CollectibleType.ECHO_CHAMBER] = "I can see see the future future future",
    [CollectibleType.ISAACS_TOMB] = "Buried memories",
    [CollectibleType.VENGEFUL_SPIRIT] = "Hot blooded",
    [CollectibleType.ESAU_JR] = "Lost brother",
    [CollectibleType.BERSERK] = "Rip and tear",
    [CollectibleType.DARK_ARTS] = "One with the shadows",
    [CollectibleType.ABYSS] = "Come forth from the depths",
    [CollectibleType.SUPPER] = "HP up",
    [CollectibleType.STAPLER] = "DMG up",
    [CollectibleType.SUPLEX] = "Angel breaker",
    [CollectibleType.BAG_OF_CRAFTING] = "Make your destiny",
    [CollectibleType.FLIP] = "Life and death",
    [CollectibleType.LEMEGETON] = "Item summoner",
    [CollectibleType.SUMPTORIUM] = "Return",
    [CollectibleType.RECALL] = "Come back",
    [CollectibleType.HOLD] = "Saved for later",
    [CollectibleType.KEEPERS_SACK] = "Spending power",
    [CollectibleType.KEEPERS_KIN] = "Under a rock",
    [CollectibleType.KEEPERS_BOX] = "Portable shop",
    [CollectibleType.EVERYTHING_JAR] = "Anything is possible",
    [CollectibleType.TMTRAINER] = "Isaac and his mother lived alone in a small house on a hill",
    [CollectibleType.ANIMA_SOLA] = "Repent",
    [CollectibleType.SPINDOWN_DICE] = "-1",
    [CollectibleType.HYPERCOAGULATION] = "Thick blooded",
    [CollectibleType.IBS] = "Your stomach rumbles",
    [CollectibleType.HEMOPTYSIS] = "Double tap sneeze",
    [CollectibleType.GHOST_BOMBS] = "Spooky blast +5 bombs",
    [CollectibleType.GELLO] = "Demonic gestation",
    [CollectibleType.DECAP_ATTACK] = "Chuck away!",
    [CollectibleType.GLASS_EYE] = "DMG + luck up",
    [CollectibleType.STYE] = "DMG + range up",
    [CollectibleType.MOMS_RING] = "DMG up"
}
return ____exports
 end,
["objects.collectibleNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
____exports.DEFAULT_COLLECTIBLE_NAME = "Unknown"
--- Maps collectible types to the real English names from the "stringtable.sta" file.
-- 
-- For a mapping of name to `CollectibleType`, see `COLLECTIBLE_NAME_TO_TYPE_MAP`.
____exports.COLLECTIBLE_NAMES = {
    [CollectibleType.NULL] = ____exports.DEFAULT_COLLECTIBLE_NAME,
    [CollectibleType.SAD_ONION] = "The Sad Onion",
    [CollectibleType.INNER_EYE] = "The Inner Eye",
    [CollectibleType.SPOON_BENDER] = "Spoon Bender",
    [CollectibleType.CRICKETS_HEAD] = "Cricket's Head",
    [CollectibleType.MY_REFLECTION] = "My Reflection",
    [CollectibleType.NUMBER_ONE] = "Number One",
    [CollectibleType.BLOOD_OF_THE_MARTYR] = "Blood of the Martyr",
    [CollectibleType.BROTHER_BOBBY] = "Brother Bobby",
    [CollectibleType.SKATOLE] = "Skatole",
    [CollectibleType.HALO_OF_FLIES] = "Halo of Flies",
    [CollectibleType.ONE_UP] = "1up!",
    [CollectibleType.MAGIC_MUSHROOM] = "Magic Mushroom",
    [CollectibleType.VIRUS] = "The Virus",
    [CollectibleType.ROID_RAGE] = "Roid Rage",
    [CollectibleType.HEART] = "<3",
    [CollectibleType.RAW_LIVER] = "Raw Liver",
    [CollectibleType.SKELETON_KEY] = "Skeleton Key",
    [CollectibleType.DOLLAR] = "A Dollar",
    [CollectibleType.BOOM] = "Boom!",
    [CollectibleType.TRANSCENDENCE] = "Transcendence",
    [CollectibleType.COMPASS] = "The Compass",
    [CollectibleType.LUNCH] = "Lunch",
    [CollectibleType.DINNER] = "Dinner",
    [CollectibleType.DESSERT] = "Dessert",
    [CollectibleType.BREAKFAST] = "Breakfast",
    [CollectibleType.ROTTEN_MEAT] = "Rotten Meat",
    [CollectibleType.WOODEN_SPOON] = "Wooden Spoon",
    [CollectibleType.BELT] = "The Belt",
    [CollectibleType.MOMS_UNDERWEAR] = "Mom's Underwear",
    [CollectibleType.MOMS_HEELS] = "Mom's Heels",
    [CollectibleType.MOMS_LIPSTICK] = "Mom's Lipstick",
    [CollectibleType.WIRE_COAT_HANGER] = "Wire Coat Hanger",
    [CollectibleType.BIBLE] = "The Bible",
    [CollectibleType.BOOK_OF_BELIAL] = "The Book of Belial",
    [CollectibleType.NECRONOMICON] = "The Necronomicon",
    [CollectibleType.POOP] = "The Poop",
    [CollectibleType.MR_BOOM] = "Mr. Boom",
    [CollectibleType.TAMMYS_HEAD] = "Tammy's Head",
    [CollectibleType.MOMS_BRA] = "Mom's Bra",
    [CollectibleType.KAMIKAZE] = "Kamikaze!",
    [CollectibleType.MOMS_PAD] = "Mom's Pad",
    [CollectibleType.BOBS_ROTTEN_HEAD] = "Bob's Rotten Head",
    [CollectibleType.TELEPORT] = "Teleport!",
    [CollectibleType.YUM_HEART] = "Yum Heart",
    [CollectibleType.LUCKY_FOOT] = "Lucky Foot",
    [CollectibleType.DOCTORS_REMOTE] = "Doctor's Remote",
    [CollectibleType.CUPIDS_ARROW] = "Cupid's Arrow",
    [CollectibleType.SHOOP_DA_WHOOP] = "Shoop da Whoop!",
    [CollectibleType.STEVEN] = "Steven",
    [CollectibleType.PENTAGRAM] = "Pentagram",
    [CollectibleType.DR_FETUS] = "Dr. Fetus",
    [CollectibleType.MAGNETO] = "Magneto",
    [CollectibleType.TREASURE_MAP] = "Treasure Map",
    [CollectibleType.MOMS_EYE] = "Mom's Eye",
    [CollectibleType.LEMON_MISHAP] = "Lemon Mishap",
    [CollectibleType.DISTANT_ADMIRATION] = "Distant Admiration",
    [CollectibleType.BOOK_OF_SHADOWS] = "Book of Shadows",
    [CollectibleType.BOOK_OF_BELIAL_BIRTHRIGHT] = "The Book of Belial",
    [CollectibleType.LADDER] = "The Ladder",
    [CollectibleType.CHARM_OF_THE_VAMPIRE] = "Charm of the Vampire",
    [CollectibleType.BATTERY] = "The Battery",
    [CollectibleType.STEAM_SALE] = "Steam Sale",
    [CollectibleType.ANARCHIST_COOKBOOK] = "Anarchist Cookbook",
    [CollectibleType.HOURGLASS] = "The Hourglass",
    [CollectibleType.SISTER_MAGGY] = "Sister Maggy",
    [CollectibleType.TECHNOLOGY] = "Technology",
    [CollectibleType.CHOCOLATE_MILK] = "Chocolate Milk",
    [CollectibleType.GROWTH_HORMONES] = "Growth Hormones",
    [CollectibleType.MINI_MUSH] = "Mini Mush",
    [CollectibleType.ROSARY] = "Rosary",
    [CollectibleType.CUBE_OF_MEAT] = "Cube of Meat",
    [CollectibleType.QUARTER] = "A Quarter",
    [CollectibleType.PHD] = "PHD",
    [CollectibleType.XRAY_VISION] = "X-Ray Vision",
    [CollectibleType.MY_LITTLE_UNICORN] = "My Little Unicorn",
    [CollectibleType.BOOK_OF_REVELATIONS] = "Book of Revelations",
    [CollectibleType.MARK] = "The Mark",
    [CollectibleType.PACT] = "The Pact",
    [CollectibleType.DEAD_CAT] = "Dead Cat",
    [CollectibleType.LORD_OF_THE_PIT] = "Lord of the Pit",
    [CollectibleType.NAIL] = "The Nail",
    [CollectibleType.WE_NEED_TO_GO_DEEPER] = "We Need To Go Deeper!",
    [CollectibleType.DECK_OF_CARDS] = "Deck of Cards",
    [CollectibleType.MONSTROS_TOOTH] = "Monstro's Tooth",
    [CollectibleType.LOKIS_HORNS] = "Loki's Horns",
    [CollectibleType.LITTLE_CHUBBY] = "Little Chubby",
    [CollectibleType.SPIDER_BITE] = "Spider Bite",
    [CollectibleType.SMALL_ROCK] = "The Small Rock",
    [CollectibleType.SPELUNKER_HAT] = "Spelunker Hat",
    [CollectibleType.SUPER_BANDAGE] = "Super Bandage",
    [CollectibleType.GAMEKID] = "The Gamekid",
    [CollectibleType.SACK_OF_PENNIES] = "Sack of Pennies",
    [CollectibleType.ROBO_BABY] = "Robo-Baby",
    [CollectibleType.LITTLE_CHAD] = "Little C.H.A.D.",
    [CollectibleType.BOOK_OF_SIN] = "The Book of Sin",
    [CollectibleType.RELIC] = "The Relic",
    [CollectibleType.LITTLE_GISH] = "Little Gish",
    [CollectibleType.LITTLE_STEVEN] = "Little Steven",
    [CollectibleType.HALO] = "The Halo",
    [CollectibleType.MOMS_BOTTLE_OF_PILLS] = "Mom's Bottle of Pills",
    [CollectibleType.COMMON_COLD] = "The Common Cold",
    [CollectibleType.PARASITE] = "The Parasite",
    [CollectibleType.D6] = "The D6",
    [CollectibleType.MR_MEGA] = "Mr. Mega",
    [CollectibleType.PINKING_SHEARS] = "The Pinking Shears",
    [CollectibleType.WAFER] = "The Wafer",
    [CollectibleType.MONEY_EQUALS_POWER] = "Money = Power",
    [CollectibleType.MOMS_CONTACTS] = "Mom's Contacts",
    [CollectibleType.BEAN] = "The Bean",
    [CollectibleType.GUARDIAN_ANGEL] = "Guardian Angel",
    [CollectibleType.DEMON_BABY] = "Demon Baby",
    [CollectibleType.MOMS_KNIFE] = "Mom's Knife",
    [CollectibleType.OUIJA_BOARD] = "Ouija Board",
    [CollectibleType.NINE_VOLT] = "9 Volt",
    [CollectibleType.DEAD_BIRD] = "Dead Bird",
    [CollectibleType.BRIMSTONE] = "Brimstone",
    [CollectibleType.BLOOD_BAG] = "Blood Bag",
    [CollectibleType.ODD_MUSHROOM_THIN] = "Odd Mushroom",
    [CollectibleType.ODD_MUSHROOM_LARGE] = "Odd Mushroom",
    [CollectibleType.WHORE_OF_BABYLON] = "Whore of Babylon",
    [CollectibleType.MONSTER_MANUAL] = "Monster Manual",
    [CollectibleType.DEAD_SEA_SCROLLS] = "Dead Sea Scrolls",
    [CollectibleType.BOBBY_BOMB] = "Bobby-Bomb",
    [CollectibleType.RAZOR_BLADE] = "Razor Blade",
    [CollectibleType.FORGET_ME_NOW] = "Forget Me Now",
    [CollectibleType.FOREVER_ALONE] = "Forever Alone",
    [CollectibleType.BUCKET_OF_LARD] = "Bucket of Lard",
    [CollectibleType.PONY] = "A Pony",
    [CollectibleType.BOMB_BAG] = "Bomb Bag",
    [CollectibleType.LUMP_OF_COAL] = "A Lump of Coal",
    [CollectibleType.GUPPYS_PAW] = "Guppy's Paw",
    [CollectibleType.GUPPYS_TAIL] = "Guppy's Tail",
    [CollectibleType.IV_BAG] = "IV Bag",
    [CollectibleType.BEST_FRIEND] = "Best Friend",
    [CollectibleType.REMOTE_DETONATOR] = "Remote Detonator",
    [CollectibleType.STIGMATA] = "Stigmata",
    [CollectibleType.MOMS_PURSE] = "Mom's Purse",
    [CollectibleType.BOBS_CURSE] = "Bob's Curse",
    [CollectibleType.PAGEANT_BOY] = "Pageant Boy",
    [CollectibleType.SCAPULAR] = "Scapular",
    [CollectibleType.SPEED_BALL] = "Speed Ball",
    [CollectibleType.BUM_FRIEND] = "Bum Friend",
    [CollectibleType.GUPPYS_HEAD] = "Guppy's Head",
    [CollectibleType.PRAYER_CARD] = "Prayer Card",
    [CollectibleType.NOTCHED_AXE] = "Notched Axe",
    [CollectibleType.INFESTATION] = "Infestation",
    [CollectibleType.IPECAC] = "Ipecac",
    [CollectibleType.TOUGH_LOVE] = "Tough Love",
    [CollectibleType.MULLIGAN] = "The Mulligan",
    [CollectibleType.TECHNOLOGY_2] = "Technology 2",
    [CollectibleType.MUTANT_SPIDER] = "Mutant Spider",
    [CollectibleType.CHEMICAL_PEEL] = "Chemical Peel",
    [CollectibleType.PEEPER] = "The Peeper",
    [CollectibleType.HABIT] = "Habit",
    [CollectibleType.BLOODY_LUST] = "Bloody Lust",
    [CollectibleType.CRYSTAL_BALL] = "Crystal Ball",
    [CollectibleType.SPIRIT_OF_THE_NIGHT] = "Spirit of the Night",
    [CollectibleType.CRACK_THE_SKY] = "Crack the Sky",
    [CollectibleType.ANKH] = "Ankh",
    [CollectibleType.CELTIC_CROSS] = "Celtic Cross",
    [CollectibleType.GHOST_BABY] = "Ghost Baby",
    [CollectibleType.CANDLE] = "The Candle",
    [CollectibleType.CAT_O_NINE_TAILS] = "Cat-o-nine-tails",
    [CollectibleType.D20] = "D20",
    [CollectibleType.HARLEQUIN_BABY] = "Harlequin Baby",
    [CollectibleType.EPIC_FETUS] = "Epic Fetus",
    [CollectibleType.POLYPHEMUS] = "Polyphemus",
    [CollectibleType.DADDY_LONGLEGS] = "Daddy Longlegs",
    [CollectibleType.SPIDER_BUTT] = "Spider Butt",
    [CollectibleType.SACRIFICIAL_DAGGER] = "Sacrificial Dagger",
    [CollectibleType.MITRE] = "Mitre",
    [CollectibleType.RAINBOW_BABY] = "Rainbow Baby",
    [CollectibleType.DADS_KEY] = "Dad's Key",
    [CollectibleType.STEM_CELLS] = "Stem Cells",
    [CollectibleType.PORTABLE_SLOT] = "Portable Slot",
    [CollectibleType.HOLY_WATER] = "Holy Water",
    [CollectibleType.FATE] = "Fate",
    [CollectibleType.BLACK_BEAN] = "The Black Bean",
    [CollectibleType.WHITE_PONY] = "White Pony",
    [CollectibleType.SACRED_HEART] = "Sacred Heart",
    [CollectibleType.TOOTH_PICKS] = "Tooth Picks",
    [CollectibleType.HOLY_GRAIL] = "Holy Grail",
    [CollectibleType.DEAD_DOVE] = "Dead Dove",
    [CollectibleType.BLOOD_RIGHTS] = "Blood Rights",
    [CollectibleType.GUPPYS_HAIRBALL] = "Guppy's Hairball",
    [CollectibleType.ABEL] = "Abel",
    [CollectibleType.SMB_SUPER_FAN] = "SMB Super Fan",
    [CollectibleType.PYRO] = "Pyro",
    [CollectibleType.THREE_DOLLAR_BILL] = "3 Dollar Bill",
    [CollectibleType.TELEPATHY_BOOK] = "Telepathy For Dummies",
    [CollectibleType.MEAT] = "MEAT!",
    [CollectibleType.MAGIC_8_BALL] = "Magic 8 Ball",
    [CollectibleType.MOMS_COIN_PURSE] = "Mom's Coin Purse",
    [CollectibleType.SQUEEZY] = "Squeezy",
    [CollectibleType.JESUS_JUICE] = "Jesus Juice",
    [CollectibleType.BOX] = "Box",
    [CollectibleType.MOMS_KEY] = "Mom's Key",
    [CollectibleType.MOMS_EYESHADOW] = "Mom's Eyeshadow",
    [CollectibleType.IRON_BAR] = "Iron Bar",
    [CollectibleType.MIDAS_TOUCH] = "Midas' Touch",
    [CollectibleType.HUMBLEING_BUNDLE] = "Humbleing Bundle",
    [CollectibleType.FANNY_PACK] = "Fanny Pack",
    [CollectibleType.SHARP_PLUG] = "Sharp Plug",
    [CollectibleType.GUILLOTINE] = "Guillotine",
    [CollectibleType.BALL_OF_BANDAGES] = "Ball of Bandages",
    [CollectibleType.CHAMPION_BELT] = "Champion Belt",
    [CollectibleType.BUTT_BOMBS] = "Butt Bombs",
    [CollectibleType.GNAWED_LEAF] = "Gnawed Leaf",
    [CollectibleType.SPIDERBABY] = "Spiderbaby",
    [CollectibleType.GUPPYS_COLLAR] = "Guppy's Collar",
    [CollectibleType.LOST_CONTACT] = "Lost Contact",
    [CollectibleType.ANEMIC] = "Anemic",
    [CollectibleType.GOAT_HEAD] = "Goat Head",
    [CollectibleType.CEREMONIAL_ROBES] = "Ceremonial Robes",
    [CollectibleType.MOMS_WIG] = "Mom's Wig",
    [CollectibleType.PLACENTA] = "Placenta",
    [CollectibleType.OLD_BANDAGE] = "Old Bandage",
    [CollectibleType.SAD_BOMBS] = "Sad Bombs",
    [CollectibleType.RUBBER_CEMENT] = "Rubber Cement",
    [CollectibleType.ANTI_GRAVITY] = "Anti-Gravity",
    [CollectibleType.PYROMANIAC] = "Pyromaniac",
    [CollectibleType.CRICKETS_BODY] = "Cricket's Body",
    [CollectibleType.GIMPY] = "Gimpy",
    [CollectibleType.BLACK_LOTUS] = "Black Lotus",
    [CollectibleType.PIGGY_BANK] = "Piggy Bank",
    [CollectibleType.MOMS_PERFUME] = "Mom's Perfume",
    [CollectibleType.MONSTROS_LUNG] = "Monstro's Lung",
    [CollectibleType.ABADDON] = "Abaddon",
    [CollectibleType.BALL_OF_TAR] = "Ball of Tar",
    [CollectibleType.STOP_WATCH] = "Stop Watch",
    [CollectibleType.TINY_PLANET] = "Tiny Planet",
    [CollectibleType.INFESTATION_2] = "Infestation 2",
    [CollectibleType.E_COLI] = "E. Coli",
    [CollectibleType.DEATHS_TOUCH] = "Death's Touch",
    [CollectibleType.KEY_PIECE_1] = "Key Piece 1",
    [CollectibleType.KEY_PIECE_2] = "Key Piece 2",
    [CollectibleType.EXPERIMENTAL_TREATMENT] = "Experimental Treatment",
    [CollectibleType.CONTRACT_FROM_BELOW] = "Contract from Below",
    [CollectibleType.INFAMY] = "Infamy",
    [CollectibleType.TRINITY_SHIELD] = "Trinity Shield",
    [CollectibleType.TECH_5] = "Tech.5",
    [CollectibleType.TWENTY_TWENTY] = "20/20",
    [CollectibleType.BLUE_MAP] = "Blue Map",
    [CollectibleType.BFFS] = "BFFS!",
    [CollectibleType.HIVE_MIND] = "Hive Mind",
    [CollectibleType.THERES_OPTIONS] = "There's Options",
    [CollectibleType.BOGO_BOMBS] = "BOGO Bombs",
    [CollectibleType.STARTER_DECK] = "Starter Deck",
    [CollectibleType.LITTLE_BAGGY] = "Little Baggy",
    [CollectibleType.MAGIC_SCAB] = "Magic Scab",
    [CollectibleType.BLOOD_CLOT] = "Blood Clot",
    [CollectibleType.SCREW] = "Screw",
    [CollectibleType.HOT_BOMBS] = "Hot Bombs",
    [CollectibleType.FIRE_MIND] = "Fire Mind",
    [CollectibleType.MISSING_NO] = "Missing No.",
    [CollectibleType.DARK_MATTER] = "Dark Matter",
    [CollectibleType.BLACK_CANDLE] = "Black Candle",
    [CollectibleType.PROPTOSIS] = "Proptosis",
    [CollectibleType.MISSING_PAGE_2] = "Missing Page 2",
    [CollectibleType.CLEAR_RUNE] = "Clear Rune",
    [CollectibleType.SMART_FLY] = "Smart Fly",
    [CollectibleType.DRY_BABY] = "Dry Baby",
    [CollectibleType.JUICY_SACK] = "Juicy Sack",
    [CollectibleType.ROBO_BABY_2] = "Robo-Baby 2.0",
    [CollectibleType.ROTTEN_BABY] = "Rotten Baby",
    [CollectibleType.HEADLESS_BABY] = "Headless Baby",
    [CollectibleType.LEECH] = "Leech",
    [CollectibleType.MYSTERY_SACK] = "Mystery Sack",
    [CollectibleType.BBF] = "BBF",
    [CollectibleType.BOBS_BRAIN] = "Bob's Brain",
    [CollectibleType.BEST_BUD] = "Best Bud",
    [CollectibleType.LIL_BRIMSTONE] = "Lil Brimstone",
    [CollectibleType.ISAACS_HEART] = "Isaac's Heart",
    [CollectibleType.LIL_HAUNT] = "Lil Haunt",
    [CollectibleType.DARK_BUM] = "Dark Bum",
    [CollectibleType.BIG_FAN] = "Big Fan",
    [CollectibleType.SISSY_LONGLEGS] = "Sissy Longlegs",
    [CollectibleType.PUNCHING_BAG] = "Punching Bag",
    [CollectibleType.HOW_TO_JUMP] = "How to Jump",
    [CollectibleType.D100] = "D100",
    [CollectibleType.D4] = "D4",
    [CollectibleType.D10] = "D10",
    [CollectibleType.BLANK_CARD] = "Blank Card",
    [CollectibleType.BOOK_OF_SECRETS] = "Book of Secrets",
    [CollectibleType.BOX_OF_SPIDERS] = "Box of Spiders",
    [CollectibleType.RED_CANDLE] = "Red Candle",
    [CollectibleType.JAR] = "The Jar",
    [CollectibleType.FLUSH] = "Flush!",
    [CollectibleType.SATANIC_BIBLE] = "Satanic Bible",
    [CollectibleType.HEAD_OF_KRAMPUS] = "Head of Krampus",
    [CollectibleType.BUTTER_BEAN] = "Butter Bean",
    [CollectibleType.MAGIC_FINGERS] = "Magic Fingers",
    [CollectibleType.CONVERTER] = "Converter",
    [CollectibleType.BLUE_BOX] = "Pandora's Box",
    [CollectibleType.UNICORN_STUMP] = "Unicorn Stump",
    [CollectibleType.TAURUS] = "Taurus",
    [CollectibleType.ARIES] = "Aries",
    [CollectibleType.CANCER] = "Cancer",
    [CollectibleType.LEO] = "Leo",
    [CollectibleType.VIRGO] = "Virgo",
    [CollectibleType.LIBRA] = "Libra",
    [CollectibleType.SCORPIO] = "Scorpio",
    [CollectibleType.SAGITTARIUS] = "Sagittarius",
    [CollectibleType.CAPRICORN] = "Capricorn",
    [CollectibleType.AQUARIUS] = "Aquarius",
    [CollectibleType.PISCES] = "Pisces",
    [CollectibleType.EVES_MASCARA] = "Eve's Mascara",
    [CollectibleType.JUDAS_SHADOW] = "Judas' Shadow",
    [CollectibleType.MAGGYS_BOW] = "Maggy's Bow",
    [CollectibleType.HOLY_MANTLE] = "Holy Mantle",
    [CollectibleType.THUNDER_THIGHS] = "Thunder Thighs",
    [CollectibleType.STRANGE_ATTRACTOR] = "Strange Attractor",
    [CollectibleType.CURSED_EYE] = "Cursed Eye",
    [CollectibleType.MYSTERIOUS_LIQUID] = "Mysterious Liquid",
    [CollectibleType.GEMINI] = "Gemini",
    [CollectibleType.CAINS_OTHER_EYE] = "Cain's Other Eye",
    [CollectibleType.BLUE_BABYS_ONLY_FRIEND] = "???'s Only Friend",
    [CollectibleType.SAMSONS_CHAINS] = "Samson's Chains",
    [CollectibleType.MONGO_BABY] = "Mongo Baby",
    [CollectibleType.ISAACS_TEARS] = "Isaac's Tears",
    [CollectibleType.UNDEFINED] = "Undefined",
    [CollectibleType.SCISSORS] = "Scissors",
    [CollectibleType.BREATH_OF_LIFE] = "Breath of Life",
    [CollectibleType.POLAROID] = "The Polaroid",
    [CollectibleType.NEGATIVE] = "The Negative",
    [CollectibleType.LUDOVICO_TECHNIQUE] = "The Ludovico Technique",
    [CollectibleType.SOY_MILK] = "Soy Milk",
    [CollectibleType.GODHEAD] = "Godhead",
    [CollectibleType.LAZARUS_RAGS] = "Lazarus' Rags",
    [CollectibleType.MIND] = "The Mind",
    [CollectibleType.BODY] = "The Body",
    [CollectibleType.SOUL] = "The Soul",
    [CollectibleType.DEAD_ONION] = "Dead Onion",
    [CollectibleType.BROKEN_WATCH] = "Broken Watch",
    [CollectibleType.BOOMERANG] = "The Boomerang",
    [CollectibleType.SAFETY_PIN] = "Safety Pin",
    [CollectibleType.CAFFEINE_PILL] = "Caffeine Pill",
    [CollectibleType.TORN_PHOTO] = "Torn Photo",
    [CollectibleType.BLUE_CAP] = "Blue Cap",
    [CollectibleType.LATCH_KEY] = "Latch Key",
    [CollectibleType.MATCH_BOOK] = "Match Book",
    [CollectibleType.SYNTHOIL] = "Synthoil",
    [CollectibleType.SNACK] = "A Snack",
    [CollectibleType.DIPLOPIA] = "Diplopia",
    [CollectibleType.PLACEBO] = "Placebo",
    [CollectibleType.WOODEN_NICKEL] = "Wooden Nickel",
    [CollectibleType.TOXIC_SHOCK] = "Toxic Shock",
    [CollectibleType.MEGA_BEAN] = "Mega Bean",
    [CollectibleType.GLASS_CANNON] = "Glass Cannon",
    [CollectibleType.BOMBER_BOY] = "Bomber Boy",
    [CollectibleType.CRACK_JACKS] = "Crack Jacks",
    [CollectibleType.MOMS_PEARLS] = "Mom's Pearls",
    [CollectibleType.CAR_BATTERY] = "Car Battery",
    [CollectibleType.BOX_OF_FRIENDS] = "Box of Friends",
    [CollectibleType.WIZ] = "The Wiz",
    [CollectibleType.EIGHT_INCH_NAILS] = "8 Inch Nails",
    [CollectibleType.INCUBUS] = "Incubus",
    [CollectibleType.FATES_REWARD] = "Fate's Reward",
    [CollectibleType.LIL_CHEST] = "Lil Chest",
    [CollectibleType.SWORN_PROTECTOR] = "Sworn Protector",
    [CollectibleType.FRIEND_ZONE] = "Friend Zone",
    [CollectibleType.LOST_FLY] = "Lost Fly",
    [CollectibleType.SCATTER_BOMBS] = "Scatter Bombs",
    [CollectibleType.STICKY_BOMBS] = "Sticky Bombs",
    [CollectibleType.EPIPHORA] = "Epiphora",
    [CollectibleType.CONTINUUM] = "Continuum",
    [CollectibleType.MR_DOLLY] = "Mr. Dolly",
    [CollectibleType.CURSE_OF_THE_TOWER] = "Curse of the Tower",
    [CollectibleType.CHARGED_BABY] = "Charged Baby",
    [CollectibleType.DEAD_EYE] = "Dead Eye",
    [CollectibleType.HOLY_LIGHT] = "Holy Light",
    [CollectibleType.HOST_HAT] = "Host Hat",
    [CollectibleType.RESTOCK] = "Restock",
    [CollectibleType.BURSTING_SACK] = "Bursting Sack",
    [CollectibleType.NUMBER_TWO] = "Number Two",
    [CollectibleType.PUPULA_DUPLEX] = "Pupula Duplex",
    [CollectibleType.PAY_TO_PLAY] = "Pay To Play",
    [CollectibleType.EDENS_BLESSING] = "Eden's Blessing",
    [CollectibleType.FRIEND_BALL] = "Friendly Ball",
    [CollectibleType.TEAR_DETONATOR] = "Tear Detonator",
    [CollectibleType.LIL_GURDY] = "Lil Gurdy",
    [CollectibleType.BUMBO] = "Bumbo",
    [CollectibleType.D12] = "D12",
    [CollectibleType.CENSER] = "Censer",
    [CollectibleType.KEY_BUM] = "Key Bum",
    [CollectibleType.RUNE_BAG] = "Rune Bag",
    [CollectibleType.SERAPHIM] = "Seraphim",
    [CollectibleType.BETRAYAL] = "Betrayal",
    [CollectibleType.ZODIAC] = "Zodiac",
    [CollectibleType.SERPENTS_KISS] = "Serpent's Kiss",
    [CollectibleType.MARKED] = "Marked",
    [CollectibleType.TECH_X] = "Tech X",
    [CollectibleType.VENTRICLE_RAZOR] = "Ventricle Razor",
    [CollectibleType.TRACTOR_BEAM] = "Tractor Beam",
    [CollectibleType.GODS_FLESH] = "God's Flesh",
    [CollectibleType.MAW_OF_THE_VOID] = "Maw of the Void",
    [CollectibleType.SPEAR_OF_DESTINY] = "Spear of Destiny",
    [CollectibleType.EXPLOSIVO] = "Explosivo",
    [CollectibleType.CHAOS] = "Chaos",
    [CollectibleType.SPIDER_MOD] = "Spider Mod",
    [CollectibleType.FARTING_BABY] = "Farting Baby",
    [CollectibleType.GB_BUG] = "GB Bug",
    [CollectibleType.D8] = "D8",
    [CollectibleType.PURITY] = "Purity",
    [CollectibleType.ATHAME] = "Athame",
    [CollectibleType.EMPTY_VESSEL] = "Empty Vessel",
    [CollectibleType.EVIL_EYE] = "Evil Eye",
    [CollectibleType.LUSTY_BLOOD] = "Lusty Blood",
    [CollectibleType.CAMBION_CONCEPTION] = "Cambion Conception",
    [CollectibleType.IMMACULATE_CONCEPTION] = "Immaculate Conception",
    [CollectibleType.MORE_OPTIONS] = "More Options",
    [CollectibleType.CROWN_OF_LIGHT] = "Crown of Light",
    [CollectibleType.DEEP_POCKETS] = "Deep Pockets",
    [CollectibleType.SUCCUBUS] = "Succubus",
    [CollectibleType.FRUIT_CAKE] = "Fruit Cake",
    [CollectibleType.TELEPORT_2] = "Teleport 2.0",
    [CollectibleType.BLACK_POWDER] = "Black Powder",
    [CollectibleType.KIDNEY_BEAN] = "Kidney Bean",
    [CollectibleType.GLOWING_HOUR_GLASS] = "Glowing Hourglass",
    [CollectibleType.CIRCLE_OF_PROTECTION] = "Circle of Protection",
    [CollectibleType.SACK_HEAD] = "Sack Head",
    [CollectibleType.NIGHT_LIGHT] = "Night Light",
    [CollectibleType.OBSESSED_FAN] = "Obsessed Fan",
    [CollectibleType.MINE_CRAFTER] = "Mine Crafter",
    [CollectibleType.PJS] = "PJs",
    [CollectibleType.HEAD_OF_THE_KEEPER] = "Head of the Keeper",
    [CollectibleType.PAPA_FLY] = "Papa Fly",
    [CollectibleType.MULTIDIMENSIONAL_BABY] = "Multidimensional Baby",
    [CollectibleType.GLITTER_BOMBS] = "Glitter Bombs",
    [CollectibleType.MY_SHADOW] = "My Shadow",
    [CollectibleType.JAR_OF_FLIES] = "Jar of Flies",
    [CollectibleType.LIL_LOKI] = "Lil Loki",
    [CollectibleType.MILK] = "Milk!",
    [CollectibleType.D7] = "D7",
    [CollectibleType.BINKY] = "Binky",
    [CollectibleType.MOMS_BOX] = "Mom's Box",
    [CollectibleType.KIDNEY_STONE] = "Kidney Stone",
    [CollectibleType.MEGA_BLAST] = "Mega Blast",
    [CollectibleType.DARK_PRINCES_CROWN] = "Dark Prince's Crown",
    [CollectibleType.APPLE] = "Apple!",
    [CollectibleType.LEAD_PENCIL] = "Lead Pencil",
    [CollectibleType.DOG_TOOTH] = "Dog Tooth",
    [CollectibleType.DEAD_TOOTH] = "Dead Tooth",
    [CollectibleType.LINGER_BEAN] = "Linger Bean",
    [CollectibleType.SHARD_OF_GLASS] = "Shard of Glass",
    [CollectibleType.METAL_PLATE] = "Metal Plate",
    [CollectibleType.EYE_OF_GREED] = "Eye of Greed",
    [CollectibleType.TAROT_CLOTH] = "Tarot Cloth",
    [CollectibleType.VARICOSE_VEINS] = "Varicose Veins",
    [CollectibleType.COMPOUND_FRACTURE] = "Compound Fracture",
    [CollectibleType.POLYDACTYLY] = "Polydactyly",
    [CollectibleType.DADS_LOST_COIN] = "Dad's Lost Coin",
    [CollectibleType.MIDNIGHT_SNACK] = "Midnight Snack",
    [CollectibleType.CONE_HEAD] = "Cone Head",
    [CollectibleType.BELLY_BUTTON] = "Belly Button",
    [CollectibleType.SINUS_INFECTION] = "Sinus Infection",
    [CollectibleType.GLAUCOMA] = "Glaucoma",
    [CollectibleType.PARASITOID] = "Parasitoid",
    [CollectibleType.EYE_OF_BELIAL] = "Eye of Belial",
    [CollectibleType.SULFURIC_ACID] = "Sulfuric Acid",
    [CollectibleType.GLYPH_OF_BALANCE] = "Glyph of Balance",
    [CollectibleType.ANALOG_STICK] = "Analog Stick",
    [CollectibleType.CONTAGION] = "Contagion",
    [CollectibleType.FINGER] = "Finger!",
    [CollectibleType.SHADE] = "Shade",
    [CollectibleType.DEPRESSION] = "Depression",
    [CollectibleType.HUSHY] = "Hushy",
    [CollectibleType.LIL_MONSTRO] = "Lil Monstro",
    [CollectibleType.KING_BABY] = "King Baby",
    [CollectibleType.BIG_CHUBBY] = "Big Chubby",
    [CollectibleType.BROKEN_GLASS_CANNON] = "Broken Glass Cannon",
    [CollectibleType.PLAN_C] = "Plan C",
    [CollectibleType.D1] = "D1",
    [CollectibleType.VOID] = "Void",
    [CollectibleType.PAUSE] = "Pause",
    [CollectibleType.SMELTER] = "Smelter",
    [CollectibleType.COMPOST] = "Compost",
    [CollectibleType.DATAMINER] = "Dataminer",
    [CollectibleType.CLICKER] = "Clicker",
    [CollectibleType.MAMA_MEGA] = "Mama Mega!",
    [CollectibleType.WAIT_WHAT] = "Wait What?",
    [CollectibleType.CROOKED_PENNY] = "Crooked Penny",
    [CollectibleType.DULL_RAZOR] = "Dull Razor",
    [CollectibleType.POTATO_PEELER] = "Potato Peeler",
    [CollectibleType.METRONOME] = "Metronome",
    [CollectibleType.D_INFINITY] = "D infinity",
    [CollectibleType.EDENS_SOUL] = "Eden's Soul",
    [CollectibleType.ACID_BABY] = "Acid Baby",
    [CollectibleType.YO_LISTEN] = "YO LISTEN!",
    [CollectibleType.ADRENALINE] = "Adrenaline",
    [CollectibleType.JACOBS_LADDER] = "Jacob's Ladder",
    [CollectibleType.GHOST_PEPPER] = "Ghost Pepper",
    [CollectibleType.EUTHANASIA] = "Euthanasia",
    [CollectibleType.CAMO_UNDIES] = "Camo Undies",
    [CollectibleType.DUALITY] = "Duality",
    [CollectibleType.EUCHARIST] = "Eucharist",
    [CollectibleType.SACK_OF_SACKS] = "Sack of Sacks",
    [CollectibleType.GREEDS_GULLET] = "Greed's Gullet",
    [CollectibleType.LARGE_ZIT] = "Large Zit",
    [CollectibleType.LITTLE_HORN] = "Little Horn",
    [CollectibleType.BROWN_NUGGET] = "Brown Nugget",
    [CollectibleType.POKE_GO] = "Poke Go",
    [CollectibleType.BACKSTABBER] = "Backstabber",
    [CollectibleType.SHARP_STRAW] = "Sharp Straw",
    [CollectibleType.MOMS_RAZOR] = "Mom's Razor",
    [CollectibleType.BLOODSHOT_EYE] = "Bloodshot Eye",
    [CollectibleType.DELIRIOUS] = "Delirious",
    [CollectibleType.ANGRY_FLY] = "Angry Fly",
    [CollectibleType.BLACK_HOLE] = "Black Hole",
    [CollectibleType.BOZO] = "Bozo",
    [CollectibleType.BROKEN_MODEM] = "Broken Modem",
    [CollectibleType.MYSTERY_GIFT] = "Mystery Gift",
    [CollectibleType.SPRINKLER] = "Sprinkler",
    [CollectibleType.FAST_BOMBS] = "Fast Bombs",
    [CollectibleType.BUDDY_IN_A_BOX] = "Buddy in a Box",
    [CollectibleType.LIL_DELIRIUM] = "Lil Delirium",
    [CollectibleType.JUMPER_CABLES] = "Jumper Cables",
    [CollectibleType.COUPON] = "Coupon",
    [CollectibleType.TELEKINESIS] = "Telekinesis",
    [CollectibleType.MOVING_BOX] = "Moving Box",
    [CollectibleType.TECHNOLOGY_ZERO] = "Technology Zero",
    [CollectibleType.LEPROSY] = "Leprosy",
    [CollectibleType.SEVEN_SEALS] = "7 Seals",
    [CollectibleType.MR_ME] = "Mr. ME!",
    [CollectibleType.ANGELIC_PRISM] = "Angelic Prism",
    [CollectibleType.POP] = "Pop!",
    [CollectibleType.DEATHS_LIST] = "Death's List",
    [CollectibleType.HAEMOLACRIA] = "Haemolacria",
    [CollectibleType.LACHRYPHAGY] = "Lachryphagy",
    [CollectibleType.TRISAGION] = "Trisagion",
    [CollectibleType.SCHOOLBAG] = "Schoolbag",
    [CollectibleType.BLANKET] = "Blanket",
    [CollectibleType.SACRIFICIAL_ALTAR] = "Sacrificial Altar",
    [CollectibleType.LIL_SPEWER] = "Lil Spewer",
    [CollectibleType.MARBLES] = "Marbles",
    [CollectibleType.MYSTERY_EGG] = "Mystery Egg",
    [CollectibleType.FLAT_STONE] = "Flat Stone",
    [CollectibleType.MARROW] = "Marrow",
    [CollectibleType.SLIPPED_RIB] = "Slipped Rib",
    [CollectibleType.HALLOWED_GROUND] = "Hallowed Ground",
    [CollectibleType.POINTY_RIB] = "Pointy Rib",
    [CollectibleType.BOOK_OF_THE_DEAD] = "Book of the Dead",
    [CollectibleType.DADS_RING] = "Dad's Ring",
    [CollectibleType.DIVORCE_PAPERS] = "Divorce Papers",
    [CollectibleType.JAW_BONE] = "Jaw Bone",
    [CollectibleType.BRITTLE_BONES] = "Brittle Bones",
    [CollectibleType.BROKEN_SHOVEL_1] = "Broken Shovel",
    [CollectibleType.BROKEN_SHOVEL_2] = "Broken Shovel",
    [CollectibleType.MOMS_SHOVEL] = "Mom's Shovel",
    [CollectibleType.MUCORMYCOSIS] = "Mucormycosis",
    [CollectibleType.TWO_SPOOKY] = "2Spooky",
    [CollectibleType.GOLDEN_RAZOR] = "Golden Razor",
    [CollectibleType.SULFUR] = "Sulfur",
    [CollectibleType.FORTUNE_COOKIE] = "Fortune Cookie",
    [CollectibleType.EYE_SORE] = "Eye Sore",
    [CollectibleType.ONE_HUNDRED_TWENTY_VOLT] = "120 Volt",
    [CollectibleType.IT_HURTS] = "It Hurts",
    [CollectibleType.ALMOND_MILK] = "Almond Milk",
    [CollectibleType.ROCK_BOTTOM] = "Rock Bottom",
    [CollectibleType.NANCY_BOMBS] = "Nancy Bombs",
    [CollectibleType.BAR_OF_SOAP] = "A Bar of Soap",
    [CollectibleType.BLOOD_PUPPY] = "Blood Puppy",
    [CollectibleType.DREAM_CATCHER] = "Dream Catcher",
    [CollectibleType.PASCHAL_CANDLE] = "Paschal Candle",
    [CollectibleType.DIVINE_INTERVENTION] = "Divine Intervention",
    [CollectibleType.BLOOD_OATH] = "Blood Oath",
    [CollectibleType.PLAYDOUGH_COOKIE] = "Playdough Cookie",
    [CollectibleType.ORPHAN_SOCKS] = "Orphan Socks",
    [CollectibleType.EYE_OF_THE_OCCULT] = "Eye of the Occult",
    [CollectibleType.IMMACULATE_HEART] = "Immaculate Heart",
    [CollectibleType.MONSTRANCE] = "Monstrance",
    [CollectibleType.INTRUDER] = "The Intruder",
    [CollectibleType.DIRTY_MIND] = "Dirty Mind",
    [CollectibleType.DAMOCLES] = "Damocles",
    [CollectibleType.FREE_LEMONADE] = "Free Lemonade",
    [CollectibleType.SPIRIT_SWORD] = "Spirit Sword",
    [CollectibleType.RED_KEY] = "Red Key",
    [CollectibleType.PSY_FLY] = "Psy Fly",
    [CollectibleType.WAVY_CAP] = "Wavy Cap",
    [CollectibleType.ROCKET_IN_A_JAR] = "Rocket in a Jar",
    [CollectibleType.BOOK_OF_VIRTUES] = "Book of Virtues",
    [CollectibleType.ALABASTER_BOX] = "Alabaster Box",
    [CollectibleType.STAIRWAY] = "The Stairway",
    [CollectibleType.SOL] = "Sol",
    [CollectibleType.LUNA] = "Luna",
    [CollectibleType.MERCURIUS] = "Mercurius",
    [CollectibleType.VENUS] = "Venus",
    [CollectibleType.TERRA] = "Terra",
    [CollectibleType.MARS] = "Mars",
    [CollectibleType.JUPITER] = "Jupiter",
    [CollectibleType.SATURNUS] = "Saturnus",
    [CollectibleType.URANUS] = "Uranus",
    [CollectibleType.NEPTUNUS] = "Neptunus",
    [CollectibleType.PLUTO] = "Pluto",
    [CollectibleType.VOODOO_HEAD] = "Voodoo Head",
    [CollectibleType.EYE_DROPS] = "Eye Drops",
    [CollectibleType.ACT_OF_CONTRITION] = "Act of Contrition",
    [CollectibleType.MEMBER_CARD] = "Member Card",
    [CollectibleType.BATTERY_PACK] = "Battery Pack",
    [CollectibleType.MOMS_BRACELET] = "Mom's Bracelet",
    [CollectibleType.SCOOPER] = "The Scooper",
    [CollectibleType.OCULAR_RIFT] = "Ocular Rift",
    [CollectibleType.BOILED_BABY] = "Boiled Baby",
    [CollectibleType.FREEZER_BABY] = "Freezer Baby",
    [CollectibleType.ETERNAL_D6] = "Eternal D6",
    [CollectibleType.BIRD_CAGE] = "Bird Cage",
    [CollectibleType.LARYNX] = "Larynx",
    [CollectibleType.LOST_SOUL] = "Lost Soul",
    [CollectibleType.BLOOD_BOMBS] = "Blood Bombs",
    [CollectibleType.LIL_DUMPY] = "Lil Dumpy",
    [CollectibleType.BIRDS_EYE] = "Bird's Eye",
    [CollectibleType.LODESTONE] = "Lodestone",
    [CollectibleType.ROTTEN_TOMATO] = "Rotten Tomato",
    [CollectibleType.BIRTHRIGHT] = "Birthright",
    [CollectibleType.RED_STEW] = "Red Stew",
    [CollectibleType.GENESIS] = "Genesis",
    [CollectibleType.SHARP_KEY] = "Sharp Key",
    [CollectibleType.BOOSTER_PACK] = "Booster Pack",
    [CollectibleType.MEGA_MUSH] = "Mega Mush",
    [CollectibleType.KNIFE_PIECE_1] = "Knife Piece 1",
    [CollectibleType.KNIFE_PIECE_2] = "Knife Piece 2",
    [CollectibleType.DEATH_CERTIFICATE] = "Death Certificate",
    [CollectibleType.BOT_FLY] = "Bot Fly",
    [CollectibleType.MEAT_CLEAVER] = "Meat Cleaver",
    [CollectibleType.EVIL_CHARM] = "Evil Charm",
    [CollectibleType.DOGMA] = "Dogma",
    [CollectibleType.PURGATORY] = "Purgatory",
    [CollectibleType.STITCHES] = "Stitches",
    [CollectibleType.R_KEY] = "R Key",
    [CollectibleType.KNOCKOUT_DROPS] = "Knockout Drops",
    [CollectibleType.ERASER] = "Eraser",
    [CollectibleType.YUCK_HEART] = "Yuck Heart",
    [CollectibleType.URN_OF_SOULS] = "Urn of Souls",
    [CollectibleType.AKELDAMA] = "Akeldama",
    [CollectibleType.MAGIC_SKIN] = "Magic Skin",
    [CollectibleType.REVELATION] = "Revelation",
    [CollectibleType.CONSOLATION_PRIZE] = "Consolation Prize",
    [CollectibleType.TINYTOMA] = "Tinytoma",
    [CollectibleType.BRIMSTONE_BOMBS] = "Brimstone Bombs",
    [CollectibleType.FOUR_FIVE_VOLT] = "4.5 Volt",
    [CollectibleType.FRUITY_PLUM] = "Fruity Plum",
    [CollectibleType.PLUM_FLUTE] = "Plum Flute",
    [CollectibleType.STAR_OF_BETHLEHEM] = "Star of Bethlehem",
    [CollectibleType.CUBE_BABY] = "Cube Baby",
    [CollectibleType.VADE_RETRO] = "Vade Retro",
    [CollectibleType.FALSE_PHD] = "False PHD",
    [CollectibleType.SPIN_TO_WIN] = "Spin to Win",
    [CollectibleType.DAMOCLES_PASSIVE] = "Damocles (Passive)",
    [CollectibleType.VASCULITIS] = "Vasculitis",
    [CollectibleType.GIANT_CELL] = "Giant Cell",
    [CollectibleType.TROPICAMIDE] = "Tropicamide",
    [CollectibleType.CARD_READING] = "Card Reading",
    [CollectibleType.QUINTS] = "Quints",
    [CollectibleType.TOOTH_AND_NAIL] = "Tooth and Nail",
    [CollectibleType.BINGE_EATER] = "Binge Eater",
    [CollectibleType.GUPPYS_EYE] = "Guppy's Eye",
    [CollectibleType.STRAWMAN] = "Strawman",
    [CollectibleType.DADS_NOTE] = "Dad's Note",
    [CollectibleType.SAUSAGE] = "Sausage",
    [CollectibleType.OPTIONS] = "Options?",
    [CollectibleType.CANDY_HEART] = "Candy Heart",
    [CollectibleType.POUND_OF_FLESH] = "A Pound of Flesh",
    [CollectibleType.REDEMPTION] = "Redemption",
    [CollectibleType.SPIRIT_SHACKLES] = "Spirit Shackles",
    [CollectibleType.CRACKED_ORB] = "Cracked Orb",
    [CollectibleType.EMPTY_HEART] = "Empty Heart",
    [CollectibleType.ASTRAL_PROJECTION] = "Astral Projection",
    [CollectibleType.C_SECTION] = "C Section",
    [CollectibleType.LIL_ABADDON] = "Lil Abaddon",
    [CollectibleType.MONTEZUMAS_REVENGE] = "Montezuma's Revenge",
    [CollectibleType.LIL_PORTAL] = "Lil Portal",
    [CollectibleType.WORM_FRIEND] = "Worm Friend",
    [CollectibleType.BONE_SPURS] = "Bone Spurs",
    [CollectibleType.HUNGRY_SOUL] = "Hungry Soul",
    [CollectibleType.JAR_OF_WISPS] = "Jar of Wisps",
    [CollectibleType.SOUL_LOCKET] = "Soul Locket",
    [CollectibleType.FRIEND_FINDER] = "Friend Finder",
    [CollectibleType.INNER_CHILD] = "Inner Child",
    [CollectibleType.GLITCHED_CROWN] = "Glitched Crown",
    [CollectibleType.JELLY_BELLY] = "Belly Jelly",
    [CollectibleType.SACRED_ORB] = "Sacred Orb",
    [CollectibleType.SANGUINE_BOND] = "Sanguine Bond",
    [CollectibleType.SWARM] = "The Swarm",
    [CollectibleType.HEARTBREAK] = "Heartbreak",
    [CollectibleType.BLOODY_GUST] = "Bloody Gust",
    [CollectibleType.SALVATION] = "Salvation",
    [CollectibleType.VANISHING_TWIN] = "Vanishing Twin",
    [CollectibleType.TWISTED_PAIR] = "Twisted Pair",
    [CollectibleType.AZAZELS_RAGE] = "Azazel's Rage",
    [CollectibleType.ECHO_CHAMBER] = "Echo Chamber",
    [CollectibleType.ISAACS_TOMB] = "Isaac's Tomb",
    [CollectibleType.VENGEFUL_SPIRIT] = "Vengeful Spirit",
    [CollectibleType.ESAU_JR] = "Esau Jr.",
    [CollectibleType.BERSERK] = "Berserk!",
    [CollectibleType.DARK_ARTS] = "Dark Arts",
    [CollectibleType.ABYSS] = "Abyss",
    [CollectibleType.SUPPER] = "Supper",
    [CollectibleType.STAPLER] = "Stapler",
    [CollectibleType.SUPLEX] = "Suplex!",
    [CollectibleType.BAG_OF_CRAFTING] = "Bag of Crafting",
    [CollectibleType.FLIP] = "Flip",
    [CollectibleType.LEMEGETON] = "Lemegeton",
    [CollectibleType.SUMPTORIUM] = "Sumptorium",
    [CollectibleType.RECALL] = "Recall",
    [CollectibleType.HOLD] = "Hold",
    [CollectibleType.KEEPERS_SACK] = "Keeper's Sack",
    [CollectibleType.KEEPERS_KIN] = "Keeper's Kin",
    [CollectibleType.KEEPERS_BOX] = "Keeper's Box",
    [CollectibleType.EVERYTHING_JAR] = "Everything Jar",
    [CollectibleType.TMTRAINER] = "TMTRAINER",
    [CollectibleType.ANIMA_SOLA] = "Anima Sola",
    [CollectibleType.SPINDOWN_DICE] = "Spindown Dice",
    [CollectibleType.HYPERCOAGULATION] = "Hypercoagulation",
    [CollectibleType.IBS] = "IBS",
    [CollectibleType.HEMOPTYSIS] = "Hemoptysis",
    [CollectibleType.GHOST_BOMBS] = "Ghost Bombs",
    [CollectibleType.GELLO] = "Gello",
    [CollectibleType.DECAP_ATTACK] = "Decap Attack",
    [CollectibleType.GLASS_EYE] = "Glass Eye",
    [CollectibleType.STYE] = "Stye",
    [CollectibleType.MOMS_RING] = "Mom's Ring"
}
return ____exports
 end,
["sets.singleUseActiveCollectibleTypesSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.SINGLE_USE_ACTIVE_COLLECTIBLE_TYPES_SET = __TS__New(ReadonlySet, {
    CollectibleType.FORGET_ME_NOW,
    CollectibleType.EDENS_SOUL,
    CollectibleType.ALABASTER_BOX,
    CollectibleType.PLAN_C,
    CollectibleType.MAMA_MEGA,
    CollectibleType.SACRIFICIAL_ALTAR,
    CollectibleType.DEATH_CERTIFICATE,
    CollectibleType.R_KEY
})
return ____exports
 end,
["sets.entitiesWithArmorSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
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
 end,
["types.AnyEntity"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.EntityID"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.sprites"] = function(...) 
local ____exports = {}
local ____constants = require("core.constants")
local EMPTY_PNG_PATH = ____constants.EMPTY_PNG_PATH
local VectorZero = ____constants.VectorZero
local ____color = require("functions.color")
local copyColor = ____color.copyColor
local ____kColor = require("functions.kColor")
local kColorEquals = ____kColor.kColorEquals
local ____utils = require("functions.utils")
local eRange = ____utils.eRange
--- Helper function to check if two texels on a sprite are equivalent to each other.
function ____exports.texelEquals(self, sprite1, sprite2, position, layerID)
    local kColor1 = sprite1:GetTexel(position, VectorZero, 1, layerID)
    local kColor2 = sprite2:GetTexel(position, VectorZero, 1, layerID)
    return kColorEquals(nil, kColor1, kColor2)
end
--- Helper function to clear all layers or specific layers from a sprite without unloading the
-- attached anm2 file.
-- 
-- This function is variadic, which means you can pass as many layer IDs as you want to clear. If no
-- specific layers are passed, the function will clear every layer.
-- 
-- If you want to clear all of the layers of a sprite and don't care about unloading the attached
-- anm2 file, then use the `Sprite.Reset` method instead.
-- 
-- Since there is no official API method to clear specific layers from a sprite, we work around it
-- by setting the spritesheet to a transparent PNG file corresponding to the `EMPTY_PNG_PATH`
-- constant.
-- 
-- This function will still work identically if PNG file does not exist, but it will cause a
-- spurious error to appear in the "log.txt" file. If silencing these errors is desired, you can
-- create a transparent 1 pixel PNG file in your mod's resources folder at `EMPTY_PNG_PATH`.
-- 
-- @allowEmptyVariadic
function ____exports.clearSprite(self, sprite, ...)
    local layerIDs = {...}
    if #layerIDs == 0 then
        local numLayers = sprite:GetLayerCount()
        layerIDs = eRange(nil, numLayers)
    end
    for ____, layerID in ipairs(layerIDs) do
        sprite:ReplaceSpritesheet(layerID, EMPTY_PNG_PATH)
    end
    sprite:LoadGraphics()
end
--- Helper function that returns the number of the final frame in a particular animation for a
-- sprite. By default, it will use the currently playing animation, but you can also specify a
-- specific animation to check.
-- 
-- Note that this function is bugged with the Stop Watch or the Broken Watch, since using the
-- `Sprite.SetFrame` method will reset the internal accumulator used to slow down the playback speed
-- of the animation. (The `PlaybackSpeed` field of the sprite is not used.) Thus, it is only safe to
-- use this function on animations that are not slowed down by Stop Watch or Broken Watch, such as
-- player animations.
function ____exports.getLastFrameOfAnimation(self, sprite, animation)
    local currentAnimation = sprite:GetAnimation()
    local currentFrame = sprite:GetFrame()
    if animation ~= nil and animation ~= currentAnimation then
        sprite:SetAnimation(animation)
    end
    sprite:SetLastFrame()
    local finalFrame = sprite:GetFrame()
    if animation ~= nil and animation ~= currentAnimation then
        sprite:Play(currentAnimation, true)
    end
    sprite:SetFrame(currentFrame)
    return finalFrame
end
--- Helper function to load a new sprite and play its default animation.
-- 
-- @param anm2Path The path to the "anm2" file that should be loaded.
-- @param pngPath Optional. The path to a custom PNG file that should be loaded on layer 0 of the
-- sprite.
function ____exports.newSprite(self, anm2Path, pngPath)
    local sprite = Sprite()
    if pngPath == nil then
        sprite:Load(anm2Path, true)
    else
        sprite:Load(anm2Path, false)
        sprite:ReplaceSpritesheet(0, pngPath)
        sprite:LoadGraphics()
    end
    local defaultAnimation = sprite:GetDefaultAnimation()
    sprite:Play(defaultAnimation, true)
    return sprite
end
--- Helper function to keep a sprite's color the same values as it already is but set the opacity to
-- a specific value.
-- 
-- @param sprite The sprite to set.
-- @param alpha A value between 0 and 1 that represents the fade amount.
function ____exports.setSpriteOpacity(self, sprite, alpha)
    local fadedColor = copyColor(nil, sprite.Color)
    fadedColor.A = alpha
    sprite.Color = fadedColor
end
--- Helper function to check if two sprite layers have the same sprite sheet by using the
-- `Sprite.GetTexel` method.
-- 
-- Since checking every single texel in the entire sprite is very expensive, this function requires
-- that you provide a range of specific texels to check.
function ____exports.spriteEquals(self, sprite1, sprite2, layerID, xStart, xFinish, xIncrement, yStart, yFinish, yIncrement)
    do
        local x = xStart
        while x <= xFinish do
            do
                local y = yStart
                while y <= yFinish do
                    local position = Vector(x, y)
                    if not ____exports.texelEquals(
                        nil,
                        sprite1,
                        sprite2,
                        position,
                        layerID
                    ) then
                        return false
                    end
                    y = y + yIncrement
                end
            end
            x = x + xIncrement
        end
    end
    return true
end
return ____exports
 end,
["functions.entities"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local Set = ____lualib.Set
local __TS__Spread = ____lualib.__TS__Spread
local __TS__ArraySome = ____lualib.__TS__ArraySome
local __TS__StringSplit = ____lualib.__TS__StringSplit
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local setPrimitiveEntityFields
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityFlag = ____isaac_2Dtypescript_2Ddefinitions.EntityFlag
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local MotherVariant = ____isaac_2Dtypescript_2Ddefinitions.MotherVariant
local NPCState = ____isaac_2Dtypescript_2Ddefinitions.NPCState
local UltraGreedState = ____isaac_2Dtypescript_2Ddefinitions.UltraGreedState
local UltraGreedVariant = ____isaac_2Dtypescript_2Ddefinitions.UltraGreedVariant
local UltraGreedierState = ____isaac_2Dtypescript_2Ddefinitions.UltraGreedierState
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____entitiesWithArmorSet = require("sets.entitiesWithArmorSet")
local ENTITIES_WITH_ARMOR_SET = ____entitiesWithArmorSet.ENTITIES_WITH_ARMOR_SET
local ____isaacAPIClass = require("functions.isaacAPIClass")
local getIsaacAPIClassName = ____isaacAPIClass.getIsaacAPIClassName
local ____random = require("functions.random")
local getRandom = ____random.getRandom
local ____readOnly = require("functions.readOnly")
local newReadonlyColor = ____readOnly.newReadonlyColor
local ____rng = require("functions.rng")
local getRandomSeed = ____rng.getRandomSeed
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
local ____sprites = require("functions.sprites")
local setSpriteOpacity = ____sprites.setSpriteOpacity
local ____tstlClass = require("functions.tstlClass")
local isTSTLSet = ____tstlClass.isTSTLSet
local ____types = require("functions.types")
local asNPCState = ____types.asNPCState
local isPrimitive = ____types.isPrimitive
local parseIntSafe = ____types.parseIntSafe
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____vector = require("functions.vector")
local doesVectorHaveLength = ____vector.doesVectorHaveLength
local isVector = ____vector.isVector
local vectorToString = ____vector.vectorToString
--- Helper function to count the number of entities in room. Use this over the vanilla
-- `Isaac.CountEntities` method to avoid having to specify a spawner and to handle ignoring charmed
-- enemies.
-- 
-- @param entityType Optional. Default is -1, which matches every entity type.
-- @param variant Optional. Default is -1, which matches every variant.
-- @param subType Optional. Default is -1, which matches every sub-type.
-- @param ignoreFriendly Optional. Default is false. Will throw a runtime error if set to true and
-- the `entityType` is equal to -1.
function ____exports.countEntities(self, entityType, variant, subType, ignoreFriendly)
    if entityType == nil then
        entityType = -1
    end
    if variant == nil then
        variant = -1
    end
    if subType == nil then
        subType = -1
    end
    if ignoreFriendly == nil then
        ignoreFriendly = false
    end
    if entityType == -1 then
        local entities = Isaac.GetRoomEntities()
        if not ignoreFriendly then
            return #entities
        end
        local nonFriendlyEntities = __TS__ArrayFilter(
            entities,
            function(____, entity) return not entity:HasEntityFlags(EntityFlag.FRIENDLY) end
        )
        return #nonFriendlyEntities
    end
    if not ignoreFriendly then
        return Isaac.CountEntities(nil, entityType, variant, subType)
    end
    local entities = Isaac.FindByType(
        entityType,
        variant,
        subType,
        false,
        ignoreFriendly
    )
    return #entities
end
--- Helper function to check if one or more of a specific kind of entity is present in the current
-- room. It uses the `countEntities` helper function to determine this.
-- 
-- @param entityType Optional. Default is -1, which matches every entity type.
-- @param variant Optional. Default is -1, which matches every variant.
-- @param subType Optional. Default is -1, which matches every sub-type.
-- @param ignoreFriendly Optional. Default is false.
function ____exports.doesEntityExist(self, entityType, variant, subType, ignoreFriendly)
    if entityType == nil then
        entityType = -1
    end
    if variant == nil then
        variant = -1
    end
    if subType == nil then
        subType = -1
    end
    if ignoreFriendly == nil then
        ignoreFriendly = false
    end
    local count = ____exports.countEntities(
        nil,
        entityType,
        variant,
        subType,
        ignoreFriendly
    )
    return count > 0
end
function setPrimitiveEntityFields(self, entity, metatable, entityFields)
    local propGetTable = metatable.__propget
    assertDefined(nil, propGetTable, "Failed to get the \"__propget\" table for an entity.")
    for key in pairs(propGetTable) do
        local indexKey = key
        local value = entity[indexKey]
        if isPrimitive(nil, value) then
            entityFields[indexKey] = value
        elseif isVector(nil, value) then
            entityFields[indexKey] = vectorToString(nil, value)
        end
    end
end
--- Helper function to remove all of the entities in the supplied array.
-- 
-- @param entities The array of entities to remove.
-- @param cap Optional. If specified, will only remove the given amount of entities.
-- @returns An array of the entities that were removed.
function ____exports.removeEntities(self, entities, cap)
    if #entities == 0 then
        return {}
    end
    local entitiesRemoved = {}
    for ____, entity in ipairs(entities) do
        entity:Remove()
        entitiesRemoved[#entitiesRemoved + 1] = entity
        if cap ~= nil and #entitiesRemoved >= cap then
            break
        end
    end
    return entitiesRemoved
end
--- From DeadInfinity.
local DAMAGE_FLASH_COLOR = newReadonlyColor(
    nil,
    0.5,
    0.5,
    0.5,
    1,
    200 / 255,
    0 / 255,
    0 / 255
)
--- Helper function to check if one or more matching entities exist in the current room. It uses the
-- `doesEntityExist` helper function to determine this.
-- 
-- @param entityTypes An array or set of the entity types that you want to check for. Will return
-- true if any of the provided entity types exist.
-- @param ignoreFriendly Optional. Default is false.
function ____exports.doesAnyEntityExist(self, entityTypes, ignoreFriendly)
    if ignoreFriendly == nil then
        ignoreFriendly = false
    end
    local entityTypesMutable = entityTypes
    local entityTypesArray = isTSTLSet(nil, entityTypesMutable) and ({__TS__Spread(entityTypesMutable:values())}) or entityTypesMutable
    return __TS__ArraySome(
        entityTypesArray,
        function(____, entityType) return ____exports.doesEntityExist(
            nil,
            entityType,
            -1,
            -1,
            ignoreFriendly
        ) end
    )
end
--- Given an array of entities, this helper function returns the closest one to a provided reference
-- entity.
-- 
-- For example:
-- 
-- ```ts
-- const player = Isaac.GetPlayer();
-- const gapers = getEntities(EntityType.GAPER);
-- const closestGaper = getClosestEntityTo(player, gapers);
-- ```
-- 
-- @param referenceEntity The entity that is close by.
-- @param entities The array of entities to look through.
-- @param filterFunc Optional. A function to filter for a specific type of entity, like e.g. an
-- enemy with a certain amount of HP left.
function ____exports.getClosestEntityTo(self, referenceEntity, entities, filterFunc)
    local closestEntity
    local closestDistance = math.huge
    for ____, entity in ipairs(entities) do
        local distance = referenceEntity.Position:Distance(entity.Position)
        if distance < closestDistance and (filterFunc == nil or filterFunc(nil, entity)) then
            closestEntity = entity
            closestDistance = distance
        end
    end
    return closestEntity
end
--- Helper function to get the entity type, variant, and sub-type from an `EntityID`.
function ____exports.getConstituentsFromEntityID(self, entityID)
    local parts = __TS__StringSplit(entityID, ".")
    if #parts ~= 3 then
        error("Failed to get the constituents from entity ID: " .. entityID)
    end
    local entityTypeString, variantString, subTypeString = table.unpack(parts)
    assertDefined(nil, entityTypeString, "Failed to get the first constituent from an entity ID: " .. entityID)
    assertDefined(nil, variantString, "Failed to get the second constituent from an entity ID: " .. entityID)
    assertDefined(nil, subTypeString, "Failed to get the third constituent from an entity ID: " .. entityID)
    local entityType = parseIntSafe(nil, entityTypeString)
    assertDefined(nil, entityType, "Failed to convert the entity type to an integer: " .. entityTypeString)
    local variant = parseIntSafe(nil, variantString)
    assertDefined(nil, variant, "Failed to convert the entity variant to an integer: " .. variantString)
    local subType = parseIntSafe(nil, subTypeString)
    assertDefined(nil, subType, "Failed to convert the entity sub-type to an integer: " .. subTypeString)
    return {entityType, variant, subType}
end
--- Helper function to get all of the entities in the room or all of the entities that match a
-- specific entity type / variant / sub-type.
-- 
-- Due to bugs with `Isaac.FindInRadius`, this function uses `Isaac.GetRoomEntities`, which is more
-- expensive but also more robust. (If a matching entity type is provided, then `Isaac.FindByType`
-- will be used instead.)
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the entities in the room invisible.
-- for (const entity of getEntities()) {
--   entity.Visible = false;
-- }
-- ```
-- 
-- @param entityType Optional. If specified, will only get the entities that match the type. Default
-- is -1, which matches every type.
-- @param variant Optional. If specified, will only get the entities that match the variant. Default
-- is -1, which matches every variant.
-- @param subType Optional. If specified, will only get the entities that match the sub-type.
-- Default is -1, which matches every sub-type.
-- @param ignoreFriendly Optional. If set to true, it will exclude friendly NPCs from being
-- returned. Default is false. Will only be taken into account if the
-- `entityType` is specified.
function ____exports.getEntities(self, entityType, variant, subType, ignoreFriendly)
    if entityType == nil then
        entityType = -1
    end
    if variant == nil then
        variant = -1
    end
    if subType == nil then
        subType = -1
    end
    if ignoreFriendly == nil then
        ignoreFriendly = false
    end
    if entityType == -1 then
        return Isaac.GetRoomEntities()
    end
    return Isaac.FindByType(entityType, variant, subType, ignoreFriendly)
end
--- Helper function to get all the fields on an entity. For example, this is useful for comparing it
-- to another entity later. (One option is to use the `logTableDifferences` function for this.)
-- 
-- This function will only get fields that are equal to booleans, numbers, or strings, or Vectors,
-- as comparing other types is non-trivial.
function ____exports.getEntityFields(self, entity)
    local entityFields = {}
    local metatable = getmetatable(entity)
    assertDefined(nil, metatable, "Failed to get the metatable for an entity.")
    setPrimitiveEntityFields(nil, entity, metatable, entityFields)
    local className = getIsaacAPIClassName(nil, entity)
    if className == "Entity" then
        return entityFields
    end
    local parentTable = metatable.__parent
    assertDefined(nil, parentTable, "Failed to get the \"__parent\" table for an entity.")
    setPrimitiveEntityFields(nil, entity, parentTable, entityFields)
    return entityFields
end
--- Helper function to get an entity from a `PtrHash`. Note that doing this is very expensive, so you
-- should only use this function when debugging. (Normally, if you need to work backwards from a
-- reference, you would use an `EntityPtr` instead of a `PtrHash`.
function ____exports.getEntityFromPtrHash(self, ptrHash)
    local entities = ____exports.getEntities(nil)
    return __TS__ArrayFind(
        entities,
        function(____, entity) return GetPtrHash(entity) == ptrHash end
    )
end
--- Helper function to get a string containing the entity's type, variant, and sub-type.
function ____exports.getEntityID(self, entity)
    return (((tostring(entity.Type) .. ".") .. tostring(entity.Variant)) .. ".") .. tostring(entity.SubType)
end
--- Helper function to get a formatted string in the format returned by the `getEntityID` function.
function ____exports.getEntityIDFromConstituents(self, entityType, variant, subType)
    return (((tostring(entityType) .. ".") .. tostring(variant)) .. ".") .. tostring(subType)
end
--- Helper function to compare two different arrays of entities. Returns the entities that are in the
-- second array but not in the first array.
function ____exports.getFilteredNewEntities(self, oldEntities, newEntities)
    local oldEntitiesSet = __TS__New(Set)
    for ____, entity in ipairs(oldEntities) do
        local ptrHash = GetPtrHash(entity)
        oldEntitiesSet:add(ptrHash)
    end
    return __TS__ArrayFilter(
        newEntities,
        function(____, entity)
            local ptrHash = GetPtrHash(entity)
            return not oldEntitiesSet:has(ptrHash)
        end
    )
end
--- Helper function to see if a particular entity has armor. In this context, armor refers to the
-- damage scaling mechanic. For example, Ultra Greed has armor, but a Gaper does not.
-- 
-- For more on armor, see the wiki: https://bindingofisaacrebirth.fandom.com/wiki/Damage_Scaling
function ____exports.hasArmor(self, entity)
    local typeVariantString = (tostring(entity.Type) .. ".") .. tostring(entity.Variant)
    return ENTITIES_WITH_ARMOR_SET:has(typeVariantString)
end
--- Helper function to detect if a particular entity is an active enemy. Use this over the
-- `Entity.IsActiveEnemy` method since it is bugged with friendly enemies, Grimaces, Ultra Greed,
-- and Mother.
function ____exports.isActiveEnemy(self, entity)
    if entity:HasEntityFlags(EntityFlag.FRIENDLY) then
        return false
    end
    local room = game:GetRoom()
    local isClear = room:IsClear()
    if isClear then
        repeat
            local ____switch36 = entity.Type
            local ____cond36 = ____switch36 == EntityType.GRIMACE
            if ____cond36 then
                do
                    return false
                end
            end
            ____cond36 = ____cond36 or ____switch36 == EntityType.ULTRA_DOOR
            if ____cond36 then
                do
                    return false
                end
            end
            ____cond36 = ____cond36 or ____switch36 == EntityType.ULTRA_GREED
            if ____cond36 then
                do
                    local npc = entity:ToNPC()
                    if npc ~= nil then
                        local ultraGreedVariant = npc.Variant
                        repeat
                            local ____switch41 = ultraGreedVariant
                            local ____cond41 = ____switch41 == UltraGreedVariant.ULTRA_GREED
                            if ____cond41 then
                                do
                                    if npc.State == asNPCState(nil, UltraGreedState.GOLD_STATUE) then
                                        return false
                                    end
                                    break
                                end
                            end
                            ____cond41 = ____cond41 or ____switch41 == UltraGreedVariant.ULTRA_GREEDIER
                            if ____cond41 then
                                do
                                    if npc.State == asNPCState(nil, UltraGreedierState.POST_EXPLOSION) then
                                        return false
                                    end
                                    break
                                end
                            end
                        until true
                    end
                    break
                end
            end
            ____cond36 = ____cond36 or ____switch36 == EntityType.MOTHER
            if ____cond36 then
                do
                    if entity.Variant == MotherVariant.MOTHER_1 then
                        local npc = entity:ToNPC()
                        if npc ~= nil and npc.State == NPCState.SPECIAL then
                            return false
                        end
                    end
                    break
                end
            end
            do
                do
                    break
                end
            end
        until true
    end
    return entity:IsActiveEnemy(false)
end
--- Helper function to measure an entity's velocity to see if it is moving.
-- 
-- Use this helper function over checking if the velocity length is equal to 0 because entities can
-- look like they are completely immobile but yet still have a non zero velocity. Thus, using a
-- threshold is needed.
-- 
-- @param entity The entity whose velocity to measure.
-- @param threshold Optional. The threshold from 0 to consider to be moving. Default is 0.01.
function ____exports.isEntityMoving(self, entity, threshold)
    if threshold == nil then
        threshold = 0.01
    end
    return doesVectorHaveLength(nil, entity.Velocity, threshold)
end
--- Helper function to parse a string that contains an entity type, a variant, and a sub-type,
-- separated by periods.
-- 
-- For example, passing "45.0.1" would return an array of [45, 0, 1].
-- 
-- Returns undefined if the string cannot be parsed.
function ____exports.parseEntityID(self, entityID)
    local entityIDArray = __TS__StringSplit(entityID, ".")
    if #entityIDArray ~= 3 then
        return nil
    end
    local entityTypeString, variantString, subTypeString = table.unpack(entityIDArray)
    if entityTypeString == nil or variantString == nil or subTypeString == nil then
        return nil
    end
    local entityType = parseIntSafe(nil, entityTypeString)
    local variant = parseIntSafe(nil, variantString)
    local subType = parseIntSafe(nil, subTypeString)
    if entityType == nil or variant == nil or subType == nil then
        return nil
    end
    return {entityType, variant, subType}
end
--- Helper function to parse a string that contains an entity type and a variant separated by a
-- period.
-- 
-- For example, passing "45.0" would return an array of [45, 0].
-- 
-- Returns undefined if the string cannot be parsed.
function ____exports.parseEntityTypeVariantString(self, entityTypeVariantString)
    local entityTypeVariantArray = __TS__StringSplit(entityTypeVariantString, ".")
    if #entityTypeVariantArray ~= 2 then
        return nil
    end
    local entityTypeString, variantString = table.unpack(entityTypeVariantArray)
    if entityTypeString == nil or variantString == nil then
        return nil
    end
    local entityType = parseIntSafe(nil, entityTypeString)
    local variant = parseIntSafe(nil, variantString)
    if entityType == nil or variant == nil then
        return nil
    end
    return {entityType, variant}
end
--- Helper function to remove all of the matching entities in the room.
-- 
-- @param entityType The entity type to match.
-- @param entityVariant Optional. The variant to match. Default is -1, which matches every variant.
-- @param entitySubType Optional. The sub-type to match. Default is -1, which matches every
-- sub-type.
-- @param cap Optional. If specified, will only remove the given amount of collectibles.
-- @returns An array of the entities that were removed.
function ____exports.removeAllMatchingEntities(self, entityType, entityVariant, entitySubType, cap)
    if entityVariant == nil then
        entityVariant = -1
    end
    if entitySubType == nil then
        entitySubType = -1
    end
    local entities = ____exports.getEntities(nil, entityType, entityVariant, entitySubType)
    return ____exports.removeEntities(nil, entities, cap)
end
--- Helper function to reroll an enemy. Use this instead of the vanilla "Game.RerollEnemy" function
-- if you want the rerolled enemy to be returned.
-- 
-- @param entity The entity to reroll.
-- @returns If the game failed to reroll the enemy, returns undefined. Otherwise, returns the
-- rerolled entity.
function ____exports.rerollEnemy(self, entity)
    local oldEntities = ____exports.getEntities(nil)
    local wasRerolled = game:RerollEnemy(entity)
    if not wasRerolled then
        return nil
    end
    local newEntities = ____exports.getEntities(nil)
    local filteredNewEntities = ____exports.getFilteredNewEntities(nil, oldEntities, newEntities)
    if #filteredNewEntities == 0 then
        error("Failed to find the new entity generated by the \"Game.RerollEnemy\" method.")
    end
    return filteredNewEntities[1]
end
--- Helper function to make an entity flash red like it is taking damage. This is useful when you
-- want to make it appear as if an entity is taking damage without actually dealing any damage to
-- it.
function ____exports.setEntityDamageFlash(self, entity)
    entity:SetColor(DAMAGE_FLASH_COLOR, 2, 0)
end
--- Helper function to keep an entity's color the same values as it already is but set the opacity to
-- a specific value.
-- 
-- @param entity The entity to set.
-- @param alpha A value between 0 and 1 that represents the fade amount.
function ____exports.setEntityOpacity(self, entity, alpha)
    local sprite = entity:GetSprite()
    setSpriteOpacity(nil, sprite, alpha)
end
function ____exports.setEntityRandomColor(self, entity)
    local seed = entity.InitSeed == 0 and getRandomSeed(nil) or entity.InitSeed
    local rng = newRNG(nil, seed)
    local r = getRandom(nil, rng)
    local g = getRandom(nil, rng)
    local b = getRandom(nil, rng)
    local color = Color(r, g, b)
    entity:SetColor(
        color,
        100000,
        100000,
        false,
        false
    )
end
--- Helper function to spawn an entity. Use this instead of the `Isaac.Spawn` method if you do not
-- need to specify the velocity or spawner.
-- 
-- Also see the `spawnWithSeed` helper function.
-- 
-- @param entityType The `EntityType` of the entity to spawn.
-- @param variant The variant of the entity to spawn.
-- @param subType The sub-type of the entity to spawn.
-- @param positionOrGridIndex The position or grid index of the entity to spawn.
-- @param velocity Optional. The velocity of the entity to spawn. Default is `VectorZero`.
-- @param spawner Optional. The entity that will be the `SpawnerEntity`. Default is undefined.
-- @param seedOrRNG Optional. The seed or RNG object to use to generate the `InitSeed` of the
-- entity. Default is undefined, which will make the entity spawn with a random
-- seed using the `Isaac.Spawn` method.
function ____exports.spawn(self, entityType, variant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local room = game:GetRoom()
    if positionOrGridIndex == nil then
        local entityID = ____exports.getEntityIDFromConstituents(nil, entityType, variant, subType)
        error(("Failed to spawn entity " .. entityID) .. " since an undefined position was passed to the \"spawn\" function.")
    end
    local position = isVector(nil, positionOrGridIndex) and positionOrGridIndex or room:GetGridPosition(positionOrGridIndex)
    if seedOrRNG == nil then
        return Isaac.Spawn(
            entityType,
            variant,
            subType,
            position,
            velocity,
            spawner
        )
    end
    local seed = isRNG(nil, seedOrRNG) and seedOrRNG:Next() or seedOrRNG
    return game:Spawn(
        entityType,
        variant,
        position,
        velocity,
        spawner,
        subType,
        seed
    )
end
--- Helper function to spawn the entity corresponding to an `EntityID`.
-- 
-- @param entityID The `EntityID` of the entity to spawn.
-- @param positionOrGridIndex The position or grid index of the entity to spawn.
-- @param velocity Optional. The velocity of the entity to spawn. Default is `VectorZero`.
-- @param spawner Optional. The entity that will be the `SpawnerEntity`. Default is undefined.
-- @param seedOrRNG Optional. The seed or RNG object to use to generate the `InitSeed` of the
-- entity. Default is undefined, which will make the entity spawn with a random
-- seed using the `Isaac.Spawn` method.
function ____exports.spawnEntityID(self, entityID, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entityType, variant, subType = table.unpack(____exports.getConstituentsFromEntityID(nil, entityID))
    return ____exports.spawn(
        nil,
        entityType,
        variant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn an entity. Use this instead of the `Game.Spawn` method if you do not
-- need to specify the velocity or spawner.
function ____exports.spawnWithSeed(self, entityType, variant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawn(
        nil,
        entityType,
        variant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
return ____exports
 end,
["functions.pickupVariants"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
--- For `PickupVariant.HEART` (10).
function ____exports.isHeart(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.HEART
end
--- For `PickupVariant.COIN` (20).
function ____exports.isCoin(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.COIN
end
--- For `PickupVariant.KEY` (30).
function ____exports.isKey(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.KEY
end
--- For `PickupVariant.BOMB` (40).
function ____exports.isBombPickup(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.BOMB
end
--- For `PickupVariant.POOP` (42).
function ____exports.isPoopPickup(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.POOP
end
--- For `PickupVariant.SACK` (69).
function ____exports.isSack(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.SACK
end
--- For `PickupVariant.PILL` (70).
function ____exports.isPill(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.PILL
end
--- For `PickupVariant.LIL_BATTERY` (90).
function ____exports.isBattery(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.LIL_BATTERY
end
--- For `PickupVariant.COLLECTIBLE` (100).
function ____exports.isCollectible(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.COLLECTIBLE
end
--- For `PickupVariant.CARD` (300).
function ____exports.isCardPickup(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.CARD
end
--- For `PickupVariant.TRINKET` (350).
function ____exports.isTrinket(self, pickup)
    return pickup.Type == EntityType.PICKUP and pickup.Variant == PickupVariant.TRINKET
end
return ____exports
 end,
["functions.collectibles"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local getCollectibleTypeFromArg
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleSpriteLayer = ____isaac_2Dtypescript_2Ddefinitions.CollectibleSpriteLayer
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ItemConfigChargeType = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigChargeType
local ItemConfigTagZero = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigTagZero
local ItemType = ____isaac_2Dtypescript_2Ddefinitions.ItemType
local PickupPrice = ____isaac_2Dtypescript_2Ddefinitions.PickupPrice
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local RenderMode = ____isaac_2Dtypescript_2Ddefinitions.RenderMode
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local itemConfig = ____cachedClasses.itemConfig
local ____constants = require("core.constants")
local BLIND_ITEM_PNG_PATH = ____constants.BLIND_ITEM_PNG_PATH
local DEFAULT_ITEM_POOL_TYPE = ____constants.DEFAULT_ITEM_POOL_TYPE
local QUALITIES = ____constants.QUALITIES
local ____constantsFirstLast = require("core.constantsFirstLast")
local LAST_VANILLA_COLLECTIBLE_TYPE = ____constantsFirstLast.LAST_VANILLA_COLLECTIBLE_TYPE
local ____constantsVanilla = require("core.constantsVanilla")
local VANILLA_COLLECTIBLE_TYPES = ____constantsVanilla.VANILLA_COLLECTIBLE_TYPES
local ____collectibleDescriptions = require("objects.collectibleDescriptions")
local COLLECTIBLE_DESCRIPTIONS = ____collectibleDescriptions.COLLECTIBLE_DESCRIPTIONS
local DEFAULT_COLLECTIBLE_DESCRIPTION = ____collectibleDescriptions.DEFAULT_COLLECTIBLE_DESCRIPTION
local ____collectibleNames = require("objects.collectibleNames")
local COLLECTIBLE_NAMES = ____collectibleNames.COLLECTIBLE_NAMES
local DEFAULT_COLLECTIBLE_NAME = ____collectibleNames.DEFAULT_COLLECTIBLE_NAME
local ____singleUseActiveCollectibleTypesSet = require("sets.singleUseActiveCollectibleTypesSet")
local SINGLE_USE_ACTIVE_COLLECTIBLE_TYPES_SET = ____singleUseActiveCollectibleTypesSet.SINGLE_USE_ACTIVE_COLLECTIBLE_TYPES_SET
local ____entities = require("functions.entities")
local getEntityID = ____entities.getEntityID
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____pickupVariants = require("functions.pickupVariants")
local isCollectible = ____pickupVariants.isCollectible
local ____sprites = require("functions.sprites")
local clearSprite = ____sprites.clearSprite
local spriteEquals = ____sprites.spriteEquals
local ____types = require("functions.types")
local asCollectibleType = ____types.asCollectibleType
local isInteger = ____types.isInteger
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
function ____exports.clearCollectibleSprite(self, collectible)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"clearCollectibleSprite\" function was given a non-collectible: " .. entityID)
    end
    ____exports.setCollectibleSprite(nil, collectible, nil)
end
--- Helper function to get a collectible's quality, which ranges from 0 to 4 (inclusive). For
-- example, Mom's Knife has a quality of 4. Returns 0 if the provided collectible type was not
-- valid.
function ____exports.getCollectibleQuality(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleQuality")
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return 0
    end
    return itemConfigItem.Quality
end
function ____exports.isVanillaCollectibleType(self, collectibleType)
    return collectibleType <= LAST_VANILLA_COLLECTIBLE_TYPE
end
--- Helper function to remove the collectible from a collectible pedestal and make it appear as if a
-- player has already taken the item. This is accomplished by changing the sub-type to
-- `CollectibleType.NULL` and then setting the sprite to an empty/missing PNG file.
-- 
-- For more information, see the documentation for the "clearSprite" helper function.
function ____exports.setCollectibleEmpty(self, collectible)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"setCollectibleEmpty\" function was given a non-collectible: " .. entityID)
    end
    collectible.SubType = CollectibleType.NULL
    ____exports.clearCollectibleSprite(nil, collectible)
end
--- Helper function to change the sprite of a collectible pedestal entity.
-- 
-- For more information about removing the collectible sprite, see the documentation for the
-- "clearSprite" helper function.
-- 
-- @param collectible The collectible whose sprite you want to modify.
-- @param pngPath Equal to either the spritesheet path to load (e.g.
-- "gfx/items/collectibles/collectibles_001_thesadonion.png") or undefined. If
-- undefined, the sprite will be removed, making it appear like the collectible has
-- already been taken by the player.
function ____exports.setCollectibleSprite(self, collectible, pngPath)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"setCollectibleSprite\" function was given a non-collectible: " .. entityID)
    end
    local sprite = collectible:GetSprite()
    if pngPath == nil then
        clearSprite(nil, sprite, CollectibleSpriteLayer.HEAD, CollectibleSpriteLayer.ITEM_SHADOW)
    else
        sprite:ReplaceSpritesheet(CollectibleSpriteLayer.HEAD, pngPath)
        sprite:LoadGraphics()
    end
end
--- Helper function to change the collectible on a pedestal. Simply updating the `SubType` field is
-- not sufficient because the sprite will not change.
function ____exports.setCollectibleSubType(self, collectible, newCollectibleType)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"setCollectibleSubType\" function was given a non-collectible: " .. entityID)
    end
    if newCollectibleType == CollectibleType.NULL then
        ____exports.setCollectibleEmpty(nil, collectible)
        return
    end
    collectible:Morph(
        EntityType.PICKUP,
        PickupVariant.COLLECTIBLE,
        newCollectibleType,
        true,
        true,
        true
    )
end
function getCollectibleTypeFromArg(self, collectibleOrCollectibleType, functionName)
    if isInteger(nil, collectibleOrCollectibleType) then
        return collectibleOrCollectibleType
    end
    local collectible = collectibleOrCollectibleType
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error((("The \"" .. functionName) .. "\" function was given a non-collectible: ") .. entityID)
    end
    return collectible.SubType
end
local COLLECTIBLE_ANM2_PATH = "gfx/005.100_collectible.anm2"
local DEFAULT_COLLECTIBLE_PRICE = 15
--- Glitched items start at id 4294967295 (the final 32-bit integer) and increment backwards.
local GLITCHED_ITEM_THRESHOLD = 4000000000
local QUALITY_TO_VANILLA_COLLECTIBLE_TYPES_MAP = (function()
    local qualityToCollectibleTypesMap = __TS__New(Map)
    for ____, quality in ipairs(QUALITIES) do
        local collectibleTypes = {}
        for ____, collectibleType in ipairs(VANILLA_COLLECTIBLE_TYPES) do
            local collectibleTypeQuality = ____exports.getCollectibleQuality(nil, collectibleType)
            if collectibleTypeQuality == quality then
                collectibleTypes[#collectibleTypes + 1] = collectibleType
            end
        end
        qualityToCollectibleTypesMap:set(quality, collectibleTypes)
    end
    return qualityToCollectibleTypesMap
end)(nil)
--- The `isBlindCollectible` function needs a reference sprite to work properly.
local questionMarkSprite = (function()
    local sprite = Sprite()
    sprite:Load("gfx/005.100_collectible.anm2", false)
    sprite:ReplaceSpritesheet(1, "gfx/items/collectibles/questionmark.png")
    sprite:LoadGraphics()
    return sprite
end)(nil)
--- Helper function to check in the item config if a given collectible has a given cache flag.
function ____exports.collectibleHasCacheFlag(self, collectibleOrCollectibleType, cacheFlag)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "collectibleHasCacheFlag")
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return false
    end
    return hasFlag(nil, itemConfigItem.CacheFlags, cacheFlag)
end
--- Helper function to check if two collectible sprites have the same sprite sheet loaded.
function ____exports.collectibleSpriteEquals(self, sprite1, sprite2)
    local xStart = -1
    local xFinish = 1
    local xIncrement = 1
    local yStart = -40
    local yFinish = 10
    local yIncrement = 3
    return spriteEquals(
        nil,
        sprite1,
        sprite2,
        CollectibleSpriteLayer.HEAD,
        xStart,
        xFinish,
        xIncrement,
        yStart,
        yFinish,
        yIncrement
    )
end
--- Helper function to get the charge type that a collectible has. Returns
-- `ItemConfigChargeType.NORMAL` if the provided collectible type was not valid.
function ____exports.getCollectibleChargeType(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleChargeType")
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return ItemConfigChargeType.NORMAL
    end
    return itemConfigItem.ChargeType
end
--- Helper function to get the in-game description for a collectible. Returns "Unknown" if the
-- provided collectible type was not valid.
-- 
-- This function works for both vanilla and modded collectibles.
function ____exports.getCollectibleDescription(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleDescription")
    local collectibleDescription = COLLECTIBLE_DESCRIPTIONS[collectibleType]
    if collectibleDescription ~= nil then
        return collectibleDescription
    end
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem ~= nil then
        return itemConfigItem.Description
    end
    return DEFAULT_COLLECTIBLE_DESCRIPTION
end
--- Helper function to get the coin cost that a collectible item would be if it were being offered in
-- a Devil Room deal. Returns 0 if passed `CollectibleType.NULL`.
function ____exports.getCollectibleDevilCoinPrice(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleDescription")
    if collectibleType == CollectibleType.NULL then
        return 0
    end
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return DEFAULT_COLLECTIBLE_PRICE
    end
    return itemConfigItem.DevilPrice * DEFAULT_COLLECTIBLE_PRICE
end
--- Helper function to get the heart cost that a collectible item would be if it were being offered
-- in a Devil Room deal. Returns 0 if passed `CollectibleType.NULL`.
function ____exports.getCollectibleDevilHeartPrice(self, collectibleOrCollectibleType, player)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleDevilHeartPrice")
    local maxHearts = player:GetMaxHearts()
    if collectibleType == CollectibleType.NULL then
        return 0
    end
    if maxHearts == 0 then
        return PickupPrice.THREE_SOUL_HEARTS
    end
    local defaultCollectiblePrice = PickupPrice.ONE_HEART
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return defaultCollectiblePrice
    end
    local twoHeartPrice = maxHearts == 2 and PickupPrice.ONE_HEART_AND_TWO_SOUL_HEARTS or PickupPrice.TWO_HEARTS
    return itemConfigItem.DevilPrice == 2 and twoHeartPrice or PickupPrice.ONE_HEART
end
--- Helper function to get the path to a collectible PNG file. Returns the path to the question mark
-- sprite (i.e. from Curse of the Blind) if the provided collectible type was not valid.
-- 
-- If you intentionally want the path to the question mark sprite, pass -1 as the collectible type.
-- 
-- Note that this does not return the file name, but the full path to the collectible's PNG file.
-- The function is named "GfxFilename" to correspond to the associated `ItemConfigItem.GfxFileName`
-- field.
function ____exports.getCollectibleGfxFilename(self, collectibleOrCollectibleType)
    if collectibleOrCollectibleType == -1 then
        return BLIND_ITEM_PNG_PATH
    end
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleGfxFilename")
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return BLIND_ITEM_PNG_PATH
    end
    return itemConfigItem.GfxFileName
end
--- Helper function to get the initial amount of charges that a collectible has. In most cases, when
-- picking up an active collectible for the first time, it will be fully charged, which corresponds
-- to an `InitCharge` value of -1. However, in some cases, this may be different. For example,
-- Eden's Soul starts without any charges, so it has an `InitCharge` value of 0.
-- 
-- This function returns 0 if the provided collectible type was not valid. This function returns -1
-- if the provided collectible type was not an active collectible.
function ____exports.getCollectibleInitCharge(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleInitCharge")
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return 0
    end
    return itemConfigItem.InitCharge
end
--- Helper function to get the `ItemType` of a collectible. Returns `ItemType.ITEM_NULL` if the
-- provided collectible type was not valid.
function ____exports.getCollectibleItemType(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleItemType")
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return ItemType.NULL
    end
    return itemConfigItem.Type
end
--- Helper function to get the maximum amount of charges that a collectible has. Returns 0 if the
-- provided collectible type was not valid.
function ____exports.getCollectibleMaxCharges(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleMaxCharges")
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return 0
    end
    return itemConfigItem.MaxCharges
end
--- Helper function to get the name of a collectible. Returns "Unknown" if the provided collectible
-- type is not valid.
-- 
-- This function works for both vanilla and modded collectibles.
-- 
-- For example, `getCollectibleName(CollectibleType.SAD_ONION)` would return "Sad Onion".
function ____exports.getCollectibleName(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleName")
    local collectibleName = COLLECTIBLE_NAMES[collectibleType]
    if collectibleName ~= nil then
        return collectibleName
    end
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem ~= nil then
        return itemConfigItem.Name
    end
    return DEFAULT_COLLECTIBLE_NAME
end
--- Helper function to get the "pedestal type" of a collectible. For example, it might be sitting on
-- top of a broken Blood Donation Machine, or it might be sitting on top of an opened Spiked Chest.
function ____exports.getCollectiblePedestalType(self, collectible)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"getCollectiblePedestalType\" function was given a non-collectible: " .. entityID)
    end
    local sprite = collectible:GetSprite()
    return sprite:GetOverlayFrame()
end
--- Helper function to get the tags of a collectible (which is the composition of zero or more
-- `ItemConfigTag`). Returns 0 if the provided collectible type is not valid.
-- 
-- For example:
-- 
-- ```ts
-- const collectibleType = CollectibleType.SAD_ONION;
-- const itemConfigTags = getCollectibleTags(collectibleType); // itemConfigTags is "18350080"
-- ```
function ____exports.getCollectibleTags(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "getCollectibleTags")
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    return itemConfigItem == nil and ItemConfigTagZero or itemConfigItem.Tags
end
--- Returns an array containing every vanilla collectible type with the given quality.
-- 
-- Note that this function will only return vanilla collectible types. To handle modded collectible
-- types, use the `getCollectibleTypesOfQuality` helper function instead.
function ____exports.getVanillaCollectibleTypesOfQuality(self, quality)
    local collectibleTypes = QUALITY_TO_VANILLA_COLLECTIBLE_TYPES_MAP:get(quality)
    assertDefined(
        nil,
        collectibleTypes,
        "Failed to find the vanilla collectible types corresponding to quality: " .. tostring(quality)
    )
    return collectibleTypes
end
--- Returns true if the item type in the item config is equal to `ItemType.ACTIVE`.
function ____exports.isActiveCollectible(self, collectibleType)
    local itemType = ____exports.getCollectibleItemType(nil, collectibleType)
    return itemType == ItemType.ACTIVE
end
--- Returns true if the collectible has a red question mark sprite.
-- 
-- Note that this function will not work properly in a render callback with the `RenderMode` set to
-- `RenderMode.WATER_REFLECT`. If this is detected, this function will throw a run-time error.
function ____exports.isBlindCollectible(self, collectible)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"isBlindCollectible\" function was given a non-collectible: " .. entityID)
    end
    local room = game:GetRoom()
    local renderMode = room:GetRenderMode()
    if renderMode == RenderMode.WATER_REFLECT then
        error("The \"isBlindCollectible\" function will not work properly in a render callback with the render mode equal to \"RenderMode.WATER_REFLECT\". Make sure that you properly account for this case if you are calling this function in a render callback.")
    end
    local sprite = collectible:GetSprite()
    local animation = sprite:GetAnimation()
    local frame = sprite:GetFrame()
    questionMarkSprite:SetFrame(animation, frame)
    return ____exports.collectibleSpriteEquals(nil, sprite, questionMarkSprite)
end
--- Returns true if the item type in the item config is equal to `ItemType.FAMILIAR`.
function ____exports.isFamiliarCollectible(self, collectibleType)
    local itemType = ____exports.getCollectibleItemType(nil, collectibleType)
    return itemType == ItemType.FAMILIAR
end
--- Returns whether the given collectible is a "glitched" item. All items are replaced by glitched
-- items once a player has TMTRAINER. However, glitched items can also "naturally" appear in secret
-- rooms and I AM ERROR rooms if the "Corrupted Data" achievement is unlocked.
-- 
-- Under the hood, this checks if the sub-type of the collectible is greater than 4,000,000,000.
function ____exports.isGlitchedCollectible(self, collectible)
    return collectible.Variant == PickupVariant.COLLECTIBLE and collectible.SubType > GLITCHED_ITEM_THRESHOLD
end
--- Returns true if the collectible has the "Hidden" attribute in the item config.
-- 
-- Hidden collectibles will not show up in any pools and Eden will not start with them.
function ____exports.isHiddenCollectible(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "isHiddenCollectible")
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    return itemConfigItem ~= nil and itemConfigItem.Hidden
end
function ____exports.isModdedCollectibleType(self, collectibleType)
    return not ____exports.isVanillaCollectibleType(nil, collectibleType)
end
--- Returns true if the item type in the item config is equal to `ItemType.ITEM_PASSIVE` or
-- `ItemType.ITEM_FAMILIAR`.
function ____exports.isPassiveOrFamiliarCollectible(self, collectibleOrCollectibleType)
    local collectibleType = getCollectibleTypeFromArg(nil, collectibleOrCollectibleType, "isPassiveCollectible")
    local itemType = ____exports.getCollectibleItemType(nil, collectibleType)
    return itemType == ItemType.PASSIVE or itemType == ItemType.FAMILIAR
end
--- Helper function to check if a collectible type is a particular quality.
function ____exports.isQuality(self, collectibleOrCollectibleType, quality)
    local actualQuality = ____exports.getCollectibleQuality(nil, collectibleOrCollectibleType)
    return quality == actualQuality
end
--- Helper function to determine if a particular collectible will disappear from the player's
-- inventory upon use. Note that this will not work will modded collectibles, as there is no way to
-- dynamically know if a modded collectible will disappear.
function ____exports.isSingleUseCollectible(self, collectibleType)
    return SINGLE_USE_ACTIVE_COLLECTIBLE_TYPES_SET:has(collectibleType)
end
function ____exports.isValidCollectibleType(self, collectibleType)
    local potentialCollectibleType = asCollectibleType(nil, collectibleType)
    local itemConfigItem = itemConfig:GetCollectible(potentialCollectibleType)
    return itemConfigItem ~= nil
end
--- Helper function to generate a new sprite based on a collectible. If the provided collectible type
-- is invalid, a sprite with a Curse of the Blind question mark will be returned.
-- 
-- If you intentionally want a question mark sprite, pass -1 as the collectible type.
function ____exports.newCollectibleSprite(self, collectibleType)
    local sprite = Sprite()
    sprite:Load(COLLECTIBLE_ANM2_PATH, false)
    clearSprite(nil, sprite)
    local gfxFileName = ____exports.getCollectibleGfxFilename(nil, collectibleType)
    sprite:ReplaceSpritesheet(CollectibleSpriteLayer.HEAD, gfxFileName)
    sprite:LoadGraphics()
    local defaultAnimation = sprite:GetDefaultAnimation()
    sprite:Play(defaultAnimation, true)
    return sprite
end
--- Helper function to remove the rotation behavior from a collectible. This will happen by default
-- when collectibles are spawned when playing as Tainted Isaac or when having Binge Eater.
-- 
-- Under the hood, this is accomplished by morphing the collectible with the `ignoreModifiers`
-- argument set to true.
function ____exports.preventCollectibleRotation(self, collectible)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"preventCollectibleRotation\" function was given a non-collectible: " .. entityID)
    end
    collectible:Morph(
        collectible.Type,
        collectible.Variant,
        collectible.SubType,
        true,
        true,
        true
    )
end
--- Helper function to remove all pickup delay on a collectible. By default, collectibles have a 20
-- frame delay before they can be picked up by a player.
function ____exports.removeCollectiblePickupDelay(self, collectible)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"removeCollectiblePickupDelay\" function was given a non-collectible: " .. entityID)
    end
    collectible.Wait = 0
end
--- Helper function to set a collectible sprite to a question mark (i.e. how collectibles look when
-- the player has Curse of the Blind).
function ____exports.setCollectibleBlind(self, collectible)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"setCollectibleBlind\" function was given a non-collectible: " .. entityID)
    end
    ____exports.setCollectibleSprite(nil, collectible, BLIND_ITEM_PNG_PATH)
end
--- Helper function to change a collectible into a "glitched" item (like the ones that appear when
-- the player has TMTRAINER).
function ____exports.setCollectibleGlitched(self, collectible)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"setCollectibleGlitched\" function was given a non-collectible: " .. entityID)
    end
    local player = Isaac.GetPlayer()
    local hasTMTRAINER = player:HasCollectible(CollectibleType.TMTRAINER)
    if not hasTMTRAINER then
        player:AddCollectible(CollectibleType.TMTRAINER, 0, false)
    end
    local itemPool = game:GetItemPool()
    local collectibleType = itemPool:GetCollectible(DEFAULT_ITEM_POOL_TYPE)
    ____exports.setCollectibleSubType(nil, collectible, collectibleType)
    if not hasTMTRAINER then
        player:RemoveCollectible(CollectibleType.TMTRAINER)
    end
end
--- Helper function to set the "pedestal type" of a collectible. For example, it might be sitting on
-- top of a broken Blood Donation Machine and you want to change it to be sitting on top of an
-- opened Spiked Chest.
function ____exports.setCollectiblePedestalType(self, collectible, collectiblePedestalType)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"setCollectiblePedestalType\" function was given a non-collectible: " .. entityID)
    end
    local sprite = collectible:GetSprite()
    local overlayAnimation = sprite:GetOverlayAnimation()
    sprite:SetOverlayFrame(overlayAnimation, collectiblePedestalType)
end
--- Helper function to put a message in the log.txt file to let the Rebirth Item Tracker know that
-- the build has been rerolled.
function ____exports.setCollectiblesRerolledForItemTracker(self)
    Isaac.DebugString("Added 3 Collectibles")
end
return ____exports
 end,
["functions.playerCollectibles"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySome = ____lualib.__TS__ArraySome
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ActiveSlot = ____isaac_2Dtypescript_2Ddefinitions.ActiveSlot
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local ACTIVE_SLOT_VALUES = ____cachedEnumValues.ACTIVE_SLOT_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local itemConfig = ____cachedClasses.itemConfig
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____array = require("functions.array")
local sumArray = ____array.sumArray
local ____collectibles = require("functions.collectibles")
local getCollectibleMaxCharges = ____collectibles.getCollectibleMaxCharges
local ____playerIndex = require("functions.playerIndex")
local getAllPlayers = ____playerIndex.getAllPlayers
local getPlayers = ____playerIndex.getPlayers
local ____players = require("functions.players")
local isCharacter = ____players.isCharacter
--- Returns the total number of collectibles amongst all players. For example, if player 1 has 1 Sad
-- Onion and player 2 has 2 Sad Onions, then this function would return 3.
-- 
-- Note that this will filter out non-real collectibles like Lilith's Incubus.
function ____exports.getTotalPlayerCollectibles(self, collectibleType)
    local players = getPlayers(nil)
    local numCollectiblesArray = __TS__ArrayMap(
        players,
        function(____, player) return player:GetCollectibleNum(collectibleType, true) end
    )
    return sumArray(nil, numCollectiblesArray)
end
--- Helper function to add one or more collectibles to a player.
-- 
-- This function is variadic, meaning that you can supply as many collectible types as you want to
-- add.
function ____exports.addCollectible(self, player, ...)
    local collectibleTypes = {...}
    for ____, collectibleType in ipairs(collectibleTypes) do
        player:AddCollectible(collectibleType)
    end
end
function ____exports.addCollectibleCostume(self, player, collectibleType)
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return
    end
    player:AddCostume(itemConfigItem, false)
end
--- Helper function to check to see if any player has a particular collectible.
-- 
-- @param collectibleType The collectible type to check for.
-- @param ignoreModifiers If set to true, only counts collectibles the player actually owns and
-- ignores effects granted by items like Zodiac, 3 Dollar Bill and Lemegeton.
-- Default is false.
function ____exports.anyPlayerHasCollectible(self, collectibleType, ignoreModifiers)
    local players = getAllPlayers(nil)
    return __TS__ArraySome(
        players,
        function(____, player) return player:HasCollectible(collectibleType, ignoreModifiers) end
    )
end
--- Helper function to find the active slots that the player has the corresponding collectible type
-- in. Returns an empty array if the player does not have the collectible in any active slot.
function ____exports.getActiveItemSlots(self, player, collectibleType)
    return __TS__ArrayFilter(
        ACTIVE_SLOT_VALUES,
        function(____, activeSlot)
            local activeItem = player:GetActiveItem(activeSlot)
            return activeItem == collectibleType
        end
    )
end
--- Helper function to get the adjusted price for a pickup, depending on how many Steam Sales all
-- players currently have. (For example, if Jacob has one Steam Sale and Esau has one Steam Sale,
-- the prices for items in the shop would be the same as if Isaac had two Steam Sales.)
function ____exports.getAdjustedPrice(self, basePrice)
    local numSteamSales = ____exports.getTotalPlayerCollectibles(nil, CollectibleType.STEAM_SALE)
    return numSteamSales > 0 and math.floor(basePrice / (numSteamSales + 1)) or basePrice
end
--- Helper function to return the total amount of collectibles that a player has that match the
-- collectible type(s) provided.
-- 
-- This function is variadic, meaning that you can specify N collectible types.
-- 
-- Note that this will filter out non-real collectibles like Lilith's Incubus.
function ____exports.getPlayerCollectibleCount(self, player, ...)
    local collectibleTypes = {...}
    local numCollectibles = 0
    for ____, collectibleType in ipairs(collectibleTypes) do
        numCollectibles = numCollectibles + player:GetCollectibleNum(collectibleType, true)
    end
    return numCollectibles
end
--- Helper function to get only the players that have a certain collectible.
-- 
-- This function is variadic, meaning that you can supply as many collectible types as you want to
-- check for. It only returns the players that have all of the collectibles.
function ____exports.getPlayersWithCollectible(self, ...)
    local collectibleTypes = {...}
    local players = getPlayers(nil)
    return __TS__ArrayFilter(
        players,
        function(____, player) return __TS__ArrayEvery(
            collectibleTypes,
            function(____, collectibleType) return player:HasCollectible(collectibleType) end
        ) end
    )
end
--- Helper function to check to see if a player has one or more collectibles.
-- 
-- This function is variadic, meaning that you can supply as many collectible types as you want to
-- check for. Returns true if the player has any of the supplied collectible types.
-- 
-- This function always passes `false` to the `ignoreModifiers` argument.
function ____exports.hasCollectible(self, player, ...)
    local collectibleTypes = {...}
    return __TS__ArraySome(
        collectibleTypes,
        function(____, collectibleType) return player:HasCollectible(collectibleType) end
    )
end
--- Helper function to check to see if a player has a specific collectible in one or more active
-- slots.
-- 
-- This function is variadic, meaning that you can specify as many active slots as you want to check
-- for. This function will return true if the collectible type is located in any of the active slots
-- provided.
function ____exports.hasCollectibleInActiveSlot(self, player, collectibleType, ...)
    local activeSlots = {...}
    local matchingActiveSlotsSet = __TS__New(ReadonlySet, activeSlots)
    local activeItemSlots = ____exports.getActiveItemSlots(nil, player, collectibleType)
    return __TS__ArraySome(
        activeItemSlots,
        function(____, activeSlot) return matchingActiveSlotsSet:has(activeSlot) end
    )
end
--- Returns whether the player can hold an additional active item, beyond what they are currently
-- carrying. This takes the Schoolbag into account.
-- 
-- If the player is the Tainted Soul, this always returns false, since that character cannot pick up
-- items. (Only Tainted Forgotten can pick up items.)
function ____exports.hasOpenActiveItemSlot(self, player)
    if isCharacter(nil, player, PlayerType.SOUL_B) then
        return false
    end
    local activeItemPrimary = player:GetActiveItem(ActiveSlot.PRIMARY)
    local activeItemSecondary = player:GetActiveItem(ActiveSlot.SECONDARY)
    local hasSchoolbag = player:HasCollectible(CollectibleType.SCHOOLBAG)
    if hasSchoolbag then
        return activeItemPrimary == CollectibleType.NULL or activeItemSecondary == CollectibleType.NULL
    end
    return activeItemPrimary == CollectibleType.NULL
end
--- Helper function to check if the active slot of a particular player is empty.
-- 
-- @param player The player to check.
-- @param activeSlot Optional. The active slot to check. Default is `ActiveSlot.PRIMARY`.
function ____exports.isActiveSlotEmpty(self, player, activeSlot)
    if activeSlot == nil then
        activeSlot = ActiveSlot.PRIMARY
    end
    local activeCollectibleType = player:GetActiveItem(activeSlot)
    return activeCollectibleType == CollectibleType.NULL
end
--- Helper function to remove all of the active items from a player. This includes the Schoolbag item
-- and any pocket actives.
function ____exports.removeAllActiveItems(self, player)
    for ____, activeSlot in ipairs(ACTIVE_SLOT_VALUES) do
        do
            local collectibleType = player:GetActiveItem(activeSlot)
            if collectibleType == CollectibleType.NULL then
                goto __continue29
            end
            local stillHasCollectible
            repeat
                do
                    player:RemoveCollectible(collectibleType)
                    stillHasCollectible = player:HasCollectible(collectibleType)
                end
            until not stillHasCollectible
        end
        ::__continue29::
    end
end
--- Helper function to remove one or more collectibles to a player.
-- 
-- This function is variadic, meaning that you can supply as many collectible types as you want to
-- remove.
function ____exports.removeCollectible(self, player, ...)
    local collectibleTypes = {...}
    for ____, collectibleType in ipairs(collectibleTypes) do
        player:RemoveCollectible(collectibleType)
    end
end
--- Helper function to remove a collectible costume from a player. Use this helper function to avoid
-- having to request the collectible from the item config.
function ____exports.removeCollectibleCostume(self, player, collectibleType)
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return
    end
    player:RemoveCostume(itemConfigItem)
end
--- Helper function to remove one or more collectibles from all players. If any player has more than
-- one copy of the item, then all copies of it will be removed.
-- 
-- This function is variadic, meaning that you can specify as many collectibles as you want to
-- remove.
function ____exports.removeCollectibleFromAllPlayers(self, ...)
    local collectibleTypes = {...}
    for ____, player in ipairs(getAllPlayers(nil)) do
        for ____, collectibleType in ipairs(collectibleTypes) do
            while player:HasCollectible(collectibleType, true) do
                player:RemoveCollectible(collectibleType)
            end
        end
    end
end
--- Helper function to set an active collectible to a particular slot. This has different behavior
-- than calling the `player.AddCollectible` method with the `activeSlot` argument, because this
-- function will not shift existing items into the Schoolbag and it handles
-- `ActiveSlot.SLOT_POCKET2`.
-- 
-- Note that if an item is set to `ActiveSlot.SLOT_POCKET2`, it will disappear after being used and
-- will be automatically removed upon entering a new room.
-- 
-- @param player The player to give the item to.
-- @param collectibleType The collectible type of the item to give.
-- @param activeSlot Optional. The slot to set. Default is `ActiveSlot.PRIMARY`.
-- @param charge Optional. The argument of charges to set. If not specified, the item will be set
-- with maximum charges.
-- @param keepInPools Optional. Whether to remove the item from pools. Default is false.
function ____exports.setActiveItem(self, player, collectibleType, activeSlot, charge, keepInPools)
    if activeSlot == nil then
        activeSlot = ActiveSlot.PRIMARY
    end
    if keepInPools == nil then
        keepInPools = false
    end
    local itemPool = game:GetItemPool()
    local primaryCollectibleType = player:GetActiveItem(ActiveSlot.PRIMARY)
    local primaryCharge = player:GetActiveCharge(ActiveSlot.PRIMARY)
    local secondaryCollectibleType = player:GetActiveItem(ActiveSlot.SECONDARY)
    if charge == nil then
        charge = getCollectibleMaxCharges(nil, collectibleType)
    end
    if not keepInPools then
        itemPool:RemoveCollectible(collectibleType)
    end
    repeat
        local ____switch47 = activeSlot
        local ____cond47 = ____switch47 == ActiveSlot.PRIMARY
        if ____cond47 then
            do
                if primaryCollectibleType ~= CollectibleType.NULL then
                    player:RemoveCollectible(primaryCollectibleType)
                end
                player:AddCollectible(collectibleType, charge, false)
                break
            end
        end
        ____cond47 = ____cond47 or ____switch47 == ActiveSlot.SECONDARY
        if ____cond47 then
            do
                if primaryCollectibleType ~= CollectibleType.NULL then
                    player:RemoveCollectible(primaryCollectibleType)
                end
                if secondaryCollectibleType ~= CollectibleType.NULL then
                    player:RemoveCollectible(secondaryCollectibleType)
                end
                player:AddCollectible(secondaryCollectibleType, charge, false)
                if primaryCollectibleType ~= CollectibleType.NULL then
                    player:AddCollectible(primaryCollectibleType, primaryCharge, false)
                end
                break
            end
        end
        ____cond47 = ____cond47 or ____switch47 == ActiveSlot.POCKET
        if ____cond47 then
            do
                player:SetPocketActiveItem(collectibleType, activeSlot, keepInPools)
                player:SetActiveCharge(charge, activeSlot)
                break
            end
        end
        ____cond47 = ____cond47 or ____switch47 == ActiveSlot.POCKET_SINGLE_USE
        if ____cond47 then
            do
                player:SetPocketActiveItem(collectibleType, activeSlot, keepInPools)
                break
            end
        end
    until true
end
--- Helper function to use an active item without showing an animation, keeping the item, or adding
-- any costumes.
function ____exports.useActiveItemTemp(self, player, collectibleType)
    player:UseActiveItem(
        collectibleType,
        false,
        false,
        true,
        false,
        -1
    )
end
return ____exports
 end,
["enums.CornerType"] = function(...) 
local ____exports = {}
--- This is used by the `getRoomShapeCorners` helper function.
____exports.CornerType = {}
____exports.CornerType.TOP_LEFT = 0
____exports.CornerType[____exports.CornerType.TOP_LEFT] = "TOP_LEFT"
____exports.CornerType.TOP_RIGHT = 1
____exports.CornerType[____exports.CornerType.TOP_RIGHT] = "TOP_RIGHT"
____exports.CornerType.BOTTOM_LEFT = 2
____exports.CornerType[____exports.CornerType.BOTTOM_LEFT] = "BOTTOM_LEFT"
____exports.CornerType.BOTTOM_RIGHT = 3
____exports.CornerType[____exports.CornerType.BOTTOM_RIGHT] = "BOTTOM_RIGHT"
return ____exports
 end,
["interfaces.Corner"] = function(...) 
local ____exports = {}
return ____exports
 end,
["objects.roomShapeVolumes"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
____exports.ONE_BY_ONE_CONTENTS_WIDTH = 13
____exports.ONE_BY_ONE_CONTENTS_HEIGHT = 7
local ONE_BY_ONE_VOLUME = ____exports.ONE_BY_ONE_CONTENTS_HEIGHT * ____exports.ONE_BY_ONE_CONTENTS_WIDTH
____exports.NARROW_CONTENTS_WIDTH = 5
____exports.NARROW_CONTENTS_HEIGHT = 3
local NARROW_HORIZONTAL_VOLUME = ____exports.ONE_BY_ONE_CONTENTS_WIDTH * ____exports.NARROW_CONTENTS_HEIGHT
local NARROW_VERTICAL_VOLUME = ____exports.NARROW_CONTENTS_WIDTH * ____exports.ONE_BY_ONE_CONTENTS_HEIGHT
local ONE_BY_TWO_VOLUME = ONE_BY_ONE_VOLUME * 2
local L_ROOM_VOLUME = ONE_BY_ONE_VOLUME * 3
--- Volume is the amount of tiles that are inside the room shape.
-- 
-- (This cannot be directly calculated from the bounds since L rooms are a special case.)
____exports.ROOM_SHAPE_VOLUMES = {
    [RoomShape.SHAPE_1x1] = ONE_BY_ONE_VOLUME,
    [RoomShape.IH] = NARROW_HORIZONTAL_VOLUME,
    [RoomShape.IV] = NARROW_VERTICAL_VOLUME,
    [RoomShape.SHAPE_1x2] = ONE_BY_TWO_VOLUME,
    [RoomShape.IIV] = NARROW_VERTICAL_VOLUME * 2,
    [RoomShape.SHAPE_2x1] = ONE_BY_TWO_VOLUME,
    [RoomShape.IIH] = NARROW_HORIZONTAL_VOLUME * 2,
    [RoomShape.SHAPE_2x2] = ONE_BY_ONE_VOLUME * 4,
    [RoomShape.LTL] = L_ROOM_VOLUME,
    [RoomShape.LTR] = L_ROOM_VOLUME,
    [RoomShape.LBL] = L_ROOM_VOLUME,
    [RoomShape.LBR] = L_ROOM_VOLUME
}
return ____exports
 end,
["objects.roomShapeBounds"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____roomShapeVolumes = require("objects.roomShapeVolumes")
local NARROW_CONTENTS_HEIGHT = ____roomShapeVolumes.NARROW_CONTENTS_HEIGHT
local NARROW_CONTENTS_WIDTH = ____roomShapeVolumes.NARROW_CONTENTS_WIDTH
local ONE_BY_ONE_CONTENTS_HEIGHT = ____roomShapeVolumes.ONE_BY_ONE_CONTENTS_HEIGHT
local ONE_BY_ONE_CONTENTS_WIDTH = ____roomShapeVolumes.ONE_BY_ONE_CONTENTS_WIDTH
local TWO_BY_TWO_BOUNDS = {ONE_BY_ONE_CONTENTS_WIDTH * 2, ONE_BY_ONE_CONTENTS_HEIGHT * 2}
--- The size of a room shape's contents. This does not include the tiles that the walls are on. L
-- rooms use the same bounds as a 2x2 room.
____exports.ROOM_SHAPE_BOUNDS = {
    [RoomShape.SHAPE_1x1] = {ONE_BY_ONE_CONTENTS_WIDTH, ONE_BY_ONE_CONTENTS_HEIGHT},
    [RoomShape.IH] = {ONE_BY_ONE_CONTENTS_WIDTH, NARROW_CONTENTS_HEIGHT},
    [RoomShape.IV] = {NARROW_CONTENTS_WIDTH, ONE_BY_ONE_CONTENTS_HEIGHT},
    [RoomShape.SHAPE_1x2] = {ONE_BY_ONE_CONTENTS_WIDTH, ONE_BY_ONE_CONTENTS_HEIGHT * 2},
    [RoomShape.IIV] = {NARROW_CONTENTS_WIDTH, ONE_BY_ONE_CONTENTS_HEIGHT * 2},
    [RoomShape.SHAPE_2x1] = {ONE_BY_ONE_CONTENTS_WIDTH * 2, ONE_BY_ONE_CONTENTS_HEIGHT},
    [RoomShape.IIH] = {ONE_BY_ONE_CONTENTS_WIDTH * 2, NARROW_CONTENTS_HEIGHT},
    [RoomShape.SHAPE_2x2] = TWO_BY_TWO_BOUNDS,
    [RoomShape.LTL] = TWO_BY_TWO_BOUNDS,
    [RoomShape.LTR] = TWO_BY_TWO_BOUNDS,
    [RoomShape.LBL] = TWO_BY_TWO_BOUNDS,
    [RoomShape.LBR] = TWO_BY_TWO_BOUNDS
}
return ____exports
 end,
["objects.roomShapeCorners"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____CornerType = require("enums.CornerType")
local CornerType = ____CornerType.CornerType
local ____readOnly = require("functions.readOnly")
local newReadonlyVector = ____readOnly.newReadonlyVector
--- The locations of the corners for each room shape.
-- 
-- Note that these corner locations are not accurate for the Mother Boss Room and the Home closet
-- rooms. (Those rooms have custom shapes.)
____exports.ROOM_SHAPE_CORNERS = {
    [RoomShape.SHAPE_1x1] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 0,
            position = newReadonlyVector(nil, 60, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 14,
            position = newReadonlyVector(nil, 580, 140)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 120,
            position = newReadonlyVector(nil, 60, 420)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 134,
            position = newReadonlyVector(nil, 580, 420)
        }
    },
    [RoomShape.IH] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 30,
            position = newReadonlyVector(nil, 60, 220)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 44,
            position = newReadonlyVector(nil, 580, 220)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 90,
            position = newReadonlyVector(nil, 60, 340)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 104,
            position = newReadonlyVector(nil, 580, 340)
        }
    },
    [RoomShape.IV] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 4,
            position = newReadonlyVector(nil, 220, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 10,
            position = newReadonlyVector(nil, 420, 140)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 124,
            position = newReadonlyVector(nil, 220, 420)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 130,
            position = newReadonlyVector(nil, 420, 420)
        }
    },
    [RoomShape.SHAPE_1x2] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 0,
            position = newReadonlyVector(nil, 60, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 14,
            position = newReadonlyVector(nil, 580, 140)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 225,
            position = newReadonlyVector(nil, 60, 700)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 239,
            position = newReadonlyVector(nil, 580, 700)
        }
    },
    [RoomShape.IIV] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 4,
            position = newReadonlyVector(nil, 220, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 10,
            position = newReadonlyVector(nil, 420, 140)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 229,
            position = newReadonlyVector(nil, 220, 700)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 235,
            position = newReadonlyVector(nil, 420, 700)
        }
    },
    [RoomShape.SHAPE_2x1] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 0,
            position = newReadonlyVector(nil, 60, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 27,
            position = newReadonlyVector(nil, 1100, 140)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 224,
            position = newReadonlyVector(nil, 60, 420)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 251,
            position = newReadonlyVector(nil, 1100, 420)
        }
    },
    [RoomShape.IIH] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 56,
            position = newReadonlyVector(nil, 60, 220)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 83,
            position = newReadonlyVector(nil, 1100, 220)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 168,
            position = newReadonlyVector(nil, 60, 340)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 195,
            position = newReadonlyVector(nil, 1100, 340)
        }
    },
    [RoomShape.SHAPE_2x2] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 0,
            position = newReadonlyVector(nil, 60, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 27,
            position = newReadonlyVector(nil, 1100, 140)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 420,
            position = newReadonlyVector(nil, 60, 700)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 447,
            position = newReadonlyVector(nil, 1100, 700)
        }
    },
    [RoomShape.LTL] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 13,
            position = newReadonlyVector(nil, 580, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 27,
            position = newReadonlyVector(nil, 1100, 140)
        },
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 196,
            position = newReadonlyVector(nil, 60, 420)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 209,
            position = newReadonlyVector(nil, 580, 420)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 420,
            position = newReadonlyVector(nil, 60, 700)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 447,
            position = newReadonlyVector(nil, 1100, 700)
        }
    },
    [RoomShape.LTR] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 0,
            position = newReadonlyVector(nil, 60, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 14,
            position = newReadonlyVector(nil, 580, 140)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 210,
            position = newReadonlyVector(nil, 580, 420)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 223,
            position = newReadonlyVector(nil, 1100, 420)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 420,
            position = newReadonlyVector(nil, 60, 700)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 447,
            position = newReadonlyVector(nil, 1100, 700)
        }
    },
    [RoomShape.LBL] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 0,
            position = newReadonlyVector(nil, 60, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 27,
            position = newReadonlyVector(nil, 1100, 140)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 224,
            position = newReadonlyVector(nil, 580, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 237,
            position = newReadonlyVector(nil, 580, 420)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 433,
            position = newReadonlyVector(nil, 580, 700)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 447,
            position = newReadonlyVector(nil, 1100, 700)
        }
    },
    [RoomShape.LBR] = {
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 0,
            position = newReadonlyVector(nil, 60, 140)
        },
        {
            type = CornerType.TOP_RIGHT,
            gridIndex = 27,
            position = newReadonlyVector(nil, 1100, 140)
        },
        {
            type = CornerType.TOP_LEFT,
            gridIndex = 238,
            position = newReadonlyVector(nil, 580, 420)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 251,
            position = newReadonlyVector(nil, 1100, 420)
        },
        {
            type = CornerType.BOTTOM_LEFT,
            gridIndex = 420,
            position = newReadonlyVector(nil, 60, 700)
        },
        {
            type = CornerType.BOTTOM_RIGHT,
            gridIndex = 434,
            position = newReadonlyVector(nil, 580, 700)
        }
    }
}
return ____exports
 end,
["objects.roomShapeLayoutSizes"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____roomShapeVolumes = require("objects.roomShapeVolumes")
local ONE_BY_ONE_CONTENTS_HEIGHT = ____roomShapeVolumes.ONE_BY_ONE_CONTENTS_HEIGHT
local ONE_BY_ONE_CONTENTS_WIDTH = ____roomShapeVolumes.ONE_BY_ONE_CONTENTS_WIDTH
local ONE_BY_ONE_LAYOUT_SIZE = {ONE_BY_ONE_CONTENTS_WIDTH, ONE_BY_ONE_CONTENTS_HEIGHT}
local TWO_BY_ONE_VERTICAL_LAYOUT_SIZE = {ONE_BY_ONE_CONTENTS_WIDTH, ONE_BY_ONE_CONTENTS_HEIGHT * 2}
local TWO_BY_ONE_HORIZONTAL_LAYOUT_SIZE = {ONE_BY_ONE_CONTENTS_WIDTH * 2, ONE_BY_ONE_CONTENTS_HEIGHT}
local TWO_BY_TWO_LAYOUT_SIZE = {ONE_BY_ONE_CONTENTS_WIDTH * 2, ONE_BY_ONE_CONTENTS_HEIGHT * 2}
--- The dimensions of a room shape's layout. This is NOT the size of the room's actual contents! For
-- that, use `ROOM_SHAPE_BOUNDS`.
-- 
-- For example, a horizontal narrow room has a layout size of equal to that of a 1x1 room.
____exports.ROOM_SHAPE_LAYOUT_SIZES = {
    [RoomShape.SHAPE_1x1] = ONE_BY_ONE_LAYOUT_SIZE,
    [RoomShape.IH] = ONE_BY_ONE_LAYOUT_SIZE,
    [RoomShape.IV] = ONE_BY_ONE_LAYOUT_SIZE,
    [RoomShape.SHAPE_1x2] = TWO_BY_ONE_VERTICAL_LAYOUT_SIZE,
    [RoomShape.IIV] = TWO_BY_ONE_VERTICAL_LAYOUT_SIZE,
    [RoomShape.SHAPE_2x1] = TWO_BY_ONE_HORIZONTAL_LAYOUT_SIZE,
    [RoomShape.IIH] = TWO_BY_ONE_HORIZONTAL_LAYOUT_SIZE,
    [RoomShape.SHAPE_2x2] = TWO_BY_TWO_LAYOUT_SIZE,
    [RoomShape.LTL] = TWO_BY_TWO_LAYOUT_SIZE,
    [RoomShape.LTR] = TWO_BY_TWO_LAYOUT_SIZE,
    [RoomShape.LBL] = TWO_BY_TWO_LAYOUT_SIZE,
    [RoomShape.LBR] = TWO_BY_TWO_LAYOUT_SIZE
}
return ____exports
 end,
["objects.roomShapeToBottomRightPosition"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____readOnly = require("functions.readOnly")
local newReadonlyVector = ____readOnly.newReadonlyVector
local TWO_BY_TWO_BOTTOM_RIGHT_POSITION = newReadonlyVector(nil, 25, 13)
local ONE_BY_TWO_VERTICAL_BOTTOM_RIGHT_POSITION = newReadonlyVector(nil, 12, 13)
--- "Vector(0, 0)" corresponds to the top left tile of a room, not including the walls. (The top-left
-- wall would be at "Vector(-1, -1)".)
____exports.ROOM_SHAPE_TO_BOTTOM_RIGHT_POSITION = {
    [RoomShape.SHAPE_1x1] = newReadonlyVector(nil, 12, 6),
    [RoomShape.IH] = newReadonlyVector(nil, 12, 4),
    [RoomShape.IV] = newReadonlyVector(nil, 8, 6),
    [RoomShape.SHAPE_1x2] = ONE_BY_TWO_VERTICAL_BOTTOM_RIGHT_POSITION,
    [RoomShape.IIV] = newReadonlyVector(nil, 8, 13),
    [RoomShape.SHAPE_2x1] = newReadonlyVector(nil, 25, 6),
    [RoomShape.IIH] = newReadonlyVector(nil, 25, 4),
    [RoomShape.SHAPE_2x2] = TWO_BY_TWO_BOTTOM_RIGHT_POSITION,
    [RoomShape.LTL] = TWO_BY_TWO_BOTTOM_RIGHT_POSITION,
    [RoomShape.LTR] = TWO_BY_TWO_BOTTOM_RIGHT_POSITION,
    [RoomShape.LBL] = TWO_BY_TWO_BOTTOM_RIGHT_POSITION,
    [RoomShape.LBR] = ONE_BY_TWO_VERTICAL_BOTTOM_RIGHT_POSITION
}
return ____exports
 end,
["types.ReadonlyMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local ____exports = {}
--- An alias for the `Map` constructor that returns a read-only map.
____exports.ReadonlyMap = Map
return ____exports
 end,
["objects.roomShapeToDoorSlotsToGridIndexDelta"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____constants = require("core.constants")
local LEVEL_GRID_ROW_WIDTH = ____constants.LEVEL_GRID_ROW_WIDTH
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
local LEFT = -1
local UP = -LEVEL_GRID_ROW_WIDTH
local RIGHT = 1
local DOWN = LEVEL_GRID_ROW_WIDTH
--- Deltas are considered to be from the safe grid index of the room (i.e. the top left corner, or
-- top right corner in the case of `RoomShape.LTL`).
____exports.ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA = {
    [RoomShape.SHAPE_1x1] = __TS__New(ReadonlyMap, {{DoorSlot.LEFT_0, LEFT}, {DoorSlot.UP_0, UP}, {DoorSlot.RIGHT_0, RIGHT}, {DoorSlot.DOWN_0, DOWN}}),
    [RoomShape.IH] = __TS__New(ReadonlyMap, {{DoorSlot.LEFT_0, LEFT}, {DoorSlot.RIGHT_0, RIGHT}}),
    [RoomShape.IV] = __TS__New(ReadonlyMap, {{DoorSlot.UP_0, UP}, {DoorSlot.DOWN_0, DOWN}}),
    [RoomShape.SHAPE_1x2] = __TS__New(ReadonlyMap, {
        {DoorSlot.LEFT_0, LEFT},
        {DoorSlot.UP_0, UP},
        {DoorSlot.RIGHT_0, RIGHT},
        {DoorSlot.DOWN_0, DOWN + DOWN},
        {DoorSlot.LEFT_1, DOWN + LEFT},
        {DoorSlot.RIGHT_1, DOWN + RIGHT}
    }),
    [RoomShape.IIV] = __TS__New(ReadonlyMap, {{DoorSlot.UP_0, UP}, {DoorSlot.DOWN_0, DOWN + DOWN}}),
    [RoomShape.SHAPE_2x1] = __TS__New(ReadonlyMap, {
        {DoorSlot.LEFT_0, LEFT},
        {DoorSlot.UP_0, UP},
        {DoorSlot.RIGHT_0, RIGHT + RIGHT},
        {DoorSlot.DOWN_0, DOWN},
        {DoorSlot.UP_1, RIGHT + UP},
        {DoorSlot.DOWN_1, RIGHT + DOWN}
    }),
    [RoomShape.IIH] = __TS__New(ReadonlyMap, {{DoorSlot.LEFT_0, LEFT}, {DoorSlot.RIGHT_0, RIGHT + RIGHT}}),
    [RoomShape.SHAPE_2x2] = __TS__New(ReadonlyMap, {
        {DoorSlot.LEFT_0, LEFT},
        {DoorSlot.UP_0, UP},
        {DoorSlot.RIGHT_0, RIGHT + RIGHT},
        {DoorSlot.DOWN_0, DOWN + DOWN},
        {DoorSlot.LEFT_1, DOWN + LEFT},
        {DoorSlot.UP_1, RIGHT + UP},
        {DoorSlot.RIGHT_1, RIGHT + DOWN + RIGHT},
        {DoorSlot.DOWN_1, RIGHT + DOWN + DOWN}
    }),
    [RoomShape.LTL] = __TS__New(ReadonlyMap, {
        {DoorSlot.LEFT_0, LEFT},
        {DoorSlot.UP_0, DOWN + LEFT + UP},
        {DoorSlot.RIGHT_0, RIGHT},
        {DoorSlot.DOWN_0, DOWN + LEFT + DOWN},
        {DoorSlot.LEFT_1, DOWN + LEFT + LEFT},
        {DoorSlot.UP_1, UP},
        {DoorSlot.RIGHT_1, DOWN + RIGHT},
        {DoorSlot.DOWN_1, DOWN + DOWN}
    }),
    [RoomShape.LTR] = __TS__New(ReadonlyMap, {
        {DoorSlot.LEFT_0, LEFT},
        {DoorSlot.UP_0, UP},
        {DoorSlot.RIGHT_0, RIGHT},
        {DoorSlot.DOWN_0, DOWN + DOWN},
        {DoorSlot.LEFT_1, DOWN + LEFT},
        {DoorSlot.UP_1, DOWN + RIGHT + UP},
        {DoorSlot.RIGHT_1, DOWN + RIGHT + RIGHT},
        {DoorSlot.DOWN_1, DOWN + RIGHT + DOWN}
    }),
    [RoomShape.LBL] = __TS__New(ReadonlyMap, {
        {DoorSlot.LEFT_0, LEFT},
        {DoorSlot.UP_0, UP},
        {DoorSlot.RIGHT_0, RIGHT + RIGHT},
        {DoorSlot.DOWN_0, DOWN},
        {DoorSlot.LEFT_1, RIGHT + DOWN + LEFT},
        {DoorSlot.UP_1, RIGHT + UP},
        {DoorSlot.RIGHT_1, RIGHT + DOWN + RIGHT},
        {DoorSlot.DOWN_1, RIGHT + DOWN + DOWN}
    }),
    [RoomShape.LBR] = __TS__New(ReadonlyMap, {
        {DoorSlot.LEFT_0, LEFT},
        {DoorSlot.UP_0, UP},
        {DoorSlot.RIGHT_0, RIGHT + RIGHT},
        {DoorSlot.DOWN_0, DOWN + DOWN},
        {DoorSlot.LEFT_1, DOWN + LEFT},
        {DoorSlot.UP_1, RIGHT + UP},
        {DoorSlot.RIGHT_1, DOWN + RIGHT},
        {DoorSlot.DOWN_1, RIGHT + DOWN}
    })
}
return ____exports
 end,
["objects.roomShapeToGridWidth"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ONE_BY_ONE_WIDTH = 15
local TWO_BY_ONE_WIDTH = 28
____exports.ROOM_SHAPE_TO_GRID_WIDTH = {
    [RoomShape.SHAPE_1x1] = ONE_BY_ONE_WIDTH,
    [RoomShape.IH] = ONE_BY_ONE_WIDTH,
    [RoomShape.IV] = ONE_BY_ONE_WIDTH,
    [RoomShape.SHAPE_1x2] = ONE_BY_ONE_WIDTH,
    [RoomShape.IIV] = ONE_BY_ONE_WIDTH,
    [RoomShape.SHAPE_2x1] = TWO_BY_ONE_WIDTH,
    [RoomShape.IIH] = TWO_BY_ONE_WIDTH,
    [RoomShape.SHAPE_2x2] = TWO_BY_ONE_WIDTH,
    [RoomShape.LTL] = TWO_BY_ONE_WIDTH,
    [RoomShape.LTR] = TWO_BY_ONE_WIDTH,
    [RoomShape.LBL] = TWO_BY_ONE_WIDTH,
    [RoomShape.LBR] = TWO_BY_ONE_WIDTH
}
return ____exports
 end,
["objects.roomShapeToTopLeftPosition"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____readOnly = require("functions.readOnly")
local newReadonlyVector = ____readOnly.newReadonlyVector
local NARROW_HORIZONTAL_TOP_LEFT_POSITION = newReadonlyVector(nil, 0, 2)
local NARROW_VERTICAL_TOP_LEFT_POSITION = newReadonlyVector(nil, 4, 0)
--- "Vector(0, 0)" corresponds to the top left tile of a room, not including the walls. (The top-left
-- wall would be at "Vector(-1, -1)".)
____exports.ROOM_SHAPE_TO_TOP_LEFT_POSITION = {
    [RoomShape.SHAPE_1x1] = VectorZero,
    [RoomShape.IH] = NARROW_HORIZONTAL_TOP_LEFT_POSITION,
    [RoomShape.IV] = NARROW_VERTICAL_TOP_LEFT_POSITION,
    [RoomShape.SHAPE_1x2] = VectorZero,
    [RoomShape.IIV] = NARROW_VERTICAL_TOP_LEFT_POSITION,
    [RoomShape.SHAPE_2x1] = VectorZero,
    [RoomShape.IIH] = NARROW_HORIZONTAL_TOP_LEFT_POSITION,
    [RoomShape.SHAPE_2x2] = VectorZero,
    [RoomShape.LTL] = newReadonlyVector(nil, 13, 0),
    [RoomShape.LTR] = VectorZero,
    [RoomShape.LBL] = VectorZero,
    [RoomShape.LBR] = VectorZero
}
return ____exports
 end,
["sets.LRoomShapesSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.L_ROOM_SHAPES_SET = __TS__New(ReadonlySet, {RoomShape.LTL, RoomShape.LTR, RoomShape.LBL, RoomShape.LBR})
return ____exports
 end,
["sets.bigRoomShapesSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.BIG_ROOM_SHAPES_SET = __TS__New(ReadonlySet, {
    RoomShape.SHAPE_1x2,
    RoomShape.SHAPE_2x1,
    RoomShape.SHAPE_2x2,
    RoomShape.LTL,
    RoomShape.LTR,
    RoomShape.LBL,
    RoomShape.LBR
})
return ____exports
 end,
["sets.narrowRoomShapesSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.NARROW_ROOM_SHAPES_SET = __TS__New(ReadonlySet, {RoomShape.IH, RoomShape.IV, RoomShape.IIV, RoomShape.IIH})
return ____exports
 end,
["functions.roomShape"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____roomShapeBounds = require("objects.roomShapeBounds")
local ROOM_SHAPE_BOUNDS = ____roomShapeBounds.ROOM_SHAPE_BOUNDS
local ____roomShapeCorners = require("objects.roomShapeCorners")
local ROOM_SHAPE_CORNERS = ____roomShapeCorners.ROOM_SHAPE_CORNERS
local ____roomShapeLayoutSizes = require("objects.roomShapeLayoutSizes")
local ROOM_SHAPE_LAYOUT_SIZES = ____roomShapeLayoutSizes.ROOM_SHAPE_LAYOUT_SIZES
local ____roomShapeToBottomRightPosition = require("objects.roomShapeToBottomRightPosition")
local ROOM_SHAPE_TO_BOTTOM_RIGHT_POSITION = ____roomShapeToBottomRightPosition.ROOM_SHAPE_TO_BOTTOM_RIGHT_POSITION
local ____roomShapeToDoorSlotsToGridIndexDelta = require("objects.roomShapeToDoorSlotsToGridIndexDelta")
local ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA = ____roomShapeToDoorSlotsToGridIndexDelta.ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA
local ____roomShapeToGridWidth = require("objects.roomShapeToGridWidth")
local ROOM_SHAPE_TO_GRID_WIDTH = ____roomShapeToGridWidth.ROOM_SHAPE_TO_GRID_WIDTH
local ____roomShapeToTopLeftPosition = require("objects.roomShapeToTopLeftPosition")
local ROOM_SHAPE_TO_TOP_LEFT_POSITION = ____roomShapeToTopLeftPosition.ROOM_SHAPE_TO_TOP_LEFT_POSITION
local ____roomShapeVolumes = require("objects.roomShapeVolumes")
local ROOM_SHAPE_VOLUMES = ____roomShapeVolumes.ROOM_SHAPE_VOLUMES
local ____LRoomShapesSet = require("sets.LRoomShapesSet")
local L_ROOM_SHAPES_SET = ____LRoomShapesSet.L_ROOM_SHAPES_SET
local ____bigRoomShapesSet = require("sets.bigRoomShapesSet")
local BIG_ROOM_SHAPES_SET = ____bigRoomShapesSet.BIG_ROOM_SHAPES_SET
local ____narrowRoomShapesSet = require("sets.narrowRoomShapesSet")
local NARROW_ROOM_SHAPES_SET = ____narrowRoomShapesSet.NARROW_ROOM_SHAPES_SET
--- Helper function to see if a given room shape will grant a single charge or a double charge to the
-- player's active item(s).
-- 
-- For example, `RoomShape.SHAPE_2x2` will return true.
function ____exports.isRoomShapeDoubleCharge(self, roomShape)
    return roomShape >= RoomShape.SHAPE_2x2
end
--- Helper function to get the grid index delta that a door out of the given room shape would lead
-- to. For example, if you went through the bottom door in a room of `RoomShape.SHAPE_1x2`, you
-- would end up in a room with a grid index that is +26 units from the `SafeGridIndex` of where you
-- started.
function ____exports.getGridIndexDelta(self, roomShape, doorSlot)
    local doorSlotToGridIndexMap = ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA[roomShape]
    return doorSlotToGridIndexMap:get(doorSlot)
end
--- Helper function to see if a given room shape will grant a single charge or a double charge to the
-- player's active item(s).
-- 
-- For example, `RoomShape.SHAPE_2x2` will return 2.
function ____exports.getRoomShapeBottomRightPosition(self, roomShape)
    return ROOM_SHAPE_TO_BOTTOM_RIGHT_POSITION[roomShape]
end
--- Helper function to get the grid position of the bottom-right tile of a given room shape.
-- 
-- "Vector(0, 0)" corresponds to the top left tile of a room, not including the walls. (The top-left
-- wall would be at "Vector(-1, -1)".)
function ____exports.getRoomShapeBounds(self, roomShape)
    return ROOM_SHAPE_BOUNDS[roomShape]
end
--- Helper function to get the number of charges that a given room shape will grant to a player upon
-- clearing it.
-- 
-- For example, `RoomShape.SHAPE_2x2` will return 2.
function ____exports.getRoomShapeCharges(self, roomShape)
    return ____exports.isRoomShapeDoubleCharge(nil, roomShape) and 2 or 1
end
--- Helper function to get the corners that exist in the given room shape.
-- 
-- Note that these corner locations are not accurate for the Mother Boss Room and the Home closet
-- rooms. (Those rooms have custom shapes.)
function ____exports.getRoomShapeCorners(self, roomShape)
    return ROOM_SHAPE_CORNERS[roomShape]
end
--- Helper function to get the dimensions of a room shape's layout. This is NOT the size of the
-- room's actual contents! For that, use the `getRoomShapeBounds` function.
-- 
-- For example, a horizontal narrow room has a layout size of equal to that of a 1x1 room.
function ____exports.getRoomShapeLayoutSize(self, roomShape)
    return ROOM_SHAPE_LAYOUT_SIZES[roomShape]
end
--- Helper function to get the grid position of the top-left tile of a given room shape.
-- 
-- "Vector(0, 0)" corresponds to the top left tile of a room, not including the walls. (The top-left
-- wall would be at "Vector(-1, -1)".)
function ____exports.getRoomShapeTopLeftPosition(self, roomShape)
    return ROOM_SHAPE_TO_TOP_LEFT_POSITION[roomShape]
end
--- Helper function to get the volume of a room shape, which is the amount of tiles that are inside
-- the room.
-- 
-- (This cannot be directly calculated from the bounds since L rooms are a special case.)
function ____exports.getRoomShapeVolume(self, roomShape)
    return ROOM_SHAPE_VOLUMES[roomShape]
end
function ____exports.getRoomShapeWidth(self, roomShape)
    return ROOM_SHAPE_TO_GRID_WIDTH[roomShape]
end
--- Helper function to determine if the provided room is equal to `RoomShape.1x2` (4) or
-- `RoomShape.2x1` (6).
function ____exports.is2x1RoomShape(self, roomShape)
    return roomShape == RoomShape.SHAPE_1x2 or roomShape == RoomShape.SHAPE_2x1
end
--- Helper function to detect if the provided room shape is big. Specifically, this is all 1x2 rooms,
-- 2x2 rooms, and L rooms.
function ____exports.isBigRoomShape(self, roomShape)
    return BIG_ROOM_SHAPES_SET:has(roomShape)
end
--- Helper function to determine if the provided room is equal to `RoomShape.LTL` (9),
-- `RoomShape.LTR` (10), `RoomShape.LBL` (11), or `RoomShape.LBR` (12).
function ____exports.isLRoomShape(self, roomShape)
    return L_ROOM_SHAPES_SET:has(roomShape)
end
--- Helper function to determine if the provided room is equal to `RoomShape.IH` (2), `RoomShape.IV`
-- (3), `RoomShape.IIV` (5), or `RoomShape.IIH` (7).
function ____exports.isNarrowRoom(self, roomShape)
    return NARROW_ROOM_SHAPES_SET:has(roomShape)
end
return ____exports
 end,
["functions.charge"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local ____exports = {}
local getChargesToAddWithAAAModifier, shouldPlayFullRechargeSound
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ActiveSlot = ____isaac_2Dtypescript_2Ddefinitions.ActiveSlot
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ItemConfigChargeType = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigChargeType
local SoundEffect = ____isaac_2Dtypescript_2Ddefinitions.SoundEffect
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local sfxManager = ____cachedClasses.sfxManager
local ____collectibles = require("functions.collectibles")
local getCollectibleChargeType = ____collectibles.getCollectibleChargeType
local getCollectibleMaxCharges = ____collectibles.getCollectibleMaxCharges
local ____playerCollectibles = require("functions.playerCollectibles")
local getActiveItemSlots = ____playerCollectibles.getActiveItemSlots
local ____playerIndex = require("functions.playerIndex")
local getPlayers = ____playerIndex.getPlayers
local ____roomShape = require("functions.roomShape")
local getRoomShapeCharges = ____roomShape.getRoomShapeCharges
--- Helper function to add a charge to the player's active item. Will flash the HUD and play the
-- appropriate sound effect, depending on whether the charge is partially full or completely full.
-- 
-- If the player's active item is already fully charged, then this function will return 0 and not
-- flash the HUD or play a sound effect.
-- 
-- This function will take the following things into account:
-- - The Battery
-- - AAA Battery
-- 
-- @param player The player to grant the charges to.
-- @param activeSlot Optional. The slot to grant the charges to. Default is `ActiveSlot.PRIMARY`.
-- @param numCharges Optional. The amount of charges to grant. Default is 1.
-- @param playSoundEffect Optional. Whether to play a charge-related sound effect. Default is true.
-- @returns The amount of charges that were actually granted. For example, if the active item was
-- only one away from a full charge, but the `numCharges` provided to this function was 2,
-- then this function would return 1.
function ____exports.addCharge(self, player, activeSlot, numCharges, playSoundEffect)
    if activeSlot == nil then
        activeSlot = ActiveSlot.PRIMARY
    end
    if numCharges == nil then
        numCharges = 1
    end
    if playSoundEffect == nil then
        playSoundEffect = true
    end
    local hud = game:GetHUD()
    local chargesAwayFromMax = ____exports.getChargesAwayFromMax(nil, player, activeSlot)
    local chargesToAdd = numCharges > chargesAwayFromMax and chargesAwayFromMax or numCharges
    local modifiedChargesToAdd = getChargesToAddWithAAAModifier(nil, player, activeSlot, chargesToAdd)
    local totalCharge = ____exports.getTotalCharge(nil, player, activeSlot)
    local newCharge = totalCharge + modifiedChargesToAdd
    if newCharge == totalCharge then
        return 0
    end
    player:SetActiveCharge(newCharge, activeSlot)
    hud:FlashChargeBar(player, activeSlot)
    if playSoundEffect then
        ____exports.playChargeSoundEffect(nil, player, activeSlot)
    end
    return modifiedChargesToAdd
end
--- Helper function to add a charge to one of a player's active items, emulating what happens when a
-- room is cleared.
-- 
-- This function will take the following things into account:
-- - L rooms and 2x2 rooms granting a double charge
-- - The Battery
-- - AAA Battery
-- - Not charging active items with `chargetype="special"`
-- 
-- @param player The player to grant the charges to.
-- @param activeSlot Optional. The active item slot to grant the charges to. Default is
-- `ActiveSlot.PRIMARY`.
-- @param bigRoomDoubleCharge Optional. If set to false, it will treat the current room as a 1x1
-- room for the purposes of calculating how much charge to grant. Default
-- is true.
-- @param playSoundEffect Optional. Whether to play a charge-related sound effect. Default is true.
function ____exports.addRoomClearChargeToSlot(self, player, activeSlot, bigRoomDoubleCharge, playSoundEffect)
    if activeSlot == nil then
        activeSlot = ActiveSlot.PRIMARY
    end
    if bigRoomDoubleCharge == nil then
        bigRoomDoubleCharge = true
    end
    if playSoundEffect == nil then
        playSoundEffect = true
    end
    local activeItem = player:GetActiveItem(activeSlot)
    if activeItem == CollectibleType.NULL then
        return
    end
    local chargeType = getCollectibleChargeType(nil, activeItem)
    if chargeType == ItemConfigChargeType.SPECIAL then
        return
    end
    local room = game:GetRoom()
    local roomShape = room:GetRoomShape()
    local numCharges = bigRoomDoubleCharge and getRoomShapeCharges(nil, roomShape) or 1
    if chargeType == ItemConfigChargeType.TIMED then
        numCharges = getCollectibleMaxCharges(nil, activeItem)
    end
    ____exports.addCharge(
        nil,
        player,
        activeSlot,
        numCharges,
        playSoundEffect
    )
end
function getChargesToAddWithAAAModifier(self, player, activeSlot, chargesToAdd)
    local hasAAABattery = player:HasTrinket(TrinketType.AAA_BATTERY)
    if not hasAAABattery then
        return chargesToAdd
    end
    local chargesAwayFromMax = ____exports.getChargesAwayFromMax(nil, player, activeSlot)
    local AAABatteryShouldApply = chargesToAdd == chargesAwayFromMax - 1
    return AAABatteryShouldApply and chargesToAdd + 1 or chargesToAdd
end
--- Helper function to get the amount of charges away from the maximum charge that a particular
-- player is.
-- 
-- This function accounts for The Battery. For example, if the player has 2/6 charges on a D6, this
-- function will return 10 (because there are 4 charges remaining on the base charge and 6 charges
-- remaining on The Battery charge).
-- 
-- @param player The player to get the charges from.
-- @param activeSlot Optional. The slot to get the charges from. Default is `ActiveSlot.PRIMARY`.
function ____exports.getChargesAwayFromMax(self, player, activeSlot)
    if activeSlot == nil then
        activeSlot = ActiveSlot.PRIMARY
    end
    local totalCharge = ____exports.getTotalCharge(nil, player, activeSlot)
    local activeItem = player:GetActiveItem(activeSlot)
    local hasBattery = player:HasCollectible(CollectibleType.BATTERY)
    local maxCharges = getCollectibleMaxCharges(nil, activeItem)
    local effectiveMaxCharges = hasBattery and maxCharges * 2 or maxCharges
    return effectiveMaxCharges - totalCharge
end
--- Helper function to get the combined normal charge and the battery charge for the player's active
-- item. This is useful because you have to add these two values together when setting the active
-- charge.
-- 
-- @param player The player to get the charges from.
-- @param activeSlot Optional. The slot to get the charges from. Default is `ActiveSlot.PRIMARY`.
function ____exports.getTotalCharge(self, player, activeSlot)
    if activeSlot == nil then
        activeSlot = ActiveSlot.PRIMARY
    end
    local activeCharge = player:GetActiveCharge(activeSlot)
    local batteryCharge = player:GetBatteryCharge(activeSlot)
    return activeCharge + batteryCharge
end
--- Helper function to play the appropriate sound effect for a player after getting one or more
-- charges on their active item. (There is a different sound depending on whether the item is fully
-- charged.)
-- 
-- @param player The player to play the sound effect for.
-- @param activeSlot Optional. The slot that was just charged. Default is `ActiveSlot.PRIMARY`.
function ____exports.playChargeSoundEffect(self, player, activeSlot)
    if activeSlot == nil then
        activeSlot = ActiveSlot.PRIMARY
    end
    for ____, soundEffect in ipairs({SoundEffect.BATTERY_CHARGE, SoundEffect.BEEP}) do
        sfxManager:Stop(soundEffect)
    end
    local chargeSoundEffect = shouldPlayFullRechargeSound(nil, player, activeSlot) and SoundEffect.BATTERY_CHARGE or SoundEffect.BEEP
    sfxManager:Play(chargeSoundEffect)
end
function shouldPlayFullRechargeSound(self, player, activeSlot)
    local activeItem = player:GetActiveItem(activeSlot)
    local activeCharge = player:GetActiveCharge(activeSlot)
    local batteryCharge = player:GetBatteryCharge(activeSlot)
    local hasBattery = player:HasCollectible(CollectibleType.BATTERY)
    local maxCharges = getCollectibleMaxCharges(nil, activeItem)
    if not hasBattery then
        return activeCharge == maxCharges
    end
    return batteryCharge == maxCharges or activeCharge == maxCharges and batteryCharge == 0
end
--- Helper function to add a charge to a player's active item(s), emulating what happens when a room
-- is cleared.
-- 
-- This function will take the following things into account:
-- - 2x2 rooms and L rooms granting a double charge
-- - The Battery
-- - AAA Battery
-- - Not charging active items with `chargetype="special"`
-- 
-- @param player The player to grant the charges to.
-- @param bigRoomDoubleCharge Optional. If set to false, it will treat the current room as a 1x1
-- room for the purposes of calculating how much charge to grant. Default
-- is true.
-- @param playSoundEffect Optional. Whether to play a charge-related sound effect. Default is true.
function ____exports.addRoomClearCharge(self, player, bigRoomDoubleCharge, playSoundEffect)
    if bigRoomDoubleCharge == nil then
        bigRoomDoubleCharge = true
    end
    if playSoundEffect == nil then
        playSoundEffect = true
    end
    for ____, activeSlot in ipairs({ActiveSlot.PRIMARY, ActiveSlot.SECONDARY, ActiveSlot.POCKET}) do
        ____exports.addRoomClearChargeToSlot(
            nil,
            player,
            activeSlot,
            bigRoomDoubleCharge,
            playSoundEffect
        )
    end
end
--- Helper function to add a charge to every player's active item, emulating what happens when a room
-- is cleared.
-- 
-- This function will take the following things into account:
-- - L rooms and 2x2 rooms granting a double charge
-- - The Battery
-- - AAA Battery
-- 
-- @param bigRoomDoubleCharge Optional. If set to false, it will treat the current room as a 1x1
-- room for the purposes of calculating how much charge to grant. Default
-- is true.
function ____exports.addRoomClearCharges(self, bigRoomDoubleCharge)
    if bigRoomDoubleCharge == nil then
        bigRoomDoubleCharge = true
    end
    for ____, player in ipairs(getPlayers(nil)) do
        ____exports.addRoomClearCharge(nil, player, bigRoomDoubleCharge)
    end
end
--- Helper function to find the active slots that the player has the corresponding collectible type
-- in and have enough charge to be used. Returns an empty array if the player does not have the
-- collectible in any active slot or does not have enough charges.
function ____exports.getUsableActiveItemSlots(self, player, collectibleType)
    local maxCharges = getCollectibleMaxCharges(nil, collectibleType)
    local activeSlots = getActiveItemSlots(nil, player, collectibleType)
    return __TS__ArrayFilter(
        activeSlots,
        function(____, activeSlot)
            local totalCharge = ____exports.getTotalCharge(nil, player, activeSlot)
            return totalCharge >= maxCharges
        end
    )
end
--- Helper function to check if a player's active item is "double charged", meaning that it has both
-- a full normal charge and a full charge from The Battery.
-- 
-- @param player The player to check.
-- @param activeSlot Optional. The slot to check. Default is `ActiveSlot.PRIMARY`.
function ____exports.isActiveSlotDoubleCharged(self, player, activeSlot)
    if activeSlot == nil then
        activeSlot = ActiveSlot.PRIMARY
    end
    local collectibleType = player:GetActiveItem(activeSlot)
    local batteryCharge = player:GetBatteryCharge(activeSlot)
    local maxCharges = getCollectibleMaxCharges(nil, collectibleType)
    return batteryCharge >= maxCharges
end
return ____exports
 end,
["classes.callbacks.PostItemDischarge"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local SuckerVariant = ____isaac_2Dtypescript_2Ddefinitions.SuckerVariant
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local ACTIVE_SLOT_VALUES = ____cachedEnumValues.ACTIVE_SLOT_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____charge = require("functions.charge")
local getTotalCharge = ____charge.getTotalCharge
local ____playerDataStructures = require("functions.playerDataStructures")
local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
local mapGetPlayer = ____playerDataStructures.mapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {
    run = {
        playersActiveItemMap = __TS__New(
            DefaultMap,
            function() return __TS__New(Map) end
        ),
        playersActiveChargeMap = __TS__New(
            DefaultMap,
            function() return __TS__New(Map) end
        )
    },
    room = {playersBulbLastCollisionFrame = __TS__New(Map)}
}
____exports.PostItemDischarge = __TS__Class()
local PostItemDischarge = ____exports.PostItemDischarge
PostItemDischarge.name = "PostItemDischarge"
__TS__ClassExtends(PostItemDischarge, CustomCallback)
function PostItemDischarge.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _player, collectibleType = table.unpack(fireArgs)
        local callbackCollectibleType = table.unpack(optionalArgs)
        return callbackCollectibleType == nil or callbackCollectibleType == collectibleType
    end
    self.preNPCCollisionSucker = function(____, npc, collider)
        if npc.Variant == SuckerVariant.BULB then
            return self:preNPCCollisionBulb(npc, collider)
        end
        return nil
    end
    self.postPEffectUpdateReordered = function(____, player)
        local activeItemMap = defaultMapGetPlayer(nil, v.run.playersActiveItemMap, player)
        local chargeMap = defaultMapGetPlayer(nil, v.run.playersActiveChargeMap, player)
        for ____, activeSlot in ipairs(ACTIVE_SLOT_VALUES) do
            do
                local currentActiveItem = player:GetActiveItem()
                local previousActiveItem = activeItemMap:get(activeSlot)
                if previousActiveItem == nil then
                    previousActiveItem = currentActiveItem
                end
                activeItemMap:set(activeSlot, currentActiveItem)
                if currentActiveItem ~= previousActiveItem then
                    goto __continue9
                end
                local currentCharge = getTotalCharge(nil, player, activeSlot)
                local previousCharge = chargeMap:get(activeSlot)
                if previousCharge == nil then
                    previousCharge = currentCharge
                end
                chargeMap:set(activeSlot, currentCharge)
                if self:playerRecentlyCollidedWithBulb(player) then
                    goto __continue9
                end
                if currentCharge < previousCharge then
                    local collectibleType = player:GetActiveItem(activeSlot)
                    self:fire(player, collectibleType, activeSlot)
                end
            end
            ::__continue9::
        end
    end
    self.callbacksUsed = {{ModCallback.PRE_NPC_COLLISION, self.preNPCCollisionSucker, {EntityType.SUCKER}}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
function PostItemDischarge.prototype.preNPCCollisionBulb(self, _npc, collider)
    self:checkPlayerCollidedWithBulb(collider)
    return nil
end
function PostItemDischarge.prototype.checkPlayerCollidedWithBulb(self, collider)
    local player = collider:ToPlayer()
    if player == nil then
        return
    end
    local gameFrameCount = game:GetFrameCount()
    mapSetPlayer(nil, v.room.playersBulbLastCollisionFrame, player, gameFrameCount)
end
function PostItemDischarge.prototype.playerRecentlyCollidedWithBulb(self, player)
    local gameFrameCount = game:GetFrameCount()
    local bulbLastCollisionFrame = mapGetPlayer(nil, v.room.playersBulbLastCollisionFrame, player)
    local collidedOnThisFrame = gameFrameCount == bulbLastCollisionFrame
    local collidedOnLastFrame = gameFrameCount - 1 == bulbLastCollisionFrame
    return collidedOnThisFrame or collidedOnLastFrame
end
return ____exports
 end,
["classes.callbacks.PostItemPickup"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireItemPickup = ____shouldFire.shouldFireItemPickup
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostItemPickup = __TS__Class()
local PostItemPickup = ____exports.PostItemPickup
PostItemPickup.name = "PostItemPickup"
__TS__ClassExtends(PostItemPickup, CustomCallback)
function PostItemPickup.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireItemPickup
    self.featuresUsed = {ISCFeature.ITEM_PICKUP_DETECTION}
end
return ____exports
 end,
["maps.keyboardToStringMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Keyboard = ____isaac_2Dtypescript_2Ddefinitions.Keyboard
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
--- Maps each keyboard enum member to its corresponding lowercase and uppercase characters.
____exports.KEYBOARD_TO_STRING_MAP = __TS__New(ReadonlyMap, {
    {Keyboard.SPACE, {" ", " "}},
    {Keyboard.APOSTROPHE, {"'", "\""}},
    {Keyboard.COMMA, {",", "<"}},
    {Keyboard.MINUS, {"-", "_"}},
    {Keyboard.PERIOD, {".", ">"}},
    {Keyboard.SLASH, {"/", "?"}},
    {Keyboard.ZERO, {"0", ")"}},
    {Keyboard.ONE, {"1", "!"}},
    {Keyboard.TWO, {"2", "@"}},
    {Keyboard.THREE, {"3", "#"}},
    {Keyboard.FOUR, {"4", "$"}},
    {Keyboard.FIVE, {"5", "%"}},
    {Keyboard.SIX, {"6", "^"}},
    {Keyboard.SEVEN, {"7", "&"}},
    {Keyboard.EIGHT, {"8", "*"}},
    {Keyboard.NINE, {"9", "("}},
    {Keyboard.SEMICOLON, {";", ":"}},
    {Keyboard.EQUAL, {"=", "+"}},
    {Keyboard.A, {"a", "A"}},
    {Keyboard.B, {"b", "B"}},
    {Keyboard.C, {"c", "C"}},
    {Keyboard.D, {"d", "D"}},
    {Keyboard.E, {"e", "E"}},
    {Keyboard.F, {"f", "F"}},
    {Keyboard.G, {"g", "G"}},
    {Keyboard.H, {"h", "H"}},
    {Keyboard.I, {"i", "I"}},
    {Keyboard.J, {"j", "J"}},
    {Keyboard.K, {"k", "K"}},
    {Keyboard.L, {"l", "L"}},
    {Keyboard.M, {"m", "M"}},
    {Keyboard.N, {"n", "N"}},
    {Keyboard.O, {"o", "O"}},
    {Keyboard.P, {"p", "P"}},
    {Keyboard.Q, {"q", "Q"}},
    {Keyboard.R, {"r", "R"}},
    {Keyboard.S, {"s", "S"}},
    {Keyboard.T, {"t", "T"}},
    {Keyboard.U, {"u", "U"}},
    {Keyboard.V, {"v", "V"}},
    {Keyboard.W, {"w", "W"}},
    {Keyboard.X, {"x", "X"}},
    {Keyboard.Y, {"y", "Y"}},
    {Keyboard.Z, {"z", "Z"}},
    {Keyboard.KP_0, {"0", "0"}},
    {Keyboard.KP_1, {"1", "1"}},
    {Keyboard.KP_2, {"2", "2"}},
    {Keyboard.KP_3, {"3", "3"}},
    {Keyboard.KP_4, {"4", "4"}},
    {Keyboard.KP_5, {"5", "5"}},
    {Keyboard.KP_6, {"6", "6"}},
    {Keyboard.KP_7, {"7", "7"}},
    {Keyboard.KP_8, {"8", "8"}},
    {Keyboard.KP_9, {"9", "9"}},
    {Keyboard.KP_DECIMAL, {".", "."}},
    {Keyboard.KP_DIVIDE, {"/", "/"}},
    {Keyboard.KP_MULTIPLY, {"*", "*"}},
    {Keyboard.KP_SUBTRACT, {"-", "-"}},
    {Keyboard.KP_ADD, {"+", "+"}},
    {Keyboard.LEFT_BRACKET, {"[", "{"}},
    {Keyboard.BACKSLASH, {"\\", "|"}},
    {Keyboard.RIGHT_BRACKET, {"]", "}"}},
    {Keyboard.GRAVE_ACCENT, {"`", "~"}}
})
return ____exports
 end,
["functions.input"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ButtonAction = ____isaac_2Dtypescript_2Ddefinitions.ButtonAction
local Controller = ____isaac_2Dtypescript_2Ddefinitions.Controller
local ControllerIndex = ____isaac_2Dtypescript_2Ddefinitions.ControllerIndex
local Keyboard = ____isaac_2Dtypescript_2Ddefinitions.Keyboard
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local CONTROLLER_INDEX_VALUES = ____cachedEnumValues.CONTROLLER_INDEX_VALUES
local ____keyboardToStringMap = require("maps.keyboardToStringMap")
local KEYBOARD_TO_STRING_MAP = ____keyboardToStringMap.KEYBOARD_TO_STRING_MAP
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____string = require("functions.string")
local trimPrefix = ____string.trimPrefix
____exports.MODIFIER_KEYS = {
    Keyboard.LEFT_SHIFT,
    Keyboard.LEFT_CONTROL,
    Keyboard.LEFT_ALT,
    Keyboard.LEFT_SUPER,
    Keyboard.RIGHT_SHIFT,
    Keyboard.RIGHT_CONTROL,
    Keyboard.RIGHT_ALT,
    Keyboard.RIGHT_SUPER
}
____exports.MOVEMENT_BUTTON_ACTIONS = {ButtonAction.LEFT, ButtonAction.RIGHT, ButtonAction.UP, ButtonAction.DOWN}
____exports.MOVEMENT_BUTTON_ACTIONS_SET = __TS__New(ReadonlySet, ____exports.MOVEMENT_BUTTON_ACTIONS)
____exports.SHOOTING_BUTTON_ACTIONS = {ButtonAction.SHOOT_LEFT, ButtonAction.SHOOT_RIGHT, ButtonAction.SHOOT_UP, ButtonAction.SHOOT_DOWN}
____exports.SHOOTING_BUTTON_ACTIONS_SET = __TS__New(ReadonlySet, ____exports.SHOOTING_BUTTON_ACTIONS)
--- Helper function to get the enum name for the specified `Controller` value. Note that this will
-- trim off the "BUTTON_" prefix.
-- 
-- Returns undefined if the submitted controller value was not valid.
function ____exports.controllerToString(self, controller)
    local key = Controller[controller]
    if key == nil then
        return nil
    end
    return trimPrefix(nil, key, "BUTTON_")
end
--- Helper function to get the movement actions that the specified `ControllerIndex` is currently
-- pressing down. This returns an array because a player can be holding down more than one movement
-- key at a time.
function ____exports.getMoveButtonActions(self, controllerIndex)
    return __TS__ArrayFilter(
        ____exports.MOVEMENT_BUTTON_ACTIONS,
        function(____, buttonAction) return Input.IsActionPressed(buttonAction, controllerIndex) end
    )
end
--- Helper function to get the shooting actions that the specified `ControllerIndex` is currently
-- pressing down. This returns an array because a player can be holding down more than one shooting
-- key at a time.
function ____exports.getShootButtonActions(self, controllerIndex)
    return __TS__ArrayFilter(
        ____exports.SHOOTING_BUTTON_ACTIONS,
        function(____, buttonAction) return Input.IsActionPressed(buttonAction, controllerIndex) end
    )
end
--- Helper function to check if a player is pressing a specific button (i.e. holding it down).
-- 
-- This is a variadic version of `Input.IsActionPressed`, meaning that you can pass as many buttons
-- as you want to check for. This function will return true if any of the buttons are pressed.
function ____exports.isActionPressed(self, controllerIndex, ...)
    local buttonActions = {...}
    return __TS__ArraySome(
        buttonActions,
        function(____, buttonAction) return Input.IsActionPressed(buttonAction, controllerIndex) end
    )
end
--- Helper function to iterate over all inputs to determine if a specific button is pressed (i.e.
-- being held down).
-- 
-- This function is variadic, meaning you can pass as many buttons as you want to check for. This
-- function will return true if any of the buttons are pressed.
function ____exports.isActionPressedOnAnyInput(self, ...)
    local buttonActions = {...}
    return __TS__ArraySome(
        CONTROLLER_INDEX_VALUES,
        function(____, controllerIndex) return ____exports.isActionPressed(
            nil,
            controllerIndex,
            table.unpack(buttonActions)
        ) end
    )
end
--- Helper function to check if a player is triggering a specific button (i.e. pressing and releasing
-- it).
-- 
-- This is a variadic version of `Input.IsActionTriggered`, meaning that you can pass as many
-- buttons as you want to check for. This function will return true if any of the buttons are
-- triggered.
function ____exports.isActionTriggered(self, controllerIndex, ...)
    local buttonActions = {...}
    return __TS__ArraySome(
        buttonActions,
        function(____, buttonAction) return Input.IsActionTriggered(buttonAction, controllerIndex) end
    )
end
--- Iterates over all inputs to determine if a specific button is triggered (i.e. held down and then
-- released).
-- 
-- This function is variadic, meaning you can pass as many buttons as you want to check for. This
-- function will return true if any of the buttons are pressed.
function ____exports.isActionTriggeredOnAnyInput(self, ...)
    local buttonActions = {...}
    return __TS__ArraySome(
        CONTROLLER_INDEX_VALUES,
        function(____, controllerIndex) return ____exports.isActionTriggered(
            nil,
            controllerIndex,
            table.unpack(buttonActions)
        ) end
    )
end
--- Helper function to see if a specific keyboard key is being held down by the player.
-- 
-- This function is variadic, meaning you can pass as many keyboard values as you want to check for.
-- This function will return true if any of the values are pressed.
function ____exports.isKeyboardPressed(self, ...)
    local keys = {...}
    return __TS__ArraySome(
        keys,
        function(____, key) return Input.IsButtonPressed(key, ControllerIndex.KEYBOARD) end
    )
end
--- Helper function to check if one or more modifier keys are being pressed down on the keyboard.
-- 
-- A modifier key is defined as shift, control, alt, or Windows.
function ____exports.isModifierKeyPressed(self)
    return ____exports.isKeyboardPressed(
        nil,
        table.unpack(____exports.MODIFIER_KEYS)
    )
end
function ____exports.isMoveAction(self, buttonAction)
    return ____exports.MOVEMENT_BUTTON_ACTIONS_SET:has(buttonAction)
end
function ____exports.isMoveActionPressed(self, controllerIndex)
    return ____exports.isActionPressed(
        nil,
        controllerIndex,
        table.unpack(____exports.MOVEMENT_BUTTON_ACTIONS)
    )
end
function ____exports.isMoveActionPressedOnAnyInput(self)
    return __TS__ArraySome(
        ____exports.MOVEMENT_BUTTON_ACTIONS,
        function(____, moveAction) return ____exports.isActionPressedOnAnyInput(nil, moveAction) end
    )
end
function ____exports.isMoveActionTriggered(self, controllerIndex)
    return ____exports.isActionTriggered(
        nil,
        controllerIndex,
        table.unpack(____exports.MOVEMENT_BUTTON_ACTIONS)
    )
end
function ____exports.isMoveActionTriggeredOnAnyInput(self)
    return __TS__ArraySome(
        ____exports.MOVEMENT_BUTTON_ACTIONS,
        function(____, moveAction) return ____exports.isActionTriggeredOnAnyInput(nil, moveAction) end
    )
end
function ____exports.isShootAction(self, buttonAction)
    return ____exports.SHOOTING_BUTTON_ACTIONS_SET:has(buttonAction)
end
function ____exports.isShootActionPressed(self, controllerIndex)
    return ____exports.isActionPressed(
        nil,
        controllerIndex,
        table.unpack(____exports.SHOOTING_BUTTON_ACTIONS)
    )
end
function ____exports.isShootActionPressedOnAnyInput(self)
    return __TS__ArraySome(
        ____exports.SHOOTING_BUTTON_ACTIONS,
        function(____, shootAction) return ____exports.isActionPressedOnAnyInput(nil, shootAction) end
    )
end
function ____exports.isShootActionTriggered(self, controllerIndex)
    return ____exports.isActionTriggered(
        nil,
        controllerIndex,
        table.unpack(____exports.SHOOTING_BUTTON_ACTIONS)
    )
end
function ____exports.isShootActionTriggeredOnAnyInput(self)
    return __TS__ArraySome(
        ____exports.SHOOTING_BUTTON_ACTIONS,
        function(____, shootAction) return ____exports.isActionTriggeredOnAnyInput(nil, shootAction) end
    )
end
--- Helper function to get the string that would be typed if someone pressed the corresponding key.
-- This is useful for creating in-game chat.
-- 
-- Note that this function will only work for the keyboard values that are printable. Thus, it will
-- return undefined for e.g. `Keyboard.LEFT_SHIFT` (340). If all you want is the corresponding name
-- of the key, then simply use the enum reverse mapping (e.g. `Keyboard[keyboard]`).
function ____exports.keyboardToString(self, keyboard, uppercase)
    local tuple = KEYBOARD_TO_STRING_MAP:get(keyboard)
    if tuple == nil then
        return nil
    end
    local lowercaseCharacter, uppercaseCharacter = table.unpack(tuple)
    return uppercase and uppercaseCharacter or lowercaseCharacter
end
return ____exports
 end,
["classes.callbacks.PostKeyboardChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local KEYBOARD_VALUES = ____cachedEnumValues.KEYBOARD_VALUES
local ____input = require("functions.input")
local isKeyboardPressed = ____input.isKeyboardPressed
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {pressedKeys = __TS__New(Set)}}
____exports.PostKeyboardChanged = __TS__Class()
local PostKeyboardChanged = ____exports.PostKeyboardChanged
PostKeyboardChanged.name = "PostKeyboardChanged"
__TS__ClassExtends(PostKeyboardChanged, CustomCallback)
function PostKeyboardChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local keyboard, pressed = table.unpack(fireArgs)
        local callbackKeyboard, callbackPressed = table.unpack(optionalArgs)
        return (callbackKeyboard == nil or callbackKeyboard == keyboard) and (callbackPressed == nil or callbackPressed == pressed)
    end
    self.postRender = function()
        for ____, keyboard in __TS__Iterator(v.run.pressedKeys) do
            if not isKeyboardPressed(nil, keyboard) then
                v.run.pressedKeys:delete(keyboard)
                self:fire(keyboard, false)
            end
        end
        for ____, keyboard in ipairs(KEYBOARD_VALUES) do
            do
                if v.run.pressedKeys:has(keyboard) then
                    goto __continue8
                end
                if isKeyboardPressed(nil, keyboard) then
                    v.run.pressedKeys:add(keyboard)
                    self:fire(keyboard, true)
                end
            end
            ::__continue8::
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
return ____exports
 end,
["classes.callbacks.PostKnifeInitFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireKnife = ____shouldFire.shouldFireKnife
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostKnifeInitFilter = __TS__Class()
local PostKnifeInitFilter = ____exports.PostKnifeInitFilter
PostKnifeInitFilter.name = "PostKnifeInitFilter"
__TS__ClassExtends(PostKnifeInitFilter, CustomCallback)
function PostKnifeInitFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireKnife
    self.postKnifeInit = function(____, knife)
        self:fire(knife)
    end
    self.callbacksUsed = {{ModCallback.POST_KNIFE_INIT, self.postKnifeInit}}
end
return ____exports
 end,
["classes.callbacks.PostKnifeInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireKnife = ____shouldFire.shouldFireKnife
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostKnifeInitLate = __TS__Class()
local PostKnifeInitLate = ____exports.PostKnifeInitLate
PostKnifeInitLate.name = "PostKnifeInitLate"
__TS__ClassExtends(PostKnifeInitLate, CustomCallback)
function PostKnifeInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireKnife
    self.postKnifeUpdate = function(____, knife)
        local ptrHash = GetPtrHash(knife)
        if not v.room.firedSet:has(ptrHash) then
            v.room.firedSet:add(ptrHash)
            self:fire(knife)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_KNIFE_UPDATE, self.postKnifeUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostKnifeRenderFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireKnife = ____shouldFire.shouldFireKnife
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostKnifeRenderFilter = __TS__Class()
local PostKnifeRenderFilter = ____exports.PostKnifeRenderFilter
PostKnifeRenderFilter.name = "PostKnifeRenderFilter"
__TS__ClassExtends(PostKnifeRenderFilter, CustomCallback)
function PostKnifeRenderFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireKnife
    self.postKnifeRender = function(____, knife, renderOffset)
        self:fire(knife, renderOffset)
    end
    self.callbacksUsed = {{ModCallback.POST_KNIFE_RENDER, self.postKnifeRender}}
end
return ____exports
 end,
["classes.callbacks.PostKnifeUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireKnife = ____shouldFire.shouldFireKnife
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostKnifeUpdateFilter = __TS__Class()
local PostKnifeUpdateFilter = ____exports.PostKnifeUpdateFilter
PostKnifeUpdateFilter.name = "PostKnifeUpdateFilter"
__TS__ClassExtends(PostKnifeUpdateFilter, CustomCallback)
function PostKnifeUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireKnife
    self.postKnifeUpdate = function(____, knife)
        self:fire(knife)
    end
    self.callbacksUsed = {{ModCallback.POST_KNIFE_UPDATE, self.postKnifeUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostLaserInitFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireLaser = ____shouldFire.shouldFireLaser
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostLaserInitFilter = __TS__Class()
local PostLaserInitFilter = ____exports.PostLaserInitFilter
PostLaserInitFilter.name = "PostLaserInitFilter"
__TS__ClassExtends(PostLaserInitFilter, CustomCallback)
function PostLaserInitFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireLaser
    self.postLaserInit = function(____, laser)
        self:fire(laser)
    end
    self.callbacksUsed = {{ModCallback.POST_LASER_INIT, self.postLaserInit}}
end
return ____exports
 end,
["classes.callbacks.PostLaserInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireLaser = ____shouldFire.shouldFireLaser
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostLaserInitLate = __TS__Class()
local PostLaserInitLate = ____exports.PostLaserInitLate
PostLaserInitLate.name = "PostLaserInitLate"
__TS__ClassExtends(PostLaserInitLate, CustomCallback)
function PostLaserInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireLaser
    self.postLaserUpdate = function(____, laser)
        local index = GetPtrHash(laser)
        if not v.room.firedSet:has(index) then
            v.room.firedSet:add(index)
            self:fire(laser)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_LASER_UPDATE, self.postLaserUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostLaserRenderFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireLaser = ____shouldFire.shouldFireLaser
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostLaserRenderFilter = __TS__Class()
local PostLaserRenderFilter = ____exports.PostLaserRenderFilter
PostLaserRenderFilter.name = "PostLaserRenderFilter"
__TS__ClassExtends(PostLaserRenderFilter, CustomCallback)
function PostLaserRenderFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireLaser
    self.postLaserRender = function(____, laser, renderOffset)
        self:fire(laser, renderOffset)
    end
    self.callbacksUsed = {{ModCallback.POST_LASER_RENDER, self.postLaserRender}}
end
return ____exports
 end,
["classes.callbacks.PostLaserUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireLaser = ____shouldFire.shouldFireLaser
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostLaserUpdateFilter = __TS__Class()
local PostLaserUpdateFilter = ____exports.PostLaserUpdateFilter
PostLaserUpdateFilter.name = "PostLaserUpdateFilter"
__TS__ClassExtends(PostLaserUpdateFilter, CustomCallback)
function PostLaserUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireLaser
    self.postLaserUpdate = function(____, laser)
        self:fire(laser)
    end
    self.callbacksUsed = {{ModCallback.POST_LASER_UPDATE, self.postLaserUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostNPCDeathFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireNPC = ____shouldFire.shouldFireNPC
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostNPCDeathFilter = __TS__Class()
local PostNPCDeathFilter = ____exports.PostNPCDeathFilter
PostNPCDeathFilter.name = "PostNPCDeathFilter"
__TS__ClassExtends(PostNPCDeathFilter, CustomCallback)
function PostNPCDeathFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireNPC
    self.postNPCDeath = function(____, npc)
        self:fire(npc)
    end
    self.callbacksUsed = {{ModCallback.POST_NPC_DEATH, self.postNPCDeath}}
end
return ____exports
 end,
["classes.callbacks.PostNPCInitFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireNPC = ____shouldFire.shouldFireNPC
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostNPCInitFilter = __TS__Class()
local PostNPCInitFilter = ____exports.PostNPCInitFilter
PostNPCInitFilter.name = "PostNPCInitFilter"
__TS__ClassExtends(PostNPCInitFilter, CustomCallback)
function PostNPCInitFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireNPC
    self.postNPCInit = function(____, npc)
        self:fire(npc)
    end
    self.callbacksUsed = {{ModCallback.POST_NPC_INIT, self.postNPCInit}}
end
return ____exports
 end,
["classes.callbacks.PostNPCInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireNPC = ____shouldFire.shouldFireNPC
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostNPCInitLate = __TS__Class()
local PostNPCInitLate = ____exports.PostNPCInitLate
PostNPCInitLate.name = "PostNPCInitLate"
__TS__ClassExtends(PostNPCInitLate, CustomCallback)
function PostNPCInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireNPC
    self.postNPCUpdate = function(____, npc)
        local index = GetPtrHash(npc)
        if not v.room.firedSet:has(index) then
            v.room.firedSet:add(index)
            self:fire(npc)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_NPC_UPDATE, self.postNPCUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostNPCRenderFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireNPC = ____shouldFire.shouldFireNPC
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostNPCRenderFilter = __TS__Class()
local PostNPCRenderFilter = ____exports.PostNPCRenderFilter
PostNPCRenderFilter.name = "PostNPCRenderFilter"
__TS__ClassExtends(PostNPCRenderFilter, CustomCallback)
function PostNPCRenderFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireNPC
    self.postNPCRender = function(____, npc, renderOffset)
        self:fire(npc, renderOffset)
    end
    self.callbacksUsed = {{ModCallback.POST_NPC_RENDER, self.postNPCRender}}
end
return ____exports
 end,
["classes.callbacks.PostNPCStateChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireNPC = ____shouldFire.shouldFireNPC
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {stateMap = __TS__New(
    DefaultMap,
    function(____, state) return state end
)}}
____exports.PostNPCStateChanged = __TS__Class()
local PostNPCStateChanged = ____exports.PostNPCStateChanged
PostNPCStateChanged.name = "PostNPCStateChanged"
__TS__ClassExtends(PostNPCStateChanged, CustomCallback)
function PostNPCStateChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireNPC
    self.postNPCUpdate = function(____, npc)
        local ptrHash = GetPtrHash(npc)
        local previousState = v.run.stateMap:getAndSetDefault(ptrHash, npc.State)
        local currentState = npc.State
        v.run.stateMap:set(ptrHash, currentState)
        if previousState ~= currentState then
            self:fire(npc, previousState, currentState)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_NPC_UPDATE, self.postNPCUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostNPCUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireNPC = ____shouldFire.shouldFireNPC
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostNPCUpdateFilter = __TS__Class()
local PostNPCUpdateFilter = ____exports.PostNPCUpdateFilter
PostNPCUpdateFilter.name = "PostNPCUpdateFilter"
__TS__ClassExtends(PostNPCUpdateFilter, CustomCallback)
function PostNPCUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireNPC
    self.postNPCUpdate = function(____, npc)
        self:fire(npc)
    end
    self.callbacksUsed = {{ModCallback.POST_NPC_UPDATE, self.postNPCUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostNewLevelReordered"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireLevel = ____shouldFire.shouldFireLevel
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostNewLevelReordered = __TS__Class()
local PostNewLevelReordered = ____exports.PostNewLevelReordered
PostNewLevelReordered.name = "PostNewLevelReordered"
__TS__ClassExtends(PostNewLevelReordered, CustomCallback)
function PostNewLevelReordered.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireLevel
    self.featuresUsed = {ISCFeature.GAME_REORDERED_CALLBACKS}
end
return ____exports
 end,
["maps.gridEntityTypeToBrokenStateMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local LockState = ____isaac_2Dtypescript_2Ddefinitions.LockState
local PoopState = ____isaac_2Dtypescript_2Ddefinitions.PoopState
local RockState = ____isaac_2Dtypescript_2Ddefinitions.RockState
local SpiderWebState = ____isaac_2Dtypescript_2Ddefinitions.SpiderWebState
local TNTState = ____isaac_2Dtypescript_2Ddefinitions.TNTState
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
--- Not every grid entity can be broken. Thus use a map to represent this.
____exports.GRID_ENTITY_TYPE_TO_BROKEN_STATE_MAP = __TS__New(ReadonlyMap, {
    {GridEntityType.ROCK, RockState.BROKEN},
    {GridEntityType.ROCK_TINTED, RockState.BROKEN},
    {GridEntityType.ROCK_BOMB, RockState.BROKEN},
    {GridEntityType.ROCK_ALT, RockState.BROKEN},
    {GridEntityType.SPIDER_WEB, SpiderWebState.BROKEN},
    {GridEntityType.LOCK, LockState.UNLOCKED},
    {GridEntityType.TNT, TNTState.EXPLODED},
    {GridEntityType.POOP, PoopState.COMPLETELY_DESTROYED},
    {GridEntityType.ROCK_SUPER_SPECIAL, RockState.BROKEN},
    {GridEntityType.ROCK_SPIKED, RockState.BROKEN},
    {GridEntityType.ROCK_ALT_2, RockState.BROKEN},
    {GridEntityType.ROCK_GOLD, RockState.BROKEN}
})
return ____exports
 end,
["maps.gridEntityXMLMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CrawlSpaceVariant = ____isaac_2Dtypescript_2Ddefinitions.CrawlSpaceVariant
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local GridEntityXMLType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityXMLType
local PitVariant = ____isaac_2Dtypescript_2Ddefinitions.PitVariant
local PoopGridEntityVariant = ____isaac_2Dtypescript_2Ddefinitions.PoopGridEntityVariant
local PressurePlateVariant = ____isaac_2Dtypescript_2Ddefinitions.PressurePlateVariant
local RockVariant = ____isaac_2Dtypescript_2Ddefinitions.RockVariant
local StatueVariant = ____isaac_2Dtypescript_2Ddefinitions.StatueVariant
local TrapdoorVariant = ____isaac_2Dtypescript_2Ddefinitions.TrapdoorVariant
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
--- This maps the GridEntityXMLType (i.e. the type contained in the room XML/STB file) to the
-- GridEntityType and the variant used by the game.
____exports.GRID_ENTITY_XML_MAP = __TS__New(ReadonlyMap, {
    {GridEntityXMLType.DECORATION, {GridEntityType.DECORATION, 0}},
    {GridEntityXMLType.ROCK, {GridEntityType.ROCK, RockVariant.NORMAL}},
    {GridEntityXMLType.ROCK_BOMB, {GridEntityType.ROCK_BOMB, 0}},
    {GridEntityXMLType.ROCK_ALT, {GridEntityType.ROCK_ALT, 0}},
    {GridEntityXMLType.ROCK_TINTED, {GridEntityType.ROCK_TINTED, 0}},
    {GridEntityXMLType.ROCK_ALT_2, {GridEntityType.ROCK_ALT_2, 0}},
    {GridEntityXMLType.ROCK_EVENT, {GridEntityType.ROCK_ALT_2, RockVariant.EVENT}},
    {GridEntityXMLType.ROCK_SPIKED, {GridEntityType.ROCK_SPIKED, 0}},
    {GridEntityXMLType.ROCK_GOLD, {GridEntityType.ROCK_GOLD, 0}},
    {GridEntityXMLType.TNT, {GridEntityType.TNT, 0}},
    {GridEntityXMLType.POOP_RED, {GridEntityType.POOP, PoopGridEntityVariant.RED}},
    {GridEntityXMLType.POOP_RAINBOW, {GridEntityType.POOP, PoopGridEntityVariant.RAINBOW}},
    {GridEntityXMLType.POOP_CORNY, {GridEntityType.POOP, PoopGridEntityVariant.CORNY}},
    {GridEntityXMLType.POOP_GOLDEN, {GridEntityType.POOP, PoopGridEntityVariant.GOLDEN}},
    {GridEntityXMLType.POOP_BLACK, {GridEntityType.POOP, PoopGridEntityVariant.BLACK}},
    {GridEntityXMLType.POOP_WHITE, {GridEntityType.POOP, PoopGridEntityVariant.WHITE}},
    {GridEntityXMLType.POOP, {GridEntityType.POOP, PoopGridEntityVariant.NORMAL}},
    {GridEntityXMLType.POOP_CHARMING, {GridEntityType.POOP, PoopGridEntityVariant.CHARMING}},
    {GridEntityXMLType.BLOCK, {GridEntityType.BLOCK, 0}},
    {GridEntityXMLType.PILLAR, {GridEntityType.PILLAR, 0}},
    {GridEntityXMLType.SPIKES, {GridEntityType.SPIKES, 0}},
    {GridEntityXMLType.SPIKES_ON_OFF, {GridEntityType.SPIKES_ON_OFF, 0}},
    {GridEntityXMLType.SPIDER_WEB, {GridEntityType.SPIDER_WEB, 0}},
    {GridEntityXMLType.WALL, {GridEntityType.WALL, 0}},
    {GridEntityXMLType.PIT, {GridEntityType.PIT, PitVariant.NORMAL}},
    {GridEntityXMLType.FISSURE_SPAWNER, {GridEntityType.PIT, PitVariant.FISSURE_SPAWNER}},
    {GridEntityXMLType.PIT_EVENT, {GridEntityType.PIT, PitVariant.NORMAL}},
    {GridEntityXMLType.LOCK, {GridEntityType.LOCK, 0}},
    {GridEntityXMLType.PRESSURE_PLATE, {GridEntityType.PRESSURE_PLATE, PressurePlateVariant.PRESSURE_PLATE}},
    {GridEntityXMLType.STATUE_DEVIL, {GridEntityType.STATUE, StatueVariant.DEVIL}},
    {GridEntityXMLType.STATUE_ANGEL, {GridEntityType.STATUE, StatueVariant.ANGEL}},
    {GridEntityXMLType.TELEPORTER, {GridEntityType.TELEPORTER, 0}},
    {GridEntityXMLType.TRAPDOOR, {GridEntityType.TRAPDOOR, TrapdoorVariant.NORMAL}},
    {GridEntityXMLType.CRAWL_SPACE, {GridEntityType.CRAWL_SPACE, CrawlSpaceVariant.NORMAL}},
    {GridEntityXMLType.GRAVITY, {GridEntityType.GRAVITY, 0}}
})
return ____exports
 end,
["maps.roomShapeToTopLeftWallGridIndexMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
____exports.DEFAULT_TOP_LEFT_WALL_GRID_INDEX = 0
--- Only used for special room shapes where the top left wall grid index is not equal to
-- `DEFAULT_TOP_LEFT_WALL_GRID_INDEX`.
____exports.ROOM_SHAPE_TO_TOP_LEFT_WALL_GRID_INDEX_MAP = __TS__New(ReadonlyMap, {
    {RoomShape.IH, 30},
    {RoomShape.IV, 4},
    {RoomShape.IIV, 4},
    {RoomShape.IIH, 56},
    {RoomShape.LTL, 13}
})
return ____exports
 end,
["objects.gridEntityTypeToANM2Name"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
--- These files exist in the "gfx/grid" directory.
____exports.GRID_ENTITY_TYPE_TO_ANM2_NAME = {
    [GridEntityType.NULL] = nil,
    [GridEntityType.DECORATION] = "Props_01_Basement.anm2",
    [GridEntityType.ROCK] = "grid_rock.anm2",
    [GridEntityType.BLOCK] = "grid_rock.anm2",
    [GridEntityType.ROCK_TINTED] = "grid_rock.anm2",
    [GridEntityType.ROCK_BOMB] = "grid_rock.anm2",
    [GridEntityType.ROCK_ALT] = "grid_rock.anm2",
    [GridEntityType.PIT] = "grid_pit.anm2",
    [GridEntityType.SPIKES] = "grid_spikes.anm2",
    [GridEntityType.SPIKES_ON_OFF] = "grid_spikes.anm2",
    [GridEntityType.SPIDER_WEB] = "grid_web.anm2",
    [GridEntityType.LOCK] = "grid_locks.anm2",
    [GridEntityType.TNT] = "grid_tnt.anm2",
    [GridEntityType.FIREPLACE] = "grid_fireplace.anm2",
    [GridEntityType.POOP] = "grid_poop.anm2",
    [GridEntityType.WALL] = nil,
    [GridEntityType.DOOR] = nil,
    [GridEntityType.TRAPDOOR] = "Door_11_TrapDoor.anm2",
    [GridEntityType.CRAWL_SPACE] = "door_20_secrettrapdoor.anm2",
    [GridEntityType.GRAVITY] = nil,
    [GridEntityType.PRESSURE_PLATE] = "grid_pressureplate.anm2",
    [GridEntityType.STATUE] = nil,
    [GridEntityType.ROCK_SUPER_SPECIAL] = "grid_rock.anm2",
    [GridEntityType.TELEPORTER] = "grid_teleporter.anm2",
    [GridEntityType.PILLAR] = "grid_rock.anm2",
    [GridEntityType.ROCK_SPIKED] = "grid_rock.anm2",
    [GridEntityType.ROCK_ALT_2] = "grid_rock.anm2",
    [GridEntityType.ROCK_GOLD] = "grid_rock.anm2"
}
return ____exports
 end,
["sets.poopGridEntityXMLTypesSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GridEntityXMLType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityXMLType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.POOP_GRID_ENTITY_XML_TYPES_SET = __TS__New(ReadonlySet, {
    GridEntityXMLType.POOP_RED,
    GridEntityXMLType.POOP_RAINBOW,
    GridEntityXMLType.POOP_CORNY,
    GridEntityXMLType.POOP_GOLDEN,
    GridEntityXMLType.POOP_BLACK,
    GridEntityXMLType.POOP_WHITE,
    GridEntityXMLType.POOP_GIGA,
    GridEntityXMLType.POOP,
    GridEntityXMLType.POOP_CHARMING
})
return ____exports
 end,
["types.AnyGridEntity"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.GridEntityID"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.entitiesSpecific"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____entities = require("functions.entities")
local getEntities = ____entities.getEntities
local removeEntities = ____entities.removeEntities
local spawn = ____entities.spawn
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to get all of the bombs in the room. (Specifically, this refers to the
-- `EntityBomb` class, not bomb pickups.)
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the bombs in the room invisible.
-- for (const bomb of getBombs()) {
--   bomb.Visible = false;
-- }
-- ```
-- 
-- @param bombVariant Optional. If specified, will only get the bombs that match the variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only get the bombs that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getBombs(self, bombVariant, subType)
    if bombVariant == nil then
        bombVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local entities = getEntities(nil, EntityType.BOMB, bombVariant, subType)
    local bombs = {}
    for ____, entity in ipairs(entities) do
        local bomb = entity:ToBomb()
        if bomb ~= nil then
            bombs[#bombs + 1] = bomb
        end
    end
    return bombs
end
--- Helper function to get all of the effects in the room.
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the effects in the room invisible.
-- for (const effect of getEffects()) {
--   effect.Visible = false;
-- }
-- ```
-- 
-- @param effectVariant Optional. If specified, will only get the effects that match the variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only get the effects that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getEffects(self, effectVariant, subType)
    if effectVariant == nil then
        effectVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local entities = getEntities(nil, EntityType.EFFECT, effectVariant, subType)
    local effects = {}
    for ____, entity in ipairs(entities) do
        local effect = entity:ToEffect()
        if effect ~= nil then
            effects[#effects + 1] = effect
        end
    end
    return effects
end
--- Helper function to get all of the familiars in the room.
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the familiars in the room invisible.
-- for (const familiar of getFamiliars()) {
--   familiar.Visible = false;
-- }
-- ```
-- 
-- @param familiarVariant Optional. If specified, will only get the familiars that match the
-- variant. Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only get the familiars that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getFamiliars(self, familiarVariant, subType)
    if familiarVariant == nil then
        familiarVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local entities = getEntities(nil, EntityType.FAMILIAR, familiarVariant, subType)
    local familiars = {}
    for ____, entity in ipairs(entities) do
        local familiar = entity:ToFamiliar()
        if familiar ~= nil then
            familiars[#familiars + 1] = familiar
        end
    end
    return familiars
end
--- Helper function to get all of the knives in the room.
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the knives in the room invisible.
-- for (const knife of getKnives()) {
--   knife.Visible = false;
-- }
-- ```
-- 
-- @param knifeVariant Optional. If specified, will only get the knives that match the variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only get the knives that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getKnives(self, knifeVariant, subType)
    if knifeVariant == nil then
        knifeVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local entities = getEntities(nil, EntityType.KNIFE, knifeVariant, subType)
    local knives = {}
    for ____, entity in ipairs(entities) do
        local knife = entity:ToKnife()
        if knife ~= nil then
            knives[#knives + 1] = knife
        end
    end
    return knives
end
--- Helper function to get all of the lasers in the room.
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the lasers in the room invisible.
-- for (const laser of getLasers()) {
--   laser.Visible = false;
-- }
-- ```
-- 
-- @param laserVariant Optional. If specified, will only get the lasers that match the variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only get the lasers that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getLasers(self, laserVariant, subType)
    if laserVariant == nil then
        laserVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local entities = getEntities(nil, EntityType.LASER, laserVariant, subType)
    local lasers = {}
    for ____, entity in ipairs(entities) do
        local laser = entity:ToLaser()
        if laser ~= nil then
            lasers[#lasers + 1] = laser
        end
    end
    return lasers
end
--- Helper function to get all of the NPCs in the room.
-- 
-- @param entityType Optional. If specified, will only get the NPCs that match the type. Default is
-- -1, which matches every entity type.
-- @param variant Optional. If specified, will only get the NPCs that match the variant. Default is
-- -1, which matches every entity type.
-- @param subType Optional. If specified, will only get the bombs that match the sub-type. Default
-- is -1, which matches every sub-type.
-- @param ignoreFriendly Optional. If set to true, it will exclude friendly NPCs from being
-- returned. Default is false. Will only be taken into account if the
-- `entityType` is specified.
function ____exports.getNPCs(self, entityType, variant, subType, ignoreFriendly)
    if entityType == nil then
        entityType = -1
    end
    if variant == nil then
        variant = -1
    end
    if subType == nil then
        subType = -1
    end
    if ignoreFriendly == nil then
        ignoreFriendly = false
    end
    local entities = getEntities(
        nil,
        entityType,
        variant,
        subType,
        ignoreFriendly
    )
    local npcs = {}
    for ____, entity in ipairs(entities) do
        local npc = entity:ToNPC()
        if npc ~= nil then
            npcs[#npcs + 1] = npc
        end
    end
    return npcs
end
--- Helper function to get all of the pickups in the room.
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the pickups in the room invisible.
-- for (const pickup of getPickups()) {
--   pickup.Visible = false;
-- }
-- ```
-- 
-- @param pickupVariant Optional. If specified, will only get the pickups that match the variant.
-- Default is -1, which matches every entity type.
-- @param subType Optional. If specified, will only get the pickups that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getPickups(self, pickupVariant, subType)
    if pickupVariant == nil then
        pickupVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local entities = getEntities(nil, EntityType.PICKUP, pickupVariant, subType)
    local pickups = {}
    for ____, entity in ipairs(entities) do
        local pickup = entity:ToPickup()
        if pickup ~= nil then
            pickups[#pickups + 1] = pickup
        end
    end
    return pickups
end
--- Helper function to get all of the projectiles in the room.
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the projectiles in the room invisible.
-- for (const projectile of getProjectiles()) {
--   projectile.Visible = false;
-- }
-- ```
-- 
-- @param projectileVariant Optional. If specified, will only get the projectiles that match the
-- variant. Default is -1, which matches every entity type.
-- @param subType Optional. If specified, will only get the projectiles that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getProjectiles(self, projectileVariant, subType)
    if projectileVariant == nil then
        projectileVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local entities = getEntities(nil, EntityType.PROJECTILE, projectileVariant, subType)
    local projectiles = {}
    for ____, entity in ipairs(entities) do
        local projectile = entity:ToProjectile()
        if projectile ~= nil then
            projectiles[#projectiles + 1] = projectile
        end
    end
    return projectiles
end
--- Helper function to get all of the slots in the room.
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the slots in the room invisible.
-- for (const slot of getSlots()) {
--   slot.Visible = false;
-- }
-- ```
-- 
-- @param slotVariant Optional. If specified, will only get the slots that match the variant.
-- Default is -1, which matches every entity type.
-- @param subType Optional. If specified, will only get the slots that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getSlots(self, slotVariant, subType)
    if slotVariant == nil then
        slotVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local slots = getEntities(nil, EntityType.SLOT, slotVariant, subType)
    return slots
end
--- Helper function to get all of the tears in the room.
-- 
-- For example:
-- 
-- ```ts
-- // Make all of the tears in the room invisible.
-- for (const tear of getTears()) {
--   tear.Visible = false;
-- }
-- ```
-- 
-- @param tearVariant Optional. If specified, will only get the tears that match the variant.
-- Default is -1, which matches every entity type.
-- @param subType Optional. If specified, will only get the tears that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getTears(self, tearVariant, subType)
    if tearVariant == nil then
        tearVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local entities = getEntities(nil, EntityType.TEAR, tearVariant, subType)
    local tears = {}
    for ____, entity in ipairs(entities) do
        local tear = entity:ToTear()
        if tear ~= nil then
            tears[#tears + 1] = tear
        end
    end
    return tears
end
--- Helper function to remove all of the bombs in the room. (Specifically, this refers to the
-- `EntityBomb` class, not bomb pickups.)
-- 
-- @param bombVariant Optional. If specified, will only remove the bombs that match the variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove the bombs that match the sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of bombs.
-- @returns An array of the bombs that were removed.
function ____exports.removeAllBombs(self, bombVariant, subType, cap)
    if bombVariant == nil then
        bombVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local bombs = ____exports.getBombs(nil, bombVariant, subType)
    return removeEntities(nil, bombs, cap)
end
--- Helper function to remove all of the effects in the room.
-- 
-- @param effectVariant Optional. If specified, will only remove the effects that match the variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove the effects that match the sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of effects.
-- @returns An array of the effects that were removed.
function ____exports.removeAllEffects(self, effectVariant, subType, cap)
    if effectVariant == nil then
        effectVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local effects = ____exports.getEffects(nil, effectVariant, subType)
    return removeEntities(nil, effects, cap)
end
--- Helper function to remove all of the familiars in the room.
-- 
-- @param familiarVariant Optional. If specified, will only remove the familiars that match the
-- variant. Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove the familiars that match the sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of familiars.
-- @returns An array of the familiars that were removed.
function ____exports.removeAllFamiliars(self, familiarVariant, subType, cap)
    if familiarVariant == nil then
        familiarVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local familiars = ____exports.getFamiliars(nil, familiarVariant, subType)
    return removeEntities(nil, familiars, cap)
end
--- Helper function to remove all of the knives in the room.
-- 
-- @param knifeVariant Optional. If specified, will only remove the knives that match the variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove the knives that match the sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of knives.
-- @returns An array of the knives that were removed.
function ____exports.removeAllKnives(self, knifeVariant, subType, cap)
    if knifeVariant == nil then
        knifeVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local knives = ____exports.getKnives(nil, knifeVariant, subType)
    return removeEntities(nil, knives, cap)
end
--- Helper function to remove all of the lasers in the room.
-- 
-- @param laserVariant Optional. If specified, will only remove the lasers that match the variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove the lasers that match the sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of lasers.
-- @returns An array of the lasers that were removed.
function ____exports.removeAllLasers(self, laserVariant, subType, cap)
    if laserVariant == nil then
        laserVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local lasers = ____exports.getLasers(nil, laserVariant, subType)
    return removeEntities(nil, lasers, cap)
end
--- Helper function to remove all of the NPCs in the room.
-- 
-- @param entityType Optional. If specified, will only remove the NPCs that match the type. Default
-- is -1, which matches every type.
-- @param variant Optional. If specified, will only remove the NPCs that match the variant. Default
-- is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove the NPCs that match the sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of NPCs.
-- @returns An array of the NPCs that were removed.
function ____exports.removeAllNPCs(self, entityType, variant, subType, cap)
    if entityType == nil then
        entityType = -1
    end
    if variant == nil then
        variant = -1
    end
    if subType == nil then
        subType = -1
    end
    local npcs = ____exports.getNPCs(nil, entityType, variant, subType)
    return removeEntities(nil, npcs, cap)
end
--- Helper function to remove all of the pickups in the room.
-- 
-- @param pickupVariant Optional. If specified, will only remove pickups that match this variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove pickups that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of pickups.
-- @returns An array of the pickups that were removed.
function ____exports.removeAllPickups(self, pickupVariant, subType, cap)
    if pickupVariant == nil then
        pickupVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local pickups = ____exports.getPickups(nil, pickupVariant, subType)
    return removeEntities(nil, pickups, cap)
end
--- Helper function to remove all of the projectiles in the room.
-- 
-- @param projectileVariant Optional. If specified, will only remove projectiles that match this
-- variant. Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove projectiles that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of projectiles.
-- @returns An array of the projectiles that were removed.
function ____exports.removeAllProjectiles(self, projectileVariant, subType, cap)
    if projectileVariant == nil then
        projectileVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local projectiles = ____exports.getProjectiles(nil, projectileVariant, subType)
    return removeEntities(nil, projectiles, cap)
end
--- Helper function to remove all of the slots in the room.
-- 
-- @param slotVariant Optional. If specified, will only remove slots that match this variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove slots that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of slots.
-- @returns An array of the slots that were removed.
function ____exports.removeAllSlots(self, slotVariant, subType, cap)
    if slotVariant == nil then
        slotVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local slots = ____exports.getSlots(nil, slotVariant, subType)
    return removeEntities(nil, slots, cap)
end
--- Helper function to remove all of the tears in the room.
-- 
-- @param tearVariant Optional. If specified, will only remove tears that match this variant.
-- Default is -1, which matches every variant.
-- @param subType Optional. If specified, will only remove tears that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of tears.
-- @returns An array of the tears that were removed.
function ____exports.removeAllTears(self, tearVariant, subType, cap)
    if tearVariant == nil then
        tearVariant = -1
    end
    if subType == nil then
        subType = -1
    end
    local tears = ____exports.getTears(nil, tearVariant, subType)
    return removeEntities(nil, tears, cap)
end
--- Helper function to spawn a `EntityType.BOMB` (4).
function ____exports.spawnBomb(self, bombVariant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entity = spawn(
        nil,
        EntityType.BOMB,
        bombVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
    local bomb = entity:ToBomb()
    assertDefined(nil, bomb, "Failed to spawn a bomb.")
    return bomb
end
--- Helper function to spawn a `EntityType.BOMB` (4) with a specific seed.
function ____exports.spawnBombWithSeed(self, bombVariant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnBomb(
        nil,
        bombVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.EFFECT` (1000).
function ____exports.spawnEffect(self, effectVariant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entity = spawn(
        nil,
        EntityType.EFFECT,
        effectVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
    local effect = entity:ToEffect()
    assertDefined(nil, effect, "Failed to spawn an effect.")
    return effect
end
--- Helper function to spawn a `EntityType.EFFECT` (1000) with a specific seed.
function ____exports.spawnEffectWithSeed(self, effectVariant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnEffect(
        nil,
        effectVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.FAMILIAR` (3).
-- 
-- If you are trying to implement a custom familiar, you probably want to use the
-- `checkFamiliarFromCollectibles` helper function instead.
function ____exports.spawnFamiliar(self, familiarVariant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entity = spawn(
        nil,
        EntityType.FAMILIAR,
        familiarVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
    local familiar = entity:ToFamiliar()
    assertDefined(nil, familiar, "Failed to spawn a familiar.")
    return familiar
end
--- Helper function to spawn a `EntityType.FAMILIAR` (3) with a specific seed.
function ____exports.spawnFamiliarWithSeed(self, familiarVariant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnFamiliar(
        nil,
        familiarVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.KNIFE` (8).
function ____exports.spawnKnife(self, knifeVariant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entity = spawn(
        nil,
        EntityType.KNIFE,
        knifeVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
    local knife = entity:ToKnife()
    assertDefined(nil, knife, "Failed to spawn a knife.")
    return knife
end
--- Helper function to spawn a `EntityType.KNIFE` (8) with a specific seed.
function ____exports.spawnKnifeWithSeed(self, knifeVariant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnKnife(
        nil,
        knifeVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.LASER` (7).
function ____exports.spawnLaser(self, laserVariant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entity = spawn(
        nil,
        EntityType.LASER,
        laserVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
    local laser = entity:ToLaser()
    assertDefined(nil, laser, "Failed to spawn a laser.")
    return laser
end
--- Helper function to spawn a `EntityType.LASER` (7) with a specific seed.
function ____exports.spawnLaserWithSeed(self, laserVariant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnLaser(
        nil,
        laserVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn an NPC.
-- 
-- Note that if you pass a non-NPC `EntityType` to this function, it will cause a run-time error,
-- since the `Entity.ToNPC` method will return undefined.
function ____exports.spawnNPC(self, entityType, variant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entity = spawn(
        nil,
        entityType,
        variant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
    local npc = entity:ToNPC()
    assertDefined(nil, npc, "Failed to spawn an NPC.")
    return npc
end
--- Helper function to spawn an NPC with a specific seed.
-- 
-- Note that if you pass a non-NPC `EntityType` to this function, it will cause a run-time error,
-- since the `Entity.ToNPC` method will return undefined.
function ____exports.spawnNPCWithSeed(self, entityType, variant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnNPC(
        nil,
        entityType,
        variant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5).
function ____exports.spawnPickup(self, pickupVariant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entity = spawn(
        nil,
        EntityType.PICKUP,
        pickupVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
    local pickup = entity:ToPickup()
    assertDefined(nil, pickup, "Failed to spawn a pickup.")
    return pickup
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with a specific seed.
function ____exports.spawnPickupWithSeed(self, pickupVariant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnPickup(
        nil,
        pickupVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PROJECTILE` (9).
function ____exports.spawnProjectile(self, projectileVariant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entity = spawn(
        nil,
        EntityType.PROJECTILE,
        projectileVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
    local projectile = entity:ToProjectile()
    assertDefined(nil, projectile, "Failed to spawn a projectile.")
    return projectile
end
--- Helper function to spawn a `EntityType.PROJECTILE` (9) with a specific seed.
function ____exports.spawnProjectileWithSeed(self, projectileVariant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnProjectile(
        nil,
        projectileVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.SLOT` (6).
function ____exports.spawnSlot(self, slotVariant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawn(
        nil,
        EntityType.SLOT,
        slotVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.SLOT` (6) with a specific seed.
function ____exports.spawnSlotWithSeed(self, slotVariant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnSlot(
        nil,
        slotVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.TEAR` (2).
function ____exports.spawnTear(self, tearVariant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    local entity = spawn(
        nil,
        EntityType.TEAR,
        tearVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
    local tear = entity:ToTear()
    assertDefined(nil, tear, "Failed to spawn a tear.")
    return tear
end
--- Helper function to spawn a `EntityType.EntityType` (2) with a specific seed.
function ____exports.spawnTearWithSeed(self, tearVariant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnTear(
        nil,
        tearVariant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
return ____exports
 end,
["objects.roomTypeNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
____exports.ROOM_TYPE_NAMES = {
    [RoomType.DEFAULT] = "Default Room",
    [RoomType.SHOP] = "Shop",
    [RoomType.ERROR] = "I AM ERROR Room",
    [RoomType.TREASURE] = "Treasure Room",
    [RoomType.BOSS] = "Boss Room",
    [RoomType.MINI_BOSS] = "Miniboss Room",
    [RoomType.SECRET] = "Secret Room",
    [RoomType.SUPER_SECRET] = "Super Secret Room",
    [RoomType.ARCADE] = "Arcade",
    [RoomType.CURSE] = "Curse Room",
    [RoomType.CHALLENGE] = "Challenge Room",
    [RoomType.LIBRARY] = "Library",
    [RoomType.SACRIFICE] = "Sacrifice Room",
    [RoomType.DEVIL] = "Devil Room",
    [RoomType.ANGEL] = "Angel Room",
    [RoomType.DUNGEON] = "Crawl Space",
    [RoomType.BOSS_RUSH] = "Boss Rush",
    [RoomType.CLEAN_BEDROOM] = "Clean Bedroom",
    [RoomType.DIRTY_BEDROOM] = "Dirty Bedroom",
    [RoomType.VAULT] = "Vault",
    [RoomType.DICE] = "Dice Room",
    [RoomType.BLACK_MARKET] = "Black Market",
    [RoomType.GREED_EXIT] = "Greed Exit Room",
    [RoomType.PLANETARIUM] = "Planetarium",
    [RoomType.TELEPORTER] = "Teleporter Room",
    [RoomType.TELEPORTER_EXIT] = "Teleporter Exit Room",
    [RoomType.SECRET_EXIT] = "Secret Exit",
    [RoomType.BLUE] = "Blue Room",
    [RoomType.ULTRA_SECRET] = "Ultra Secret Room"
}
return ____exports
 end,
["sets.mineShaftRoomSubTypesSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local MinesRoomSubType = ____isaac_2Dtypescript_2Ddefinitions.MinesRoomSubType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.MINE_SHAFT_ROOM_SUB_TYPE_SET = __TS__New(ReadonlySet, {
    MinesRoomSubType.MINESHAFT_ENTRANCE,
    MinesRoomSubType.MINESHAFT_LOBBY,
    MinesRoomSubType.MINESHAFT_KNIFE_PIECE,
    MinesRoomSubType.MINESHAFT_ROOM_PRE_CHASE,
    MinesRoomSubType.MINESHAFT_ROOM_POST_CHASE
})
return ____exports
 end,
["functions.roomData"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local DOOR_SLOT_FLAG_VALUES = ____cachedEnumValues.DOOR_SLOT_FLAG_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____doors = require("functions.doors")
local doorSlotFlagToDoorSlot = ____doors.doorSlotFlagToDoorSlot
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
--- Helper function to get the room data for the current room.
-- 
-- You can optionally provide a room grid index as an argument to get the data for that room
-- instead.
-- 
-- (The version of the function without any arguments will not return undefined since the current
-- room is guaranteed to have data.)
-- Helper function to get the room data for the current or provided room.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @returns The room data for the room or undefined if the provided room does not have any data.
function ____exports.getRoomData(self, roomGridIndex)
    local roomDescriptor = ____exports.getRoomDescriptor(nil, roomGridIndex)
    return roomDescriptor.Data
end
--- Helper function to get the descriptor for a room.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
function ____exports.getRoomDescriptor(self, roomGridIndex)
    local level = game:GetLevel()
    if roomGridIndex == nil then
        roomGridIndex = ____exports.getRoomGridIndex(nil)
    end
    return level:GetRoomByIdx(roomGridIndex)
end
--- Alias for the `Level.GetCurrentRoomDesc` method. Use this to make it more clear what type of
-- `RoomDescriptor` object that you are retrieving.
function ____exports.getRoomDescriptorReadOnly(self)
    local level = game:GetLevel()
    return level:GetCurrentRoomDesc()
end
--- Helper function to get the grid index of the current room.
-- 
-- - If the current room is inside of the grid, this function will return the `SafeGridIndex` from
--   the room descriptor. (The safe grid index is defined as the top-left 1x1 section that the room
--   overlaps with, or the top-right 1x1 section of a `RoomType.SHAPE_LTL` room.)
-- - If the current room is outside of the grid, it will return the index from the
--   `Level.GetCurrentRoomIndex` method, since `SafeGridIndex` is bugged for these cases, as
--   demonstrated by entering a Genesis room and entering `l
--   print(Game():GetLevel():GetCurrentRoomDesc().SafeGridIndex)` into the console. (It prints -1
--   instead of -12.)
-- 
-- Use this function instead of the `Level.GetCurrentRoomIndex` method directly because the latter
-- will return the specific 1x1 quadrant that the player entered the room at. For most situations,
-- using the safe grid index is more reliable than this.
-- 
-- Data structures that store data per room should use the room's `ListIndex` instead of
-- `SafeGridIndex`, since the former is unique across different dimensions.
function ____exports.getRoomGridIndex(self)
    local level = game:GetLevel()
    local currentRoomIndex = level:GetCurrentRoomIndex()
    if currentRoomIndex < 0 then
        return currentRoomIndex
    end
    local roomDescriptor = ____exports.getRoomDescriptorReadOnly(nil)
    return roomDescriptor.SafeGridIndex
end
--- Helper function to get the set of allowed door slots for the room at the supplied grid index.
-- This corresponds to the doors that are enabled in the STB/XML file for the room.
function ____exports.getRoomAllowedDoors(self, roomGridIndex)
    local allowedDoors = __TS__New(Set)
    local roomData = ____exports.getRoomData(nil, roomGridIndex)
    if roomData == nil then
        return allowedDoors
    end
    for ____, doorSlotFlag in ipairs(DOOR_SLOT_FLAG_VALUES) do
        if hasFlag(nil, roomData.Doors, doorSlotFlag) then
            local doorSlot = doorSlotFlagToDoorSlot(nil, doorSlotFlag)
            allowedDoors:add(doorSlot)
        end
    end
    return allowedDoors
end
--- Helper function to get the list grid index of the provided room, which is equal to the index in
-- the `RoomList.Get` method. In other words, this is equal to the order that the room was created
-- by the floor generation algorithm.
-- 
-- Use this as an index for data structures that store data per room, since it is unique across
-- different dimensions.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
function ____exports.getRoomListIndex(self, roomGridIndex)
    local roomDescriptor = ____exports.getRoomDescriptor(nil, roomGridIndex)
    return roomDescriptor.ListIndex
end
--- Helper function to get the name of the current room as it appears in the STB/XML data.
-- 
-- You can optionally provide a room grid index as an argument to get the name for that room
-- instead.
-- 
-- (The version of the function without any arguments will not return undefined since the current
-- room is guaranteed to have data.)
-- 
-- If you want to get the room name for a specific room type, use the `getRoomTypeName` function.
-- Helper function to get the name of the room as it appears in the STB/XML data.
-- 
-- If you want to get the room name for a specific room type, use the `getRoomTypeName` function.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @returns The room name. Returns undefined if the room data was not found.
function ____exports.getRoomName(self, roomGridIndex)
    local roomData = ____exports.getRoomData(nil, roomGridIndex)
    local ____temp_0
    if roomData == nil then
        ____temp_0 = nil
    else
        ____temp_0 = roomData.Name
    end
    return ____temp_0
end
--- Helper function to get the shape of the current room as it appears in the STB/XML data.
-- 
-- You can optionally provide a room grid index as an argument to get the shape for that room
-- instead.
-- 
-- (The version of the function without any arguments will not return undefined since the current
-- room is guaranteed to have data.)
-- Helper function to get the shape of the room as it appears in the STB/XML data.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @returns The room shape. Returns undefined if the room data was not found.
function ____exports.getRoomShape(self, roomGridIndex)
    local roomData = ____exports.getRoomData(nil, roomGridIndex)
    local ____temp_1
    if roomData == nil then
        ____temp_1 = nil
    else
        ____temp_1 = roomData.Shape
    end
    return ____temp_1
end
--- Helper function to get the stage ID for the current room as it appears in the STB/XML data.
-- 
-- The room stage ID will correspond to the first number in the filename of the XML/STB file. For
-- example, a Depths room would have a stage ID of `StageID.DEPTHS` (7).
-- 
-- You can optionally provide a room grid index as an argument to get the stage ID for that room
-- instead.
-- 
-- (The version of the function without any arguments will not return undefined since the current
-- room is guaranteed to have data.)
-- Helper function to get the stage ID for a room as it appears in the STB/XML data.
-- 
-- The room stage ID will correspond to the first number in the filename of the XML/STB file. For
-- example, a Depths room would have a stage ID of `StageID.DEPTHS` (7).
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @returns The room stage ID. Returns undefined if the room data was not found.
function ____exports.getRoomStageID(self, roomGridIndex)
    local roomData = ____exports.getRoomData(nil, roomGridIndex)
    local ____temp_2
    if roomData == nil then
        ____temp_2 = nil
    else
        ____temp_2 = roomData.StageID
    end
    return ____temp_2
end
--- Helper function to get the sub-type for the current room as it appears in the STB/XML data.
-- 
-- The room sub-type will correspond to different things depending on what XML/STB file it draws
-- from. For example, in the "00.special rooms.stb" file, an Angel Room with a sub-type of 0 will
-- correspond to a normal Angel Room and a sub-type of 1 will correspond to an Angel Room shop from
-- The Stairway.
-- 
-- You can optionally provide a room grid index as an argument to get the sub-type for that room
-- instead.
-- 
-- (The version of the function without any arguments will not return undefined since the current
-- room is guaranteed to have data.)
-- Helper function to get the sub-type for a room as it appears in the STB/XML data.
-- 
-- The room sub-type will correspond to different things depending on what XML/STB file it draws
-- from. For example, in the "00.special rooms.stb" file, an Angel Room with a sub-type of 0 will
-- correspond to a normal Angel Room and a sub-type of 1 will correspond to an Angel Room shop from
-- The Stairway.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @returns The room sub-type. Returns undefined if the room data was not found.
function ____exports.getRoomSubType(self, roomGridIndex)
    local roomData = ____exports.getRoomData(nil, roomGridIndex)
    local ____temp_3
    if roomData == nil then
        ____temp_3 = nil
    else
        ____temp_3 = roomData.Subtype
    end
    return ____temp_3
end
--- Helper function to get the type for the current room as it appears in the STB/XML data.
-- 
-- You can optionally provide a room grid index as an argument to get the type for that room
-- instead.
-- 
-- (The version of the function without any arguments will not return undefined since the current
-- room is guaranteed to have data.)
-- Helper function to get the type for a room as it appears in the STB/XML data.
-- Helper function for getting the type of the room with the given grid index.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @returns The room type. Returns undefined if the room data was not found.
-- @param roomGridIndex Optional. Default is the current room index.
-- @returns The room data type. Returns -1 if the room data was not found.
function ____exports.getRoomType(self, roomGridIndex)
    local roomData = ____exports.getRoomData(nil, roomGridIndex)
    local ____temp_4
    if roomData == nil then
        ____temp_4 = nil
    else
        ____temp_4 = roomData.Type
    end
    return ____temp_4
end
--- Helper function to get the variant for the current room as it appears in the STB/XML data.
-- 
-- You can think of a room variant as its identifier. For example, to go to Basement room #123, you
-- would use a console command of `goto d.123` while on the Basement.
-- 
-- You can optionally provide a room grid index as an argument to get the variant for that room
-- instead.
-- 
-- (The version of the function without any arguments will not return undefined since the current
-- room is guaranteed to have data.)
-- Helper function to get the variant for a room as it appears in the STB/XML data.
-- 
-- You can think of a room variant as its identifier. For example, to go to Basement room #123, you
-- would use a console command of `goto d.123` while on the Basement.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @returns The room variant. Returns undefined if the room data was not found.
function ____exports.getRoomVariant(self, roomGridIndex)
    local roomData = ____exports.getRoomData(nil, roomGridIndex)
    return roomData == nil and -1 or roomData.Variant
end
--- Note that the room visited count will be inaccurate during the period before the `POST_NEW_ROOM`
-- callback has fired (i.e. when entities are initializing and performing their first update). This
-- is because the variable is only incremented immediately before the `POST_NEW_ROOM` callback
-- fires.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
function ____exports.getRoomVisitedCount(self, roomGridIndex)
    local roomDescriptor = ____exports.getRoomDescriptor(nil, roomGridIndex)
    return roomDescriptor.VisitedCount
end
--- Helper function to set the data for a given room. This will change the room type, contents, and
-- so on.
function ____exports.setRoomData(self, roomGridIndex, roomData)
    local roomDescriptor = ____exports.getRoomDescriptor(nil, roomGridIndex)
    roomDescriptor.Data = roomData
end
return ____exports
 end,
["functions.dimensions"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Dimension = ____isaac_2Dtypescript_2Ddefinitions.Dimension
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local DIMENSIONS = ____constants.DIMENSIONS
local ____roomData = require("functions.roomData")
local getRoomGridIndex = ____roomData.getRoomGridIndex
--- Helper function to get the current dimension. Most of the time, this will be `Dimension.MAIN`,
-- but it can change if e.g. the player is in the mirror world of Downpour/Dross.
function ____exports.getDimension(self)
    local level = game:GetLevel()
    local roomGridIndex = getRoomGridIndex(nil)
    local roomDescription = level:GetRoomByIdx(roomGridIndex, Dimension.CURRENT)
    local currentRoomHash = GetPtrHash(roomDescription)
    for ____, dimension in ipairs(DIMENSIONS) do
        local dimensionRoomDescription = level:GetRoomByIdx(roomGridIndex, dimension)
        local dimensionRoomHash = GetPtrHash(dimensionRoomDescription)
        if dimensionRoomHash == currentRoomHash then
            return dimension
        end
    end
    error("Failed to get the current dimension.")
end
function ____exports.inDimension(self, dimension)
    return dimension == ____exports.getDimension(nil)
end
return ____exports
 end,
["functions.positionVelocity"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySome = ____lualib.__TS__ArraySome
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EffectVariant = ____isaac_2Dtypescript_2Ddefinitions.EffectVariant
local HeavenLightDoorSubType = ____isaac_2Dtypescript_2Ddefinitions.HeavenLightDoorSubType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local DISTANCE_OF_GRID_TILE = ____constants.DISTANCE_OF_GRID_TILE
local ____entities = require("functions.entities")
local getEntities = ____entities.getEntities
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getEffects = ____entitiesSpecific.getEffects
local ____playerIndex = require("functions.playerIndex")
local getPlayers = ____playerIndex.getPlayers
local ____players = require("functions.players")
local getPlayerCloserThan = ____players.getPlayerCloserThan
local MAX_FIND_FREE_POSITION_ATTEMPTS = 100
function ____exports.anyEntityCloserThan(self, entities, position, distance)
    return __TS__ArraySome(
        entities,
        function(____, entity) return position:Distance(entity.Position) <= distance end
    )
end
--- Iterates over all players and checks if any player is close enough to the specified position.
-- 
-- Note that this function does not consider players with a non-undefined parent, since they are not
-- real players (e.g. the Strawman Keeper).
function ____exports.anyPlayerCloserThan(self, position, distance)
    local players = getPlayers(nil)
    return __TS__ArraySome(
        players,
        function(____, player) return player.Position:Distance(position) <= distance end
    )
end
--- Helper function to get a room position that is not overlapping with a grid entity, a heaven door,
-- or a player. The `Room.FindFreePickupSpawnPosition` method will return locations that overlap
-- with heaven doors and partially overlap with players, if the thing being spawned is bigger than a
-- tile (like a Blood Donation Machine). Use this function instead if you want to account for those
-- specific situations.
-- 
-- @param startingPosition The position to start searching from. If this position is not overlapping
-- with anything, then it will be returned.
-- @param avoidActiveEntities Optional. Default is false.
-- @param minimumDistance Optional. If specified, will ensure that the randomly generated position
-- is equal to or greater than the distance provided.
function ____exports.findFreePosition(self, startingPosition, avoidActiveEntities, minimumDistance)
    if avoidActiveEntities == nil then
        avoidActiveEntities = false
    end
    local room = game:GetRoom()
    local heavenDoors = getEffects(nil, EffectVariant.HEAVEN_LIGHT_DOOR, HeavenLightDoorSubType.HEAVEN_DOOR)
    do
        local initialStep = 0
        while initialStep < MAX_FIND_FREE_POSITION_ATTEMPTS do
            do
                local position = room:FindFreePickupSpawnPosition(startingPosition, initialStep, avoidActiveEntities)
                local closePlayer = getPlayerCloserThan(nil, position, DISTANCE_OF_GRID_TILE)
                if closePlayer ~= nil then
                    goto __continue7
                end
                local isCloseHeavenDoor = ____exports.anyEntityCloserThan(nil, heavenDoors, position, DISTANCE_OF_GRID_TILE)
                if isCloseHeavenDoor then
                    goto __continue7
                end
                if minimumDistance ~= nil then
                    local distance = startingPosition:Distance(position)
                    if distance < minimumDistance then
                        goto __continue7
                    end
                end
                return position
            end
            ::__continue7::
            initialStep = initialStep + 1
        end
    end
    return room:FindFreePickupSpawnPosition(startingPosition)
end
--- Helper function to get a map containing the positions of every entity in the current room.
-- 
-- This is useful for rewinding entity positions at a later time. Also see `setEntityPositions`.
-- 
-- @param entities Optional. If provided, will only get the positions of the provided entities. Use
-- this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
-- multiple times.
function ____exports.getEntityPositions(self, entities)
    if entities == nil then
        entities = getEntities(nil)
    end
    local entityPositions = __TS__New(Map)
    for ____, entity in ipairs(entities) do
        local ptrHash = GetPtrHash(entity)
        entityPositions:set(ptrHash, entity.Position)
    end
    return entityPositions
end
--- Helper function to get a map containing the velocities of every entity in the current room.
-- 
-- This is useful for rewinding entity velocities at a later time. Also see `setEntityVelocities`.
-- 
-- @param entities Optional. If provided, will only get the velocities of the provided entities. Use
-- this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
-- multiple times.
function ____exports.getEntityVelocities(self, entities)
    if entities == nil then
        entities = getEntities(nil)
    end
    local entityVelocities = __TS__New(Map)
    for ____, entity in ipairs(entities) do
        local ptrHash = GetPtrHash(entity)
        entityVelocities:set(ptrHash, entity.Velocity)
    end
    return entityVelocities
end
--- Helper function to set the position of every entity in the room based on a map of positions. If
-- an entity is found that does not have matching element in the provided map, then that entity will
-- be skipped.
-- 
-- This function is useful for rewinding entity positions at a later time. Also see
-- `getEntityPositions`.
-- 
-- @param entityPositions The map providing the positions for every entity.
-- @param entities Optional. If provided, will only set the positions of the provided entities. Use
-- this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
-- multiple times.
function ____exports.setEntityPositions(self, entityPositions, entities)
    if entities == nil then
        entities = getEntities(nil)
    end
    for ____, entity in ipairs(entities) do
        local ptrHash = GetPtrHash(entity)
        local entityPosition = entityPositions:get(ptrHash)
        if entityPosition ~= nil then
            entity.Position = entityPosition
        end
    end
end
--- Helper function to set the velocity of every entity in the room based on a map of velocities. If
-- an entity is found that does not have matching element in the provided map, then that entity will
-- be skipped.
-- 
-- This function is useful for rewinding entity velocities at a later time. Also see
-- `getEntityVelocities`.
-- 
-- @param entityVelocities The map providing the velocities for every entity.
-- @param entities Optional. If provided, will only set the velocities of the provided entities. Use
-- this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
-- multiple times.
function ____exports.setEntityVelocities(self, entityVelocities, entities)
    if entities == nil then
        entities = getEntities(nil)
    end
    for ____, entity in ipairs(entities) do
        local ptrHash = GetPtrHash(entity)
        local entityVelocity = entityVelocities:get(ptrHash)
        if entityVelocity ~= nil then
            entity.Velocity = entityVelocity
        end
    end
end
return ____exports
 end,
["functions.roomTransition"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
local RoomTransitionAnim = ____isaac_2Dtypescript_2Ddefinitions.RoomTransitionAnim
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____roomData = require("functions.roomData")
local getRoomData = ____roomData.getRoomData
local getRoomGridIndex = ____roomData.getRoomGridIndex
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to change the current room. It can be used for both teleportation and "normal"
-- room transitions, depending on what is passed for the `direction` and `roomTransitionAnim`
-- arguments.
-- 
-- Use this function instead of invoking the `Game.StartRoomTransition` method directly so that:
-- - you do not forget to set the `Level.LeaveDoor` field
-- - to prevent crashing on invalid room grid indexes
-- 
-- Note that if the current floor has Curse of the Maze, it may redirect the intended teleport.
-- 
-- @param roomGridIndex The room grid index of the destination room.
-- @param direction Optional. Default is `Direction.NO_DIRECTION`.
-- @param roomTransitionAnim Optional. Default is `RoomTransitionAnim.TELEPORT`.
function ____exports.teleport(self, roomGridIndex, direction, roomTransitionAnim)
    if direction == nil then
        direction = Direction.NO_DIRECTION
    end
    if roomTransitionAnim == nil then
        roomTransitionAnim = RoomTransitionAnim.TELEPORT
    end
    local level = game:GetLevel()
    local roomData = getRoomData(nil, roomGridIndex)
    assertDefined(
        nil,
        roomData,
        ("Failed to change the room to grid index " .. tostring(roomGridIndex)) .. " because that room does not exist."
    )
    level.LeaveDoor = DoorSlot.NO_DOOR_SLOT
    game:StartRoomTransition(roomGridIndex, direction, roomTransitionAnim)
end
--- Helper function to reload the current room using `Game.StartRoomTransition`.
-- 
-- This is useful for canceling the "goto" console command or to make the `Level.SetStage` method
-- take effect.
function ____exports.reloadRoom(self)
    local roomGridIndex = getRoomGridIndex(nil)
    ____exports.teleport(nil, roomGridIndex, Direction.NO_DIRECTION, RoomTransitionAnim.FADE)
end
return ____exports
 end,
["objects.levelNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
--- A mapping of stage and stage types to the corresponding English level name.
-- 
-- This is useful because the `Level.GetName` method returns a localized version of the level name,
-- which will not display correctly on some fonts.
-- 
-- Note that this contains "Blue Womb" instead of "???" for stage 9.
____exports.LEVEL_NAMES = {
    [LevelStage.BASEMENT_1] = {
        [StageType.ORIGINAL] = "Basement 1",
        [StageType.WRATH_OF_THE_LAMB] = "Cellar 1",
        [StageType.AFTERBIRTH] = "Burning Basement 1",
        [StageType.GREED_MODE] = "Basement",
        [StageType.REPENTANCE] = "Downpour 1",
        [StageType.REPENTANCE_B] = "Dross 1"
    },
    [LevelStage.BASEMENT_2] = {
        [StageType.ORIGINAL] = "Basement 2",
        [StageType.WRATH_OF_THE_LAMB] = "Cellar 2",
        [StageType.AFTERBIRTH] = "Burning Basement 2",
        [StageType.GREED_MODE] = "Basement",
        [StageType.REPENTANCE] = "Downpour 2",
        [StageType.REPENTANCE_B] = "Dross 2"
    },
    [LevelStage.CAVES_1] = {
        [StageType.ORIGINAL] = "Caves 1",
        [StageType.WRATH_OF_THE_LAMB] = "Catacombs 1",
        [StageType.AFTERBIRTH] = "Flooded Caves 1",
        [StageType.GREED_MODE] = "Caves",
        [StageType.REPENTANCE] = "Mines 1",
        [StageType.REPENTANCE_B] = "Ashpit 1"
    },
    [LevelStage.CAVES_2] = {
        [StageType.ORIGINAL] = "Caves 2",
        [StageType.WRATH_OF_THE_LAMB] = "Catacombs 2",
        [StageType.AFTERBIRTH] = "Flooded Caves 2",
        [StageType.GREED_MODE] = "Caves",
        [StageType.REPENTANCE] = "Mines 2",
        [StageType.REPENTANCE_B] = "Ashpit 2"
    },
    [LevelStage.DEPTHS_1] = {
        [StageType.ORIGINAL] = "Depths 1",
        [StageType.WRATH_OF_THE_LAMB] = "Necropolis 1",
        [StageType.AFTERBIRTH] = "Dank Depths 1",
        [StageType.GREED_MODE] = "Depths",
        [StageType.REPENTANCE] = "Mausoleum 1",
        [StageType.REPENTANCE_B] = "Gehenna 1"
    },
    [LevelStage.DEPTHS_2] = {
        [StageType.ORIGINAL] = "Depths 2",
        [StageType.WRATH_OF_THE_LAMB] = "Necropolis 2",
        [StageType.AFTERBIRTH] = "Dank Depths 2",
        [StageType.GREED_MODE] = "Depths",
        [StageType.REPENTANCE] = "Mausoleum 2",
        [StageType.REPENTANCE_B] = "Gehenna 2"
    },
    [LevelStage.WOMB_1] = {
        [StageType.ORIGINAL] = "Womb 1",
        [StageType.WRATH_OF_THE_LAMB] = "Utero 1",
        [StageType.AFTERBIRTH] = "Scarred Womb 1",
        [StageType.GREED_MODE] = "Womb",
        [StageType.REPENTANCE] = "Corpse 1",
        [StageType.REPENTANCE_B] = "Mortis 1"
    },
    [LevelStage.WOMB_2] = {
        [StageType.ORIGINAL] = "Womb 2",
        [StageType.WRATH_OF_THE_LAMB] = "Utero 2",
        [StageType.AFTERBIRTH] = "Scarred Womb 2",
        [StageType.GREED_MODE] = "Womb",
        [StageType.REPENTANCE] = "Corpse 2",
        [StageType.REPENTANCE_B] = "Mortis 2"
    },
    [LevelStage.BLUE_WOMB] = {
        [StageType.ORIGINAL] = "Blue Womb",
        [StageType.WRATH_OF_THE_LAMB] = "Blue Womb",
        [StageType.AFTERBIRTH] = "Blue Womb",
        [StageType.GREED_MODE] = "Blue Womb",
        [StageType.REPENTANCE] = "Blue Womb",
        [StageType.REPENTANCE_B] = "Blue Womb"
    },
    [LevelStage.SHEOL_CATHEDRAL] = {
        [StageType.ORIGINAL] = "Sheol",
        [StageType.WRATH_OF_THE_LAMB] = "Cathedral",
        [StageType.AFTERBIRTH] = "Undefined",
        [StageType.GREED_MODE] = "Sheol",
        [StageType.REPENTANCE] = "Undefined",
        [StageType.REPENTANCE_B] = "Undefined"
    },
    [LevelStage.DARK_ROOM_CHEST] = {
        [StageType.ORIGINAL] = "Dark Room",
        [StageType.WRATH_OF_THE_LAMB] = "The Chest",
        [StageType.AFTERBIRTH] = "Undefined",
        [StageType.GREED_MODE] = "The Shop",
        [StageType.REPENTANCE] = "Undefined",
        [StageType.REPENTANCE_B] = "Undefined"
    },
    [LevelStage.VOID] = {
        [StageType.ORIGINAL] = "The Void",
        [StageType.WRATH_OF_THE_LAMB] = "The Void",
        [StageType.AFTERBIRTH] = "The Void",
        [StageType.GREED_MODE] = "The Void",
        [StageType.REPENTANCE] = "The Void",
        [StageType.REPENTANCE_B] = "The Void"
    },
    [LevelStage.HOME] = {
        [StageType.ORIGINAL] = "Home",
        [StageType.WRATH_OF_THE_LAMB] = "Home",
        [StageType.AFTERBIRTH] = "Home",
        [StageType.GREED_MODE] = "Home",
        [StageType.REPENTANCE] = "Home",
        [StageType.REPENTANCE_B] = "Home"
    }
}
return ____exports
 end,
["objects.roomTypeSpecialGotoPrefixes"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
____exports.ROOM_TYPE_SPECIAL_GOTO_PREFIXES = {
    [RoomType.DEFAULT] = "default",
    [RoomType.SHOP] = "shop",
    [RoomType.ERROR] = "error",
    [RoomType.TREASURE] = "treasure",
    [RoomType.BOSS] = "boss",
    [RoomType.MINI_BOSS] = "miniboss",
    [RoomType.SECRET] = "secret",
    [RoomType.SUPER_SECRET] = "supersecret",
    [RoomType.ARCADE] = "arcade",
    [RoomType.CURSE] = "curse",
    [RoomType.CHALLENGE] = "challenge",
    [RoomType.LIBRARY] = "library",
    [RoomType.SACRIFICE] = "sacrifice",
    [RoomType.DEVIL] = "devil",
    [RoomType.ANGEL] = "angel",
    [RoomType.DUNGEON] = "itemdungeon",
    [RoomType.BOSS_RUSH] = "bossrush",
    [RoomType.CLEAN_BEDROOM] = "isaacs",
    [RoomType.DIRTY_BEDROOM] = "barren",
    [RoomType.VAULT] = "chest",
    [RoomType.DICE] = "dice",
    [RoomType.BLACK_MARKET] = "blackmarket",
    [RoomType.GREED_EXIT] = "greedexit",
    [RoomType.PLANETARIUM] = "planetarium",
    [RoomType.TELEPORTER] = "teleporter",
    [RoomType.TELEPORTER_EXIT] = "teleporterexit",
    [RoomType.SECRET_EXIT] = "secretexit",
    [RoomType.BLUE] = "blue",
    [RoomType.ULTRA_SECRET] = "ultrasecret"
}
return ____exports
 end,
["objects.stageToStageID"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
local BASEMENT_TO_STAGE_ID = {
    [StageType.ORIGINAL] = StageID.BASEMENT,
    [StageType.WRATH_OF_THE_LAMB] = StageID.CELLAR,
    [StageType.AFTERBIRTH] = StageID.BURNING_BASEMENT,
    [StageType.GREED_MODE] = StageID.BASEMENT,
    [StageType.REPENTANCE] = StageID.DOWNPOUR,
    [StageType.REPENTANCE_B] = StageID.DROSS
}
local CAVES_TO_STAGE_ID = {
    [StageType.ORIGINAL] = StageID.CAVES,
    [StageType.WRATH_OF_THE_LAMB] = StageID.CATACOMBS,
    [StageType.AFTERBIRTH] = StageID.FLOODED_CAVES,
    [StageType.GREED_MODE] = StageID.CAVES,
    [StageType.REPENTANCE] = StageID.MINES,
    [StageType.REPENTANCE_B] = StageID.ASHPIT
}
local DEPTHS_TO_STAGE_ID = {
    [StageType.ORIGINAL] = StageID.DEPTHS,
    [StageType.WRATH_OF_THE_LAMB] = StageID.NECROPOLIS,
    [StageType.AFTERBIRTH] = StageID.DANK_DEPTHS,
    [StageType.GREED_MODE] = StageID.DEPTHS,
    [StageType.REPENTANCE] = StageID.MAUSOLEUM,
    [StageType.REPENTANCE_B] = StageID.GEHENNA
}
local WOMB_TO_STAGE_ID = {
    [StageType.ORIGINAL] = StageID.WOMB,
    [StageType.WRATH_OF_THE_LAMB] = StageID.UTERO,
    [StageType.AFTERBIRTH] = StageID.SCARRED_WOMB,
    [StageType.GREED_MODE] = StageID.WOMB,
    [StageType.REPENTANCE] = StageID.CORPSE,
    [StageType.REPENTANCE_B] = StageID.MORTIS
}
local BLUE_WOMB_TO_STAGE_ID = {
    [StageType.ORIGINAL] = StageID.BLUE_WOMB,
    [StageType.WRATH_OF_THE_LAMB] = StageID.BLUE_WOMB,
    [StageType.AFTERBIRTH] = StageID.BLUE_WOMB,
    [StageType.GREED_MODE] = StageID.BLUE_WOMB,
    [StageType.REPENTANCE] = StageID.BLUE_WOMB,
    [StageType.REPENTANCE_B] = StageID.BLUE_WOMB
}
local SHEOL_CATHEDRAL_TO_STAGE_ID = {
    [StageType.ORIGINAL] = StageID.SHEOL,
    [StageType.WRATH_OF_THE_LAMB] = StageID.CATHEDRAL,
    [StageType.AFTERBIRTH] = StageID.SHEOL,
    [StageType.GREED_MODE] = StageID.SHEOL,
    [StageType.REPENTANCE] = StageID.SHEOL,
    [StageType.REPENTANCE_B] = StageID.SHEOL
}
local DARK_ROOM_CHEST_TO_STAGE_ID = {
    [StageType.ORIGINAL] = StageID.DARK_ROOM,
    [StageType.WRATH_OF_THE_LAMB] = StageID.CHEST,
    [StageType.AFTERBIRTH] = StageID.DARK_ROOM,
    [StageType.GREED_MODE] = StageID.DARK_ROOM,
    [StageType.REPENTANCE] = StageID.DARK_ROOM,
    [StageType.REPENTANCE_B] = StageID.DARK_ROOM
}
local VOID_TO_STAGE_ID = {
    [StageType.ORIGINAL] = StageID.VOID,
    [StageType.WRATH_OF_THE_LAMB] = StageID.VOID,
    [StageType.AFTERBIRTH] = StageID.VOID,
    [StageType.GREED_MODE] = StageID.VOID,
    [StageType.REPENTANCE] = StageID.VOID,
    [StageType.REPENTANCE_B] = StageID.VOID
}
local HOME_TO_STAGE_ID = {
    [StageType.ORIGINAL] = StageID.HOME,
    [StageType.WRATH_OF_THE_LAMB] = StageID.HOME,
    [StageType.AFTERBIRTH] = StageID.HOME,
    [StageType.GREED_MODE] = StageID.HOME,
    [StageType.REPENTANCE] = StageID.HOME,
    [StageType.REPENTANCE_B] = StageID.HOME
}
____exports.STAGE_TO_STAGE_ID = {
    [LevelStage.BASEMENT_1] = BASEMENT_TO_STAGE_ID,
    [LevelStage.BASEMENT_2] = BASEMENT_TO_STAGE_ID,
    [LevelStage.CAVES_1] = CAVES_TO_STAGE_ID,
    [LevelStage.CAVES_2] = CAVES_TO_STAGE_ID,
    [LevelStage.DEPTHS_1] = DEPTHS_TO_STAGE_ID,
    [LevelStage.DEPTHS_2] = DEPTHS_TO_STAGE_ID,
    [LevelStage.WOMB_1] = WOMB_TO_STAGE_ID,
    [LevelStage.WOMB_2] = WOMB_TO_STAGE_ID,
    [LevelStage.BLUE_WOMB] = BLUE_WOMB_TO_STAGE_ID,
    [LevelStage.SHEOL_CATHEDRAL] = SHEOL_CATHEDRAL_TO_STAGE_ID,
    [LevelStage.DARK_ROOM_CHEST] = DARK_ROOM_CHEST_TO_STAGE_ID,
    [LevelStage.VOID] = VOID_TO_STAGE_ID,
    [LevelStage.HOME] = HOME_TO_STAGE_ID
}
return ____exports
 end,
["objects.stageTypeSuffixes"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
____exports.STAGE_TYPE_SUFFIXES = {
    [StageType.ORIGINAL] = "",
    [StageType.WRATH_OF_THE_LAMB] = "a",
    [StageType.AFTERBIRTH] = "b",
    [StageType.GREED_MODE] = "",
    [StageType.REPENTANCE] = "c",
    [StageType.REPENTANCE_B] = "d"
}
return ____exports
 end,
["functions.stage"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GameStateFlag = ____isaac_2Dtypescript_2Ddefinitions.GameStateFlag
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____levelNames = require("objects.levelNames")
local LEVEL_NAMES = ____levelNames.LEVEL_NAMES
local ____roomTypeSpecialGotoPrefixes = require("objects.roomTypeSpecialGotoPrefixes")
local ROOM_TYPE_SPECIAL_GOTO_PREFIXES = ____roomTypeSpecialGotoPrefixes.ROOM_TYPE_SPECIAL_GOTO_PREFIXES
local ____stageToStageID = require("objects.stageToStageID")
local STAGE_TO_STAGE_ID = ____stageToStageID.STAGE_TO_STAGE_ID
local ____stageTypeSuffixes = require("objects.stageTypeSuffixes")
local STAGE_TYPE_SUFFIXES = ____stageTypeSuffixes.STAGE_TYPE_SUFFIXES
local ____log = require("functions.log")
local log = ____log.log
local ____types = require("functions.types")
local asLevelStage = ____types.asLevelStage
local ____utils = require("functions.utils")
local inRange = ____utils.inRange
--- Helper function to check if the provided stage type is equal to `StageType.REPENTANCE` or
-- `StageType.REPENTANCE_B`.
function ____exports.isRepentanceStage(self, stageType)
    return stageType == StageType.REPENTANCE or stageType == StageType.REPENTANCE_B
end
--- Helper function to check if the provided stage is one with a story boss. Specifically, this is
-- Depths 2 (Mom), Womb 2 (Mom's Heart / It Lives), Blue Womb (Hush), Sheol (Satan), Cathedral
-- (Isaac), Dark Room (Lamb), The Chest (Blue Baby), The Void (Delirium), and Home (Dogma / The
-- Beast).
function ____exports.isStageWithStoryBoss(self, stage)
    return stage == LevelStage.DEPTHS_2 or stage >= LevelStage.WOMB_2
end
--- Helper function to check if the current stage type is equal to `StageType.REPENTANCE` or
-- `StageType.REPENTANCE_B`.
function ____exports.onRepentanceStage(self)
    local level = game:GetLevel()
    local stageType = level:GetStageType()
    return ____exports.isRepentanceStage(nil, stageType)
end
--- Helper function that calculates what the stage type should be for the provided stage. This
-- emulates what the game's internal code does.
function ____exports.calculateStageType(self, stage)
    local seeds = game:GetSeeds()
    local stageSeed = seeds:GetStageSeed(stage)
    if stageSeed % 2 == 0 then
        return StageType.WRATH_OF_THE_LAMB
    end
    if stageSeed % 3 == 0 then
        return StageType.AFTERBIRTH
    end
    return StageType.ORIGINAL
end
--- Helper function that calculates what the Repentance stage type should be for the provided stage.
-- This emulates what the game's internal code does.
function ____exports.calculateStageTypeRepentance(self, stage)
    if stage == LevelStage.WOMB_1 or stage == LevelStage.WOMB_2 then
        return StageType.REPENTANCE
    end
    local seeds = game:GetSeeds()
    local adjustedStage = asLevelStage(nil, stage + 1)
    local stageSeed = seeds:GetStageSeed(adjustedStage)
    local halfStageSeed = math.floor(stageSeed / 2)
    if halfStageSeed % 2 == 0 then
        return StageType.REPENTANCE_B
    end
    return StageType.REPENTANCE
end
--- Helper function to account for Repentance floors being offset by 1. For example, Downpour 2 is
-- the third level of the run, but the game considers it to have a stage of 2. This function will
-- consider Downpour 2 to have a stage of 3.
function ____exports.getEffectiveStage(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    if ____exports.onRepentanceStage(nil) then
        return stage + 1
    end
    return stage
end
--- Helper function to get the corresponding "goto" console command that would correspond to the
-- provided room type and room variant.
-- 
-- @param roomType The `RoomType` of the destination room.
-- @param roomVariant The variant of the destination room.
-- @param useSpecialRoomsForRoomTypeDefault Optional. Whether to use `s.default` as the prefix for
-- the `goto` command (instead of `d`) if the room type is
-- `RoomType.DEFAULT` (1). False by default.
function ____exports.getGotoCommand(self, roomType, roomVariant, useSpecialRoomsForRoomTypeDefault)
    if useSpecialRoomsForRoomTypeDefault == nil then
        useSpecialRoomsForRoomTypeDefault = false
    end
    local isNormalRoom = roomType == RoomType.DEFAULT and not useSpecialRoomsForRoomTypeDefault
    local roomTypeSpecialGotoPrefix = ROOM_TYPE_SPECIAL_GOTO_PREFIXES[roomType]
    local prefix = isNormalRoom and "d" or "s." .. roomTypeSpecialGotoPrefix
    return (("goto " .. prefix) .. ".") .. tostring(roomVariant)
end
--- Helper function to get the English name of the level. For example, "Caves 1".
-- 
-- This is useful because the `Level.GetName` method returns a localized version of the level name,
-- which will not display correctly on some fonts.
-- 
-- Note that this returns "Blue Womb" instead of "???" for stage 9.
-- 
-- @param stage Optional. If not specified, the current stage will be used.
-- @param stageType Optional. If not specified, the current stage type will be used.
function ____exports.getLevelName(self, stage, stageType)
    local level = game:GetLevel()
    if stage == nil then
        stage = level:GetStage()
    end
    if stageType == nil then
        stageType = level:GetStageType()
    end
    local stageNames = LEVEL_NAMES[stage]
    return stageNames[stageType]
end
--- Alias for the `Level.GetStage` method.
function ____exports.getStage(self)
    local level = game:GetLevel()
    return level:GetStage()
end
--- Helper function to get the stage ID that corresponds to a particular floor. It does this by
-- manually converting `LevelStage` and `StageType` into `StageID`. This is useful because
-- `getRoomStageID` will not correctly return the `StageID` if the player is in a special room.
-- 
-- @param stage Optional. If not specified, the stage corresponding to the current floor will be
-- used.
-- @param stageType Optional. If not specified, the stage type corresponding to the current floor
-- will be used.
function ____exports.getStageID(self, stage, stageType)
    local level = game:GetLevel()
    if stage == nil then
        stage = level:GetStage()
    end
    if stageType == nil then
        stageType = level:GetStageType()
    end
    local stageTypeToStageID = STAGE_TO_STAGE_ID[stage]
    return stageTypeToStageID[stageType]
end
--- Alias for the `Level.GetStageType` method.
function ____exports.getStageType(self)
    local level = game:GetLevel()
    return level:GetStageType()
end
--- Helper function to convert a numerical `StageType` into the letter suffix supplied to the "stage"
-- console command. For example, `StageType.REPENTANCE` is the stage type for Downpour, and the
-- console command to go to Downpour is "stage 1c", so this function converts `StageType.REPENTANCE`
-- to "c".
function ____exports.getStageTypeSuffix(self, stageType)
    return STAGE_TYPE_SUFFIXES[stageType]
end
--- Returns whether the provided stage and stage type represent a "final floor". This is defined as a
-- floor that prevents the player from entering the I AM ERROR room on.
-- 
-- For example, when using Undefined on The Chest, it has a 50% chance of teleporting the player to
-- the Secret Room and a 50% chance of teleporting the player to the Super Secret Room, because the
-- I AM ERROR room is never entered into the list of possibilities.
function ____exports.isFinalFloor(self, stage, stageType)
    return stage == LevelStage.DARK_ROOM_CHEST or stage == LevelStage.VOID or stage == LevelStage.HOME or stage == LevelStage.WOMB_2 and ____exports.isRepentanceStage(nil, stageType)
end
--- Helper function to check if the provided effective stage is one that has the possibility to grant
-- a natural Devil Room or Angel Room after killing the boss.
-- 
-- Note that in order for this function to work properly, you must provide it with the effective
-- stage (e.g. from the `getEffectiveStage` helper function) and not the absolute stage (e.g. from
-- the `Level.GetStage` method).
function ____exports.isStageWithNaturalDevilRoom(self, effectiveStage)
    return inRange(nil, effectiveStage, LevelStage.BASEMENT_2, LevelStage.WOMB_2) and effectiveStage ~= LevelStage.BLUE_WOMB
end
--- Helper function to check if the provided stage is one that will have a random collectible drop
-- upon defeating the boss of the floor.
-- 
-- This happens on most stages but will not happen on Depths 2, Womb 2, Sheol, Cathedral, Dark Room,
-- The Chest, and Home (due to the presence of a story boss).
-- 
-- Note that even though Delirium does not drop a random boss collectible, The Void is still
-- considered to be a stage that has a random boss collectible since all of the non-Delirium Boss
-- Rooms will drop random boss collectibles.
function ____exports.isStageWithRandomBossCollectible(self, stage)
    return not ____exports.isStageWithStoryBoss(nil, stage) or stage == LevelStage.VOID
end
--- Helper function to check if the provided stage will spawn a locked door to Downpour/Dross after
-- defeating the boss.
function ____exports.isStageWithSecretExitToDownpour(self, stage)
    return stage == LevelStage.BASEMENT_1 or stage == LevelStage.BASEMENT_2
end
--- Helper function to check if the provided stage and stage type will spawn a spiked door to
-- Mausoleum/Gehenna after defeating the boss.
function ____exports.isStageWithSecretExitToMausoleum(self, stage, stageType)
    local repentanceStage = ____exports.isRepentanceStage(nil, stageType)
    return stage == LevelStage.DEPTHS_1 and not repentanceStage or stage == LevelStage.CAVES_2 and repentanceStage
end
--- Helper function to check if the provided stage and stage type will spawn a wooden door to
-- Mines/Ashpit after defeating the boss.
function ____exports.isStageWithSecretExitToMines(self, stage, stageType)
    local repentanceStage = ____exports.isRepentanceStage(nil, stageType)
    return stage == LevelStage.CAVES_1 and not repentanceStage or stage == LevelStage.BASEMENT_2 and repentanceStage
end
--- Helper function to check if the current stage is one that would create a trapdoor if We Need to
-- Go Deeper was used.
function ____exports.isStageWithShovelTrapdoors(self, stage, stageType)
    local repentanceStage = ____exports.isRepentanceStage(nil, stageType)
    return stage < LevelStage.WOMB_2 or stage == LevelStage.WOMB_2 and not repentanceStage
end
--- Helper function to check if the player has taken Dad's Note. This sets the game state flag of
-- `GameStateFlag.BACKWARDS_PATH` and causes floor generation to change.
function ____exports.onAscent(self)
    return game:GetStateFlag(GameStateFlag.BACKWARDS_PATH)
end
function ____exports.onCathedral(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    return stage == LevelStage.SHEOL_CATHEDRAL and stageType == StageType.WRATH_OF_THE_LAMB
end
function ____exports.onChest(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    return stage == LevelStage.DARK_ROOM_CHEST and stageType == StageType.WRATH_OF_THE_LAMB
end
function ____exports.onDarkRoom(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    return stage == LevelStage.DARK_ROOM_CHEST and stageType == StageType.ORIGINAL
end
--- Helper function to check if the current stage matches one of the given stages. This uses the
-- `getEffectiveStage` helper function so that the Repentance floors are correctly adjusted.
-- 
-- This function is variadic, which means you can pass as many stages as you want to match for.
function ____exports.onEffectiveStage(self, ...)
    local effectiveStages = {...}
    local thisEffectiveStage = ____exports.getEffectiveStage(nil)
    return __TS__ArrayIncludes(effectiveStages, thisEffectiveStage)
end
--- Returns whether the player is on the "final floor" of the particular run. The final floor is
-- defined as one that prevents the player from entering the I AM ERROR room on.
-- 
-- For example, when using Undefined on The Chest, it has a 50% chance of teleporting the player to
-- the Secret Room and a 50% chance of teleporting the player to the Super Secret Room, because the
-- I AM ERROR room is never entered into the list of possibilities.
function ____exports.onFinalFloor(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    return ____exports.isFinalFloor(nil, stage, stageType)
end
--- Returns whether the player is on the first floor of the particular run.
-- 
-- This is tricky to determine because we have to handle the cases of Downpour/Dross 1 not being the
-- first floor and The Ascent.
function ____exports.onFirstFloor(self)
    local effectiveStage = ____exports.getEffectiveStage(nil)
    local isOnAscent = ____exports.onAscent(nil)
    return effectiveStage == LevelStage.BASEMENT_1 and not isOnAscent
end
function ____exports.onSheol(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    return stage == LevelStage.SHEOL_CATHEDRAL and stageType == StageType.ORIGINAL
end
--- Helper function to check if the current stage matches one of the given stages.
-- 
-- This function is variadic, which means you can pass as many stages as you want to match for.
function ____exports.onStage(self, ...)
    local stages = {...}
    local level = game:GetLevel()
    local thisStage = level:GetStage()
    return __TS__ArrayIncludes(stages, thisStage)
end
--- Helper function to check if the current stage is equal to or higher than the given stage.
function ____exports.onStageOrHigher(self, stage)
    local level = game:GetLevel()
    local thisStage = level:GetStage()
    return thisStage >= stage
end
--- Helper function to check if the current stage is equal to or higher than the given stage.
function ____exports.onStageOrLower(self, stage)
    local level = game:GetLevel()
    local thisStage = level:GetStage()
    return thisStage <= stage
end
--- Helper function to check if the current stage matches one of the given stage types.
-- 
-- This function is variadic, which means you can pass as many room types as you want to match for.
function ____exports.onStageType(self, ...)
    local stageTypes = {...}
    local level = game:GetLevel()
    local thisStageType = level:GetStageType()
    return __TS__ArrayIncludes(stageTypes, thisStageType)
end
--- Helper function to check if the current stage is one that has the possibility to grant a natural
-- Devil Room or Angel Room after killing the boss.
function ____exports.onStageWithNaturalDevilRoom(self)
    local effectiveStage = ____exports.getEffectiveStage(nil)
    return ____exports.isStageWithNaturalDevilRoom(nil, effectiveStage)
end
--- Helper function to check if the current stage is one that will have a random collectible drop
-- upon defeating the boss of the floor.
-- 
-- This happens on most stages but will not happen on Depths 2, Womb 2, Sheol, Cathedral, Dark Room,
-- The Chest, and Home (due to the presence of a story boss).
-- 
-- Note that even though Delirium does not drop a random boss collectible, The Void is still
-- considered to be a stage that has a random boss collectible since all of the non-Delirium Boss
-- Rooms will drop random boss collectibles.
function ____exports.onStageWithRandomBossCollectible(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    return ____exports.isStageWithRandomBossCollectible(nil, stage)
end
--- Helper function to check if the current stage will spawn a locked door to Downpour/Dross after
-- defeating the boss.
function ____exports.onStageWithSecretExitToDownpour(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    return ____exports.isStageWithSecretExitToDownpour(nil, stage)
end
--- Helper function to check if the current stage will spawn a spiked door to Mausoleum/Gehenna after
-- defeating the boss.
function ____exports.onStageWithSecretExitToMausoleum(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    return ____exports.isStageWithSecretExitToMausoleum(nil, stage, stageType)
end
--- Helper function to check if the current stage will spawn a wooden door to Mines/Ashpit after
-- defeating the boss.
function ____exports.onStageWithSecretExitToMines(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    return ____exports.isStageWithSecretExitToMines(nil, stage, stageType)
end
--- Helper function to check if the current stage is one that would create a trapdoor if We Need to
-- Go Deeper was used.
function ____exports.onStageWithShovelTrapdoors(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    return ____exports.isStageWithShovelTrapdoors(nil, stage, stageType)
end
--- Helper function to check if the current stage is one with a story boss. Specifically, this is
-- Depths 2 (Mom), Womb 2 (Mom's Heart / It Lives), Blue Womb (Hush), Sheol (Satan), Cathedral
-- (Isaac), Dark Room (Lamb), The Chest (Blue Baby), The Void (Delirium), and Home (Dogma / The
-- Beast).
function ____exports.onStageWithStoryBoss(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    return ____exports.isStageWithStoryBoss(nil, stage)
end
--- Helper function to directly warp to a specific stage using the "stage" console command.
-- 
-- This is different from the vanilla `Level.SetStage` method, which will change the stage and/or
-- stage type of the current floor without moving the player to a new floor.
-- 
-- Note that if you use this function on game frame 0, it will confuse the
-- `POST_GAME_STARTED_REORDERED`, `POST_NEW_LEVEL_REORDERED`, and `POST_NEW_ROOM_REORDERED` custom
-- callbacks. If you are using the function in this situation, remember to call the
-- `reorderedCallbacksSetStage` function.
-- 
-- @param stage The stage number to warp to.
-- @param stageType The stage type to warp to.
-- @param reseed Optional. Whether to reseed the floor upon arrival. Default is false. Set this to
-- true if you are warping to the same stage but a different stage type (or else the
-- floor layout will be identical to the old floor).
function ____exports.setStage(self, stage, stageType, reseed)
    if reseed == nil then
        reseed = false
    end
    local stageTypeSuffix = ____exports.getStageTypeSuffix(nil, stageType)
    local command = ("stage " .. tostring(stage)) .. stageTypeSuffix
    log("Warping to a stage with a console command of: " .. command)
    Isaac.ExecuteCommand(command)
    if reseed then
        log("Reseeding the floor with a console command of: reseed")
        Isaac.ExecuteCommand("reseed")
    end
end
return ____exports
 end,
["functions.rooms"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
local Map = ____lualib.Map
local __TS__Spread = ____lualib.__TS__Spread
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
local __TS__StringIncludes = ____lualib.__TS__StringIncludes
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local AngelRoomSubType = ____isaac_2Dtypescript_2Ddefinitions.AngelRoomSubType
local Dimension = ____isaac_2Dtypescript_2Ddefinitions.Dimension
local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
local DoorSlotFlag = ____isaac_2Dtypescript_2Ddefinitions.DoorSlotFlag
local DownpourRoomSubType = ____isaac_2Dtypescript_2Ddefinitions.DownpourRoomSubType
local DungeonSubType = ____isaac_2Dtypescript_2Ddefinitions.DungeonSubType
local GridRoom = ____isaac_2Dtypescript_2Ddefinitions.GridRoom
local HomeRoomSubType = ____isaac_2Dtypescript_2Ddefinitions.HomeRoomSubType
local RoomDescriptorFlag = ____isaac_2Dtypescript_2Ddefinitions.RoomDescriptorFlag
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local SoundEffect = ____isaac_2Dtypescript_2Ddefinitions.SoundEffect
local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local sfxManager = ____cachedClasses.sfxManager
local ____constants = require("core.constants")
local DIMENSIONS = ____constants.DIMENSIONS
local MAX_LEVEL_GRID_INDEX = ____constants.MAX_LEVEL_GRID_INDEX
local ____roomTypeNames = require("objects.roomTypeNames")
local ROOM_TYPE_NAMES = ____roomTypeNames.ROOM_TYPE_NAMES
local ____mineShaftRoomSubTypesSet = require("sets.mineShaftRoomSubTypesSet")
local MINE_SHAFT_ROOM_SUB_TYPE_SET = ____mineShaftRoomSubTypesSet.MINE_SHAFT_ROOM_SUB_TYPE_SET
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____dimensions = require("functions.dimensions")
local inDimension = ____dimensions.inDimension
local ____doors = require("functions.doors")
local closeAllDoors = ____doors.closeAllDoors
local getDoors = ____doors.getDoors
local isHiddenSecretRoomDoor = ____doors.isHiddenSecretRoomDoor
local openDoorFast = ____doors.openDoorFast
local ____entities = require("functions.entities")
local getEntities = ____entities.getEntities
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____positionVelocity = require("functions.positionVelocity")
local getEntityPositions = ____positionVelocity.getEntityPositions
local getEntityVelocities = ____positionVelocity.getEntityVelocities
local setEntityPositions = ____positionVelocity.setEntityPositions
local setEntityVelocities = ____positionVelocity.setEntityVelocities
local ____roomData = require("functions.roomData")
local getRoomData = ____roomData.getRoomData
local getRoomDescriptor = ____roomData.getRoomDescriptor
local getRoomDescriptorReadOnly = ____roomData.getRoomDescriptorReadOnly
local getRoomGridIndex = ____roomData.getRoomGridIndex
local ____roomShape = require("functions.roomShape")
local is2x1RoomShape = ____roomShape.is2x1RoomShape
local isBigRoomShape = ____roomShape.isBigRoomShape
local isLRoomShape = ____roomShape.isLRoomShape
local ____roomTransition = require("functions.roomTransition")
local reloadRoom = ____roomTransition.reloadRoom
local ____stage = require("functions.stage")
local getGotoCommand = ____stage.getGotoCommand
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local iRange = ____utils.iRange
--- Helper function to get a read-only copy of the room descriptor for every room on the level. This
-- includes off-grid rooms, such as the Devil Room, and extra-dimensional rooms, if they are
-- generated and exist.
-- 
-- Room descriptors without any data are assumed to be non-existent and are not included.
-- 
-- Under the hood, this is performed by iterating over the `RoomList` from the `Level.GetRooms`
-- method. This is the best way to see if off-grid rooms have been initialized, since it is possible
-- for mods to insert room data at non-official negative room grid indexes.
function ____exports.getReadOnlyRooms(self)
    local level = game:GetLevel()
    local roomList = level:GetRooms()
    local readOnlyRoomDescriptors = {}
    do
        local i = 0
        while i < roomList.Size do
            local readOnlyRoomDescriptor = roomList:Get(i)
            if readOnlyRoomDescriptor ~= nil and readOnlyRoomDescriptor.Data ~= nil then
                readOnlyRoomDescriptors[#readOnlyRoomDescriptors + 1] = readOnlyRoomDescriptor
            end
            i = i + 1
        end
    end
    return readOnlyRoomDescriptors
end
--- Helper function to get the room descriptor for every room on the level that is on the grid. (For
-- example, Devil Rooms are excluded.)
-- 
-- Room descriptors without any data are assumed to be non-existent and are not included.
-- 
-- @param includeExtraDimensionalRooms Optional. On some floors (e.g. Downpour 2, Mines 2),
-- extra-dimensional rooms are automatically be generated. Default
-- is false.
function ____exports.getRoomsInsideGrid(self, includeExtraDimensionalRooms)
    if includeExtraDimensionalRooms == nil then
        includeExtraDimensionalRooms = false
    end
    local level = game:GetLevel()
    local dimensions = includeExtraDimensionalRooms and DIMENSIONS or ({Dimension.CURRENT})
    --- We use a map instead of an array because room shapes occupy more than one room grid index.
    local roomDescriptorMap = __TS__New(Map)
    for ____, dimension in ipairs(dimensions) do
        for ____, roomGridIndex in ipairs(iRange(nil, MAX_LEVEL_GRID_INDEX)) do
            local roomDescriptor = level:GetRoomByIdx(roomGridIndex, dimension)
            if roomDescriptor.Data ~= nil then
                local ptrHash = GetPtrHash(roomDescriptor)
                roomDescriptorMap:set(ptrHash, roomDescriptor)
            end
        end
    end
    return {__TS__Spread(roomDescriptorMap:values())}
end
--- Helper function to get the room descriptor for every room on the level that is outside of the
-- grid (like a Devil Room).
-- 
-- Room descriptors without any data are assumed to be non-existent and are not included.
function ____exports.getRoomsOutsideGrid(self)
    local readOnlyRooms = ____exports.getReadOnlyRooms(nil)
    local readOnlyRoomsOffGrid = __TS__ArrayFilter(
        readOnlyRooms,
        function(____, readOnlyRoomDescriptor) return readOnlyRoomDescriptor.SafeGridIndex < 0 end
    )
    return __TS__ArrayMap(
        readOnlyRoomsOffGrid,
        function(____, readOnlyRoomDescriptor) return getRoomDescriptor(nil, readOnlyRoomDescriptor.SafeGridIndex) end
    )
end
--- Helper function to determine if the provided room is equal to `RoomShape.1x2` or `RoomShape.2x1`.
function ____exports.is2x1Room(self, roomData)
    return is2x1RoomShape(nil, roomData.Shape)
end
--- Helper function to check to see if the current room is an angel shop.
-- 
-- Under the hood, this checks the room type being equal to `RoomType.ANGEL` (15) and the sub-type
-- being equal to `AngelRoomSubType.SHOP` (1).
function ____exports.isAngelShop(self, roomData)
    return roomData.Type == RoomType.ANGEL and roomData.Subtype == AngelRoomSubType.SHOP
end
--- Helper function to check to see if the provided room is the Boss Room for The Beast.
-- 
-- This function is useful because the `Room.GetBossID` method returns 0 for The Beast room.
-- 
-- Under the hood, this checks the room type being equal to `RoomType.DUNGEON` (16) and the sub-type
-- being equal to `DungeonSubType.BEAST_ROOM` (4).
function ____exports.isBeastRoom(self, roomData)
    return roomData.Type == RoomType.DUNGEON and roomData.Subtype == DungeonSubType.BEAST_ROOM
end
--- Helper function to detect if the provided room is big. Specifically, this is all 1x2 rooms, 2x2
-- rooms, and L rooms.
function ____exports.isBigRoom(self, roomData)
    return isBigRoomShape(nil, roomData.Shape)
end
--- Helper function to check if the provided room is the Boss Room for a particular boss. This will
-- only work for bosses that have dedicated boss rooms in the "00.special rooms.stb" file.
function ____exports.isBossRoomOf(self, roomData, bossID)
    return roomData.Type == RoomType.BOSS and roomData.StageID == StageID.SPECIAL_ROOMS and roomData.Subtype == bossID
end
--- Helper function for determining whether the provided room is a crawl space. Use this function
-- over comparing to `RoomType.DUNGEON` or `GridRoom.DUNGEON_IDX` since there is a special case of
-- the player being in a boss fight that takes place in a dungeon.
function ____exports.isCrawlSpace(self, roomData)
    return roomData.Type == RoomType.DUNGEON and roomData.Subtype == DungeonSubType.NORMAL
end
--- Helper function for checking whether the provided room is a crawl space with a door corresponding
-- to `DoorSlotFlag.RIGHT_0` (1 << 2).
function ____exports.isCrawlSpaceWithBlackMarketEntrance(self, roomData)
    return ____exports.isCrawlSpace(nil, roomData) and hasFlag(nil, roomData.Doors, DoorSlotFlag.RIGHT_0)
end
--- Helper function to detect if the provided room is one of the rooms in the Death Certificate area.
function ____exports.isDeathCertificateArea(self, roomData)
    return roomData.StageID == StageID.HOME and (roomData.Subtype == HomeRoomSubType.DEATH_CERTIFICATE_ENTRANCE or roomData.Subtype == HomeRoomSubType.DEATH_CERTIFICATE_ITEMS)
end
--- Helper function to detect if the provided room is a Treasure Room created when entering with a
-- Devil's Crown trinket.
-- 
-- Under the hood, this checks for `RoomDescriptorFlag.DEVIL_TREASURE`.
function ____exports.isDevilsCrownTreasureRoom(self, roomDescriptor)
    return hasFlag(nil, roomDescriptor.Flags, RoomDescriptorFlag.DEVIL_TREASURE)
end
--- Helper function to check to see if the provided room is the Boss Room for Dogma.
-- 
-- This function is useful because the `Room.GetBossID` method returns 0 for the Dogma room.
-- 
-- Note that the "living room" on the Home floor with the TV at the top of the room is not the Dogma
-- Boss Room, as the player is teleported to a different room after watching the TV cutscene.
-- 
-- Under the hood, this checks the stage ID being equal to `StageID.HOME` (35) and the room type
-- being equal to `RoomType.DEFAULT` (1) and the variant being equal to 1000 (which is the only
-- Dogma Boss Room that exists in vanilla) and the sub-type being equal to
-- `HomeRoomSubType.LIVING_ROOM` (3).
function ____exports.isDogmaRoom(self, roomData)
    return roomData.StageID == StageID.HOME and roomData.Type == RoomType.DEFAULT and roomData.Variant == 1000 and roomData.Subtype == HomeRoomSubType.LIVING_ROOM
end
--- Helper function to detect if the provided room is a Double Trouble Boss Room.
-- 
-- This is performed by checking for the string "Double Trouble" inside of the room name. The
-- vanilla game uses this convention for every Double Trouble Boss Room. Note that this method might
-- fail for mods that add extra Double Trouble rooms but do not follow the convention.
-- 
-- Internally, the game is coded to detect Double Trouble Boss Rooms by checking for the variant
-- range of 3700 through 3850. We intentionally do not use this method since it may not work as well
-- with modded rooms.
function ____exports.isDoubleTrouble(self, roomData)
    return roomData.Type == RoomType.BOSS and __TS__StringIncludes(roomData.Name, "Double Trouble")
end
--- Helper function to determine if the index of the provided room is equal to `GridRoom.GENESIS`.
function ____exports.isGenesisRoom(self, roomGridIndex)
    return roomGridIndex == GridRoom.GENESIS
end
--- Helper function to check if the provided room is either the left Home closet (behind the red
-- door) or the right Home closet (with one random pickup).
-- 
-- Home closets have a unique shape that is different from any other room in the game.
function ____exports.isHomeCloset(self, roomData)
    return roomData.StageID == StageID.HOME and (roomData.Subtype == HomeRoomSubType.CLOSET_LEFT or roomData.Subtype == HomeRoomSubType.CLOSET_RIGHT)
end
--- Helper function to determine if the provided room is one of the four L room shapes.
function ____exports.isLRoom(self, roomData)
    return isLRoomShape(nil, roomData.Shape)
end
--- Helper function to determine if the index of the provided room is equal to `GridRoom.MEGA_SATAN`.
function ____exports.isMegaSatanRoom(self, roomGridIndex)
    return roomGridIndex == GridRoom.MEGA_SATAN
end
--- Helper function to determine if the provided room is part of the Repentance "escape sequence" in
-- the Mines/Ashpit.
function ____exports.isMineShaft(self, roomData)
    return (roomData.StageID == StageID.MINES or roomData.StageID == StageID.ASHPIT) and MINE_SHAFT_ROOM_SUB_TYPE_SET:has(roomData.Subtype)
end
--- Helper function to check if the provided room is a miniboss room for a particular miniboss. This
-- will only work for mini-bosses that have dedicated boss rooms in the "00.special rooms.stb" file.
function ____exports.isMinibossRoomOf(self, roomData, minibossID)
    return roomData.Type == RoomType.MINI_BOSS and roomData.StageID == StageID.SPECIAL_ROOMS and roomData.Subtype == minibossID
end
--- Helper function to check if the provided room is a "mirror room" in Downpour or Dross. (These
-- rooms are marked with a specific sub-type.)
function ____exports.isMirrorRoom(self, roomData)
    return roomData.Type == RoomType.DEFAULT and (roomData.StageID == StageID.DOWNPOUR or roomData.StageID == StageID.DROSS) and roomData.Subtype == DownpourRoomSubType.MIRROR
end
--- Helper function to check if the provided room matches one of the given room shapes.
-- 
-- This function is variadic, which means you can pass as many room shapes as you want to match for.
function ____exports.isRoomShape(self, roomData, ...)
    local roomShapes = {...}
    return __TS__ArrayIncludes(roomShapes, roomData.Shape)
end
--- Helper function to check if the provided room matches one of the given room types.
-- 
-- This function is variadic, which means you can pass as many room types as you want to match for.
function ____exports.isRoomType(self, roomData, ...)
    local roomTypes = {...}
    return __TS__ArrayIncludes(roomTypes, roomData.Type)
end
--- Helper function for checking if the provided room is a secret exit that leads to a Repentance
-- floor.
function ____exports.isSecretExit(self, roomGridIndex)
    return roomGridIndex == GridRoom.SECRET_EXIT
end
--- Helper function for checking if the provided room is a secret shop (from the Member Card
-- collectible).
-- 
-- Secret shops are simply copies of normal shops, but with the backdrop of a secret room. In other
-- words, they will have the same room type, room variant, and room sub-type of a normal shop. Thus,
-- the only way to detect them is by using the grid index.
function ____exports.isSecretShop(self, roomGridIndex)
    return roomGridIndex == GridRoom.SECRET_SHOP
end
local SECRET_ROOM_TYPES = __TS__New(ReadonlySet, {RoomType.SECRET, RoomType.SUPER_SECRET, RoomType.ULTRA_SECRET})
--- Helper function for quickly switching to a new room without playing a particular animation. Use
-- this helper function over invoking the `Game.ChangeRoom` method directly to ensure that you do
-- not forget to set the `LeaveDoor` field and to prevent crashing on invalid room grid indexes.
function ____exports.changeRoom(self, roomGridIndex)
    local level = game:GetLevel()
    local roomData = getRoomData(nil, roomGridIndex)
    assertDefined(
        nil,
        roomData,
        ("Failed to change the room to grid index " .. tostring(roomGridIndex)) .. " because that room does not exist."
    )
    level.LeaveDoor = DoorSlot.NO_DOOR_SLOT
    game:ChangeRoom(roomGridIndex)
end
--- Helper function to get the number of rooms that are currently on the floor layout. This does not
-- include off-grid rooms, like the Devil Room.
function ____exports.getNumRooms(self)
    local roomsInsideGrid = ____exports.getRoomsInsideGrid(nil)
    return #roomsInsideGrid
end
--- Helper function to get the room data for a specific room type and variant combination. This is
-- accomplished by using the "goto" console command to load the specified room into the
-- `GridRoom.DEBUG` slot.
-- 
-- Returns undefined if the provided room type and variant combination were not found. (A warning
-- message will also appear on the console, since the "goto" command will fail.)
-- 
-- Note that the side effect of using the "goto" console command is that it will trigger a room
-- transition after a short delay. By default, this function cancels the incoming room transition by
-- using the `Game.StartRoomTransition` method to travel to the same room.
-- 
-- @param roomType The type of room to retrieve.
-- @param roomVariant The room variant to retrieve. (The room variant is the "ID" of the room in
-- Basement Renovator.)
-- @param cancelRoomTransition Optional. Whether to cancel the room transition by using the
-- `Game.StartRoomTransition` method to travel to the same room. Default
-- is true. Set this to false if you are getting the data for many rooms
-- at the same time, and then use the `teleport` helper function when
-- you are finished.
-- @param useSpecialRoomsForRoomTypeDefault Optional. Whether to use `s.default` as the prefix for
-- the `goto` command (instead of `d`) if the room type is
-- `RoomType.DEFAULT` (1). False by default.
function ____exports.getRoomDataForTypeVariant(self, roomType, roomVariant, cancelRoomTransition, useSpecialRoomsForRoomTypeDefault)
    if cancelRoomTransition == nil then
        cancelRoomTransition = true
    end
    if useSpecialRoomsForRoomTypeDefault == nil then
        useSpecialRoomsForRoomTypeDefault = false
    end
    local command = getGotoCommand(nil, roomType, roomVariant, useSpecialRoomsForRoomTypeDefault)
    Isaac.ExecuteCommand(command)
    local newRoomData = getRoomData(nil, GridRoom.DEBUG)
    if cancelRoomTransition then
        reloadRoom(nil)
    end
    return newRoomData
end
--- Helper function to get the item pool type for the current room. For example, this returns
-- `ItemPoolType.ItemPoolType.POOL_ANGEL` if you are in an Angel Room.
function ____exports.getRoomItemPoolType(self)
    local itemPool = game:GetItemPool()
    local room = game:GetRoom()
    local roomType = room:GetType()
    local roomSeed = room:GetSpawnSeed()
    return itemPool:GetPoolForRoom(roomType, roomSeed)
end
--- Helper function to get the proper name of a room type.
-- 
-- For example, `RoomType.TREASURE` will return "Treasure Room".
function ____exports.getRoomTypeName(self, roomType)
    return ROOM_TYPE_NAMES[roomType]
end
--- Helper function to get the room descriptor for every room on the level. This includes off-grid
-- rooms, such as the Devil Room.
-- 
-- Room without any data are assumed to be non-existent and are not included.
-- 
-- - If you want just the rooms inside of the grid, use the `getRoomsInsideGrid` helper function.
-- - If you want just the rooms outside of the grid, use the `getRoomsOutsideGrid` helper function.
-- 
-- @param includeExtraDimensionalRooms Optional. On some floors (e.g. Downpour 2, Mines 2),
-- extra-dimensional rooms are automatically generated. Default is
-- false.
function ____exports.getRooms(self, includeExtraDimensionalRooms)
    if includeExtraDimensionalRooms == nil then
        includeExtraDimensionalRooms = false
    end
    local roomsInGrid = ____exports.getRoomsInsideGrid(nil, includeExtraDimensionalRooms)
    local roomsOutsideGrid = ____exports.getRoomsOutsideGrid(nil)
    local ____array_0 = __TS__SparseArrayNew(table.unpack(roomsInGrid))
    __TS__SparseArrayPush(
        ____array_0,
        table.unpack(roomsOutsideGrid)
    )
    return {__TS__SparseArraySpread(____array_0)}
end
--- Helper function to get the room descriptor for every room on the level in a specific dimension.
-- This will not include any off-grid rooms, such as the Devil Room.
-- 
-- Room descriptors without any data are assumed to be non-existent and are not included.
function ____exports.getRoomsOfDimension(self, dimension)
    local level = game:GetLevel()
    --- We use a map instead of an array because room shapes occupy more than one room grid index.
    local roomsMap = __TS__New(Map)
    for ____, roomGridIndex in ipairs(iRange(nil, MAX_LEVEL_GRID_INDEX)) do
        local roomDescriptor = level:GetRoomByIdx(roomGridIndex, dimension)
        if roomDescriptor.Data ~= nil then
            local ptrHash = GetPtrHash(roomDescriptor)
            roomsMap:set(ptrHash, roomDescriptor)
        end
    end
    return {__TS__Spread(roomsMap:values())}
end
--- Helper function to determine if the current room shape is equal to `RoomShape.1x2` or
-- `RoomShape.2x1`.
function ____exports.in2x1Room(self)
    local roomData = getRoomData(nil)
    return ____exports.is2x1Room(nil, roomData)
end
--- Helper function to check to see if the current room is an angel shop.
-- 
-- Under the hood, this checks the room type being equal to `RoomType.ANGEL` (15) and the sub-type
-- being equal to `AngelRoomSubType.SHOP` (1).
function ____exports.inAngelShop(self)
    local roomData = getRoomData(nil)
    return ____exports.isAngelShop(nil, roomData)
end
--- Helper function to check to see if the current room is the Boss Room for The Beast.
-- 
-- This function is useful because the `Room.GetBossID` method returns 0 for The Beast room.
-- 
-- Under the hood, this checks the room type being equal to `RoomType.DUNGEON` (16) and the sub-type
-- being equal to `DungeonSubType.BEAST_ROOM` (4).
function ____exports.inBeastRoom(self)
    local roomData = getRoomData(nil)
    return ____exports.isBeastRoom(nil, roomData)
end
--- Helper function to detect if the current room is big. Specifically, this is all 1x2 rooms, 2x2
-- rooms, and L rooms.
function ____exports.inBigRoom(self)
    local roomData = getRoomData(nil)
    return ____exports.isBigRoom(nil, roomData)
end
--- Helper function to check if the current room is the Boss Room for a particular boss. This will
-- only work for bosses that have dedicated boss rooms in the "00.special rooms.stb" file.
function ____exports.inBossRoomOf(self, bossID)
    local roomData = getRoomData(nil)
    return ____exports.isBossRoomOf(nil, roomData, bossID)
end
--- Helper function for determining whether the current room is a crawl space. Use this function over
-- comparing to `RoomType.DUNGEON` or `GridRoom.DUNGEON_IDX` since there is a special case of the
-- player being in a boss fight that takes place in a dungeon.
function ____exports.inCrawlSpace(self)
    local roomData = getRoomData(nil)
    return ____exports.isCrawlSpace(nil, roomData)
end
--- Helper function for checking whether the current room is a crawl space with a door corresponding
-- to `DoorSlotFlag.RIGHT_0` (1 << 2).
function ____exports.inCrawlSpaceWithBlackMarketEntrance(self)
    local roomData = getRoomData(nil)
    return ____exports.isCrawlSpaceWithBlackMarketEntrance(nil, roomData)
end
--- Helper function to detect if the current room is one of the rooms in the Death Certificate area.
function ____exports.inDeathCertificateArea(self)
    local roomData = getRoomData(nil)
    return ____exports.isDeathCertificateArea(nil, roomData)
end
--- Helper function to detect if the current room is a Treasure Room created when entering with a
-- Devil's Crown trinket.
-- 
-- Under the hood, this checks for `RoomDescriptorFlag.DEVIL_TREASURE`.
function ____exports.inDevilsCrownTreasureRoom(self)
    local roomDescriptor = getRoomDescriptorReadOnly(nil)
    return ____exports.isDevilsCrownTreasureRoom(nil, roomDescriptor)
end
--- Helper function to check to see if the current room is the Boss Room for Dogma.
-- 
-- This function is useful because the `Room.GetBossID` method returns 0 for the Dogma room.
-- 
-- Note that the "living room" on the Home floor with the TV at the top of the room is not the Dogma
-- Boss Room, as the player is teleported to a different room after watching the TV cutscene.
-- 
-- Under the hood, this checks the stage ID being equal to `StageID.HOME` (35) and the room type
-- being equal to `RoomType.DEFAULT` (1) and the variant being equal to 1000 (which is the only
-- Dogma Boss Room that exists in vanilla) and the sub-type being equal to
-- `HomeRoomSubType.LIVING_ROOM` (3).
function ____exports.inDogmaRoom(self)
    local roomData = getRoomData(nil)
    return ____exports.isDogmaRoom(nil, roomData)
end
--- Helper function to detect if the current room is a Double Trouble Boss Room.
-- 
-- This is performed by checking for the string "Double Trouble" inside of the room name. The
-- vanilla game uses this convention for every Double Trouble Boss Room. Note that this method might
-- fail for mods that add extra Double Trouble rooms but do not follow the convention.
-- 
-- Internally, the game is coded to detect Double Trouble Boss Rooms by checking for the variant
-- range of 3700 through 3850. We intentionally do not use this method since it may not work as well
-- with modded rooms.
function ____exports.inDoubleTrouble(self)
    local roomData = getRoomData(nil)
    return ____exports.isDoubleTrouble(nil, roomData)
end
--- Helper function to determine if the current room index is equal to `GridRoom.GENESIS`.
function ____exports.inGenesisRoom(self)
    local roomGridIndex = getRoomGridIndex(nil)
    return ____exports.isGenesisRoom(nil, roomGridIndex)
end
--- Helper function to check if the current room is either the left Home closet (behind the red door)
-- or the right Home closet (with one random pickup).
-- 
-- Home closets have a unique shape that is different from any other room in the game.
function ____exports.inHomeCloset(self)
    local roomData = getRoomData(nil)
    return ____exports.isHomeCloset(nil, roomData)
end
--- Helper function to determine if the current room shape is one of the four L room shapes.
function ____exports.inLRoom(self)
    local roomData = getRoomData(nil)
    return ____exports.isLRoom(nil, roomData)
end
--- Helper function to determine if the current room index is equal to `GridRoom.MEGA_SATAN`.
function ____exports.inMegaSatanRoom(self)
    local roomGridIndex = getRoomGridIndex(nil)
    return ____exports.isMegaSatanRoom(nil, roomGridIndex)
end
--- Helper function to determine if the current room is part of the Repentance "escape sequence" in
-- the Mines/Ashpit.
function ____exports.inMineShaft(self)
    local roomData = getRoomData(nil)
    return ____exports.isMineShaft(nil, roomData)
end
--- Helper function to check if the current room is a miniboss room for a particular miniboss. This
-- will only work for mini-bosses that have dedicated boss rooms in the "00.special rooms.stb" file.
function ____exports.inMinibossRoomOf(self, minibossID)
    local roomData = getRoomData(nil)
    return ____exports.isMinibossRoomOf(nil, roomData, minibossID)
end
--- Helper function to check if the current room is a "mirror room" in Downpour or Dross. (These
-- rooms are marked with a specific sub-type.)
function ____exports.inMirrorRoom(self)
    local roomData = getRoomData(nil)
    return ____exports.isMirrorRoom(nil, roomData)
end
--- Helper function to check if the current room shape matches one of the given room shapes.
-- 
-- This function is variadic, which means you can pass as many room shapes as you want to match for.
function ____exports.inRoomShape(self, ...)
    local roomData = getRoomData(nil)
    return ____exports.isRoomShape(nil, roomData, ...)
end
--- Helper function to check if the current room matches one of the given room types.
-- 
-- This function is variadic, which means you can pass as many room types as you want to match for.
function ____exports.inRoomType(self, ...)
    local roomData = getRoomData(nil)
    return ____exports.isRoomType(nil, roomData, ...)
end
--- Helper function for checking if the current room is a secret exit that leads to a Repentance
-- floor.
function ____exports.inSecretExit(self)
    local roomGridIndex = getRoomGridIndex(nil)
    return ____exports.isSecretExit(nil, roomGridIndex)
end
--- Helper function for checking if the current room is a secret shop (from the Member Card
-- collectible).
-- 
-- Secret shops are simply copies of normal shops, but with the backdrop of a secret room. In other
-- words, they will have the same room type, room variant, and room sub-type of a normal shop. Thus,
-- the only way to detect them is by using the grid index.
function ____exports.inSecretShop(self)
    local roomGridIndex = getRoomGridIndex(nil)
    return ____exports.isSecretShop(nil, roomGridIndex)
end
--- Helper function to determine whether the current room is the starting room of a floor. It only
-- returns true for the starting room of the primary dimension (meaning that being in the starting
-- room of the mirror world does not count).
function ____exports.inStartingRoom(self)
    local level = game:GetLevel()
    local startingRoomGridIndex = level:GetStartingRoomIndex()
    local roomGridIndex = getRoomGridIndex(nil)
    return roomGridIndex == startingRoomGridIndex and inDimension(nil, Dimension.MAIN)
end
--- Helper function to loop through every room on the floor and see if it has been cleared.
-- 
-- This function will only check rooms inside the grid and inside the current dimension.
-- 
-- @param onlyCheckRoomTypes Optional. A whitelist of room types. If specified, room types not in
-- the array will be ignored. If not specified, then all rooms will be
-- checked. Undefined by default.
-- @param includeSecretRoom Optional. Whether to include the Secret Room. Default is false.
-- @param includeSuperSecretRoom Optional. Whether to include the Super Secret Room. Default is
-- false.
-- @param includeUltraSecretRoom Optional. Whether to include the Ultra Secret Room. Default is
-- false.
-- @allowEmptyVariadic
function ____exports.isAllRoomsClear(self, onlyCheckRoomTypes, includeSecretRoom, includeSuperSecretRoom, includeUltraSecretRoom)
    if includeSecretRoom == nil then
        includeSecretRoom = false
    end
    if includeSuperSecretRoom == nil then
        includeSuperSecretRoom = false
    end
    if includeUltraSecretRoom == nil then
        includeUltraSecretRoom = false
    end
    local roomsInsideGrid = ____exports.getRoomsInsideGrid(nil)
    local matchingRooms
    if onlyCheckRoomTypes == nil then
        matchingRooms = roomsInsideGrid
    else
        local roomTypeWhitelist = __TS__New(ReadonlySet, onlyCheckRoomTypes)
        matchingRooms = __TS__ArrayFilter(
            roomsInsideGrid,
            function(____, roomDescriptor) return roomDescriptor.Data ~= nil and roomTypeWhitelist:has(roomDescriptor.Data.Type) end
        )
    end
    if not includeSecretRoom then
        matchingRooms = __TS__ArrayFilter(
            matchingRooms,
            function(____, roomDescriptor) return roomDescriptor.Data ~= nil and roomDescriptor.Data.Type ~= RoomType.SECRET end
        )
    end
    if not includeSuperSecretRoom then
        matchingRooms = __TS__ArrayFilter(
            matchingRooms,
            function(____, roomDescriptor) return roomDescriptor.Data ~= nil and roomDescriptor.Data.Type ~= RoomType.SUPER_SECRET end
        )
    end
    if not includeUltraSecretRoom then
        matchingRooms = __TS__ArrayFilter(
            matchingRooms,
            function(____, roomDescriptor) return roomDescriptor.Data ~= nil and roomDescriptor.Data.Type ~= RoomType.ULTRA_SECRET end
        )
    end
    return __TS__ArrayEvery(
        matchingRooms,
        function(____, roomDescriptor) return roomDescriptor.Clear end
    )
end
--- Helper function to detect if a room type is a Secret Room, a Super Secret Room, or an Ultra
-- Secret Room.
function ____exports.isSecretRoomType(self, roomType)
    return SECRET_ROOM_TYPES:has(roomType)
end
--- If the `Room.Update` method is called in a `POST_NEW_ROOM` callback, then some entities will
-- slide around (such as the player). Since those entity velocities are already at zero, setting
-- them to zero will have no effect. Thus, a generic solution is to record all of the entity
-- positions/velocities before updating the room, and then restore those positions/velocities.
function ____exports.roomUpdateSafe(self)
    local room = game:GetRoom()
    local entities = getEntities(nil)
    local entityPositions = getEntityPositions(nil, entities)
    local entityVelocities = getEntityVelocities(nil, entities)
    room:Update()
    setEntityPositions(nil, entityPositions, entities)
    setEntityVelocities(nil, entityVelocities, entities)
end
--- Helper function to set the backdrop (i.e. background) of the current room.
function ____exports.setBackdrop(self, backdropType)
    game:ShowHallucination(0, backdropType)
    sfxManager:Stop(SoundEffect.DEATH_CARD)
end
--- Helper function to convert an uncleared room to a cleared room in the `POST_NEW_ROOM` callback.
-- This is useful because if enemies are removed in this callback, a room drop will be awarded and
-- the doors will start closed and then open.
function ____exports.setRoomCleared(self)
    local room = game:GetRoom()
    local roomClear = room:IsClear()
    if roomClear then
        return
    end
    room:SetClear(true)
    for ____, door in ipairs(getDoors(nil)) do
        do
            if isHiddenSecretRoomDoor(nil, door) then
                goto __continue86
            end
            openDoorFast(nil, door)
            door.ExtraVisible = false
        end
        ::__continue86::
    end
    sfxManager:Stop(SoundEffect.DOOR_HEAVY_OPEN)
    game:ShakeScreen(0)
end
--- Helper function to emulate what happens when you bomb an Angel Statue or push a Reward Plate that
-- spawns an NPC.
function ____exports.setRoomUncleared(self)
    local room = game:GetRoom()
    room:SetClear(false)
    closeAllDoors(nil)
end
return ____exports
 end,
["functions.gridEntities"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__ArraySome = ____lualib.__TS__ArraySome
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__StringSplit = ____lualib.__TS__StringSplit
local Set = ____lualib.Set
local Map = ____lualib.Map
local ____exports = {}
local getAllGridEntities, getGridEntityANM2Name, getGridEntityANM2NameDecoration, getRockPNGName
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BackdropType = ____isaac_2Dtypescript_2Ddefinitions.BackdropType
local EffectVariant = ____isaac_2Dtypescript_2Ddefinitions.EffectVariant
local GridCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.GridCollisionClass
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local PoopGridEntityVariant = ____isaac_2Dtypescript_2Ddefinitions.PoopGridEntityVariant
local StatueVariant = ____isaac_2Dtypescript_2Ddefinitions.StatueVariant
local TrapdoorVariant = ____isaac_2Dtypescript_2Ddefinitions.TrapdoorVariant
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local GRID_ENTITY_XML_TYPE_VALUES = ____cachedEnumValues.GRID_ENTITY_XML_TYPE_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local DISTANCE_OF_GRID_TILE = ____constants.DISTANCE_OF_GRID_TILE
local VectorOne = ____constants.VectorOne
local ____gridEntityTypeToBrokenStateMap = require("maps.gridEntityTypeToBrokenStateMap")
local GRID_ENTITY_TYPE_TO_BROKEN_STATE_MAP = ____gridEntityTypeToBrokenStateMap.GRID_ENTITY_TYPE_TO_BROKEN_STATE_MAP
local ____gridEntityXMLMap = require("maps.gridEntityXMLMap")
local GRID_ENTITY_XML_MAP = ____gridEntityXMLMap.GRID_ENTITY_XML_MAP
local ____roomShapeToTopLeftWallGridIndexMap = require("maps.roomShapeToTopLeftWallGridIndexMap")
local DEFAULT_TOP_LEFT_WALL_GRID_INDEX = ____roomShapeToTopLeftWallGridIndexMap.DEFAULT_TOP_LEFT_WALL_GRID_INDEX
local ROOM_SHAPE_TO_TOP_LEFT_WALL_GRID_INDEX_MAP = ____roomShapeToTopLeftWallGridIndexMap.ROOM_SHAPE_TO_TOP_LEFT_WALL_GRID_INDEX_MAP
local ____gridEntityTypeToANM2Name = require("objects.gridEntityTypeToANM2Name")
local GRID_ENTITY_TYPE_TO_ANM2_NAME = ____gridEntityTypeToANM2Name.GRID_ENTITY_TYPE_TO_ANM2_NAME
local ____poopGridEntityXMLTypesSet = require("sets.poopGridEntityXMLTypesSet")
local POOP_GRID_ENTITY_XML_TYPES_SET = ____poopGridEntityXMLTypesSet.POOP_GRID_ENTITY_XML_TYPES_SET
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____entities = require("functions.entities")
local removeEntities = ____entities.removeEntities
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getEffects = ____entitiesSpecific.getEffects
local ____math = require("functions.math")
local isCircleIntersectingRectangle = ____math.isCircleIntersectingRectangle
local ____rooms = require("functions.rooms")
local roomUpdateSafe = ____rooms.roomUpdateSafe
local ____types = require("functions.types")
local isInteger = ____types.isInteger
local parseIntSafe = ____types.parseIntSafe
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local eRange = ____utils.eRange
local iRange = ____utils.iRange
local ____vector = require("functions.vector")
local isVector = ____vector.isVector
local vectorEquals = ____vector.vectorEquals
--- Helper function to get every legal grid index for the current room.
-- 
-- Under the hood, this uses the `Room.GetGridSize` method.
function ____exports.getAllGridIndexes(self)
    local room = game:GetRoom()
    local gridSize = room:GetGridSize()
    return eRange(nil, gridSize)
end
function getAllGridEntities(self)
    local room = game:GetRoom()
    local gridEntities = {}
    for ____, gridIndex in ipairs(____exports.getAllGridIndexes(nil)) do
        local gridEntity = room:GetGridEntity(gridIndex)
        if gridEntity ~= nil then
            gridEntities[#gridEntities + 1] = gridEntity
        end
    end
    return gridEntities
end
function getGridEntityANM2Name(self, gridEntityType)
    repeat
        local ____switch33 = gridEntityType
        local ____cond33 = ____switch33 == GridEntityType.DECORATION
        if ____cond33 then
            do
                return getGridEntityANM2NameDecoration(nil)
            end
        end
        do
            do
                return GRID_ENTITY_TYPE_TO_ANM2_NAME[gridEntityType]
            end
        end
    until true
end
function getGridEntityANM2NameDecoration(self)
    local room = game:GetRoom()
    local backdropType = room:GetBackdropType()
    repeat
        local ____switch37 = backdropType
        local ____cond37 = ____switch37 == BackdropType.BASEMENT or ____switch37 == BackdropType.CELLAR or ____switch37 == BackdropType.BURNING_BASEMENT or ____switch37 == BackdropType.DOWNPOUR_ENTRANCE or ____switch37 == BackdropType.ISAACS_BEDROOM or ____switch37 == BackdropType.CLOSET
        if ____cond37 then
            do
                return "Props_01_Basement.anm2"
            end
        end
        ____cond37 = ____cond37 or (____switch37 == BackdropType.CAVES or ____switch37 == BackdropType.CATACOMBS or ____switch37 == BackdropType.FLOODED_CAVES or ____switch37 == BackdropType.MINES_ENTRANCE)
        if ____cond37 then
            do
                return "Props_03_Caves.anm2"
            end
        end
        ____cond37 = ____cond37 or (____switch37 == BackdropType.DEPTHS or ____switch37 == BackdropType.NECROPOLIS or ____switch37 == BackdropType.DANK_DEPTHS or ____switch37 == BackdropType.SACRIFICE or ____switch37 == BackdropType.MAUSOLEUM or ____switch37 == BackdropType.MAUSOLEUM_ENTRANCE or ____switch37 == BackdropType.CORPSE_ENTRANCE or ____switch37 == BackdropType.MAUSOLEUM_2 or ____switch37 == BackdropType.MAUSOLEUM_3 or ____switch37 == BackdropType.MAUSOLEUM_4 or ____switch37 == BackdropType.CLOSET_B or ____switch37 == BackdropType.DARK_CLOSET)
        if ____cond37 then
            do
                return "Props_05_Depths.anm2"
            end
        end
        ____cond37 = ____cond37 or (____switch37 == BackdropType.WOMB or ____switch37 == BackdropType.SCARRED_WOMB)
        if ____cond37 then
            do
                return "Props_07_The Womb.anm2"
            end
        end
        ____cond37 = ____cond37 or ____switch37 == BackdropType.UTERO
        if ____cond37 then
            do
                return "Props_07_Utero.anm2"
            end
        end
        ____cond37 = ____cond37 or (____switch37 == BackdropType.BLUE_WOMB or ____switch37 == BackdropType.BLUE_WOMB_PASS)
        if ____cond37 then
            do
                return "Props_07_The Womb_blue.anm2"
            end
        end
        ____cond37 = ____cond37 or (____switch37 == BackdropType.SHEOL or ____switch37 == BackdropType.GEHENNA)
        if ____cond37 then
            do
                return "Props_09_Sheol.anm2"
            end
        end
        ____cond37 = ____cond37 or ____switch37 == BackdropType.CATHEDRAL
        if ____cond37 then
            do
                return "Props_10_Cathedral.anm2"
            end
        end
        ____cond37 = ____cond37 or ____switch37 == BackdropType.CHEST
        if ____cond37 then
            do
                return "Props_11_The Chest.anm2"
            end
        end
        ____cond37 = ____cond37 or ____switch37 == BackdropType.GREED_SHOP
        if ____cond37 then
            do
                return "Props_12_Greed.anm2"
            end
        end
        ____cond37 = ____cond37 or ____switch37 == BackdropType.DOWNPOUR
        if ____cond37 then
            do
                return "props_01x_downpour.anm2"
            end
        end
        ____cond37 = ____cond37 or (____switch37 == BackdropType.MINES or ____switch37 == BackdropType.ASHPIT or ____switch37 == BackdropType.MINES_SHAFT or ____switch37 == BackdropType.ASHPIT_SHAFT)
        if ____cond37 then
            do
                return "props_03x_mines.anm2"
            end
        end
        ____cond37 = ____cond37 or (____switch37 == BackdropType.CORPSE or ____switch37 == BackdropType.CORPSE_2 or ____switch37 == BackdropType.CORPSE_3 or ____switch37 == BackdropType.MORTIS)
        if ____cond37 then
            do
                return "props_07_the corpse.anm2"
            end
        end
        ____cond37 = ____cond37 or ____switch37 == BackdropType.DROSS
        if ____cond37 then
            do
                return "props_02x_dross.anm2"
            end
        end
        do
            do
                return "Props_01_Basement.anm2"
            end
        end
    until true
end
--- Helper function to get the top left and bottom right corners of a given grid entity.
function ____exports.getGridEntityCollisionPoints(self, gridEntity)
    local topLeft = Vector(gridEntity.Position.X - DISTANCE_OF_GRID_TILE / 2, gridEntity.Position.Y - DISTANCE_OF_GRID_TILE / 2)
    local bottomRight = Vector(gridEntity.Position.X + DISTANCE_OF_GRID_TILE / 2, gridEntity.Position.Y + DISTANCE_OF_GRID_TILE / 2)
    return {topLeft = topLeft, bottomRight = bottomRight}
end
function getRockPNGName(self)
    local room = game:GetRoom()
    local backdropType = room:GetBackdropType()
    repeat
        local ____switch60 = backdropType
        local ____cond60 = ____switch60 == BackdropType.BASEMENT or ____switch60 == BackdropType.CHEST
        if ____cond60 then
            do
                return "rocks_basement.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.CELLAR
        if ____cond60 then
            do
                return "rocks_cellar.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.BURNING_BASEMENT
        if ____cond60 then
            do
                return "rocks_burningbasement.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.CAVES
        if ____cond60 then
            do
                return "rocks_caves.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.CATACOMBS
        if ____cond60 then
            do
                return "rocks_catacombs.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.FLOODED_CAVES
        if ____cond60 then
            do
                return "rocks_drownedcaves.png"
            end
        end
        ____cond60 = ____cond60 or (____switch60 == BackdropType.DEPTHS or ____switch60 == BackdropType.NECROPOLIS or ____switch60 == BackdropType.DANK_DEPTHS or ____switch60 == BackdropType.SACRIFICE or ____switch60 == BackdropType.DARK_CLOSET)
        if ____cond60 then
            do
                return "rocks_depths.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.WOMB
        if ____cond60 then
            do
                return "rocks_womb.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.UTERO
        if ____cond60 then
            do
                return "rocks_utero.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.SCARRED_WOMB
        if ____cond60 then
            do
                return "rocks_scarredwomb.png"
            end
        end
        ____cond60 = ____cond60 or (____switch60 == BackdropType.BLUE_WOMB or ____switch60 == BackdropType.BLUE_WOMB_PASS)
        if ____cond60 then
            do
                return "rocks_bluewomb.png"
            end
        end
        ____cond60 = ____cond60 or (____switch60 == BackdropType.SHEOL or ____switch60 == BackdropType.DARK_ROOM)
        if ____cond60 then
            do
                return "rocks_sheol.png"
            end
        end
        ____cond60 = ____cond60 or (____switch60 == BackdropType.CATHEDRAL or ____switch60 == BackdropType.PLANETARIUM)
        if ____cond60 then
            do
                return "rocks_cathedral.png"
            end
        end
        ____cond60 = ____cond60 or (____switch60 == BackdropType.SECRET or ____switch60 == BackdropType.MINES or ____switch60 == BackdropType.MINES_ENTRANCE or ____switch60 == BackdropType.MINES_SHAFT)
        if ____cond60 then
            do
                return "rocks_secretroom.png"
            end
        end
        ____cond60 = ____cond60 or (____switch60 == BackdropType.DOWNPOUR or ____switch60 == BackdropType.DOWNPOUR_ENTRANCE)
        if ____cond60 then
            do
                return "rocks_downpour.png"
            end
        end
        ____cond60 = ____cond60 or (____switch60 == BackdropType.MAUSOLEUM or ____switch60 == BackdropType.MAUSOLEUM_ENTRANCE or ____switch60 == BackdropType.MAUSOLEUM_2 or ____switch60 == BackdropType.MAUSOLEUM_3 or ____switch60 == BackdropType.MAUSOLEUM_4)
        if ____cond60 then
            do
                return "rocks_mausoleum.png"
            end
        end
        ____cond60 = ____cond60 or (____switch60 == BackdropType.CORPSE or ____switch60 == BackdropType.MORTIS)
        if ____cond60 then
            do
                return "rocks_corpse.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.CORPSE_ENTRANCE
        if ____cond60 then
            do
                return "rocks_corpseentrance.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.CORPSE_2
        if ____cond60 then
            do
                return "rocks_corpse2.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.CORPSE_3
        if ____cond60 then
            do
                return "rocks_corpse3.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.DROSS
        if ____cond60 then
            do
                return "rocks_dross.png"
            end
        end
        ____cond60 = ____cond60 or (____switch60 == BackdropType.ASHPIT or ____switch60 == BackdropType.ASHPIT_SHAFT)
        if ____cond60 then
            do
                return "rocks_ashpit.png"
            end
        end
        ____cond60 = ____cond60 or ____switch60 == BackdropType.GEHENNA
        if ____cond60 then
            do
                return "rocks_gehenna.png"
            end
        end
        do
            do
                return "rocks_basement.png"
            end
        end
    until true
end
--- Helper function to get the grid indexes on the surrounding tiles from the provided grid index.
-- 
-- There are always 8 grid indexes returned (e.g. top-left + top + top-right + left + right +
-- bottom-left + bottom + right), even if the computed values would be negative or otherwise
-- invalid.
function ____exports.getSurroundingGridIndexes(self, gridIndex)
    local room = game:GetRoom()
    local gridWidth = room:GetGridWidth()
    return {
        gridIndex - gridWidth - 1,
        gridIndex - gridWidth,
        gridIndex - gridWidth + 1,
        gridIndex - 1,
        gridIndex + 1,
        gridIndex + gridWidth - 1,
        gridIndex + gridWidth,
        gridIndex + gridWidth + 1
    }
end
--- Helper function to get the grid index of the top left wall. (This will depend on what the current
-- room shape is.)
-- 
-- This function can be useful in certain situations to determine if the room is currently loaded.
function ____exports.getTopLeftWallGridIndex(self)
    local room = game:GetRoom()
    local roomShape = room:GetRoomShape()
    local topLeftWallGridIndex = ROOM_SHAPE_TO_TOP_LEFT_WALL_GRID_INDEX_MAP:get(roomShape)
    return topLeftWallGridIndex or DEFAULT_TOP_LEFT_WALL_GRID_INDEX
end
--- Helper function to remove a grid entity by providing the grid entity object or the grid index
-- inside of the room.
-- 
-- If removing a Devil Statue or an Angel Statue, this will also remove the associated effect
-- (`EffectVariant.DEVIL` (6) or `EffectVariant.ANGEL` (9), respectively.)
-- 
-- @param gridEntityOrGridIndex The grid entity or grid index to remove.
-- @param updateRoom Whether to update the room after the grid entity is removed. This is generally
-- a good idea because if the room is not updated, you will be unable to spawn
-- another grid entity on the same tile until a frame has passed. However, doing
-- this is expensive, since it involves a call to `Isaac.GetRoomEntities`, so set
-- this to false if you need to run this function multiple times.
function ____exports.removeGridEntity(self, gridEntityOrGridIndex, updateRoom)
    local room = game:GetRoom()
    local ____isInteger_result_2
    if isInteger(nil, gridEntityOrGridIndex) then
        ____isInteger_result_2 = room:GetGridEntity(gridEntityOrGridIndex)
    else
        ____isInteger_result_2 = gridEntityOrGridIndex
    end
    local gridEntity = ____isInteger_result_2
    if gridEntity == nil then
        return
    end
    local gridEntityType = gridEntity:GetType()
    local variant = gridEntity:GetVariant()
    local position = gridEntity.Position
    local gridIndex = isInteger(nil, gridEntityOrGridIndex) and gridEntityOrGridIndex or gridEntityOrGridIndex:GetGridIndex()
    room:RemoveGridEntity(gridIndex, 0, false)
    if updateRoom then
        roomUpdateSafe(nil)
    end
    if gridEntityType == GridEntityType.STATUE then
        local effectVariant = variant == StatueVariant.DEVIL and EffectVariant.DEVIL or EffectVariant.ANGEL
        local effects = getEffects(nil, effectVariant)
        local effectsOnTile = __TS__ArrayFilter(
            effects,
            function(____, effect) return vectorEquals(nil, effect.Position, position) end
        )
        removeEntities(nil, effectsOnTile)
    end
end
--- Helper function to spawn a grid entity with a specific variant.
-- 
-- Use this instead of the `Isaac.GridSpawn` method since it:
-- - handles giving pits collision
-- - removes existing grid entities on the same tile, if any
-- - allows you to specify the grid index or the position
-- 
-- @param gridEntityType The `GridEntityType` to use.
-- @param variant The variant to use.
-- @param gridIndexOrPosition The grid index or position in the room that you want to spawn the grid
-- entity at. If a position is specified, the closest grid index will be
-- used.
-- @param removeExistingGridEntity Optional. Whether to remove the existing grid entity on the same
-- tile, if it exists. Defaults to true. If false, this function
-- will do nothing, since spawning a grid entity on top of another
-- grid entity will not replace it.
function ____exports.spawnGridEntityWithVariant(self, gridEntityType, variant, gridIndexOrPosition, removeExistingGridEntity)
    if removeExistingGridEntity == nil then
        removeExistingGridEntity = true
    end
    local room = game:GetRoom()
    local ____isVector_result_3
    if isVector(nil, gridIndexOrPosition) then
        ____isVector_result_3 = room:GetGridEntityFromPos(gridIndexOrPosition)
    else
        ____isVector_result_3 = room:GetGridEntity(gridIndexOrPosition)
    end
    local existingGridEntity = ____isVector_result_3
    if existingGridEntity ~= nil then
        if removeExistingGridEntity then
            ____exports.removeGridEntity(nil, existingGridEntity, true)
        else
            return nil
        end
    end
    local position = isVector(nil, gridIndexOrPosition) and gridIndexOrPosition or room:GetGridPosition(gridIndexOrPosition)
    local gridEntity = Isaac.GridSpawn(gridEntityType, variant, position)
    if gridEntity == nil then
        return gridEntity
    end
    if gridEntityType == GridEntityType.PIT then
        local pit = gridEntity:ToPit()
        if pit ~= nil then
            pit:UpdateCollision()
        end
    elseif gridEntityType == GridEntityType.WALL then
        gridEntity.CollisionClass = GridCollisionClass.WALL
    end
    return gridEntity
end
--- For some specific grid entities, the variant defined in the XML is what is used by the actual
-- game (which is not the case for e.g. poops).
local GRID_ENTITY_TYPES_THAT_KEEP_GRID_ENTITY_XML_VARIANT = __TS__New(ReadonlySet, {GridEntityType.SPIKES_ON_OFF, GridEntityType.PRESSURE_PLATE, GridEntityType.TELEPORTER})
local BREAKABLE_GRID_ENTITY_TYPES_BY_EXPLOSIONS = __TS__New(ReadonlySet, {
    GridEntityType.ROCK,
    GridEntityType.ROCK_TINTED,
    GridEntityType.ROCK_BOMB,
    GridEntityType.ROCK_ALT,
    GridEntityType.SPIDER_WEB,
    GridEntityType.TNT,
    GridEntityType.POOP,
    GridEntityType.ROCK_SUPER_SPECIAL,
    GridEntityType.ROCK_SPIKED,
    GridEntityType.ROCK_ALT_2,
    GridEntityType.ROCK_GOLD
})
local BREAKABLE_GRID_ENTITY_TYPES_VARIANTS_BY_EXPLOSIONS = __TS__New(
    ReadonlySet,
    {(tostring(GridEntityType.STATUE) .. ".") .. tostring(StatueVariant.ANGEL)}
)
local GRID_ENTITY_XML_TYPES_SET = __TS__New(ReadonlySet, GRID_ENTITY_XML_TYPE_VALUES)
--- Helper function to convert the grid entity type found in a room XML file to the corresponding
-- grid entity type and variant normally used by the game. For example, `GridEntityXMLType.ROCK` is
-- 1000 (in a room XML file), but `GridEntityType.ROCK` is equal to 2 (in-game).
function ____exports.convertXMLGridEntityType(self, gridEntityXMLType, gridEntityXMLVariant)
    local gridEntityArray = GRID_ENTITY_XML_MAP:get(gridEntityXMLType)
    assertDefined(
        nil,
        gridEntityArray,
        "Failed to find an entry in the grid entity map for XML entity type: " .. tostring(gridEntityXMLType)
    )
    local gridEntityType = gridEntityArray[1]
    local variant = GRID_ENTITY_TYPES_THAT_KEEP_GRID_ENTITY_XML_VARIANT:has(gridEntityType) and gridEntityXMLVariant or gridEntityArray[2]
    return {gridEntityType, variant}
end
--- Helper function to check if one or more of a specific kind of grid entity is present in the
-- current room.
-- 
-- @param gridEntityType The grid entity type to match.
-- @param variant Optional. Default is -1, which matches every variant.
function ____exports.doesGridEntityExist(self, gridEntityType, variant)
    if variant == nil then
        variant = -1
    end
    local room = game:GetRoom()
    local gridIndexes = ____exports.getAllGridIndexes(nil)
    return __TS__ArraySome(
        gridIndexes,
        function(____, gridIndex)
            local gridEntity = room:GetGridEntity(gridIndex)
            if gridEntity == nil then
                return false
            end
            local thisGridEntityType = gridEntity:GetType()
            local thisVariant = gridEntity:GetVariant()
            return gridEntityType == thisGridEntityType and (variant == -1 or variant == thisVariant)
        end
    )
end
--- Gets the entities that have a hitbox that overlaps with any part of the square that the grid
-- entity is on.
-- 
-- This function is useful because the vanilla collision callbacks do not work with grid entities.
-- This is used by `POST_GRID_ENTITY_COLLISION` custom callback.
-- 
-- Note that this function will not work properly in the `POST_NEW_ROOM` callback since entities do
-- not have collision yet in that callback.
function ____exports.getCollidingEntitiesWithGridEntity(self, gridEntity)
    local ____exports_getGridEntityCollisionPoints_result_0 = ____exports.getGridEntityCollisionPoints(nil, gridEntity)
    local topLeft = ____exports_getGridEntityCollisionPoints_result_0.topLeft
    local bottomRight = ____exports_getGridEntityCollisionPoints_result_0.bottomRight
    local closeEntities = Isaac.FindInRadius(gridEntity.Position, DISTANCE_OF_GRID_TILE * 2)
    return __TS__ArrayFilter(
        closeEntities,
        function(____, entity) return entity:CollidesWithGrid() and isCircleIntersectingRectangle(
            nil,
            entity.Position,
            entity.Size + 0.1,
            topLeft,
            bottomRight
        ) end
    )
end
--- Helper function to get the grid entity type and variant from a `GridEntityID`.
function ____exports.getConstituentsFromGridEntityID(self, gridEntityID)
    local parts = __TS__StringSplit(gridEntityID, ".")
    if #parts ~= 2 then
        error("Failed to get the constituents from a grid entity ID: " .. gridEntityID)
    end
    local gridEntityTypeString, variantString = table.unpack(parts)
    assertDefined(nil, gridEntityTypeString, "Failed to get the first constituent from a grid entity ID: " .. gridEntityID)
    assertDefined(nil, variantString, "Failed to get the second constituent from a grid entity ID: " .. gridEntityID)
    local gridEntityType = parseIntSafe(nil, gridEntityTypeString)
    assertDefined(nil, gridEntityType, "Failed to convert the grid entity type to a number: " .. gridEntityTypeString)
    local variant = parseIntSafe(nil, variantString)
    assertDefined(nil, variant, "Failed to convert the grid entity variant to an integer: " .. variantString)
    return {gridEntityType, variant}
end
--- Helper function to get every grid entity in the current room.
-- 
-- Use this function with no arguments to get every grid entity, or specify a variadic amount of
-- arguments to match specific grid entity types.
-- 
-- For example:
-- 
-- ```ts
-- for (const gridEntity of getGridEntities()) {
--   print(gridEntity.GetType())
-- }
-- ```
-- 
-- For example:
-- 
-- ```ts
-- const rocks = getGridEntities(
--   GridEntityType.ROCK,
--   GridEntityType.BLOCK,
--   GridEntityType.ROCK_TINTED,
-- );
-- ```
-- 
-- @allowEmptyVariadic
function ____exports.getGridEntities(self, ...)
    local gridEntityTypes = {...}
    local gridEntities = getAllGridEntities(nil)
    if #gridEntityTypes == 0 then
        return gridEntities
    end
    local gridEntityTypesSet = __TS__New(ReadonlySet, gridEntityTypes)
    return __TS__ArrayFilter(
        gridEntities,
        function(____, gridEntity)
            local gridEntityType = gridEntity:GetType()
            return gridEntityTypesSet:has(gridEntityType)
        end
    )
end
--- Helper function to get every grid entity in the current room except for certain specific types.
-- 
-- This function is variadic, meaning that you can specify as many grid entity types as you want to
-- exclude.
function ____exports.getGridEntitiesExcept(self, ...)
    local gridEntityTypes = {...}
    local gridEntities = getAllGridEntities(nil)
    if #gridEntityTypes == 0 then
        return gridEntities
    end
    local gridEntityTypesSet = __TS__New(ReadonlySet, gridEntityTypes)
    return __TS__ArrayFilter(
        gridEntities,
        function(____, gridEntity)
            local gridEntityType = gridEntity:GetType()
            return not gridEntityTypesSet:has(gridEntityType)
        end
    )
end
--- Helper function to get all grid entities in a given radius around a given point.
function ____exports.getGridEntitiesInRadius(self, targetPosition, radius)
    radius = math.abs(radius)
    local topLeftOffset = VectorOne * -radius
    local mostTopLeftPosition = targetPosition + topLeftOffset
    local room = game:GetRoom()
    local diameter = radius * 2
    local iterations = math.ceil(diameter / DISTANCE_OF_GRID_TILE)
    local separation = diameter / iterations
    local gridEntities = {}
    local registeredGridIndexes = __TS__New(Set)
    for ____, x in ipairs(iRange(nil, iterations)) do
        for ____, y in ipairs(iRange(nil, iterations)) do
            do
                local position = mostTopLeftPosition + Vector(x * separation, y * separation)
                local gridIndex = room:GetGridIndex(position)
                local gridEntity = room:GetGridEntityFromPos(position)
                if gridEntity == nil or registeredGridIndexes:has(gridIndex) then
                    goto __continue23
                end
                registeredGridIndexes:add(gridIndex)
                local ____exports_getGridEntityCollisionPoints_result_1 = ____exports.getGridEntityCollisionPoints(nil, gridEntity)
                local topLeft = ____exports_getGridEntityCollisionPoints_result_1.topLeft
                local bottomRight = ____exports_getGridEntityCollisionPoints_result_1.bottomRight
                if isCircleIntersectingRectangle(
                    nil,
                    targetPosition,
                    radius,
                    topLeft,
                    bottomRight
                ) then
                    gridEntities[#gridEntities + 1] = gridEntity
                end
            end
            ::__continue23::
        end
    end
    return gridEntities
end
--- Helper function to get a map of every grid entity in the current room. The indexes of the map are
-- equal to the grid index. The values of the map are equal to the grid entities.
-- 
-- Use this function with no arguments to get every grid entity, or specify a variadic amount of
-- arguments to match specific grid entity types.
-- 
-- @allowEmptyVariadic
function ____exports.getGridEntitiesMap(self, ...)
    local gridEntities = ____exports.getGridEntities(nil, ...)
    local gridEntityMap = __TS__New(Map)
    for ____, gridEntity in ipairs(gridEntities) do
        local gridIndex = gridEntity:GetGridIndex()
        gridEntityMap:set(gridIndex, gridEntity)
    end
    return gridEntityMap
end
--- Helper function to get the ANM2 path for a grid entity type.
function ____exports.getGridEntityANM2Path(self, gridEntityType)
    local gridEntityANM2Name = getGridEntityANM2Name(nil, gridEntityType)
    return "gfx/grid/" .. tostring(gridEntityANM2Name)
end
--- Helper function to get a string containing the grid entity's type and variant.
function ____exports.getGridEntityID(self, gridEntity)
    local gridEntityType = gridEntity:GetType()
    local variant = gridEntity:GetVariant()
    return (tostring(gridEntityType) .. ".") .. tostring(variant)
end
--- Helper function to get a formatted string in the format returned by the `getGridEntityID`
-- function.
function ____exports.getGridEntityIDFromConstituents(self, gridEntityType, variant)
    return (tostring(gridEntityType) .. ".") .. tostring(variant)
end
--- Helper function to get all of the grid entities in the room that specifically match the type and
-- variant provided.
-- 
-- If you want to match every variant, use the `getGridEntities` function instead.
function ____exports.getMatchingGridEntities(self, gridEntityType, variant)
    local gridEntities = ____exports.getGridEntities(nil, gridEntityType)
    return __TS__ArrayFilter(
        gridEntities,
        function(____, gridEntity) return gridEntity:GetVariant() == variant end
    )
end
--- Helper function to get the PNG path for a rock. This depends on the current room's backdrop. The
-- values are taken from the "backdrops.xml" file.
-- 
-- All of the rock PNGs are in the "gfx/grid" directory.
function ____exports.getRockPNGPath(self)
    local rockPNGName = getRockPNGName(nil)
    return "gfx/grid/" .. rockPNGName
end
--- Helper function to get the grid entities on the surrounding tiles from the provided grid entity.
-- 
-- For example, if a rock was surrounded by rocks on all sides, this would return an array of 8
-- rocks (e.g. top-left + top + top-right + left + right + bottom-left + bottom + right).
function ____exports.getSurroundingGridEntities(self, gridEntity)
    local room = game:GetRoom()
    local gridIndex = gridEntity:GetGridIndex()
    local surroundingGridIndexes = ____exports.getSurroundingGridIndexes(nil, gridIndex)
    local surroundingGridEntities = {}
    for ____, surroundingGridIndex in ipairs(surroundingGridIndexes) do
        local surroundingGridEntity = room:GetGridEntity(surroundingGridIndex)
        if surroundingGridEntity ~= nil then
            surroundingGridEntities[#surroundingGridEntities + 1] = surroundingGridEntity
        end
    end
    return surroundingGridEntities
end
--- Helper function to get the top left wall in the current room.
-- 
-- This function can be useful in certain situations to determine if the room is currently loaded.
function ____exports.getTopLeftWall(self)
    local room = game:GetRoom()
    local topLeftWallGridIndex = ____exports.getTopLeftWallGridIndex(nil)
    return room:GetGridEntity(topLeftWallGridIndex)
end
--- Helper function to detect if a particular grid entity would "break" if it was touched by an
-- explosion.
-- 
-- For example, rocks and pots are breakable by explosions, but blocks are not.
function ____exports.isGridEntityBreakableByExplosion(self, gridEntity)
    local gridEntityType = gridEntity:GetType()
    local variant = gridEntity:GetVariant()
    local gridEntityTypeVariant = (tostring(gridEntityType) .. ".") .. tostring(variant)
    return BREAKABLE_GRID_ENTITY_TYPES_BY_EXPLOSIONS:has(gridEntityType) or BREAKABLE_GRID_ENTITY_TYPES_VARIANTS_BY_EXPLOSIONS:has(gridEntityTypeVariant)
end
--- Helper function to see if the provided grid entity is in its respective broken state. See the
-- `GRID_ENTITY_TYPE_TO_BROKEN_STATE_MAP` constant for more details.
-- 
-- Note that in the case of `GridEntityType.LOCK` (11), the state will turn to being broken before
-- the actual collision for the entity is removed.
function ____exports.isGridEntityBroken(self, gridEntity)
    local gridEntityType = gridEntity:GetType()
    local brokenState = GRID_ENTITY_TYPE_TO_BROKEN_STATE_MAP:get(gridEntityType)
    return gridEntity.State == brokenState
end
--- Helper function to see if an arbitrary number is a valid `GridEntityXMLType`. This is useful in
-- the `PRE_ROOM_ENTITY_SPAWN` callback for narrowing the type of the first argument.
function ____exports.isGridEntityXMLType(self, num)
    return GRID_ENTITY_XML_TYPES_SET:has(num)
end
--- Helper function to check if the provided grid index has a door on it or if the surrounding 8 grid
-- indexes have a door on it.
function ____exports.isGridIndexAdjacentToDoor(self, gridIndex)
    local room = game:GetRoom()
    local surroundingGridIndexes = ____exports.getSurroundingGridIndexes(nil, gridIndex)
    local gridIndexes = {
        gridIndex,
        table.unpack(surroundingGridIndexes)
    }
    for ____, gridIndexToInspect in ipairs(gridIndexes) do
        local gridEntity = room:GetGridEntity(gridIndexToInspect)
        if gridEntity ~= nil then
            local door = gridEntity:ToDoor()
            if door ~= nil then
                return true
            end
        end
    end
    return false
end
--- Helper function to see if a `GridEntityXMLType` is some kind of poop.
function ____exports.isPoopGridEntityXMLType(self, gridEntityXMLType)
    return POOP_GRID_ENTITY_XML_TYPES_SET:has(gridEntityXMLType)
end
--- Helper function to detect whether a given Void Portal is one that randomly spawns after a boss is
-- defeated or is one that naturally spawns in the room after Hush.
-- 
-- Under the hood, this is determined by looking at the `VarData` of the entity:
-- - The `VarData` of Void Portals that are spawned after bosses will be equal to 1.
-- - The `VarData` of the Void Portal in the room after Hush is equal to 0.
function ____exports.isPostBossVoidPortal(self, gridEntity)
    local saveState = gridEntity:GetSaveState()
    return saveState.Type == GridEntityType.TRAPDOOR and saveState.Variant == TrapdoorVariant.VOID_PORTAL and saveState.VarData == 1
end
--- Helper function to all grid entities in the room except for ones matching the grid entity types
-- provided.
-- 
-- Note that this function will automatically update the room. (This means that you can spawn new
-- grid entities on the same tile on the same frame, if needed.)
-- 
-- For example:
-- 
-- ```ts
-- removeAllGridEntitiesExcept(
--   GridEntityType.WALL,
--   GridEntityType.DOOR,
-- );
-- ```
-- 
-- @returns The grid entities that were removed.
function ____exports.removeAllGridEntitiesExcept(self, ...)
    local gridEntityTypes = {...}
    local gridEntityTypeExceptions = __TS__New(ReadonlySet, gridEntityTypes)
    local gridEntities = ____exports.getGridEntities(nil)
    local removedGridEntities = {}
    for ____, gridEntity in ipairs(gridEntities) do
        local gridEntityType = gridEntity:GetType()
        if not gridEntityTypeExceptions:has(gridEntityType) then
            ____exports.removeGridEntity(nil, gridEntity, false)
            removedGridEntities[#removedGridEntities + 1] = gridEntity
        end
    end
    if #removedGridEntities > 0 then
        roomUpdateSafe(nil)
    end
    return removedGridEntities
end
--- Helper function to remove all of the grid entities in the room that match the grid entity types
-- provided.
-- 
-- Note that this function will automatically update the room. (This means that you can spawn new
-- grid entities on the same tile on the same frame, if needed.)
-- 
-- For example:
-- 
-- ```ts
-- removeAllMatchingGridEntities(
--   GridEntityType.ROCK,
--   GridEntityType.BLOCK,
--   GridEntityType.ROCK_TINTED,
-- );
-- ```
-- 
-- @returns An array of the grid entities removed.
function ____exports.removeAllMatchingGridEntities(self, ...)
    local gridEntities = ____exports.getGridEntities(nil, ...)
    if #gridEntities == 0 then
        return {}
    end
    for ____, gridEntity in ipairs(gridEntities) do
        ____exports.removeGridEntity(nil, gridEntity, false)
    end
    roomUpdateSafe(nil)
    return gridEntities
end
--- Helper function to remove all entities that just spawned from a grid entity breaking.
-- Specifically, this is any entities that overlap with the position of a grid entity and are on
-- frame 0.
-- 
-- You must specify an array of entities to look through.
function ____exports.removeEntitiesSpawnedFromGridEntity(self, entities, gridEntity)
    local entitiesFromGridEntity = __TS__ArrayFilter(
        entities,
        function(____, entity) return entity.FrameCount == 0 and vectorEquals(nil, entity.Position, gridEntity.Position) end
    )
    removeEntities(nil, entitiesFromGridEntity)
end
--- Helper function to remove all of the grid entities in the supplied array.
-- 
-- @param gridEntities The array of grid entities to remove.
-- @param updateRoom Whether to update the room after the grid entities are removed. This is
-- generally a good idea because if the room is not updated, you will be unable to
-- spawn another grid entity on the same tile until a frame has passed. However,
-- doing this is expensive, since it involves a call to `Isaac.GetRoomEntities`,
-- so set this to false if you need to run this function multiple times.
-- @param cap Optional. If specified, will only remove the given amount of entities.
-- @returns An array of the entities that were removed.
function ____exports.removeGridEntities(self, gridEntities, updateRoom, cap)
    if #gridEntities == 0 then
        return {}
    end
    local gridEntitiesRemoved = {}
    for ____, gridEntity in ipairs(gridEntities) do
        ____exports.removeGridEntity(nil, gridEntity, false)
        gridEntitiesRemoved[#gridEntitiesRemoved + 1] = gridEntity
        if cap ~= nil and #gridEntitiesRemoved >= cap then
            break
        end
    end
    if updateRoom then
        roomUpdateSafe(nil)
    end
    return gridEntitiesRemoved
end
--- Helper function to make a grid entity invisible. This is accomplished by resetting the sprite.
-- 
-- Note that this function is destructive such that once you make a grid entity invisible, it can no
-- longer become visible. (This is because the information about the sprite is lost when it is
-- reset.)
function ____exports.setGridEntityInvisible(self, gridEntity)
    local sprite = gridEntity:GetSprite()
    sprite:Reset()
end
--- Helper function to change the type of a grid entity to another type. Use this instead of the
-- `GridEntity.SetType` method since that does not properly handle updating the sprite of the grid
-- entity after the type is changed.
-- 
-- Setting the new type to `GridEntityType.NULL` (0) will have no effect.
function ____exports.setGridEntityType(self, gridEntity, gridEntityType)
    gridEntity:SetType(gridEntityType)
    local sprite = gridEntity:GetSprite()
    local anm2Path = ____exports.getGridEntityANM2Path(nil, gridEntityType)
    if anm2Path == nil then
        return
    end
    sprite:Load(anm2Path, false)
    if gridEntityType == GridEntityType.ROCK then
        local pngPath = ____exports.getRockPNGPath(nil)
        sprite:ReplaceSpritesheet(0, pngPath)
    end
    sprite:LoadGraphics()
    local defaultAnimation = sprite:GetDefaultAnimation()
    sprite:Play(defaultAnimation, true)
end
--- Helper function to spawn a giant poop. This is performed by spawning each of the four quadrant
-- grid entities in the appropriate positions.
-- 
-- @returns Whether spawning the four quadrants was successful.
function ____exports.spawnGiantPoop(self, topLeftGridIndex)
    local room = game:GetRoom()
    local gridWidth = room:GetGridWidth()
    local topRightGridIndex = topLeftGridIndex + 1
    local bottomLeftGridIndex = topLeftGridIndex + gridWidth
    local bottomRightGridIndex = bottomLeftGridIndex + 1
    for ____, gridIndex in ipairs({topLeftGridIndex, topRightGridIndex, bottomLeftGridIndex, bottomRightGridIndex}) do
        local gridEntity = room:GetGridEntity(gridIndex)
        if gridEntity ~= nil then
            return false
        end
    end
    local topLeft = ____exports.spawnGridEntityWithVariant(nil, GridEntityType.POOP, PoopGridEntityVariant.GIANT_TOP_LEFT, topLeftGridIndex)
    local topRight = ____exports.spawnGridEntityWithVariant(nil, GridEntityType.POOP, PoopGridEntityVariant.GIANT_TOP_RIGHT, topRightGridIndex)
    local bottomLeft = ____exports.spawnGridEntityWithVariant(nil, GridEntityType.POOP, PoopGridEntityVariant.GIANT_BOTTOM_LEFT, bottomLeftGridIndex)
    local bottomRight = ____exports.spawnGridEntityWithVariant(nil, GridEntityType.POOP, PoopGridEntityVariant.GIANT_BOTTOM_RIGHT, bottomRightGridIndex)
    return topLeft ~= nil and topLeft:GetType() == GridEntityType.POOP and topLeft:GetVariant() == PoopGridEntityVariant.GIANT_TOP_LEFT and topRight ~= nil and topRight:GetType() == GridEntityType.POOP and topRight:GetVariant() == PoopGridEntityVariant.GIANT_TOP_RIGHT and bottomLeft ~= nil and bottomLeft:GetType() == GridEntityType.POOP and bottomLeft:GetVariant() == PoopGridEntityVariant.GIANT_BOTTOM_LEFT and bottomRight ~= nil and bottomRight:GetType() == GridEntityType.POOP and bottomRight:GetVariant() == PoopGridEntityVariant.GIANT_BOTTOM_RIGHT
end
--- Helper function to spawn a grid entity with a specific type.
-- 
-- This function assumes you want to give the grid entity a variant of 0. If you want to specify a
-- variant, use the `spawnGridEntityWithVariant` helper function instead.
-- 
-- Use this instead of the `Isaac.GridSpawn` method since it:
-- - handles giving pits collision
-- - removes existing grid entities on the same tile, if any
-- - allows you to specify either the grid index or the position
-- 
-- @param gridEntityType The `GridEntityType` to use.
-- @param gridIndexOrPosition The grid index or position in the room that you want to spawn the grid
-- entity at. If a position is specified, the closest grid index will be
-- used.
-- @param removeExistingGridEntity Optional. Whether to remove the existing grid entity on the same
-- tile, if it exists. Defaults to true. If false, this function
-- will do nothing, since spawning a grid entity on top of another
-- grid entity will not replace it.
function ____exports.spawnGridEntity(self, gridEntityType, gridIndexOrPosition, removeExistingGridEntity)
    if removeExistingGridEntity == nil then
        removeExistingGridEntity = true
    end
    return ____exports.spawnGridEntityWithVariant(
        nil,
        gridEntityType,
        0,
        gridIndexOrPosition,
        removeExistingGridEntity
    )
end
--- Helper function to spawn a Void Portal. This is more complicated than simply spawning a trapdoor
-- with the appropriate variant, as the game does not give it the correct sprite automatically.
function ____exports.spawnVoidPortal(self, gridIndex)
    local voidPortal = ____exports.spawnGridEntityWithVariant(nil, GridEntityType.TRAPDOOR, TrapdoorVariant.VOID_PORTAL, gridIndex)
    if voidPortal == nil then
        return voidPortal
    end
    voidPortal.VarData = 1
    local sprite = voidPortal:GetSprite()
    sprite:Load("gfx/grid/voidtrapdoor.anm2", true)
    return voidPortal
end
return ____exports
 end,
["classes.callbacks.PostNewRoomEarly"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____gridEntities = require("functions.gridEntities")
local getTopLeftWallGridIndex = ____gridEntities.getTopLeftWallGridIndex
local spawnGridEntity = ____gridEntities.spawnGridEntity
local ____log = require("functions.log")
local logError = ____log.logError
local ____shouldFire = require("shouldFire")
local shouldFireRoom = ____shouldFire.shouldFireRoom
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostNewRoomEarly = __TS__Class()
local PostNewRoomEarly = ____exports.PostNewRoomEarly
PostNewRoomEarly.name = "PostNewRoomEarly"
__TS__ClassExtends(PostNewRoomEarly, CustomCallback)
function PostNewRoomEarly.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.currentRoomTopLeftWallPtrHash = nil
    self.currentRoomTopLeftWallPtrHash2 = nil
    self.shouldFire = shouldFireRoom
    self.postNewRoom = function()
        self:checkRoomChanged()
    end
    self.preEntitySpawn = function()
        self:checkRoomChanged()
        return nil
    end
    self.callbacksUsed = {{ModCallback.POST_NEW_ROOM, self.postNewRoom}, {ModCallback.PRE_ENTITY_SPAWN, self.preEntitySpawn}}
end
function PostNewRoomEarly.prototype.checkRoomChanged(self)
    if self:isNewRoom() then
        local room = game:GetRoom()
        local roomType = room:GetType()
        self:fire(roomType)
    end
end
function PostNewRoomEarly.prototype.isNewRoom(self)
    local room = game:GetRoom()
    local topLeftWallGridIndex = getTopLeftWallGridIndex(nil)
    local rightOfTopWallGridIndex = topLeftWallGridIndex + 1
    local topLeftWall = room:GetGridEntity(topLeftWallGridIndex)
    local topLeftWall2 = room:GetGridEntity(rightOfTopWallGridIndex)
    if topLeftWall == nil then
        topLeftWall = spawnGridEntity(nil, GridEntityType.WALL, topLeftWallGridIndex)
        if topLeftWall == nil then
            logError("Failed to spawn a new wall for the POST_NEW_ROOM_EARLY callback (on the first try).")
            return false
        end
    end
    if topLeftWall2 == nil then
        topLeftWall2 = spawnGridEntity(nil, GridEntityType.WALL, rightOfTopWallGridIndex)
        if topLeftWall2 == nil then
            logError("Failed to spawn a new wall for the POST_NEW_ROOM_EARLY callback (on the second try).")
            return false
        end
    end
    local oldTopLeftWallPtrHash = self.currentRoomTopLeftWallPtrHash
    local oldTopLeftWallPtrHash2 = self.currentRoomTopLeftWallPtrHash2
    self.currentRoomTopLeftWallPtrHash = GetPtrHash(topLeftWall)
    self.currentRoomTopLeftWallPtrHash2 = GetPtrHash(topLeftWall2)
    return oldTopLeftWallPtrHash ~= self.currentRoomTopLeftWallPtrHash or oldTopLeftWallPtrHash2 ~= self.currentRoomTopLeftWallPtrHash2
end
return ____exports
 end,
["classes.callbacks.PostNewRoomReordered"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireRoom = ____shouldFire.shouldFireRoom
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostNewRoomReordered = __TS__Class()
local PostNewRoomReordered = ____exports.PostNewRoomReordered
PostNewRoomReordered.name = "PostNewRoomReordered"
__TS__ClassExtends(PostNewRoomReordered, CustomCallback)
function PostNewRoomReordered.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireRoom
    self.featuresUsed = {ISCFeature.GAME_REORDERED_CALLBACKS}
end
return ____exports
 end,
["classes.callbacks.PostPEffectUpdateReordered"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPEffectUpdateReordered = __TS__Class()
local PostPEffectUpdateReordered = ____exports.PostPEffectUpdateReordered
PostPEffectUpdateReordered.name = "PostPEffectUpdateReordered"
__TS__ClassExtends(PostPEffectUpdateReordered, CustomCallback)
function PostPEffectUpdateReordered.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePlayer
    self.featuresUsed = {ISCFeature.PLAYER_REORDERED_CALLBACKS}
end
return ____exports
 end,
["classes.callbacks.PostPickupChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFirePickup = ____shouldFire.shouldFirePickup
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPickupChanged = __TS__Class()
local PostPickupChanged = ____exports.PostPickupChanged
PostPickupChanged.name = "PostPickupChanged"
__TS__ClassExtends(PostPickupChanged, CustomCallback)
function PostPickupChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePickup
    self.featuresUsed = {ISCFeature.PICKUP_CHANGE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostPickupCollect"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____players = require("functions.players")
local getClosestPlayer = ____players.getClosestPlayer
local ____shouldFire = require("shouldFire")
local shouldFirePickup = ____shouldFire.shouldFirePickup
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostPickupCollect = __TS__Class()
local PostPickupCollect = ____exports.PostPickupCollect
PostPickupCollect.name = "PostPickupCollect"
__TS__ClassExtends(PostPickupCollect, CustomCallback)
function PostPickupCollect.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePickup
    self.postPickupRender = function(____, pickup)
        local sprite = pickup:GetSprite()
        local animation = sprite:GetAnimation()
        if animation ~= "Collect" then
            return
        end
        local index = GetPtrHash(pickup)
        if not v.room.firedSet:has(index) then
            v.room.firedSet:add(index)
            local player = getClosestPlayer(nil, pickup.Position)
            self:fire(pickup, player)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_RENDER, self.postPickupRender}}
end
return ____exports
 end,
["classes.callbacks.PostPickupInitFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFirePickup = ____shouldFire.shouldFirePickup
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPickupInitFilter = __TS__Class()
local PostPickupInitFilter = ____exports.PostPickupInitFilter
PostPickupInitFilter.name = "PostPickupInitFilter"
__TS__ClassExtends(PostPickupInitFilter, CustomCallback)
function PostPickupInitFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePickup
    self.postPickupInit = function(____, pickup)
        self:fire(pickup)
    end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_INIT, self.postPickupInit}}
end
return ____exports
 end,
["classes.callbacks.PostPickupInitFirst"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____frames = require("functions.frames")
local isAfterRoomFrame = ____frames.isAfterRoomFrame
local ____roomData = require("functions.roomData")
local getRoomVisitedCount = ____roomData.getRoomVisitedCount
local ____shouldFire = require("shouldFire")
local shouldFirePickup = ____shouldFire.shouldFirePickup
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPickupInitFirst = __TS__Class()
local PostPickupInitFirst = ____exports.PostPickupInitFirst
PostPickupInitFirst.name = "PostPickupInitFirst"
__TS__ClassExtends(PostPickupInitFirst, CustomCallback)
function PostPickupInitFirst.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = {room = {firedSet = __TS__New(Set)}}
    self.shouldFire = shouldFirePickup
    self.postPickupInit = function(____, pickup)
        local roomVisitedCount = getRoomVisitedCount(nil)
        if isAfterRoomFrame(nil, 0) or roomVisitedCount == 0 then
            self:fire(pickup)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_INIT, self.postPickupInit}}
end
return ____exports
 end,
["classes.callbacks.PostPickupInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFirePickup = ____shouldFire.shouldFirePickup
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostPickupInitLate = __TS__Class()
local PostPickupInitLate = ____exports.PostPickupInitLate
PostPickupInitLate.name = "PostPickupInitLate"
__TS__ClassExtends(PostPickupInitLate, CustomCallback)
function PostPickupInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePickup
    self.postPickupUpdate = function(____, pickup)
        local index = GetPtrHash(pickup)
        if not v.room.firedSet:has(index) then
            v.room.firedSet:add(index)
            self:fire(pickup)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_UPDATE, self.postPickupUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostPickupRenderFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFirePickup = ____shouldFire.shouldFirePickup
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPickupRenderFilter = __TS__Class()
local PostPickupRenderFilter = ____exports.PostPickupRenderFilter
PostPickupRenderFilter.name = "PostPickupRenderFilter"
__TS__ClassExtends(PostPickupRenderFilter, CustomCallback)
function PostPickupRenderFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePickup
    self.postPickupRender = function(____, pickup, renderOffset)
        self:fire(pickup, renderOffset)
    end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_RENDER, self.postPickupRender}}
end
return ____exports
 end,
["classes.callbacks.PostPickupSelectionFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPickupSelectionFilter = __TS__Class()
local PostPickupSelectionFilter = ____exports.PostPickupSelectionFilter
PostPickupSelectionFilter.name = "PostPickupSelectionFilter"
__TS__ClassExtends(PostPickupSelectionFilter, CustomCallback)
function PostPickupSelectionFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _pickup, pickupVariant, subType = table.unpack(fireArgs)
        local callbackPickupVariant, callbackPickupSubType = table.unpack(optionalArgs)
        return (callbackPickupVariant == nil or callbackPickupVariant == pickupVariant) and (callbackPickupSubType == nil or callbackPickupSubType == subType)
    end
    self.postPickupSelection = function(____, pickup, variant, subType) return self:fire(pickup, variant, subType) end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_SELECTION, self.postPickupSelection}}
end
return ____exports
 end,
["classes.callbacks.PostPickupStateChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFirePickup = ____shouldFire.shouldFirePickup
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {stateMap = __TS__New(
    DefaultMap,
    function(____, state) return state end
)}}
____exports.PostPickupStateChanged = __TS__Class()
local PostPickupStateChanged = ____exports.PostPickupStateChanged
PostPickupStateChanged.name = "PostPickupStateChanged"
__TS__ClassExtends(PostPickupStateChanged, CustomCallback)
function PostPickupStateChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePickup
    self.postPickupUpdate = function(____, pickup)
        local ptrHash = GetPtrHash(pickup)
        local previousState = v.run.stateMap:getAndSetDefault(ptrHash, pickup.State)
        local currentState = pickup.State
        v.run.stateMap:set(ptrHash, currentState)
        if previousState ~= currentState then
            self:fire(pickup, previousState, currentState)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_UPDATE, self.postPickupUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostPickupUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFirePickup = ____shouldFire.shouldFirePickup
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPickupUpdateFilter = __TS__Class()
local PostPickupUpdateFilter = ____exports.PostPickupUpdateFilter
PostPickupUpdateFilter.name = "PostPickupUpdateFilter"
__TS__ClassExtends(PostPickupUpdateFilter, CustomCallback)
function PostPickupUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePickup
    self.postPickupUpdate = function(____, pickup)
        self:fire(pickup)
    end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_UPDATE, self.postPickupUpdate}}
end
return ____exports
 end,
["functions.gridEntitiesSpecific"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CrawlSpaceVariant = ____isaac_2Dtypescript_2Ddefinitions.CrawlSpaceVariant
local DoorVariant = ____isaac_2Dtypescript_2Ddefinitions.DoorVariant
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local PitVariant = ____isaac_2Dtypescript_2Ddefinitions.PitVariant
local PoopGridEntityVariant = ____isaac_2Dtypescript_2Ddefinitions.PoopGridEntityVariant
local PressurePlateVariant = ____isaac_2Dtypescript_2Ddefinitions.PressurePlateVariant
local RockVariant = ____isaac_2Dtypescript_2Ddefinitions.RockVariant
local ____gridEntities = require("functions.gridEntities")
local getGridEntities = ____gridEntities.getGridEntities
local getMatchingGridEntities = ____gridEntities.getMatchingGridEntities
local removeGridEntities = ____gridEntities.removeGridEntities
local spawnGridEntityWithVariant = ____gridEntities.spawnGridEntityWithVariant
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to spawn a `GridEntityType.CRAWL_SPACE` (18) with a specific variant.
function ____exports.spawnCrawlSpaceWithVariant(self, crawlSpaceVariant, gridIndexOrPosition)
    return spawnGridEntityWithVariant(nil, GridEntityType.CRAWL_SPACE, crawlSpaceVariant, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.DOOR` (16).
function ____exports.spawnDoorWithVariant(self, doorVariant, gridIndexOrPosition)
    local gridEntity = spawnGridEntityWithVariant(nil, GridEntityType.DOOR, doorVariant, gridIndexOrPosition)
    if gridEntity == nil then
        return nil
    end
    local door = gridEntity:ToDoor()
    assertDefined(nil, door, "Failed to spawn a door.")
    return door
end
--- Helper function to spawn a `GridEntityType.PIT` (7) with a specific variant.
function ____exports.spawnPitWithVariant(self, pitVariant, gridIndexOrPosition)
    local gridEntity = spawnGridEntityWithVariant(nil, GridEntityType.PIT, pitVariant, gridIndexOrPosition)
    if gridEntity == nil then
        return nil
    end
    local pit = gridEntity:ToPit()
    assertDefined(nil, pit, "Failed to spawn a pit.")
    return pit
end
--- Helper function to spawn a `GridEntityType.POOP` (14) with a specific variant.
function ____exports.spawnPoopWithVariant(self, poopVariant, gridIndexOrPosition)
    local gridEntity = spawnGridEntityWithVariant(nil, GridEntityType.POOP, poopVariant, gridIndexOrPosition)
    if gridEntity == nil then
        return nil
    end
    local poop = gridEntity:ToPoop()
    assertDefined(nil, poop, "Failed to spawn a poop.")
    return poop
end
--- Helper function to spawn a `GridEntityType.PRESSURE_PLATE` (20) with a specific variant.
function ____exports.spawnPressurePlateWithVariant(self, pressurePlateVariant, gridIndexOrPosition)
    local gridEntity = spawnGridEntityWithVariant(nil, GridEntityType.PRESSURE_PLATE, pressurePlateVariant, gridIndexOrPosition)
    if gridEntity == nil then
        return nil
    end
    local pressurePlate = gridEntity:ToPressurePlate()
    assertDefined(nil, pressurePlate, "Failed to spawn a pressure plate.")
    return pressurePlate
end
--- Helper function to spawn a `GridEntityType.ROCK` (2) with a specific variant.
function ____exports.spawnRockWithVariant(self, rockVariant, gridIndexOrPosition)
    local gridEntity = spawnGridEntityWithVariant(nil, GridEntityType.ROCK, rockVariant, gridIndexOrPosition)
    if gridEntity == nil then
        return nil
    end
    local rock = gridEntity:ToRock()
    assertDefined(nil, rock, "Failed to spawn a rock.")
    return rock
end
--- Helper function to spawn a `GridEntityType.SPIKES` (8) with a specific variant.
function ____exports.spawnSpikesWithVariant(self, variant, gridIndexOrPosition)
    local gridEntity = spawnGridEntityWithVariant(nil, GridEntityType.SPIKES, variant, gridIndexOrPosition)
    if gridEntity == nil then
        return nil
    end
    local spikes = gridEntity:ToSpikes()
    assertDefined(nil, spikes, "Failed to spawn spikes.")
    return spikes
end
--- Helper function to spawn a `GridEntityType.TNT` (12) with a specific variant.
function ____exports.spawnTNTWithVariant(self, variant, gridIndexOrPosition)
    local gridEntity = spawnGridEntityWithVariant(nil, GridEntityType.TNT, variant, gridIndexOrPosition)
    if gridEntity == nil then
        return nil
    end
    local tnt = gridEntity:ToTNT()
    assertDefined(nil, tnt, "Failed to spawn TNT.")
    return tnt
end
--- Helper function to spawn a `GridEntityType.TELEPORTER` (23) with a specific variant.
function ____exports.spawnTeleporterWithVariant(self, variant, gridIndexOrPosition)
    return spawnGridEntityWithVariant(nil, GridEntityType.TELEPORTER, variant, gridIndexOrPosition)
end
--- Helper function to get all of the grid entities of type `GridEntityType.CRAWL_SPACE` (18) in the
-- room.
-- 
-- @param crawlSpaceVariant Optional. If specified, will only get the crawl spaces that match the
-- variant. Default is -1, which matches every variant.
function ____exports.getCrawlSpaces(self, crawlSpaceVariant)
    if crawlSpaceVariant == nil then
        crawlSpaceVariant = -1
    end
    if crawlSpaceVariant == -1 then
        return getGridEntities(nil, GridEntityType.CRAWL_SPACE)
    end
    return getMatchingGridEntities(nil, GridEntityType.CRAWL_SPACE, crawlSpaceVariant)
end
--- Helper function to get all of the `GridEntityPit` in the room.
-- 
-- @param pitVariant Optional. If specified, will only get the pits that match the variant. Default
-- is -1, which matches every variant.
function ____exports.getPits(self, pitVariant)
    if pitVariant == nil then
        pitVariant = -1
    end
    local pits = {}
    for ____, gridEntity in ipairs(getGridEntities(nil)) do
        local pit = gridEntity:ToPit()
        if pit ~= nil then
            local thisPitVariant = pit:GetVariant()
            if pitVariant == -1 or pitVariant == thisPitVariant then
                pits[#pits + 1] = pit
            end
        end
    end
    return pits
end
--- Helper function to get all of the `GridEntityPoop` in the room.
-- 
-- @param poopVariant Optional. If specified, will only get the poops that match the variant.
-- Default is -1, which matches every variant.
function ____exports.getPoops(self, poopVariant)
    if poopVariant == nil then
        poopVariant = -1
    end
    local poops = {}
    for ____, gridEntity in ipairs(getGridEntities(nil)) do
        local poop = gridEntity:ToPoop()
        if poop ~= nil then
            local thisPoopVariant = poop:GetVariant()
            if poopVariant == -1 or poopVariant == thisPoopVariant then
                poops[#poops + 1] = poop
            end
        end
    end
    return poops
end
--- Helper function to get all of the `GridEntityPressurePlate` in the room.
-- 
-- @param pressurePlateVariant Optional. If specified, will only get the pressure plates that match
-- the variant. Default is -1, which matches every variant.
function ____exports.getPressurePlates(self, pressurePlateVariant)
    if pressurePlateVariant == nil then
        pressurePlateVariant = -1
    end
    local pressurePlates = {}
    for ____, gridEntity in ipairs(getGridEntities(nil)) do
        local pressurePlate = gridEntity:ToPressurePlate()
        if pressurePlate ~= nil then
            local thisPressurePlateVariant = pressurePlate:GetVariant()
            if pressurePlateVariant == -1 or pressurePlateVariant == thisPressurePlateVariant then
                pressurePlates[#pressurePlates + 1] = pressurePlate
            end
        end
    end
    return pressurePlates
end
--- Helper function to get all of the `GridEntityRock` in the room.
-- 
-- @param variant Optional. If specified, will only get the rocks that match the variant. Default is
-- -1, which matches every variant. Note that this is not the same thing as the
-- `RockVariant` enum, since that only applies to `GridEntityType.ROCK`, and other
-- types of grid entities can be the `GridEntityRock` class.
function ____exports.getRocks(self, variant)
    if variant == nil then
        variant = -1
    end
    local rocks = {}
    for ____, gridEntity in ipairs(getGridEntities(nil)) do
        local rock = gridEntity:ToRock()
        if rock ~= nil then
            local thisVariant = rock:GetVariant()
            if variant == -1 or variant == thisVariant then
                rocks[#rocks + 1] = rock
            end
        end
    end
    return rocks
end
--- Helper function to get all of the `GridEntitySpikes` in the room.
function ____exports.getSpikes(self, variant)
    if variant == nil then
        variant = -1
    end
    local spikes = {}
    for ____, gridEntity in ipairs(getGridEntities(nil)) do
        local spike = gridEntity:ToSpikes()
        if spike ~= nil then
            local thisVariant = spike:GetVariant()
            if variant == -1 or variant == thisVariant then
                spikes[#spikes + 1] = spike
            end
        end
    end
    return spikes
end
--- Helper function to get all of the `GridEntityTNT` in the room.
function ____exports.getTNT(self, variant)
    if variant == nil then
        variant = -1
    end
    local tntArray = {}
    for ____, gridEntity in ipairs(getGridEntities(nil)) do
        local tnt = gridEntity:ToTNT()
        if tnt ~= nil then
            local thisVariant = tnt:GetVariant()
            if variant == -1 or variant == thisVariant then
                tntArray[#tntArray + 1] = tnt
            end
        end
    end
    return tntArray
end
--- Helper function to get all of the grid entities of type `GridEntityType.TELEPORTER` (23) in the
-- room.
-- 
-- @param variant Optional. If specified, will only get the teleporters that match the variant.
-- Default is -1, which matches every variant.
function ____exports.getTeleporters(self, variant)
    if variant == nil then
        variant = -1
    end
    if variant == -1 then
        return getGridEntities(nil, GridEntityType.TELEPORTER)
    end
    return getMatchingGridEntities(nil, GridEntityType.TELEPORTER, variant)
end
--- Helper function to get all of the grid entities of type `GridEntityType.TRAPDOOR` (17) in the
-- room. Specify a specific trapdoor variant to select only trapdoors of that variant.
-- 
-- @param trapdoorVariant Optional. If specified, will only get the trapdoors that match the
-- variant. Default is -1, which matches every variant.
function ____exports.getTrapdoors(self, trapdoorVariant)
    if trapdoorVariant == nil then
        trapdoorVariant = -1
    end
    if trapdoorVariant == -1 then
        return getGridEntities(nil, GridEntityType.TRAPDOOR)
    end
    return getMatchingGridEntities(nil, GridEntityType.TRAPDOOR, trapdoorVariant)
end
--- Helper function to remove all of the `GridEntityType.CRAWL_SPACE` (18) in the room.
-- 
-- @param crawlSpaceVariant Optional. If specified, will only remove the crawl spaces that match
-- this variant. Default is -1, which matches every variant.
-- @param updateRoom Optional. Whether to update the room after the crawl spaces are removed.
-- Default is false. For more information, see the description of the
-- `removeGridEntities` helper function.
-- @param cap Optional. If specified, will only remove the given amount of crawl spaces.
-- @returns The crawl spaces that were removed.
function ____exports.removeAllCrawlSpaces(self, crawlSpaceVariant, updateRoom, cap)
    if crawlSpaceVariant == nil then
        crawlSpaceVariant = -1
    end
    if updateRoom == nil then
        updateRoom = false
    end
    local crawlSpaces = ____exports.getCrawlSpaces(nil, crawlSpaceVariant)
    return removeGridEntities(nil, crawlSpaces, updateRoom, cap)
end
--- Helper function to remove all of the `GridEntityPit` in the room.
-- 
-- @param pitVariant Optional. If specified, will only remove the pits that match this variant.
-- Default is -1, which matches every variant.
-- @param updateRoom Optional. Whether to update the room after the pits are removed. Default is
-- false. For more information, see the description of the `removeGridEntities`
-- helper function.
-- @param cap Optional. If specified, will only remove the given amount of pits.
-- @returns The pits that were removed.
function ____exports.removeAllPits(self, pitVariant, updateRoom, cap)
    if pitVariant == nil then
        pitVariant = -1
    end
    if updateRoom == nil then
        updateRoom = false
    end
    local pits = ____exports.getPits(nil, pitVariant)
    return removeGridEntities(nil, pits, updateRoom, cap)
end
--- Helper function to remove all of the `GridEntityPoop` in the room.
-- 
-- Note that poops can either be an entity or a grid entity, depending on the situation. This
-- function will only remove the grid entity poops.
-- 
-- @param poopVariant Optional. If specified, will only remove the poops that match this variant.
-- Default is -1, which matches every variant.
-- @param updateRoom Optional. Whether to update the room after the poops are removed. Default is
-- false. For more information, see the description of the `removeGridEntities`
-- helper function.
-- @param cap Optional. If specified, will only remove the given amount of poops.
-- @returns The poops that were removed.
function ____exports.removeAllPoops(self, poopVariant, updateRoom, cap)
    if poopVariant == nil then
        poopVariant = -1
    end
    if updateRoom == nil then
        updateRoom = false
    end
    local poops = ____exports.getPoops(nil, poopVariant)
    return removeGridEntities(nil, poops, updateRoom, cap)
end
--- Helper function to remove all of the `GridEntityPressurePlate` in the room.
-- 
-- @param pressurePlateVariant Optional. If specified, will only remove the pressure plates that
-- match this variant. Default is -1, which matches every variant.
-- @param updateRoom Optional. Whether to update the room after the pressure plates are removed.
-- Default is false. For more information, see the description of the
-- `removeGridEntities` helper function.
-- @param cap Optional. If specified, will only remove the given amount of pressure plates.
-- @returns The pressure plates that were removed.
function ____exports.removeAllPressurePlates(self, pressurePlateVariant, updateRoom, cap)
    if pressurePlateVariant == nil then
        pressurePlateVariant = -1
    end
    if updateRoom == nil then
        updateRoom = false
    end
    local pressurePlates = ____exports.getPressurePlates(nil, pressurePlateVariant)
    return removeGridEntities(nil, pressurePlates, updateRoom, cap)
end
--- Helper function to remove all of the `GridEntityRock` in the room.
-- 
-- @param variant Optional. If specified, will only remove the rocks that match this variant.
-- Default is -1, which matches every variant. Note that this is not the same thing
-- as the `RockVariant` enum, since that only applies to `GridEntityType.ROCK`, and
-- other types of grid entities can be the `GridEntityRock` class.
-- @param updateRoom Optional. Whether to update the room after the rocks are removed. Default is
-- false. For more information, see the description of the `removeGridEntities`
-- helper function.
-- @param cap Optional. If specified, will only remove the given amount of rocks.
-- @returns The rocks that were removed.
function ____exports.removeAllRocks(self, variant, updateRoom, cap)
    if variant == nil then
        variant = -1
    end
    if updateRoom == nil then
        updateRoom = false
    end
    local rocks = ____exports.getRocks(nil, variant)
    return removeGridEntities(nil, rocks, updateRoom, cap)
end
--- Helper function to remove all of the `GridEntitySpikes` in the room.
-- 
-- @param variant Optional. If specified, will only remove the spikes that match this variant.
-- Default is -1, which matches every variant.
-- @param updateRoom Optional. Whether to update the room after the spikes are removed. Default is
-- false. For more information, see the description of the `removeGridEntities`
-- helper function.
-- @param cap Optional. If specified, will only remove the given amount of spikes.
-- @returns The spikes that were removed.
function ____exports.removeAllSpikes(self, variant, updateRoom, cap)
    if variant == nil then
        variant = -1
    end
    if updateRoom == nil then
        updateRoom = false
    end
    local spikes = ____exports.getSpikes(nil, variant)
    return removeGridEntities(nil, spikes, updateRoom, cap)
end
--- Helper function to remove all of the `GridEntityTNT` in the room.
-- 
-- @param variant Optional. If specified, will only remove the TNTs that match this variant. Default
-- is -1, which matches every variant.
-- @param updateRoom Optional. Whether to update the room after the TNTs are removed. Default is
-- false. For more information, see the description of the `removeGridEntities`
-- helper function.
-- @param cap Optional. If specified, will only remove the given amount of TNTs.
-- @returns The TNTs that were removed.
function ____exports.removeAllTNT(self, variant, updateRoom, cap)
    if variant == nil then
        variant = -1
    end
    if updateRoom == nil then
        updateRoom = false
    end
    local tnt = ____exports.getTNT(nil, variant)
    return removeGridEntities(nil, tnt, updateRoom, cap)
end
--- Helper function to remove all of the `GridEntityType.TELEPORTER` (23) in the room.
-- 
-- @param variant Optional. If specified, will only remove the teleporters that match this variant.
-- Default is -1, which matches every variant.
-- @param updateRoom Optional. Whether to update the room after the teleporters are removed. Default
-- is false. For more information, see the description of the `removeGridEntities`
-- helper function.
-- @param cap Optional. If specified, will only remove the given amount of teleporters.
-- @returns The teleporters that were removed.
function ____exports.removeAllTeleporters(self, variant, updateRoom, cap)
    if variant == nil then
        variant = -1
    end
    if updateRoom == nil then
        updateRoom = false
    end
    local teleporters = ____exports.getTeleporters(nil, variant)
    return removeGridEntities(nil, teleporters, updateRoom, cap)
end
--- Helper function to remove all of the `GridEntityType.TRAPDOOR` (17) in the room.
-- 
-- @param trapdoorVariant Optional. If specified, will only remove the trapdoors that match this
-- variant. Default is -1, which matches every variant.
-- @param updateRoom Optional. Whether to update the room after the trapdoors are removed. Default
-- is false. For more information, see the description of the `removeGridEntities`
-- helper function.
-- @param cap Optional. If specified, will only remove the given amount of trapdoors.
-- @returns The trapdoors that were removed.
function ____exports.removeAllTrapdoors(self, trapdoorVariant, updateRoom, cap)
    if trapdoorVariant == nil then
        trapdoorVariant = -1
    end
    if updateRoom == nil then
        updateRoom = false
    end
    local trapdoors = ____exports.getTrapdoors(nil, trapdoorVariant)
    return removeGridEntities(nil, trapdoors, updateRoom, cap)
end
--- Helper function to spawn a `GridEntityType.CRAWL_SPACE` (18).
function ____exports.spawnCrawlSpace(self, gridIndexOrPosition)
    return ____exports.spawnCrawlSpaceWithVariant(nil, CrawlSpaceVariant.NORMAL, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.PIT` (7) with a specific variant.
function ____exports.spawnDoor(self, gridIndexOrPosition)
    return ____exports.spawnDoorWithVariant(nil, DoorVariant.UNSPECIFIED, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.DOOR` (16) with a specific variant.
function ____exports.spawnPit(self, gridIndexOrPosition)
    return ____exports.spawnPitWithVariant(nil, PitVariant.NORMAL, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.POOP` (14).
function ____exports.spawnPoop(self, gridIndexOrPosition)
    return ____exports.spawnPoopWithVariant(nil, PoopGridEntityVariant.NORMAL, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.PRESSURE_PLATE` (20).
function ____exports.spawnPressurePlate(self, gridIndexOrPosition)
    return ____exports.spawnPressurePlateWithVariant(nil, PressurePlateVariant.PRESSURE_PLATE, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.ROCK` (2).
function ____exports.spawnRock(self, gridIndexOrPosition)
    return ____exports.spawnRockWithVariant(nil, RockVariant.NORMAL, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.SPIKES` (8).
function ____exports.spawnSpikes(self, gridIndexOrPosition)
    return ____exports.spawnSpikesWithVariant(nil, 0, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.TNT` (12).
function ____exports.spawnTNT(self, gridIndexOrPosition)
    return ____exports.spawnTNTWithVariant(nil, 0, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.TELEPORTER` (23).
function ____exports.spawnTeleporter(self, gridIndexOrPosition)
    return ____exports.spawnTeleporterWithVariant(nil, 0, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.TRAPDOOR` (17).
function ____exports.spawnTrapdoor(self, gridIndexOrPosition)
    return ____exports.spawnCrawlSpaceWithVariant(nil, CrawlSpaceVariant.NORMAL, gridIndexOrPosition)
end
--- Helper function to spawn a `GridEntityType.TRAPDOOR` (17) with a specific variant.
function ____exports.spawnTrapdoorWithVariant(self, trapdoorVariant, gridIndexOrPosition)
    return spawnGridEntityWithVariant(nil, GridEntityType.TRAPDOOR, trapdoorVariant, gridIndexOrPosition)
end
return ____exports
 end,
["classes.callbacks.PostPitRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getPits = ____gridEntitiesSpecific.getPits
local ____shouldFire = require("shouldFire")
local shouldFirePit = ____shouldFire.shouldFirePit
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPitRender = __TS__Class()
local PostPitRender = ____exports.PostPitRender
PostPitRender.name = "PostPitRender"
__TS__ClassExtends(PostPitRender, CustomCallback)
function PostPitRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePit
    self.postRender = function()
        for ____, pit in ipairs(getPits(nil)) do
            self:fire(pit)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
return ____exports
 end,
["classes.callbacks.PostPitUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getPits = ____gridEntitiesSpecific.getPits
local ____shouldFire = require("shouldFire")
local shouldFirePit = ____shouldFire.shouldFirePit
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPitUpdate = __TS__Class()
local PostPitUpdate = ____exports.PostPitUpdate
PostPitUpdate.name = "PostPitUpdate"
__TS__ClassExtends(PostPitUpdate, CustomCallback)
function PostPitUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePit
    self.postUpdate = function()
        for ____, pit in ipairs(getPits(nil)) do
            self:fire(pit)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["interfaces.PlayerHealth"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.playerHealth"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
local __TS__ArrayEntries = ____lualib.__TS__ArrayEntries
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local HeartSubType = ____isaac_2Dtypescript_2Ddefinitions.HeartSubType
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____constants = require("core.constants")
local MAX_PLAYER_HEART_CONTAINERS = ____constants.MAX_PLAYER_HEART_CONTAINERS
local ____HealthType = require("enums.HealthType")
local HealthType = ____HealthType.HealthType
local ____bitwise = require("functions.bitwise")
local countSetBits = ____bitwise.countSetBits
local getKBitOfN = ____bitwise.getKBitOfN
local getNumBitsOfN = ____bitwise.getNumBitsOfN
local ____characters = require("functions.characters")
local getCharacterMaxHeartContainers = ____characters.getCharacterMaxHeartContainers
local ____charge = require("functions.charge")
local getTotalCharge = ____charge.getTotalCharge
local ____playerCollectibles = require("functions.playerCollectibles")
local getActiveItemSlots = ____playerCollectibles.getActiveItemSlots
local setActiveItem = ____playerCollectibles.setActiveItem
local ____players = require("functions.players")
local isCharacter = ____players.isCharacter
local isKeeper = ____players.isKeeper
local ____utils = require("functions.utils")
local ____repeat = ____utils["repeat"]
--- Returns the number of black hearts that the player has, excluding any soul hearts. For example,
-- if the player has one full black heart, one full soul heart, and one half black heart, this
-- function returns 3.
-- 
-- This is different from the `EntityPlayer.GetBlackHearts` method, since that returns a bitmask.
function ____exports.getPlayerBlackHearts(self, player)
    local blackHeartsBitmask = player:GetBlackHearts()
    local blackHeartBits = countSetBits(nil, blackHeartsBitmask)
    return blackHeartBits * 2
end
--- Returns the number of red hearts that the player has, excluding any rotten hearts. For example,
-- if the player has one full black heart, one full soul heart, and one half black heart, this
-- function returns 3.
-- 
-- This is different from the `EntityPlayer.GetHearts` method, since that returns a value that
-- includes rotten hearts.
function ____exports.getPlayerHearts(self, player)
    local rottenHearts = player:GetRottenHearts()
    local hearts = player:GetHearts()
    return hearts - rottenHearts * 2
end
--- Returns the maximum heart containers that the provided player can have. Normally, this is 12, but
-- it can change depending on the character (e.g. Keeper) and other things (e.g. Mother's Kiss).
-- This function does not account for Broken Hearts; use the `getPlayerAvailableHeartSlots` helper
-- function for that.
function ____exports.getPlayerMaxHeartContainers(self, player)
    local character = player:GetPlayerType()
    local characterMaxHeartContainers = getCharacterMaxHeartContainers(nil, character)
    if character == PlayerType.MAGDALENE and player:HasCollectible(CollectibleType.BIRTHRIGHT) then
        local extraMaxHeartContainersFromBirthright = 6
        return characterMaxHeartContainers + extraMaxHeartContainersFromBirthright
    end
    if isKeeper(nil, player) then
        local numMothersKisses = player:GetTrinketMultiplier(TrinketType.MOTHERS_KISS)
        local hasGreedsGullet = player:HasCollectible(CollectibleType.GREEDS_GULLET)
        local coins = player:GetNumCoins()
        local greedsGulletCoinContainers = hasGreedsGullet and math.floor(coins / 25) or 0
        return characterMaxHeartContainers + numMothersKisses + greedsGulletCoinContainers
    end
    return characterMaxHeartContainers
end
--- Returns the number of soul hearts that the player has, excluding any black hearts. For example,
-- if the player has one full black heart, one full soul heart, and one half black heart, this
-- function returns 2.
-- 
-- This is different from the `EntityPlayer.GetSoulHearts` method, since that returns the combined
-- number of soul hearts and black hearts.
function ____exports.getPlayerSoulHearts(self, player)
    local soulHearts = player:GetSoulHearts()
    local blackHearts = ____exports.getPlayerBlackHearts(nil, player)
    return soulHearts - blackHearts
end
function ____exports.removeAllPlayerHealth(self, player)
    local goldenHearts = player:GetGoldenHearts()
    local eternalHearts = player:GetEternalHearts()
    local boneHearts = player:GetBoneHearts()
    local brokenHearts = player:GetBrokenHearts()
    player:AddGoldenHearts(goldenHearts * -1)
    player:AddEternalHearts(eternalHearts * -1)
    player:AddBoneHearts(boneHearts * -1)
    player:AddBrokenHearts(brokenHearts * -1)
    player:AddMaxHearts(MAX_PLAYER_HEART_CONTAINERS * -2, true)
    player:AddSoulHearts(MAX_PLAYER_HEART_CONTAINERS * -2)
    if isCharacter(nil, player, PlayerType.SOUL) then
        local forgotten = player:GetSubPlayer()
        if forgotten ~= nil then
            local forgottenBoneHearts = forgotten:GetBoneHearts()
            forgotten:AddBoneHearts(forgottenBoneHearts * -1)
        end
    end
end
--- Helper function to set a player's health to a specific state. You can use this in combination
-- with the `getPlayerHealth` function to restore the player's health back to a certain
-- configuration at a later time.
-- 
-- Based on the `REVEL.LoadHealth` function in the Revelations mod.
function ____exports.setPlayerHealth(self, player, playerHealth)
    local character = player:GetPlayerType()
    local subPlayer = player:GetSubPlayer()
    local alabasterBoxDescriptions = {}
    local alabasterBoxActiveSlots = getActiveItemSlots(nil, player, CollectibleType.ALABASTER_BOX)
    for ____, activeSlot in ipairs(alabasterBoxActiveSlots) do
        local totalCharge = getTotalCharge(nil, player, activeSlot)
        setActiveItem(nil, player, CollectibleType.NULL, activeSlot)
        alabasterBoxDescriptions[#alabasterBoxDescriptions + 1] = {activeSlot = activeSlot, totalCharge = totalCharge}
    end
    ____exports.removeAllPlayerHealth(nil, player)
    if character == PlayerType.SOUL and subPlayer ~= nil then
        subPlayer:AddMaxHearts(playerHealth.maxHearts, false)
    else
        player:AddMaxHearts(playerHealth.maxHearts, false)
    end
    player:AddEternalHearts(playerHealth.eternalHearts)
    local soulHeartsRemaining = playerHealth.soulHearts
    for ____, ____value in __TS__Iterator(__TS__ArrayEntries(playerHealth.soulHeartTypes)) do
        local i = ____value[1]
        local soulHeartType = ____value[2]
        local isHalf = playerHealth.soulHearts + playerHealth.boneHearts * 2 < (i + 1) * 2
        local addAmount = 2
        if isHalf or soulHeartType == HeartSubType.BONE or soulHeartsRemaining < 2 then
            addAmount = 1
        end
        repeat
            local ____switch70 = soulHeartType
            local ____cond70 = ____switch70 == HeartSubType.SOUL
            if ____cond70 then
                do
                    player:AddSoulHearts(addAmount)
                    soulHeartsRemaining = soulHeartsRemaining - addAmount
                    break
                end
            end
            ____cond70 = ____cond70 or ____switch70 == HeartSubType.BLACK
            if ____cond70 then
                do
                    player:AddBlackHearts(addAmount)
                    soulHeartsRemaining = soulHeartsRemaining - addAmount
                    break
                end
            end
            ____cond70 = ____cond70 or ____switch70 == HeartSubType.BONE
            if ____cond70 then
                do
                    player:AddBoneHearts(addAmount)
                    break
                end
            end
        until true
    end
    player:AddRottenHearts(playerHealth.rottenHearts * 2)
    if character == PlayerType.MAGDALENE_B then
        ____repeat(
            nil,
            playerHealth.hearts,
            function()
                if player:HasFullHearts() then
                    return
                end
                local hearts = player:GetHearts()
                local maxHearts = player:GetMaxHearts()
                if hearts == maxHearts - 1 then
                    player:AddHearts(1)
                    return
                end
                player:AddHearts(1)
                player:AddHearts(-1)
            end
        )
    else
        player:AddHearts(playerHealth.hearts)
    end
    player:AddGoldenHearts(playerHealth.goldenHearts)
    player:AddBrokenHearts(playerHealth.brokenHearts)
    if character == PlayerType.BETHANY then
        player:SetSoulCharge(playerHealth.soulCharges)
    elseif character == PlayerType.BETHANY_B then
        player:SetBloodCharge(playerHealth.bloodCharges)
    end
    for ____, ____value in ipairs(alabasterBoxDescriptions) do
        local activeSlot = ____value.activeSlot
        local totalCharge = ____value.totalCharge
        setActiveItem(
            nil,
            player,
            CollectibleType.ALABASTER_BOX,
            activeSlot,
            totalCharge
        )
    end
end
function ____exports.addPlayerHealthType(self, player, healthType, numHearts)
    repeat
        local ____switch3 = healthType
        local ____cond3 = ____switch3 == HealthType.RED
        if ____cond3 then
            do
                player:AddHearts(numHearts)
                break
            end
        end
        ____cond3 = ____cond3 or ____switch3 == HealthType.SOUL
        if ____cond3 then
            do
                player:AddSoulHearts(numHearts)
                break
            end
        end
        ____cond3 = ____cond3 or ____switch3 == HealthType.ETERNAL
        if ____cond3 then
            do
                player:AddEternalHearts(numHearts)
                break
            end
        end
        ____cond3 = ____cond3 or ____switch3 == HealthType.BLACK
        if ____cond3 then
            do
                player:AddBlackHearts(numHearts)
                break
            end
        end
        ____cond3 = ____cond3 or ____switch3 == HealthType.GOLDEN
        if ____cond3 then
            do
                player:AddGoldenHearts(numHearts)
                break
            end
        end
        ____cond3 = ____cond3 or ____switch3 == HealthType.BONE
        if ____cond3 then
            do
                player:AddBoneHearts(numHearts)
                break
            end
        end
        ____cond3 = ____cond3 or ____switch3 == HealthType.ROTTEN
        if ____cond3 then
            do
                player:AddRottenHearts(numHearts)
                break
            end
        end
        ____cond3 = ____cond3 or ____switch3 == HealthType.BROKEN
        if ____cond3 then
            do
                player:AddBrokenHearts(numHearts)
                break
            end
        end
        ____cond3 = ____cond3 or ____switch3 == HealthType.MAX_HEARTS
        if ____cond3 then
            do
                player:AddMaxHearts(numHearts, false)
                break
            end
        end
    until true
end
--- Helper function to see if the provided player can pick up an eternal heart. (If a player already
-- has an eternal heart and full heart containers, they are not able to pick up any additional
-- eternal hearts.)
-- 
-- This function's name matches the existing `EntityPlayer` methods.
function ____exports.canPickEternalHearts(self, player)
    local eternalHearts = player:GetEternalHearts()
    local maxHearts = player:GetMaxHearts()
    local heartLimit = player:GetHeartLimit()
    return eternalHearts == 0 or maxHearts ~= heartLimit
end
--- Returns whether all of the player's soul-heart-type hearts are black hearts.
-- 
-- Note that this function does not consider red heart containers.
-- 
-- For example:
-- 
-- - If the player has one black heart, this function would return true.
-- - If the player has one soul heart and two black hearts, this function would return false.
-- - If the player has no black hearts, this function will return false.
-- - If the player has one red heart container and three black hearts, this function would return
--   true.
function ____exports.doesPlayerHaveAllBlackHearts(self, player)
    local soulHearts = ____exports.getPlayerSoulHearts(nil, player)
    local blackHearts = ____exports.getPlayerBlackHearts(nil, player)
    return blackHearts > 0 and soulHearts == 0
end
--- Returns whether all of the player's soul-heart-type hearts are soul hearts.
-- 
-- Note that this function does not consider red heart containers.
-- 
-- For example:
-- 
-- - If the player has two soul hearts and one black heart, this function would return false.
-- - If the player has no soul hearts, this function will return false.
-- - If the player has one red heart container and three soul hearts, this function would return
--   true.
function ____exports.doesPlayerHaveAllSoulHearts(self, player)
    local soulHearts = ____exports.getPlayerSoulHearts(nil, player)
    local blackHearts = ____exports.getPlayerBlackHearts(nil, player)
    return soulHearts > 0 and blackHearts == 0
end
--- Returns the number of slots that the player has remaining for new heart containers, accounting
-- for broken hearts. For example, if the player is Judas and has 1 red heart containers and 2 full
-- soul hearts and 3 broken hearts, then this function would return 6 (i.e. 12 - 1 - 2 - 3).
function ____exports.getPlayerAvailableHeartSlots(self, player)
    local maxHeartContainers = ____exports.getPlayerMaxHeartContainers(nil, player)
    local effectiveMaxHearts = player:GetEffectiveMaxHearts()
    local normalAndBoneHeartContainers = effectiveMaxHearts / 2
    local soulHearts = player:GetSoulHearts()
    local soulHeartContainers = math.ceil(soulHearts / 2)
    local totalHeartContainers = normalAndBoneHeartContainers + soulHeartContainers
    local brokenHearts = player:GetBrokenHearts()
    local totalOccupiedHeartSlots = totalHeartContainers + brokenHearts
    return maxHeartContainers - totalOccupiedHeartSlots
end
--- Helper function to get an object representing the player's health. You can use this in
-- combination with the `setPlayerHealth` function to restore the player's health back to a certain
-- configuration at a later time.
-- 
-- This is based on the `REVEL.StoreHealth` function in the Revelations mod.
function ____exports.getPlayerHealth(self, player)
    local character = player:GetPlayerType()
    local maxHearts = player:GetMaxHearts()
    local hearts = ____exports.getPlayerHearts(nil, player)
    local soulHearts = player:GetSoulHearts()
    local boneHearts = player:GetBoneHearts()
    local goldenHearts = player:GetGoldenHearts()
    local eternalHearts = player:GetEternalHearts()
    local rottenHearts = player:GetRottenHearts()
    local brokenHearts = player:GetBrokenHearts()
    local subPlayer = player:GetSubPlayer()
    local soulCharges = player:GetEffectiveSoulCharge()
    local bloodCharges = player:GetEffectiveBloodCharge()
    if character == PlayerType.FORGOTTEN and subPlayer ~= nil then
        maxHearts = boneHearts * 2
        boneHearts = 0
        soulHearts = subPlayer:GetSoulHearts()
    elseif character == PlayerType.SOUL and subPlayer ~= nil then
        maxHearts = subPlayer:GetBoneHearts() * 2
        hearts = subPlayer:GetHearts()
    end
    local extraHearts = math.ceil(soulHearts / 2) + boneHearts
    local currentSoulHeart = 0
    local soulHeartTypes = {}
    do
        local i = 0
        while i < extraHearts do
            local isBoneHeart = player:IsBoneHeart(i)
            if character == PlayerType.FORGOTTEN and subPlayer ~= nil then
                isBoneHeart = subPlayer:IsBoneHeart(i)
            end
            if isBoneHeart then
                soulHeartTypes[#soulHeartTypes + 1] = HeartSubType.BONE
            else
                local isBlackHeart = player:IsBlackHeart(currentSoulHeart + 1)
                if character == PlayerType.FORGOTTEN and subPlayer ~= nil then
                    isBlackHeart = subPlayer:IsBlackHeart(currentSoulHeart + 1)
                end
                if isBlackHeart then
                    soulHeartTypes[#soulHeartTypes + 1] = HeartSubType.BLACK
                else
                    soulHeartTypes[#soulHeartTypes + 1] = HeartSubType.SOUL
                end
                currentSoulHeart = currentSoulHeart + 2
            end
            i = i + 1
        end
    end
    return {
        maxHearts = maxHearts,
        hearts = hearts,
        eternalHearts = eternalHearts,
        soulHearts = soulHearts,
        boneHearts = boneHearts,
        goldenHearts = goldenHearts,
        rottenHearts = rottenHearts,
        brokenHearts = brokenHearts,
        soulCharges = soulCharges,
        bloodCharges = bloodCharges,
        soulHeartTypes = soulHeartTypes
    }
end
function ____exports.getPlayerHealthType(self, player, healthType)
    repeat
        local ____switch29 = healthType
        local ____cond29 = ____switch29 == HealthType.RED
        if ____cond29 then
            do
                return ____exports.getPlayerHearts(nil, player)
            end
        end
        ____cond29 = ____cond29 or ____switch29 == HealthType.SOUL
        if ____cond29 then
            do
                return ____exports.getPlayerSoulHearts(nil, player)
            end
        end
        ____cond29 = ____cond29 or ____switch29 == HealthType.ETERNAL
        if ____cond29 then
            do
                return player:GetEternalHearts()
            end
        end
        ____cond29 = ____cond29 or ____switch29 == HealthType.BLACK
        if ____cond29 then
            do
                return ____exports.getPlayerBlackHearts(nil, player)
            end
        end
        ____cond29 = ____cond29 or ____switch29 == HealthType.GOLDEN
        if ____cond29 then
            do
                return player:GetGoldenHearts()
            end
        end
        ____cond29 = ____cond29 or ____switch29 == HealthType.BONE
        if ____cond29 then
            do
                return player:GetBoneHearts()
            end
        end
        ____cond29 = ____cond29 or ____switch29 == HealthType.ROTTEN
        if ____cond29 then
            do
                return player:GetRottenHearts()
            end
        end
        ____cond29 = ____cond29 or ____switch29 == HealthType.BROKEN
        if ____cond29 then
            do
                return player:GetBrokenHearts()
            end
        end
        ____cond29 = ____cond29 or ____switch29 == HealthType.MAX_HEARTS
        if ____cond29 then
            do
                return player:GetMaxHearts()
            end
        end
    until true
end
--- Helper function that returns the type of the rightmost heart. This does not including golden
-- hearts or broken hearts, since they cannot be damaged directly.
function ____exports.getPlayerLastHeart(self, player)
    local hearts = player:GetHearts()
    local effectiveMaxHearts = player:GetEffectiveMaxHearts()
    local soulHearts = player:GetSoulHearts()
    local blackHearts = player:GetBlackHearts()
    local eternalHearts = player:GetEternalHearts()
    local boneHearts = player:GetBoneHearts()
    local rottenHearts = player:GetRottenHearts()
    local soulHeartSlots = soulHearts / 2
    local lastHeartIndex = boneHearts + soulHeartSlots - 1
    local isLastHeartBone = player:IsBoneHeart(lastHeartIndex)
    if isLastHeartBone then
        local isLastContainerEmpty = hearts <= effectiveMaxHearts - 2
        if isLastContainerEmpty then
            return HealthType.BONE
        end
        if rottenHearts > 0 then
            return HealthType.ROTTEN
        end
        if eternalHearts > 0 then
            return HealthType.ETERNAL
        end
        return HealthType.RED
    end
    if soulHearts > 0 then
        local numBits = getNumBitsOfN(nil, blackHearts)
        local finalBit = getKBitOfN(nil, numBits - 1, blackHearts)
        local isBlack = finalBit == 1
        if isBlack then
            return HealthType.BLACK
        end
        return HealthType.SOUL
    end
    if eternalHearts > 0 then
        return HealthType.ETERNAL
    end
    if rottenHearts > 0 then
        return HealthType.ROTTEN
    end
    return HealthType.RED
end
--- Helper function to determine how many heart containers that Tainted Magdalene has that will not
-- be automatically depleted over time. By default, this is 2, but this function will return 4 so
-- that it is consistent with the `player.GetHearts` and `player.GetMaxHearts` methods.
-- 
-- If Tainted Magdalene has Birthright, she will gained an additional non-temporary heart container.
-- 
-- This function does not validate whether the provided player is Tainted Magdalene; that should be
-- accomplished before invoking this function.
function ____exports.getTaintedMagdaleneNonTemporaryMaxHearts(self, player)
    local maxHearts = player:GetMaxHearts()
    local hasBirthright = player:HasCollectible(CollectibleType.BIRTHRIGHT)
    local maxNonTemporaryMaxHearts = hasBirthright and 6 or 4
    return math.min(maxHearts, maxNonTemporaryMaxHearts)
end
--- Returns a `PlayerHealth` object with all zeros.
function ____exports.newPlayerHealth(self)
    return {
        maxHearts = 0,
        hearts = 0,
        eternalHearts = 0,
        soulHearts = 0,
        boneHearts = 0,
        goldenHearts = 0,
        rottenHearts = 0,
        brokenHearts = 0,
        soulCharges = 0,
        bloodCharges = 0,
        soulHeartTypes = {}
    }
end
--- Helper function to remove all of a player's black hearts and add the corresponding amount of soul
-- hearts.
function ____exports.playerConvertBlackHeartsToSoulHearts(self, player)
    local playerHealth = ____exports.getPlayerHealth(nil, player)
    ____exports.removeAllPlayerHealth(nil, player)
    local newSoulHeartTypes = __TS__ArrayMap(
        playerHealth.soulHeartTypes,
        function(____, soulHeartType) return soulHeartType == HeartSubType.BLACK and HeartSubType.SOUL or soulHeartType end
    )
    local playerHealthWithSoulHearts = __TS__ObjectAssign({}, playerHealth, {soulHeartTypes = newSoulHeartTypes})
    ____exports.setPlayerHealth(nil, player, playerHealthWithSoulHearts)
end
--- Helper function to remove all of a player's soul hearts and add the corresponding amount of black
-- hearts.
function ____exports.playerConvertSoulHeartsToBlackHearts(self, player)
    local playerHealth = ____exports.getPlayerHealth(nil, player)
    ____exports.removeAllPlayerHealth(nil, player)
    local newSoulHeartTypes = __TS__ArrayMap(
        playerHealth.soulHeartTypes,
        function(____, soulHeartType) return soulHeartType == HeartSubType.SOUL and HeartSubType.BLACK or soulHeartType end
    )
    local playerHealthWithBlackHearts = __TS__ObjectAssign({}, playerHealth, {soulHeartTypes = newSoulHeartTypes})
    ____exports.setPlayerHealth(nil, player, playerHealthWithBlackHearts)
end
--- Helper function to see if the player is out of health.
-- 
-- Specifically, this function will return false if the player has 0 red hearts, 0 soul/black
-- hearts, and 0 bone hearts.
function ____exports.playerHasHealthLeft(self, player)
    local hearts = player:GetHearts()
    local soulHearts = player:GetSoulHearts()
    local boneHearts = player:GetBoneHearts()
    return hearts > 0 or soulHearts > 0 or boneHearts > 0
end
--- Helper function to see if a certain damage amount would deal "permanent" damage to Tainted
-- Magdalene.
-- 
-- Tainted Magdalene has "permanent" health and "temporary" health. When standing still and doing
-- nothing, all of Tainted Magdalene's temporary health will eventually go away.
-- 
-- Before using this function, it is expected that you check to see if the player is Tainted
-- Magdalene first, or else it will give a nonsensical result.
function ____exports.wouldDamageTaintedMagdaleneNonTemporaryHeartContainers(self, player, damageAmount)
    local soulHearts = player:GetSoulHearts()
    if soulHearts > 0 then
        return false
    end
    local boneHearts = player:GetBoneHearts()
    if boneHearts > 0 then
        return false
    end
    local hearts = player:GetHearts()
    local rottenHearts = player:GetRottenHearts()
    local effectiveDamageAmount = damageAmount + math.min(rottenHearts, damageAmount)
    local heartsAfterDamage = hearts - effectiveDamageAmount
    local nonTemporaryMaxHearts = ____exports.getTaintedMagdaleneNonTemporaryMaxHearts(nil, player)
    return heartsAfterDamage < nonTemporaryMaxHearts
end
return ____exports
 end,
["classes.callbacks.PostPlayerChangeHealth"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local HEALTH_TYPE_VALUES = ____cachedEnumValues.HEALTH_TYPE_VALUES
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____playerHealth = require("functions.playerHealth")
local getPlayerHealthType = ____playerHealth.getPlayerHealthType
local ____playerIndex = require("functions.playerIndex")
local getPlayerIndex = ____playerIndex.getPlayerIndex
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {playersHealthMap = __TS__New(
    DefaultMap,
    function() return __TS__New(Map) end
)}}
____exports.PostPlayerChangeHealth = __TS__Class()
local PostPlayerChangeHealth = ____exports.PostPlayerChangeHealth
PostPlayerChangeHealth.name = "PostPlayerChangeHealth"
__TS__ClassExtends(PostPlayerChangeHealth, CustomCallback)
function PostPlayerChangeHealth.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePlayer
    self.postPEffectReordered = function(____, player)
        local playerIndex = getPlayerIndex(nil, player, true)
        local playerHealthMap = v.run.playersHealthMap:getAndSetDefault(playerIndex)
        for ____, healthType in ipairs(HEALTH_TYPE_VALUES) do
            local storedHealthValue = playerHealthMap:get(healthType)
            local currentHealthValue = getPlayerHealthType(nil, player, healthType)
            playerHealthMap:set(healthType, currentHealthValue)
            if storedHealthValue ~= nil and storedHealthValue ~= currentHealthValue then
                local difference = currentHealthValue - storedHealthValue
                self:fire(
                    player,
                    healthType,
                    difference,
                    storedHealthValue,
                    currentHealthValue
                )
            end
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectReordered}}
end
return ____exports
 end,
["functions.tears"] = function(...) 
local ____exports = {}
--- - The `EntityPlayer` object stores a player's tear rate in the `MaxFireDelay` field. This is
--   equivalent to how many tears the player can shoot per frame.
-- - If you already have a "tears" stat and you want to convert it back to MaxFireDelay, then use
--   this function.
-- - In this context, the "tears stat" represents what is shown on the in-game stat UI.
function ____exports.getFireDelay(self, tearsStat)
    return math.max(30 / tearsStat - 1, -0.9999)
end
--- - The `EntityPlayer` object stores a player's tear rate in the `MaxFireDelay` field. This is
--   equivalent to how many tears the player can shoot per frame.
-- - If you want to convert this to the "tears" stat that is shown on the in-game stat UI, then use
--   this function.
function ____exports.getTearsStat(self, fireDelay)
    return 30 / (fireDelay + 1)
end
--- - Converts the specified amount of tears stat into the format of `EntityPlayer.MaxFireDelay` and
--   adds it to the player.
-- - This function should only be used inside the `EVALUATE_CACHE` callback.
-- - In this context, the "tears stat" represents what is shown on the in-game stat UI.
-- 
-- For example:
-- 
-- ```ts
-- function evaluateCacheTears(player: EntityPlayer) {
--   const numFoo = player.GetNumCollectible(CollectibleTypeCustom.FOO);
--   const tearsStat = numFoo * FOO_TEARS_STAT;
--   addTearsStat(player, tearsStat);
-- }
-- ```
function ____exports.addTearsStat(self, player, tearsStat)
    local existingTearsStat = ____exports.getTearsStat(nil, player.MaxFireDelay)
    local newTearsStat = existingTearsStat + tearsStat
    local newMaxFireDelay = ____exports.getFireDelay(nil, newTearsStat)
    player.MaxFireDelay = newMaxFireDelay
end
--- Helper function to check if a tear hit an enemy. A tear is considered to be missed if it hit the
-- ground, a wall, or a grid entity.
-- 
-- Note that tears are still considered to be missed if they hit a poop or fire, so you may want to
-- handle those separately using the `POST_GRID_ENTITY_COLLISION` and `POST_ENTITY_COLLISION`
-- callbacks, respectively.
-- 
-- Under the hood, this function uses the `Entity.IsDead` method. (Tears will not die if they hit an
-- enemy, but they will die if they hit a wall or object.)
function ____exports.isMissedTear(self, tear)
    return tear:IsDead()
end
--- Helper function to check if a given tear is from a familiar (as opposed to e.g. a player). This
-- is determined by looking at the parent.
-- 
-- For the special case of Incubus and Blood Babies, the parent of the tear is always the player,
-- but the spawner entity of the tear changes. On frame 0, the spawner entity is equal to the
-- player, and on frame 1, the spawner entity is equal to the familiar. For this reason, you can
-- only use this function in the `POST_TEAR_INIT_VERY_LATE` callback or on frame 1+.
-- 
-- If this function is called on frame 0, it will throw a run-time error.
-- 
-- Note that this function does not work properly when the tear is from a Lead Pencil barrage. In
-- this case, it will always appear as if the tear is coming from a player.
-- 
-- @param tear The tear to inspect.
-- @param familiarVariant Optional. Specify this to check if the tear came from a specific familiar
-- variant. Default is undefined, which checks for any familiar.
-- @param subType Optional. Specify this to check if the tear came from a specific familiar
-- sub-type. Default is undefined, which checks for any familiar.
function ____exports.isTearFromFamiliar(self, tear, familiarVariant, subType)
    if tear.FrameCount == 0 then
        error("Failed to check if the given tear was from a player since the tear's frame count was equal to 0. (The \"isTearFromFamiliar\" function must only be used in the \"POST_TEAR_INIT_VERY_LATE\" callback or on frame 1 and onwards.)")
    end
    if tear.SpawnerEntity == nil then
        return false
    end
    local familiar = tear.SpawnerEntity:ToFamiliar()
    if familiar == nil then
        return false
    end
    return (familiarVariant == nil or familiarVariant == familiar.Variant) and (subType == nil or subType == familiar.SubType)
end
--- Helper function to check if a given tear is from a player (as opposed to e.g. a familiar). This
-- is determined by looking at the `SpawnerEntity`.
-- 
-- For the special case of Incubus and Blood Babies, the `SpawnerEntity` of the tear is always the
-- player, but the spawner entity of the tear changes. On frame 0, the spawner entity is equal to
-- the player, and on frame 1, the spawner entity is equal to the familiar. For this reason, you can
-- only use this function in the `POST_TEAR_INIT_VERY_LATE` callback or on frame 1+.
-- 
-- If this function is called on frame 0, it will throw a run-time error.
-- 
-- Note that this function does not work properly when the tear is from a Lead Pencil barrage. In
-- this case, it will always appear as if the tear is coming from a player.
function ____exports.isTearFromPlayer(self, tear)
    if tear.FrameCount == 0 then
        error("Failed to check if the given tear was from a player since the tear's frame count was equal to 0. (The \"isTearFromPlayer\" function must only be used in the \"POST_TEAR_INIT_VERY_LATE\" callback or on frame 1 and onwards.)")
    end
    if tear.SpawnerEntity == nil then
        return false
    end
    local player = tear.SpawnerEntity:ToPlayer()
    return player ~= nil
end
return ____exports
 end,
["maps.defaultPlayerStatMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CacheFlag = ____isaac_2Dtypescript_2Ddefinitions.CacheFlag
local ____tears = require("functions.tears")
local getTearsStat = ____tears.getTearsStat
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
local DEFAULT_MAX_FIRE_DELAY = 10
--- The default fire delay is represented in the tear stat, not the `MaxFireDelay` value.
____exports.DEFAULT_PLAYER_STAT_MAP = __TS__New(
    ReadonlyMap,
    {
        {CacheFlag.DAMAGE, 3.5},
        {
            CacheFlag.FIRE_DELAY,
            getTearsStat(nil, DEFAULT_MAX_FIRE_DELAY)
        },
        {CacheFlag.SHOT_SPEED, 1},
        {CacheFlag.RANGE, 6.5},
        {CacheFlag.SPEED, 1},
        {CacheFlag.LUCK, 0}
    }
)
return ____exports
 end,
["functions.stats"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CacheFlag = ____isaac_2Dtypescript_2Ddefinitions.CacheFlag
local ____PlayerStat = require("enums.PlayerStat")
local PlayerStat = ____PlayerStat.PlayerStat
local ____defaultPlayerStatMap = require("maps.defaultPlayerStatMap")
local DEFAULT_PLAYER_STAT_MAP = ____defaultPlayerStatMap.DEFAULT_PLAYER_STAT_MAP
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____tears = require("functions.tears")
local addTearsStat = ____tears.addTearsStat
--- Helper function to get all of the stat for a player.
function ____exports.getPlayerStats(self, player)
    return {
        [PlayerStat.DAMAGE] = player.Damage,
        [PlayerStat.FIRE_DELAY] = player.MaxFireDelay,
        [PlayerStat.SHOT_SPEED] = player.ShotSpeed,
        [PlayerStat.TEAR_HEIGHT] = player.TearHeight,
        [PlayerStat.TEAR_RANGE] = player.TearRange,
        [PlayerStat.TEAR_FALLING_ACCELERATION] = player.TearFallingAcceleration,
        [PlayerStat.TEAR_FALLING_SPEED] = player.TearFallingSpeed,
        [PlayerStat.MOVE_SPEED] = player.MoveSpeed,
        [PlayerStat.TEAR_FLAG] = player.TearFlags,
        [PlayerStat.TEAR_COLOR] = player.TearColor,
        [PlayerStat.FLYING] = player.CanFly,
        [PlayerStat.LUCK] = player.Luck,
        [PlayerStat.SIZE] = player.SpriteScale
    }
end
local STAT_CACHE_FLAGS_SET = __TS__New(ReadonlySet, {
    CacheFlag.DAMAGE,
    CacheFlag.FIRE_DELAY,
    CacheFlag.SHOT_SPEED,
    CacheFlag.RANGE,
    CacheFlag.SPEED,
    CacheFlag.LUCK
})
--- Helper function to add a stat to a player based on the `CacheFlag` provided. Call this function
-- from the `EVALUATE_CACHE` callback.
-- 
-- Note that for `CacheFlag.FIRE_DELAY`, the "amount" argument will be interpreted as the tear stat
-- to add (and not the amount to mutate `EntityPlayer.MaxFireDelay` by).
-- 
-- This function supports the following cache flags:
-- - CacheFlag.DAMAGE (1 << 0)
-- - CacheFlag.FIRE_DELAY (1 << 1)
-- - CacheFlag.SHOT_SPEED (1 << 2)
-- - CacheFlag.RANGE (1 << 3)
-- - CacheFlag.SPEED (1 << 4)
-- - CacheFlag.LUCK (1 << 10)
function ____exports.addPlayerStat(self, player, cacheFlag, amount)
    if not STAT_CACHE_FLAGS_SET:has(cacheFlag) then
        error("You cannot add a stat to a player with the cache flag of: " .. tostring(cacheFlag))
    end
    repeat
        local ____switch4 = cacheFlag
        local ____cond4 = ____switch4 == CacheFlag.DAMAGE
        if ____cond4 then
            do
                player.Damage = player.Damage + amount
                break
            end
        end
        ____cond4 = ____cond4 or ____switch4 == CacheFlag.FIRE_DELAY
        if ____cond4 then
            do
                addTearsStat(nil, player, amount)
                break
            end
        end
        ____cond4 = ____cond4 or ____switch4 == CacheFlag.SHOT_SPEED
        if ____cond4 then
            do
                player.ShotSpeed = player.ShotSpeed + amount
                break
            end
        end
        ____cond4 = ____cond4 or ____switch4 == CacheFlag.RANGE
        if ____cond4 then
            do
                player.TearHeight = player.TearHeight + amount
                break
            end
        end
        ____cond4 = ____cond4 or ____switch4 == CacheFlag.SPEED
        if ____cond4 then
            do
                player.MoveSpeed = player.MoveSpeed + amount
                break
            end
        end
        ____cond4 = ____cond4 or ____switch4 == CacheFlag.LUCK
        if ____cond4 then
            do
                player.Luck = player.Luck + amount
                break
            end
        end
    until true
end
--- Returns the starting stat that Isaac (the default character) starts with. For example, if you
-- pass this function `CacheFlag.DAMAGE`, it will return 3.5.
-- 
-- Note that the default fire delay is represented in the tear stat, not the `MaxFireDelay` value.
function ____exports.getDefaultPlayerStat(self, cacheFlag)
    return DEFAULT_PLAYER_STAT_MAP:get(cacheFlag)
end
--- Helper function to get the stat for a player corresponding to the `StatType`.
function ____exports.getPlayerStat(self, player, playerStat)
    local playerStats = ____exports.getPlayerStats(nil, player)
    return playerStats[playerStat]
end
return ____exports
 end,
["classes.callbacks.PostPlayerChangeStat"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local statEquals
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local PLAYER_STAT_VALUES = ____cachedEnumValues.PLAYER_STAT_VALUES
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____bitSet128 = require("functions.bitSet128")
local isBitSet128 = ____bitSet128.isBitSet128
local ____color = require("functions.color")
local colorEquals = ____color.colorEquals
local isColor = ____color.isColor
local ____playerIndex = require("functions.playerIndex")
local getPlayerIndex = ____playerIndex.getPlayerIndex
local ____stats = require("functions.stats")
local getPlayerStat = ____stats.getPlayerStat
local ____types = require("functions.types")
local isBoolean = ____types.isBoolean
local isNumber = ____types.isNumber
local ____vector = require("functions.vector")
local isVector = ____vector.isVector
local vectorEquals = ____vector.vectorEquals
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
function statEquals(self, oldValue, newValue)
    local isNumberStat = isNumber(nil, oldValue) and isNumber(nil, newValue)
    if isNumberStat then
        return oldValue == newValue
    end
    local isBooleanStat = isBoolean(nil, oldValue) and isBoolean(nil, newValue)
    if isBooleanStat then
        return oldValue == newValue
    end
    local isBitSet128Stat = isBitSet128(nil, oldValue) and isBitSet128(nil, newValue)
    if isBitSet128Stat then
        return oldValue == newValue
    end
    local isColorStat = isColor(nil, oldValue) and isColor(nil, newValue)
    if isColorStat then
        return colorEquals(nil, oldValue, newValue)
    end
    local isVectorStat = isVector(nil, oldValue) and isVector(nil, newValue)
    if isVectorStat then
        return vectorEquals(nil, oldValue, newValue)
    end
    error("Failed to determine the type of a stat in the \"POST_PLAYER_CHANGE_STAT\" callback.")
end
local v = {run = {playersStatMap = __TS__New(
    DefaultMap,
    function() return __TS__New(Map) end
)}}
____exports.PostPlayerChangeStat = __TS__Class()
local PostPlayerChangeStat = ____exports.PostPlayerChangeStat
PostPlayerChangeStat.name = "PostPlayerChangeStat"
__TS__ClassExtends(PostPlayerChangeStat, CustomCallback)
function PostPlayerChangeStat.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePlayer
    self.postPEffectReordered = function(____, player)
        local playerIndex = getPlayerIndex(nil, player, true)
        local playerStatMap = v.run.playersStatMap:getAndSetDefault(playerIndex)
        for ____, statType in ipairs(PLAYER_STAT_VALUES) do
            do
                local storedStatValue = playerStatMap:get(statType)
                local currentStatValue = getPlayerStat(nil, player, statType)
                playerStatMap:set(statType, currentStatValue)
                if storedStatValue == nil then
                    goto __continue5
                end
                if not statEquals(nil, storedStatValue, currentStatValue) then
                    local isNumberStat = isNumber(nil, storedStatValue) and isNumber(nil, currentStatValue)
                    local difference = isNumberStat and currentStatValue - storedStatValue or 0
                    self:fire(
                        player,
                        statType,
                        difference,
                        storedStatValue,
                        currentStatValue
                    )
                end
            end
            ::__continue5::
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectReordered}}
end
return ____exports
 end,
["classes.callbacks.PostPlayerChangeType"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____playerDataStructures = require("functions.playerDataStructures")
local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {playersCharacterMap = __TS__New(
    DefaultMap,
    function(____, character) return character end
)}}
____exports.PostPlayerChangeType = __TS__Class()
local PostPlayerChangeType = ____exports.PostPlayerChangeType
PostPlayerChangeType.name = "PostPlayerChangeType"
__TS__ClassExtends(PostPlayerChangeType, CustomCallback)
function PostPlayerChangeType.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePlayer
    self.postPEffectReordered = function(____, player)
        local character = player:GetPlayerType()
        local storedCharacter = defaultMapGetPlayer(nil, v.run.playersCharacterMap, player, character)
        if character ~= storedCharacter then
            mapSetPlayer(nil, v.run.playersCharacterMap, player, character)
            self:fire(player, storedCharacter, character)
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectReordered}}
end
return ____exports
 end,
["classes.callbacks.PostPlayerCollectibleAdded"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireCollectibleType = ____shouldFire.shouldFireCollectibleType
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPlayerCollectibleAdded = __TS__Class()
local PostPlayerCollectibleAdded = ____exports.PostPlayerCollectibleAdded
PostPlayerCollectibleAdded.name = "PostPlayerCollectibleAdded"
__TS__ClassExtends(PostPlayerCollectibleAdded, CustomCallback)
function PostPlayerCollectibleAdded.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireCollectibleType
    self.featuresUsed = {ISCFeature.PLAYER_COLLECTIBLE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostPlayerCollectibleRemoved"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireCollectibleType = ____shouldFire.shouldFireCollectibleType
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPlayerCollectibleRemoved = __TS__Class()
local PostPlayerCollectibleRemoved = ____exports.PostPlayerCollectibleRemoved
PostPlayerCollectibleRemoved.name = "PostPlayerCollectibleRemoved"
__TS__ClassExtends(PostPlayerCollectibleRemoved, CustomCallback)
function PostPlayerCollectibleRemoved.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireCollectibleType
    self.featuresUsed = {ISCFeature.PLAYER_COLLECTIBLE_DETECTION}
end
return ____exports
 end,
["enums.MysteriousPaperEffect"] = function(...) 
local ____exports = {}
--- The possible effects that the Mysterious Paper trinket can grant.
-- 
-- This enum has hard-coded values because they correspond to the specific in-game frame count of
-- the player.
____exports.MysteriousPaperEffect = {}
____exports.MysteriousPaperEffect.POLAROID = 0
____exports.MysteriousPaperEffect[____exports.MysteriousPaperEffect.POLAROID] = "POLAROID"
____exports.MysteriousPaperEffect.NEGATIVE = 1
____exports.MysteriousPaperEffect[____exports.MysteriousPaperEffect.NEGATIVE] = "NEGATIVE"
____exports.MysteriousPaperEffect.MISSING_PAGE = 2
____exports.MysteriousPaperEffect[____exports.MysteriousPaperEffect.MISSING_PAGE] = "MISSING_PAGE"
____exports.MysteriousPaperEffect.MISSING_POSTER = 3
____exports.MysteriousPaperEffect[____exports.MysteriousPaperEffect.MISSING_POSTER] = "MISSING_POSTER"
return ____exports
 end,
["interfaces.TrinketSituation"] = function(...) 
local ____exports = {}
return ____exports
 end,
["objects.trinketDescriptions"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
____exports.DEFAULT_TRINKET_DESCRIPTION = "Unknown"
--- Maps trinket types to the real English descriptions from the "stringtable.sta" file.
____exports.TRINKET_DESCRIPTIONS = {
    [TrinketType.NULL] = ____exports.DEFAULT_TRINKET_DESCRIPTION,
    [TrinketType.SWALLOWED_PENNY] = "Gulp!",
    [TrinketType.PETRIFIED_POOP] = "It feels lucky?",
    [TrinketType.AAA_BATTERY] = "Trickle charge",
    [TrinketType.BROKEN_REMOTE] = "It's broken",
    [TrinketType.PURPLE_HEART] = "Challenge up",
    [TrinketType.BROKEN_MAGNET] = "It kinda works",
    [TrinketType.ROSARY_BEAD] = "Faith up",
    [TrinketType.CARTRIDGE] = "I remember these",
    [TrinketType.PULSE_WORM] = "Wub wub!",
    [TrinketType.WIGGLE_WORM] = "Wiggle waggle!",
    [TrinketType.RING_WORM] = "Woop woop!",
    [TrinketType.FLAT_WORM] = "Blub blub!",
    [TrinketType.STORE_CREDIT] = "YES!",
    [TrinketType.CALLUS] = "Your feet feel stronger",
    [TrinketType.LUCKY_ROCK] = "There's something inside it",
    [TrinketType.MOMS_TOENAIL] = "???",
    [TrinketType.BLACK_LIPSTICK] = "Evil up",
    [TrinketType.BIBLE_TRACT] = "Faith up",
    [TrinketType.PAPER_CLIP] = "Master of lockpicking",
    [TrinketType.MONKEY_PAW] = "Wish granted",
    [TrinketType.MYSTERIOUS_PAPER] = "???",
    [TrinketType.DAEMONS_TAIL] = "Evil up",
    [TrinketType.MISSING_POSTER] = "???",
    [TrinketType.BUTT_PENNY] = "Wealth of gas",
    [TrinketType.MYSTERIOUS_CANDY] = "Uh-oh!",
    [TrinketType.HOOK_WORM] = "Zip zoop!",
    [TrinketType.WHIP_WORM] = "Wooosh!",
    [TrinketType.BROKEN_ANKH] = "Eternal life?",
    [TrinketType.FISH_HEAD] = "It stinks",
    [TrinketType.PINKY_EYE] = "Poison shots",
    [TrinketType.PUSH_PIN] = "Piercing shots",
    [TrinketType.LIBERTY_CAP] = "Touch fuzzy, get dizzy",
    [TrinketType.UMBILICAL_CORD] = "Fetal protection",
    [TrinketType.CHILDS_HEART] = "It calls out to its brothers",
    [TrinketType.CURVED_HORN] = "DMG up",
    [TrinketType.RUSTED_KEY] = "It feels lucky?",
    [TrinketType.GOAT_HOOF] = "Speed up",
    [TrinketType.MOMS_PEARL] = "It emanates purity ",
    [TrinketType.CANCER] = "Yay, cancer!",
    [TrinketType.RED_PATCH] = "Your rage grows",
    [TrinketType.MATCH_STICK] = "Tastes like burning",
    [TrinketType.LUCKY_TOE] = "Luck up!",
    [TrinketType.CURSED_SKULL] = "Cursed?",
    [TrinketType.SAFETY_CAP] = "Don't swallow it",
    [TrinketType.ACE_OF_SPADES] = "Luck of the draw",
    [TrinketType.ISAACS_FORK] = "Consume thy enemy",
    [TrinketType.MISSING_PAGE] = "It glows with power",
    [TrinketType.BLOODY_PENNY] = "Wealth of health",
    [TrinketType.BURNT_PENNY] = "Wealth of chaos",
    [TrinketType.FLAT_PENNY] = "Wealth of answers",
    [TrinketType.COUNTERFEIT_PENNY] = "Wealth of wealth",
    [TrinketType.TICK] = "Well, that's not coming off",
    [TrinketType.ISAACS_HEAD] = "Dead friend",
    [TrinketType.MAGGYS_FAITH] = "Faith's reward",
    [TrinketType.JUDAS_TONGUE] = "Payment received ",
    [TrinketType.BLUE_BABYS_SOUL] = "Imaginary friend",
    [TrinketType.SAMSONS_LOCK] = "Your rage grows",
    [TrinketType.CAINS_EYE] = "May you see your destination",
    [TrinketType.EVES_BIRD_FOOT] = "Revenge from beyond",
    [TrinketType.LEFT_HAND] = "The left-hand path reaps dark rewards",
    [TrinketType.SHINY_ROCK] = "It shines for its brothers",
    [TrinketType.SAFETY_SCISSORS] = "Fuse cutter",
    [TrinketType.RAINBOW_WORM] = "Bleep bloop blop",
    [TrinketType.TAPE_WORM] = "Floooooooooop!",
    [TrinketType.LAZY_WORM] = "Pft",
    [TrinketType.CRACKED_DICE] = "You feel cursed... kinda.",
    [TrinketType.SUPER_MAGNET] = "It pulls",
    [TrinketType.FADED_POLAROID] = "You feel faded",
    [TrinketType.LOUSE] = "Itchy, tasty...",
    [TrinketType.BOBS_BLADDER] = "Creepy bombs",
    [TrinketType.WATCH_BATTERY] = "Lil charge",
    [TrinketType.BLASTING_CAP] = "Pop! Pop!",
    [TrinketType.STUD_FINDER] = "The ground below feels hollow...",
    [TrinketType.ERROR] = "Effect not found?",
    [TrinketType.POKER_CHIP] = "It's double down time!",
    [TrinketType.BLISTER] = "Bounce back!",
    [TrinketType.SECOND_HAND] = "Extended stat effect time!",
    [TrinketType.ENDLESS_NAMELESS] = "I'm stuck in a loop...",
    [TrinketType.BLACK_FEATHER] = "With darkness comes power",
    [TrinketType.BLIND_RAGE] = "Blind to damage",
    [TrinketType.GOLDEN_HORSE_SHOE] = "Feel lucky?",
    [TrinketType.STORE_KEY] = "Stores are open",
    [TrinketType.RIB_OF_GREED] = "Feels greedy",
    [TrinketType.KARMA] = "Karma up",
    [TrinketType.LIL_LARVA] = "The poop is moving...",
    [TrinketType.MOMS_LOCKET] = "You feel her love",
    [TrinketType.NO] = "Never again!",
    [TrinketType.CHILD_LEASH] = "Keep your friends close...",
    [TrinketType.BROWN_CAP] = "Fartoom!",
    [TrinketType.MECONIUM] = "Eww",
    [TrinketType.CRACKED_CROWN] = "Stat booster",
    [TrinketType.USED_DIAPER] = "You stink",
    [TrinketType.FISH_TAIL] = "It also stinks!",
    [TrinketType.BLACK_TOOTH] = "It looks dead",
    [TrinketType.OUROBOROS_WORM] = "Foop foop!",
    [TrinketType.TONSIL] = "Sick...",
    [TrinketType.NOSE_GOBLIN] = "Seems magic...",
    [TrinketType.SUPER_BALL] = "Boing!",
    [TrinketType.VIBRANT_BULB] = "It needs power",
    [TrinketType.DIM_BULB] = "I think it's broken",
    [TrinketType.FRAGMENTED_CARD] = "Double moon",
    [TrinketType.EQUALITY] = "=",
    [TrinketType.WISH_BONE] = "Make a wish",
    [TrinketType.BAG_LUNCH] = "I wonder what it is",
    [TrinketType.LOST_CORK] = "Uncorked",
    [TrinketType.CROW_HEART] = "Drain me",
    [TrinketType.WALNUT] = "That's a hard nut to crack!",
    [TrinketType.DUCT_TAPE] = "Stuck!",
    [TrinketType.SILVER_DOLLAR] = "Feels lucky...",
    [TrinketType.BLOODY_CROWN] = "Drips with blood...",
    [TrinketType.PAY_TO_WIN] = "...",
    [TrinketType.LOCUST_OF_WRATH] = "I bring War",
    [TrinketType.LOCUST_OF_PESTILENCE] = "I bring Pestilence",
    [TrinketType.LOCUST_OF_FAMINE] = "I bring Famine",
    [TrinketType.LOCUST_OF_DEATH] = "I bring Death",
    [TrinketType.LOCUST_OF_CONQUEST] = "I bring Conquest",
    [TrinketType.BAT_WING] = "They are growing...",
    [TrinketType.STEM_CELL] = "Regen!",
    [TrinketType.HAIRPIN] = "Danger charge",
    [TrinketType.WOODEN_CROSS] = "My faith protects me",
    [TrinketType.BUTTER] = "Can't hold it!",
    [TrinketType.FILIGREE_FEATHERS] = "Angelic spoils",
    [TrinketType.DOOR_STOP] = "Hold the door",
    [TrinketType.EXTENSION_CORD] = "Charged friends",
    [TrinketType.ROTTEN_PENNY] = "Wealth of flies",
    [TrinketType.BABY_BENDER] = "Feed them magic!",
    [TrinketType.FINGER_BONE] = "It looks brittle",
    [TrinketType.JAW_BREAKER] = "Don't chew on it",
    [TrinketType.CHEWED_PEN] = "It's leaking",
    [TrinketType.BLESSED_PENNY] = "Wealth of purity",
    [TrinketType.BROKEN_SYRINGE] = "Mystery medicine",
    [TrinketType.SHORT_FUSE] = "Faster explosions",
    [TrinketType.GIGANTE_BEAN] = "Mega farts",
    [TrinketType.LIGHTER] = "Watch the world burn",
    [TrinketType.BROKEN_PADLOCK] = "Bombs are key",
    [TrinketType.MYOSOTIS] = "Forget me not...",
    [TrinketType.M] = "t's broken9Reroll your dest       ",
    [TrinketType.TEARDROP_CHARM] = "It feels lucky",
    [TrinketType.APPLE_OF_SODOM] = "It feels empty",
    [TrinketType.FORGOTTEN_LULLABY] = "Sing for your friends",
    [TrinketType.BETHS_FAITH] = "My faith protects me",
    [TrinketType.OLD_CAPACITOR] = "Voltage starving",
    [TrinketType.BRAIN_WORM] = "Ding!",
    [TrinketType.PERFECTION] = "Luck way up. Don't lose it!",
    [TrinketType.DEVILS_CROWN] = "His special customer",
    [TrinketType.CHARGED_PENNY] = "Wealth of power",
    [TrinketType.FRIENDSHIP_NECKLACE] = "Gather round",
    [TrinketType.PANIC_BUTTON] = "Push in case of emergency",
    [TrinketType.BLUE_KEY] = "Look between the rooms",
    [TrinketType.FLAT_FILE] = "No more spikes",
    [TrinketType.TELESCOPE_LENS] = "Seek the stars",
    [TrinketType.MOMS_LOCK] = "A piece of her love",
    [TrinketType.DICE_BAG] = "Bonus roll",
    [TrinketType.HOLY_CROWN] = "Walk the path of the saint",
    [TrinketType.MOTHERS_KISS] = "HP up",
    [TrinketType.TORN_CARD] = "Death awaits",
    [TrinketType.TORN_POCKET] = "A hole in your pocket",
    [TrinketType.GILDED_KEY] = "Less is more",
    [TrinketType.LUCKY_SACK] = "Free goodies!",
    [TrinketType.WICKED_CROWN] = "Walk the path of the wicked",
    [TrinketType.AZAZELS_STUMP] = "Unleash your inner demon",
    [TrinketType.DINGLE_BERRY] = "Oops!",
    [TrinketType.RING_CAP] = "Twice the bang!",
    [TrinketType.NUH_UH] = "Don't want!",
    [TrinketType.MODELING_CLAY] = "???",
    [TrinketType.POLISHED_BONE] = "Friends from beyond",
    [TrinketType.HOLLOW_HEART] = "A brittle blessing",
    [TrinketType.KIDS_DRAWING] = "Looks familiar...",
    [TrinketType.CRYSTAL_KEY] = "Call to the other side",
    [TrinketType.KEEPERS_BARGAIN] = "Money talks",
    [TrinketType.CURSED_PENNY] = "Wealth of misery",
    [TrinketType.YOUR_SOUL] = "Give it to me",
    [TrinketType.NUMBER_MAGNET] = "6",
    [TrinketType.STRANGE_KEY] = "What could it open?",
    [TrinketType.LIL_CLOT] = "Mini friend",
    [TrinketType.TEMPORARY_TATTOO] = "You feel braver",
    [TrinketType.SWALLOWED_M80] = "Bang!",
    [TrinketType.RC_REMOTE] = "Controllable buddies!",
    [TrinketType.FOUND_SOUL] = "Finally!",
    [TrinketType.EXPANSION_PACK] = "Fun extras",
    [TrinketType.BETHS_ESSENCE] = "Virtue's reward",
    [TrinketType.TWINS] = "I'm seeing double...",
    [TrinketType.ADOPTION_PAPERS] = "Give them a home",
    [TrinketType.CRICKET_LEG] = "Infested",
    [TrinketType.APOLLYONS_BEST_FRIEND] = "Attack buddy",
    [TrinketType.BROKEN_GLASSES] = "Double vision?",
    [TrinketType.ICE_CUBE] = "Stay frosty",
    [TrinketType.SIGIL_OF_BAPHOMET] = "Revel in death"
}
return ____exports
 end,
["objects.trinketNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
____exports.DEFAULT_TRINKET_NAME = "Unknown"
--- Maps trinket types to the real English names from the "stringtable.sta" file.
-- 
-- For a mapping of name to `TrinketType`, see `TRINKET_NAME_TO_TYPE_MAP`.
____exports.TRINKET_NAMES = {
    [TrinketType.NULL] = ____exports.DEFAULT_TRINKET_NAME,
    [TrinketType.SWALLOWED_PENNY] = "Swallowed Penny",
    [TrinketType.PETRIFIED_POOP] = "Petrified Poop",
    [TrinketType.AAA_BATTERY] = "AAA Battery",
    [TrinketType.BROKEN_REMOTE] = "Broken Remote",
    [TrinketType.PURPLE_HEART] = "Purple Heart",
    [TrinketType.BROKEN_MAGNET] = "Broken Magnet",
    [TrinketType.ROSARY_BEAD] = "Rosary Bead",
    [TrinketType.CARTRIDGE] = "Cartridge",
    [TrinketType.PULSE_WORM] = "Pulse Worm",
    [TrinketType.WIGGLE_WORM] = "Wiggle Worm",
    [TrinketType.RING_WORM] = "Ring Worm",
    [TrinketType.FLAT_WORM] = "Flat Worm",
    [TrinketType.STORE_CREDIT] = "Store Credit",
    [TrinketType.CALLUS] = "Callus",
    [TrinketType.LUCKY_ROCK] = "Lucky Rock",
    [TrinketType.MOMS_TOENAIL] = "Mom's Toenail",
    [TrinketType.BLACK_LIPSTICK] = "Black Lipstick",
    [TrinketType.BIBLE_TRACT] = "Bible Tract",
    [TrinketType.PAPER_CLIP] = "Paper Clip",
    [TrinketType.MONKEY_PAW] = "Monkey Paw",
    [TrinketType.MYSTERIOUS_PAPER] = "Mysterious Paper",
    [TrinketType.DAEMONS_TAIL] = "Daemon's Tail",
    [TrinketType.MISSING_POSTER] = "Missing Poster",
    [TrinketType.BUTT_PENNY] = "Butt Penny",
    [TrinketType.MYSTERIOUS_CANDY] = "Mysterious Candy",
    [TrinketType.HOOK_WORM] = "Hook Worm",
    [TrinketType.WHIP_WORM] = "Whip Worm",
    [TrinketType.BROKEN_ANKH] = "Broken Ankh",
    [TrinketType.FISH_HEAD] = "Fish Head",
    [TrinketType.PINKY_EYE] = "Pinky Eye",
    [TrinketType.PUSH_PIN] = "Push Pin",
    [TrinketType.LIBERTY_CAP] = "Liberty Cap",
    [TrinketType.UMBILICAL_CORD] = "Umbilical Cord",
    [TrinketType.CHILDS_HEART] = "Child's Heart",
    [TrinketType.CURVED_HORN] = "Curved Horn",
    [TrinketType.RUSTED_KEY] = "Rusted Key",
    [TrinketType.GOAT_HOOF] = "Goat Hoof",
    [TrinketType.MOMS_PEARL] = "Mom's Pearl",
    [TrinketType.CANCER] = "Cancer",
    [TrinketType.RED_PATCH] = "Red Patch",
    [TrinketType.MATCH_STICK] = "Match Stick",
    [TrinketType.LUCKY_TOE] = "Lucky Toe",
    [TrinketType.CURSED_SKULL] = "Cursed Skull",
    [TrinketType.SAFETY_CAP] = "Safety Cap",
    [TrinketType.ACE_OF_SPADES] = "Ace of Spades",
    [TrinketType.ISAACS_FORK] = "Isaac's Fork",
    [TrinketType.MISSING_PAGE] = "A Missing Page",
    [TrinketType.BLOODY_PENNY] = "Bloody Penny",
    [TrinketType.BURNT_PENNY] = "Burnt Penny",
    [TrinketType.FLAT_PENNY] = "Flat Penny",
    [TrinketType.COUNTERFEIT_PENNY] = "Counterfeit Penny",
    [TrinketType.TICK] = "Tick",
    [TrinketType.ISAACS_HEAD] = "Isaac's Head",
    [TrinketType.MAGGYS_FAITH] = "Maggy's Faith",
    [TrinketType.JUDAS_TONGUE] = "Judas' Tongue",
    [TrinketType.BLUE_BABYS_SOUL] = "???'s Soul",
    [TrinketType.SAMSONS_LOCK] = "Samson's Lock",
    [TrinketType.CAINS_EYE] = "Cain's Eye",
    [TrinketType.EVES_BIRD_FOOT] = "Eve's Bird Foot",
    [TrinketType.LEFT_HAND] = "The Left Hand",
    [TrinketType.SHINY_ROCK] = "Shiny Rock",
    [TrinketType.SAFETY_SCISSORS] = "Safety Scissors",
    [TrinketType.RAINBOW_WORM] = "Rainbow Worm",
    [TrinketType.TAPE_WORM] = "Tape Worm",
    [TrinketType.LAZY_WORM] = "Lazy Worm",
    [TrinketType.CRACKED_DICE] = "Cracked Dice",
    [TrinketType.SUPER_MAGNET] = "Super Magnet",
    [TrinketType.FADED_POLAROID] = "Faded Polaroid",
    [TrinketType.LOUSE] = "Louse",
    [TrinketType.BOBS_BLADDER] = "Bob's Bladder",
    [TrinketType.WATCH_BATTERY] = "Watch Battery",
    [TrinketType.BLASTING_CAP] = "Blasting Cap",
    [TrinketType.STUD_FINDER] = "Stud Finder",
    [TrinketType.ERROR] = "Error",
    [TrinketType.POKER_CHIP] = "Poker Chip",
    [TrinketType.BLISTER] = "Blister",
    [TrinketType.SECOND_HAND] = "Second Hand",
    [TrinketType.ENDLESS_NAMELESS] = "Endless Nameless",
    [TrinketType.BLACK_FEATHER] = "Black Feather",
    [TrinketType.BLIND_RAGE] = "Blind Rage",
    [TrinketType.GOLDEN_HORSE_SHOE] = "Golden Horse Shoe",
    [TrinketType.STORE_KEY] = "Store Key",
    [TrinketType.RIB_OF_GREED] = "Rib of Greed",
    [TrinketType.KARMA] = "Karma",
    [TrinketType.LIL_LARVA] = "Lil Larva",
    [TrinketType.MOMS_LOCKET] = "Mom's Locket",
    [TrinketType.NO] = "NO!",
    [TrinketType.CHILD_LEASH] = "Child Leash",
    [TrinketType.BROWN_CAP] = "Brown Cap",
    [TrinketType.MECONIUM] = "Meconium",
    [TrinketType.CRACKED_CROWN] = "Cracked Crown",
    [TrinketType.USED_DIAPER] = "Used Diaper",
    [TrinketType.FISH_TAIL] = "Fish Tail",
    [TrinketType.BLACK_TOOTH] = "Black Tooth",
    [TrinketType.OUROBOROS_WORM] = "Ouroboros Worm",
    [TrinketType.TONSIL] = "Tonsil",
    [TrinketType.NOSE_GOBLIN] = "Nose Goblin",
    [TrinketType.SUPER_BALL] = "Super Ball",
    [TrinketType.VIBRANT_BULB] = "Vibrant Bulb",
    [TrinketType.DIM_BULB] = "Dim Bulb",
    [TrinketType.FRAGMENTED_CARD] = "Fragmented Card",
    [TrinketType.EQUALITY] = "Equality!",
    [TrinketType.WISH_BONE] = "Wish Bone",
    [TrinketType.BAG_LUNCH] = "Bag Lunch",
    [TrinketType.LOST_CORK] = "Lost Cork",
    [TrinketType.CROW_HEART] = "Crow Heart",
    [TrinketType.WALNUT] = "Walnut",
    [TrinketType.DUCT_TAPE] = "Duct Tape",
    [TrinketType.SILVER_DOLLAR] = "Silver Dollar",
    [TrinketType.BLOODY_CROWN] = "Bloody Crown",
    [TrinketType.PAY_TO_WIN] = "Pay To Win",
    [TrinketType.LOCUST_OF_WRATH] = "Locust of War",
    [TrinketType.LOCUST_OF_PESTILENCE] = "Locust of Pestilence",
    [TrinketType.LOCUST_OF_FAMINE] = "Locust of Famine",
    [TrinketType.LOCUST_OF_DEATH] = "Locust of Death",
    [TrinketType.LOCUST_OF_CONQUEST] = "Locust of Conquest",
    [TrinketType.BAT_WING] = "Bat Wing",
    [TrinketType.STEM_CELL] = "Stem Cell",
    [TrinketType.HAIRPIN] = "Hairpin",
    [TrinketType.WOODEN_CROSS] = "Wooden Cross",
    [TrinketType.BUTTER] = "Butter!",
    [TrinketType.FILIGREE_FEATHERS] = "Filigree Feather",
    [TrinketType.DOOR_STOP] = "Door Stop",
    [TrinketType.EXTENSION_CORD] = "Extension Cord",
    [TrinketType.ROTTEN_PENNY] = "Rotten Penny",
    [TrinketType.BABY_BENDER] = "Baby-Bender",
    [TrinketType.FINGER_BONE] = "Finger Bone",
    [TrinketType.JAW_BREAKER] = "Jawbreaker",
    [TrinketType.CHEWED_PEN] = "Chewed Pen",
    [TrinketType.BLESSED_PENNY] = "Blessed Penny",
    [TrinketType.BROKEN_SYRINGE] = "Broken Syringe",
    [TrinketType.SHORT_FUSE] = "Short Fuse",
    [TrinketType.GIGANTE_BEAN] = "Gigante Bean",
    [TrinketType.LIGHTER] = "A Lighter",
    [TrinketType.BROKEN_PADLOCK] = "Broken Padlock",
    [TrinketType.MYOSOTIS] = "Myosotis",
    [TrinketType.M] = " 'M",
    [TrinketType.TEARDROP_CHARM] = "Teardrop Charm",
    [TrinketType.APPLE_OF_SODOM] = "Apple of Sodom",
    [TrinketType.FORGOTTEN_LULLABY] = "Forgotten Lullaby",
    [TrinketType.BETHS_FAITH] = "Beth's Faith",
    [TrinketType.OLD_CAPACITOR] = "Old Capacitor",
    [TrinketType.BRAIN_WORM] = "Brain Worm",
    [TrinketType.PERFECTION] = "Perfection",
    [TrinketType.DEVILS_CROWN] = "Devil's Crown",
    [TrinketType.CHARGED_PENNY] = "Charged Penny",
    [TrinketType.FRIENDSHIP_NECKLACE] = "Friendship Necklace",
    [TrinketType.PANIC_BUTTON] = "Panic Button",
    [TrinketType.BLUE_KEY] = "Blue Key",
    [TrinketType.FLAT_FILE] = "Flat File",
    [TrinketType.TELESCOPE_LENS] = "Telescope Lens",
    [TrinketType.MOMS_LOCK] = "Mom's Lock",
    [TrinketType.DICE_BAG] = "Dice Bag",
    [TrinketType.HOLY_CROWN] = "Holy Crown",
    [TrinketType.MOTHERS_KISS] = "Mother's Kiss",
    [TrinketType.TORN_CARD] = "Torn Card",
    [TrinketType.TORN_POCKET] = "Torn Pocket",
    [TrinketType.GILDED_KEY] = "Gilded Key",
    [TrinketType.LUCKY_SACK] = "Lucky Sack",
    [TrinketType.WICKED_CROWN] = "Wicked Crown",
    [TrinketType.AZAZELS_STUMP] = "Azazel's Stump",
    [TrinketType.DINGLE_BERRY] = "Dingle Berry",
    [TrinketType.RING_CAP] = "Ring Cap",
    [TrinketType.NUH_UH] = "Nuh Uh!",
    [TrinketType.MODELING_CLAY] = "Modeling Clay",
    [TrinketType.POLISHED_BONE] = "Polished Bone",
    [TrinketType.HOLLOW_HEART] = "Hollow Heart",
    [TrinketType.KIDS_DRAWING] = "Kid's Drawing",
    [TrinketType.CRYSTAL_KEY] = "Crystal Key",
    [TrinketType.KEEPERS_BARGAIN] = "Keeper's Bargain",
    [TrinketType.CURSED_PENNY] = "Cursed Penny",
    [TrinketType.YOUR_SOUL] = "Your Soul",
    [TrinketType.NUMBER_MAGNET] = "Number Magnet",
    [TrinketType.STRANGE_KEY] = "Strange Key",
    [TrinketType.LIL_CLOT] = "Lil Clot",
    [TrinketType.TEMPORARY_TATTOO] = "Temporary Tattoo",
    [TrinketType.SWALLOWED_M80] = "Swallowed M80",
    [TrinketType.RC_REMOTE] = "RC Remote",
    [TrinketType.FOUND_SOUL] = "Found Soul",
    [TrinketType.EXPANSION_PACK] = "Expansion Pack",
    [TrinketType.BETHS_ESSENCE] = "Beth's Essence",
    [TrinketType.TWINS] = "The Twins",
    [TrinketType.ADOPTION_PAPERS] = "Adoption Papers",
    [TrinketType.CRICKET_LEG] = "Cricket Leg",
    [TrinketType.APOLLYONS_BEST_FRIEND] = "Apollyon's Best Friend",
    [TrinketType.BROKEN_GLASSES] = "Broken Glasses",
    [TrinketType.ICE_CUBE] = "Ice Cube",
    [TrinketType.SIGIL_OF_BAPHOMET] = "Sigil of Baphomet"
}
return ____exports
 end,
["functions.trinkets"] = function(...) 
local ____exports = {}
local GOLDEN_TRINKET_ADJUSTMENT
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____cachedClasses = require("core.cachedClasses")
local itemConfig = ____cachedClasses.itemConfig
local ____constants = require("core.constants")
local BLIND_ITEM_PNG_PATH = ____constants.BLIND_ITEM_PNG_PATH
local ____constantsFirstLast = require("core.constantsFirstLast")
local LAST_VANILLA_TRINKET_TYPE = ____constantsFirstLast.LAST_VANILLA_TRINKET_TYPE
local ____MysteriousPaperEffect = require("enums.MysteriousPaperEffect")
local MysteriousPaperEffect = ____MysteriousPaperEffect.MysteriousPaperEffect
local ____trinketDescriptions = require("objects.trinketDescriptions")
local DEFAULT_TRINKET_DESCRIPTION = ____trinketDescriptions.DEFAULT_TRINKET_DESCRIPTION
local TRINKET_DESCRIPTIONS = ____trinketDescriptions.TRINKET_DESCRIPTIONS
local ____trinketNames = require("objects.trinketNames")
local DEFAULT_TRINKET_NAME = ____trinketNames.DEFAULT_TRINKET_NAME
local TRINKET_NAMES = ____trinketNames.TRINKET_NAMES
local ____entities = require("functions.entities")
local getEntityID = ____entities.getEntityID
local ____enums = require("functions.enums")
local getEnumLength = ____enums.getEnumLength
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____pickupVariants = require("functions.pickupVariants")
local isTrinket = ____pickupVariants.isTrinket
local ____sprites = require("functions.sprites")
local clearSprite = ____sprites.clearSprite
local ____types = require("functions.types")
local asNumber = ____types.asNumber
local asTrinketType = ____types.asTrinketType
function ____exports.isGoldenTrinketType(self, trinketType)
    return asNumber(nil, trinketType) > GOLDEN_TRINKET_ADJUSTMENT
end
function ____exports.isVanillaTrinketType(self, trinketType)
    return trinketType <= LAST_VANILLA_TRINKET_TYPE
end
GOLDEN_TRINKET_ADJUSTMENT = 32768
local NUM_MYSTERIOUS_PAPER_EFFECTS = getEnumLength(nil, MysteriousPaperEffect)
local TRINKET_ANM2_PATH = "gfx/005.350_trinket.anm2"
local TRINKET_SPRITE_LAYER = 0
--- Helper function to get the corresponding golden trinket type from a normal trinket type.
-- 
-- If the provided trinket type is already a golden trinket type, then the trinket type will be
-- returned unmodified.
-- 
-- For example, passing `TrinketType.SWALLOWED_PENNY` would result in 32769, which is the value that
-- corresponds to the golden trinket sub-type for Swallowed Penny.
function ____exports.getGoldenTrinketType(self, trinketType)
    return ____exports.isGoldenTrinketType(nil, trinketType) and trinketType or trinketType + GOLDEN_TRINKET_ADJUSTMENT
end
--- Helper function to get the current effect that the Mysterious Paper trinket is providing to the
-- player. Returns undefined if the player does not have the Mysterious Paper trinket.
-- 
-- The Mysterious Paper trinket has four different effects:
-- 
-- - The Polaroid (collectible)
-- - The Negative (collectible)
-- - A Missing Page (trinket)
-- - Missing Poster (trinket)
-- 
-- It rotates between these four effects on every frame. Note that Mysterious Paper will cause the
-- `EntityPlayer.HasCollectible` and `EntityPlayer.HasTrinket` methods to return true for the
-- respective items on the particular frame, with the exception of the Missing Poster. (The player
-- will never "have" the Missing Poster, even on the correct corresponding frame.)
-- 
-- @param player The player to look at.
-- @param frameCount Optional. The frame count that corresponds to time the effect will be active.
-- Default is the current frame.
function ____exports.getMysteriousPaperEffectForFrame(self, player, frameCount)
    if frameCount == nil then
        frameCount = player.FrameCount
    end
    if not player:HasTrinket(TrinketType.MYSTERIOUS_PAPER) then
        return nil
    end
    return frameCount % NUM_MYSTERIOUS_PAPER_EFFECTS
end
--- Helper function to get the corresponding normal trinket type from a golden trinket type.
-- 
-- If the provided trinket type is already a normal trinket type, then the trinket type will be
-- returned unmodified.
function ____exports.getNormalTrinketType(self, trinketType)
    return ____exports.isGoldenTrinketType(nil, trinketType) and trinketType - GOLDEN_TRINKET_ADJUSTMENT or trinketType
end
--- Helper function to get the in-game description for a trinket. Returns "Unknown" if the provided
-- trinket type was not valid.
-- 
-- This function works for both vanilla and modded trinkets.
function ____exports.getTrinketDescription(self, trinketType)
    local trinketDescription = TRINKET_DESCRIPTIONS[trinketType]
    if trinketDescription ~= nil then
        return trinketDescription
    end
    local itemConfigItem = itemConfig:GetTrinket(trinketType)
    if itemConfigItem ~= nil then
        return itemConfigItem.Description
    end
    return DEFAULT_TRINKET_DESCRIPTION
end
--- Helper function to get the path to a trinket PNG file. Returns the path to the question mark
-- sprite (i.e. from Curse of the Blind) if the provided trinket type was not valid.
-- 
-- Note that this does not return the file name, but the full path to the trinket's PNG file. The
-- function is named "GfxFilename" to correspond to the associated `ItemConfigItem.GfxFileName`
-- field.
function ____exports.getTrinketGfxFilename(self, trinketType)
    local itemConfigItem = itemConfig:GetTrinket(trinketType)
    if itemConfigItem == nil then
        return BLIND_ITEM_PNG_PATH
    end
    return itemConfigItem.GfxFileName
end
--- Helper function to get the name of a trinket. Returns "Unknown" if the provided trinket type is
-- not valid.
-- 
-- This function works for both vanilla and modded trinkets.
-- 
-- For example, `getTrinketName(TrinketType.SWALLOWED_PENNY)` would return "Swallowed Penny".
function ____exports.getTrinketName(self, trinketType)
    local trinketName = TRINKET_NAMES[trinketType]
    if trinketName ~= nil then
        return trinketName
    end
    local itemConfigItem = itemConfig:GetTrinket(trinketType)
    if itemConfigItem ~= nil then
        return itemConfigItem.Name
    end
    return DEFAULT_TRINKET_NAME
end
function ____exports.isModdedTrinketType(self, trinketType)
    return not ____exports.isVanillaTrinketType(nil, trinketType)
end
function ____exports.isValidTrinketType(self, trinketType)
    local potentialTrinketType = asTrinketType(nil, trinketType)
    local itemConfigItem = itemConfig:GetTrinket(potentialTrinketType)
    return itemConfigItem ~= nil
end
--- Helper function to generate a new sprite based on a collectible. If the provided collectible type
-- is invalid, a sprite with a Curse of the Blind question mark will be returned.
function ____exports.newTrinketSprite(self, trinketType)
    local sprite = Sprite()
    sprite:Load(TRINKET_ANM2_PATH, false)
    local gfxFileName = ____exports.getTrinketGfxFilename(nil, trinketType)
    sprite:ReplaceSpritesheet(TRINKET_SPRITE_LAYER, gfxFileName)
    sprite:LoadGraphics()
    local defaultAnimation = sprite:GetDefaultAnimation()
    sprite:Play(defaultAnimation, true)
    return sprite
end
--- Helper function to change the sprite of a trinket entity.
-- 
-- For more information about removing the trinket sprite, see the documentation for the
-- "clearSprite" helper function.
-- 
-- @param trinket The trinket whose sprite you want to modify.
-- @param pngPath Equal to either the spritesheet path to load (e.g.
-- "gfx/items/trinkets/trinket_001_swallowedpenny.png") or undefined. If undefined,
-- the sprite will be removed, making the trinket effectively invisible (except for
-- the shadow underneath it).
function ____exports.setTrinketSprite(self, trinket, pngPath)
    if not isTrinket(nil, trinket) then
        local entityID = getEntityID(nil, trinket)
        error("The \"setTrinketSprite\" function was given a non-trinket: " .. entityID)
    end
    local sprite = trinket:GetSprite()
    if pngPath == nil then
        clearSprite(nil, sprite)
    else
        sprite:ReplaceSpritesheet(TRINKET_SPRITE_LAYER, pngPath)
        sprite:LoadGraphics()
    end
end
--- Helper function to check in the item config if a given trinket has a given cache flag.
function ____exports.trinketHasCacheFlag(self, trinketType, cacheFlag)
    local itemConfigItem = itemConfig:GetTrinket(trinketType)
    if itemConfigItem == nil then
        return false
    end
    return hasFlag(nil, itemConfigItem.CacheFlags, cacheFlag)
end
return ____exports
 end,
["functions.trinketGive"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local TrinketSlot = ____isaac_2Dtypescript_2Ddefinitions.TrinketSlot
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____playerCollectibles = require("functions.playerCollectibles")
local useActiveItemTemp = ____playerCollectibles.useActiveItemTemp
local ____trinkets = require("functions.trinkets")
local getGoldenTrinketType = ____trinkets.getGoldenTrinketType
local ____utils = require("functions.utils")
local ____repeat = ____utils["repeat"]
--- Helper function to temporarily removes a player's held trinkets, if any. This will not remove any
-- smelted trinkets. Use this in combination with the `giveTrinketsBack` function to take away and
-- give back trinkets on the same frame.
-- 
-- @returns Undefined if the player does not have any trinkets, or TrinketSituation if they do.
function ____exports.temporarilyRemoveTrinkets(self, player)
    local trinketType1 = player:GetTrinket(TrinketSlot.SLOT_1)
    local trinketType2 = player:GetTrinket(TrinketSlot.SLOT_2)
    if trinketType1 == TrinketType.NULL and trinketType2 == TrinketType.NULL then
        return nil
    end
    if trinketType1 ~= TrinketType.NULL then
        player:TryRemoveTrinket(trinketType1)
    end
    if trinketType2 ~= TrinketType.NULL then
        player:TryRemoveTrinket(trinketType2)
    end
    return {trinketTypeRemoved = TrinketType.NULL, trinketType1 = trinketType1, trinketType2 = trinketType2, numSmeltedTrinkets = 0}
end
--- Helper function to restore the player's trinkets back to the way they were before the
-- `temporarilyRemoveTrinket` function was used. It will re-smelt any smelted trinkets that were
-- removed.
function ____exports.giveTrinketsBack(self, player, trinketSituation)
    if trinketSituation == nil then
        return
    end
    local trinketType1 = player:GetTrinket(TrinketSlot.SLOT_1)
    local trinketType2 = player:GetTrinket(TrinketSlot.SLOT_2)
    if trinketType1 ~= TrinketType.NULL then
        player:TryRemoveTrinket(trinketType1)
    end
    if trinketType2 ~= TrinketType.NULL then
        player:TryRemoveTrinket(trinketType2)
    end
    ____repeat(
        nil,
        trinketSituation.numSmeltedTrinkets,
        function()
            player:AddTrinket(trinketSituation.trinketTypeRemoved, false)
            useActiveItemTemp(nil, player, CollectibleType.SMELTER)
        end
    )
    if trinketSituation.trinketType1 ~= TrinketType.NULL then
        player:AddTrinket(trinketSituation.trinketType1, false)
    end
    if trinketSituation.trinketType2 ~= TrinketType.NULL then
        player:AddTrinket(trinketSituation.trinketType2, false)
    end
end
--- Helper function to smelt a trinket. Before smelting, this function will automatically remove the
-- trinkets that the player is holding, if any, and then give them back after the new trinket is
-- smelted.
-- 
-- @param player The player to smelt the trinkets to.
-- @param trinketType The trinket type to smelt.
-- @param numTrinkets Optional. If specified, will smelt the given number of trinkets. Use this to
-- avoid calling this function multiple times. Default is 1.
function ____exports.smeltTrinket(self, player, trinketType, numTrinkets)
    if numTrinkets == nil then
        numTrinkets = 1
    end
    local trinketSituation = ____exports.temporarilyRemoveTrinkets(nil, player)
    ____repeat(
        nil,
        numTrinkets,
        function()
            player:AddTrinket(trinketType)
            useActiveItemTemp(nil, player, CollectibleType.SMELTER)
        end
    )
    ____exports.giveTrinketsBack(nil, player, trinketSituation)
end
--- Helper function to smelt two or more different trinkets. If you want to smelt one trinket (or
-- multiple copies of one trinket), then use the `smeltTrinket` helper function instead.
-- 
-- This function is variadic, meaning that you can pass as many trinket types as you want to smelt.
-- 
-- Before smelting, this function will automatically remove the trinkets that the player is holding,
-- if any, and then give them back after the new trinket is smelted.
-- 
-- @param player The player to smelt the trinkets to.
-- @param trinketTypes The trinket types to smelt.
function ____exports.smeltTrinkets(self, player, ...)
    local trinketTypes = {...}
    for ____, trinketType in ipairs(trinketTypes) do
        ____exports.smeltTrinket(nil, player, trinketType)
    end
end
--- Helper function to temporarily remove a specific kind of trinket from the player. Use this in
-- combination with the `giveTrinketsBack` function to take away and give back a trinket on the same
-- frame. This function correctly handles multiple trinket slots and ensures that all copies of the
-- trinket are removed, including smelted trinkets.
-- 
-- Note that one smelted golden trinket is the same as two smelted normal trinkets.
-- 
-- @returns Undefined if the player does not have the trinket, or TrinketSituation if they do.
function ____exports.temporarilyRemoveTrinket(self, player, trinketType)
    if not player:HasTrinket(trinketType) then
        return nil
    end
    local trinketType1 = player:GetTrinket(TrinketSlot.SLOT_1)
    local trinketType2 = player:GetTrinket(TrinketSlot.SLOT_2)
    local numTrinkets = 0
    while player:HasTrinket(trinketType) do
        player:TryRemoveTrinket(trinketType)
        numTrinkets = numTrinkets + 1
    end
    local numSmeltedTrinkets = numTrinkets
    local trinketWasInSlot1 = trinketType1 == trinketType or trinketType1 == getGoldenTrinketType(nil, trinketType)
    if trinketWasInSlot1 then
        numSmeltedTrinkets = numSmeltedTrinkets - 1
    end
    local trinketWasInSlot2 = trinketType2 == trinketType or trinketType2 == getGoldenTrinketType(nil, trinketType)
    if trinketWasInSlot2 then
        numSmeltedTrinkets = numSmeltedTrinkets - 1
    end
    return {trinketTypeRemoved = trinketType, trinketType1 = trinketType1, trinketType2 = trinketType2, numSmeltedTrinkets = numSmeltedTrinkets}
end
return ____exports
 end,
["functions.revive"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local NullItemID = ____isaac_2Dtypescript_2Ddefinitions.NullItemID
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____constants = require("core.constants")
local MAX_TAINTED_SAMSON_BERSERK_CHARGE = ____constants.MAX_TAINTED_SAMSON_BERSERK_CHARGE
local TAINTED_SAMSON_BERSERK_CHARGE_FROM_TAKING_DAMAGE = ____constants.TAINTED_SAMSON_BERSERK_CHARGE_FROM_TAKING_DAMAGE
local ____MysteriousPaperEffect = require("enums.MysteriousPaperEffect")
local MysteriousPaperEffect = ____MysteriousPaperEffect.MysteriousPaperEffect
local ____characters = require("functions.characters")
local getCharacterDeathAnimationName = ____characters.getCharacterDeathAnimationName
local ____frames = require("functions.frames")
local onGameFrame = ____frames.onGameFrame
local ____playerHealth = require("functions.playerHealth")
local getPlayerMaxHeartContainers = ____playerHealth.getPlayerMaxHeartContainers
local ____players = require("functions.players")
local getPlayerNumHitsRemaining = ____players.getPlayerNumHitsRemaining
local hasLostCurse = ____players.hasLostCurse
local isKeeper = ____players.isKeeper
local ____sprites = require("functions.sprites")
local getLastFrameOfAnimation = ____sprites.getLastFrameOfAnimation
local ____trinketGive = require("functions.trinketGive")
local giveTrinketsBack = ____trinketGive.giveTrinketsBack
local temporarilyRemoveTrinket = ____trinketGive.temporarilyRemoveTrinket
local ____trinkets = require("functions.trinkets")
local getMysteriousPaperEffectForFrame = ____trinkets.getMysteriousPaperEffectForFrame
--- Helper function to determine if the player will be revived by the Heartbreak collectible if they
-- take fatal damage. This is contingent on the character that they are playing as and the amount of
-- broken hearts that they already have.
function ____exports.willReviveFromHeartbreak(self, player)
    if not player:HasCollectible(CollectibleType.HEARTBREAK) then
        return false
    end
    local maxHeartContainers = getPlayerMaxHeartContainers(nil, player)
    local numBrokenHeartsThatWillBeAdded = isKeeper(nil, player) and 1 or 2
    local brokenHearts = player:GetBrokenHearts()
    local numBrokenHeartsAfterRevival = numBrokenHeartsThatWillBeAdded + brokenHearts
    return maxHeartContainers > numBrokenHeartsAfterRevival
end
--- Helper function to determine if the Spirit Shackles item is in an enabled state. (It can be
-- either enabled or disabled.)
function ____exports.willReviveFromSpiritShackles(self, player)
    if not player:HasCollectible(CollectibleType.SPIRIT_SHACKLES) then
        return false
    end
    local effects = player:GetEffects()
    local spiritShacklesEnabled = not effects:HasNullEffect(NullItemID.SPIRIT_SHACKLES_DISABLED)
    local playerInSoulForm = effects:HasNullEffect(NullItemID.SPIRIT_SHACKLES_SOUL)
    return spiritShacklesEnabled and not playerInSoulForm
end
--- Uses the player's current health and other miscellaneous things to determine if incoming damage
-- will be fatal.
function ____exports.isDamageToPlayerFatal(self, player, amount, source, lastDamageGameFrame)
    local character = player:GetPlayerType()
    local effects = player:GetEffects()
    local isBerserk = effects:HasCollectibleEffect(CollectibleType.BERSERK)
    if character == PlayerType.JACOB_B and source.Type == EntityType.DARK_ESAU then
        return false
    end
    if isBerserk then
        return false
    end
    local berserkChargeAfterHit = player.SamsonBerserkCharge + TAINTED_SAMSON_BERSERK_CHARGE_FROM_TAKING_DAMAGE
    if character == PlayerType.SAMSON_B and berserkChargeAfterHit >= MAX_TAINTED_SAMSON_BERSERK_CHARGE then
        return false
    end
    if ____exports.willReviveFromSpiritShackles(nil, player) then
        return false
    end
    if character == PlayerType.JACOB_2_B then
        return true
    end
    if hasLostCurse(nil, player) then
        return true
    end
    local playerNumAllHearts = getPlayerNumHitsRemaining(nil, player)
    if amount < playerNumAllHearts then
        return false
    end
    if ____exports.willReviveFromHeartbreak(nil, player) then
        return false
    end
    if player:HasCollectible(CollectibleType.BROKEN_GLASS_CANNON) and onGameFrame(nil, lastDamageGameFrame) then
        return false
    end
    local hearts = player:GetHearts()
    local eternalHearts = player:GetEternalHearts()
    local soulHearts = player:GetSoulHearts()
    local boneHearts = player:GetBoneHearts()
    if hearts > 0 and soulHearts > 0 or hearts > 0 and boneHearts > 0 or soulHearts > 0 and boneHearts > 0 or soulHearts > 0 and eternalHearts > 0 or boneHearts >= 2 then
        return false
    end
    return true
end
--- Assuming that we are on the frame of fatal damage, this function returns whether Mysterious Paper
-- would rotate to Missing Poster on the frame that the "Game Over" screen would appear (which would
-- subsequently save the player from fatal damage).
-- 
-- Mysterious Paper rotates between the 4 items on every frame, in order. The formula for whether
-- Mysterious Paper be Missing Power is: `gameFrameCount % 4 === 3`
function ____exports.willMysteriousPaperRevive(self, player)
    local sprite = player:GetSprite()
    local character = player:GetPlayerType()
    local animation = getCharacterDeathAnimationName(nil, character)
    local deathAnimationFrames = getLastFrameOfAnimation(nil, sprite, animation)
    local frameOfDeath = player.FrameCount + deathAnimationFrames
    local mysteriousPaperEffect = getMysteriousPaperEffectForFrame(nil, player, frameOfDeath)
    if mysteriousPaperEffect == nil then
        return false
    end
    return mysteriousPaperEffect == MysteriousPaperEffect.MISSING_POSTER
end
--- The `EntityPlayer.WillPlayerRevive` method does not properly account for Mysterious Paper, so use
-- this helper function instead for more robust revival detection.
function ____exports.willPlayerRevive(self, player)
    local trinketSituation = temporarilyRemoveTrinket(nil, player, TrinketType.MYSTERIOUS_PAPER)
    local willRevive = player:WillPlayerRevive() or trinketSituation ~= nil and ____exports.willMysteriousPaperRevive(nil, player)
    giveTrinketsBack(nil, player, trinketSituation)
    return willRevive
end
return ____exports
 end,
["classes.callbacks.PostPlayerFatalDamage"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local DamageFlagZero = ____isaac_2Dtypescript_2Ddefinitions.DamageFlagZero
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____playerDataStructures = require("functions.playerDataStructures")
local mapGetPlayer = ____playerDataStructures.mapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____playerIndex = require("functions.playerIndex")
local isChildPlayer = ____playerIndex.isChildPlayer
local ____revive = require("functions.revive")
local isDamageToPlayerFatal = ____revive.isDamageToPlayerFatal
local willPlayerRevive = ____revive.willPlayerRevive
local ____rooms = require("functions.rooms")
local inBossRoomOf = ____rooms.inBossRoomOf
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {playersLastDamageGameFrame = __TS__New(Map)}}
____exports.PostPlayerFatalDamage = __TS__Class()
local PostPlayerFatalDamage = ____exports.PostPlayerFatalDamage
PostPlayerFatalDamage.name = "PostPlayerFatalDamage"
__TS__ClassExtends(PostPlayerFatalDamage, CustomCallback)
function PostPlayerFatalDamage.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePlayer
    self.preUseItemBible = function(____, _collectibleType, _rng, player, _useFlags, _activeSlot, _customVarData)
        if not inBossRoomOf(nil, BossID.SATAN) then
            return nil
        end
        if willPlayerRevive(nil, player) then
            return nil
        end
        local shouldSustainDeath = self:fire(
            player,
            0,
            DamageFlagZero,
            EntityRef(player),
            0
        )
        if shouldSustainDeath ~= nil then
            return not shouldSustainDeath
        end
        return nil
    end
    self.entityTakeDmgPlayer = function(____, player, amount, damageFlags, source, countdownFrames)
        if isChildPlayer(nil, player) then
            return nil
        end
        local gameFrameCount = game:GetFrameCount()
        local lastDamageGameFrame = mapGetPlayer(nil, v.run.playersLastDamageGameFrame, player)
        mapSetPlayer(nil, v.run.playersLastDamageGameFrame, player, gameFrameCount)
        if willPlayerRevive(nil, player) then
            return nil
        end
        if not isDamageToPlayerFatal(
            nil,
            player,
            amount,
            source,
            lastDamageGameFrame
        ) then
            return nil
        end
        local shouldSustainDeath = self:fire(
            player,
            amount,
            damageFlags,
            source,
            countdownFrames
        )
        if shouldSustainDeath ~= nil then
            return shouldSustainDeath
        end
        return nil
    end
    self.callbacksUsed = {{ModCallback.PRE_USE_ITEM, self.preUseItemBible, {CollectibleType.BIBLE}}}
    self.customCallbacksUsed = {{ModCallbackCustom.ENTITY_TAKE_DMG_PLAYER, self.entityTakeDmgPlayer}}
end
return ____exports
 end,
["classes.callbacks.PostPlayerInitFirst"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____playerIndex = require("functions.playerIndex")
local getPlayers = ____playerIndex.getPlayers
local isChildPlayer = ____playerIndex.isChildPlayer
local ____rooms = require("functions.rooms")
local inGenesisRoom = ____rooms.inGenesisRoom
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPlayerInitFirst = __TS__Class()
local PostPlayerInitFirst = ____exports.PostPlayerInitFirst
PostPlayerInitFirst.name = "PostPlayerInitFirst"
__TS__ClassExtends(PostPlayerInitFirst, CustomCallback)
function PostPlayerInitFirst.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePlayer
    self.postNewRoomReordered = function()
        if inGenesisRoom(nil) then
            for ____, player in ipairs(getPlayers(nil)) do
                self:fire(player)
            end
        end
    end
    self.postPlayerInitLate = function(____, player)
        if isChildPlayer(nil, player) then
            return
        end
        self:fire(player)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}, {ModCallbackCustom.POST_PLAYER_INIT_LATE, self.postPlayerInitLate}}
end
return ____exports
 end,
["classes.callbacks.PostPlayerInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____playerDataStructures = require("functions.playerDataStructures")
local setAddPlayer = ____playerDataStructures.setAddPlayer
local setHasPlayer = ____playerDataStructures.setHasPlayer
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {playersFiredSet = __TS__New(Set)}}
____exports.PostPlayerInitLate = __TS__Class()
local PostPlayerInitLate = ____exports.PostPlayerInitLate
PostPlayerInitLate.name = "PostPlayerInitLate"
__TS__ClassExtends(PostPlayerInitLate, CustomCallback)
function PostPlayerInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePlayer
    self.postPEffectUpdateReordered = function(____, player)
        if not setHasPlayer(nil, v.run.playersFiredSet, player) then
            setAddPlayer(nil, v.run.playersFiredSet, player)
            self:fire(player)
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
return ____exports
 end,
["classes.callbacks.PostPlayerRenderReordered"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPlayerRenderReordered = __TS__Class()
local PostPlayerRenderReordered = ____exports.PostPlayerRenderReordered
PostPlayerRenderReordered.name = "PostPlayerRenderReordered"
__TS__ClassExtends(PostPlayerRenderReordered, CustomCallback)
function PostPlayerRenderReordered.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePlayer
    self.featuresUsed = {ISCFeature.PLAYER_REORDERED_CALLBACKS}
end
return ____exports
 end,
["classes.callbacks.PostPlayerUpdateReordered"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPlayerUpdateReordered = __TS__Class()
local PostPlayerUpdateReordered = ____exports.PostPlayerUpdateReordered
PostPlayerUpdateReordered.name = "PostPlayerUpdateReordered"
__TS__ClassExtends(PostPlayerUpdateReordered, CustomCallback)
function PostPlayerUpdateReordered.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePlayer
    self.featuresUsed = {ISCFeature.PLAYER_REORDERED_CALLBACKS}
end
return ____exports
 end,
["classes.callbacks.PostPoopRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getPoops = ____gridEntitiesSpecific.getPoops
local ____shouldFire = require("shouldFire")
local shouldFirePoop = ____shouldFire.shouldFirePoop
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPoopRender = __TS__Class()
local PostPoopRender = ____exports.PostPoopRender
PostPoopRender.name = "PostPoopRender"
__TS__ClassExtends(PostPoopRender, CustomCallback)
function PostPoopRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePoop
    self.postRender = function()
        for ____, poop in ipairs(getPoops(nil)) do
            self:fire(poop)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
return ____exports
 end,
["classes.callbacks.PostPoopUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getPoops = ____gridEntitiesSpecific.getPoops
local ____shouldFire = require("shouldFire")
local shouldFirePoop = ____shouldFire.shouldFirePoop
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPoopUpdate = __TS__Class()
local PostPoopUpdate = ____exports.PostPoopUpdate
PostPoopUpdate.name = "PostPoopUpdate"
__TS__ClassExtends(PostPoopUpdate, CustomCallback)
function PostPoopUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePoop
    self.postUpdate = function()
        for ____, poop in ipairs(getPoops(nil)) do
            self:fire(poop)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostPressurePlateRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getPressurePlates = ____gridEntitiesSpecific.getPressurePlates
local ____shouldFire = require("shouldFire")
local shouldFirePressurePlate = ____shouldFire.shouldFirePressurePlate
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPressurePlateRender = __TS__Class()
local PostPressurePlateRender = ____exports.PostPressurePlateRender
PostPressurePlateRender.name = "PostPressurePlateRender"
__TS__ClassExtends(PostPressurePlateRender, CustomCallback)
function PostPressurePlateRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePressurePlate
    self.postRender = function()
        for ____, pressurePlate in ipairs(getPressurePlates(nil)) do
            self:fire(pressurePlate)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
return ____exports
 end,
["classes.callbacks.PostPressurePlateUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getPressurePlates = ____gridEntitiesSpecific.getPressurePlates
local ____shouldFire = require("shouldFire")
local shouldFirePressurePlate = ____shouldFire.shouldFirePressurePlate
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostPressurePlateUpdate = __TS__Class()
local PostPressurePlateUpdate = ____exports.PostPressurePlateUpdate
PostPressurePlateUpdate.name = "PostPressurePlateUpdate"
__TS__ClassExtends(PostPressurePlateUpdate, CustomCallback)
function PostPressurePlateUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePressurePlate
    self.postUpdate = function()
        for ____, pressurePlate in ipairs(getPressurePlates(nil)) do
            self:fire(pressurePlate)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostProjectileInitFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireProjectile = ____shouldFire.shouldFireProjectile
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostProjectileInitFilter = __TS__Class()
local PostProjectileInitFilter = ____exports.PostProjectileInitFilter
PostProjectileInitFilter.name = "PostProjectileInitFilter"
__TS__ClassExtends(PostProjectileInitFilter, CustomCallback)
function PostProjectileInitFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireProjectile
    self.postProjectileInit = function(____, projectile)
        self:fire(projectile)
    end
    self.callbacksUsed = {{ModCallback.POST_PROJECTILE_INIT, self.postProjectileInit}}
end
return ____exports
 end,
["classes.callbacks.PostProjectileInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireProjectile = ____shouldFire.shouldFireProjectile
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostProjectileInitLate = __TS__Class()
local PostProjectileInitLate = ____exports.PostProjectileInitLate
PostProjectileInitLate.name = "PostProjectileInitLate"
__TS__ClassExtends(PostProjectileInitLate, CustomCallback)
function PostProjectileInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireProjectile
    self.postProjectileUpdate = function(____, projectile)
        local ptrHash = GetPtrHash(projectile)
        if not v.room.firedSet:has(ptrHash) then
            v.room.firedSet:add(ptrHash)
            self:fire(projectile)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_PROJECTILE_UPDATE, self.postProjectileUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostProjectileKill"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireProjectile = ____shouldFire.shouldFireProjectile
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostProjectileKill = __TS__Class()
local PostProjectileKill = ____exports.PostProjectileKill
PostProjectileKill.name = "PostProjectileKill"
__TS__ClassExtends(PostProjectileKill, CustomCallback)
function PostProjectileKill.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireProjectile
    self.postProjectileUpdate = function(____, projectile)
        local ptrHash = GetPtrHash(projectile)
        if projectile:CollidesWithGrid() or projectile:IsDead() then
            v.room.firedSet:add(ptrHash)
        end
    end
    self.preProjectileCollision = function(____, projectile)
        local ptrHash = GetPtrHash(projectile)
        v.room.firedSet:add(ptrHash)
        return nil
    end
    self.postEntityRemove = function(____, entity)
        local projectile = entity:ToProjectile()
        if projectile == nil then
            return
        end
        local ptrHash = GetPtrHash(projectile)
        if v.room.firedSet:has(ptrHash) then
            v.room.firedSet:add(ptrHash)
            self:fire(projectile)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_PROJECTILE_UPDATE, self.postProjectileUpdate}, {ModCallback.PRE_PROJECTILE_COLLISION, self.preProjectileCollision}, {ModCallback.POST_ENTITY_REMOVE, self.postEntityRemove}}
end
return ____exports
 end,
["classes.callbacks.PostProjectileRenderFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireProjectile = ____shouldFire.shouldFireProjectile
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostProjectileRenderFilter = __TS__Class()
local PostProjectileRenderFilter = ____exports.PostProjectileRenderFilter
PostProjectileRenderFilter.name = "PostProjectileRenderFilter"
__TS__ClassExtends(PostProjectileRenderFilter, CustomCallback)
function PostProjectileRenderFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireProjectile
    self.postProjectileRender = function(____, projectile, renderOffset)
        self:fire(projectile, renderOffset)
    end
    self.callbacksUsed = {{ModCallback.POST_PROJECTILE_RENDER, self.postProjectileRender}}
end
return ____exports
 end,
["classes.callbacks.PostProjectileUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireProjectile = ____shouldFire.shouldFireProjectile
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostProjectileUpdateFilter = __TS__Class()
local PostProjectileUpdateFilter = ____exports.PostProjectileUpdateFilter
PostProjectileUpdateFilter.name = "PostProjectileUpdateFilter"
__TS__ClassExtends(PostProjectileUpdateFilter, CustomCallback)
function PostProjectileUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireProjectile
    self.postProjectileUpdate = function(____, projectile)
        self:fire(projectile)
    end
    self.callbacksUsed = {{ModCallback.POST_PROJECTILE_UPDATE, self.postProjectileUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostPurchase"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local ____exports = {}
local markUsedItemOnThisFrame, v
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getPickups = ____entitiesSpecific.getPickups
local ____playerDataStructures = require("functions.playerDataStructures")
local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
function markUsedItemOnThisFrame(self, player)
    local gameFrameCount = game:GetFrameCount()
    mapSetPlayer(nil, v.room.playersUsedItemOnFrame, player, gameFrameCount)
end
v = {room = {
    playersHoldingItemOnLastFrameMap = __TS__New(DefaultMap, false),
    playersUsedItemOnFrame = __TS__New(DefaultMap, 0)
}}
____exports.PostPurchase = __TS__Class()
local PostPurchase = ____exports.PostPurchase
PostPurchase.name = "PostPurchase"
__TS__ClassExtends(PostPurchase, CustomCallback)
function PostPurchase.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _player, pickup = table.unpack(fireArgs)
        local callbackPickupVariant, callbackPickupSubType = table.unpack(optionalArgs)
        return (callbackPickupVariant == nil or callbackPickupVariant == pickup.Variant) and (callbackPickupSubType == nil or callbackPickupSubType == pickup.SubType)
    end
    self.postUseItem = function(____, _collectibleType, _rng, player)
        markUsedItemOnThisFrame(nil, player)
        return nil
    end
    self.postUseCard = function(____, _cardType, player)
        markUsedItemOnThisFrame(nil, player)
        return nil
    end
    self.postUsePill = function(____, _pillEffect, player)
        markUsedItemOnThisFrame(nil, player)
        return nil
    end
    self.postPEffectUpdateReordered = function(____, player)
        local isHoldingItem = player:IsHoldingItem()
        local wasHoldingItemOnLastFrame = defaultMapGetPlayer(nil, v.room.playersHoldingItemOnLastFrameMap, player)
        mapSetPlayer(nil, v.room.playersHoldingItemOnLastFrameMap, player, isHoldingItem)
        if not wasHoldingItemOnLastFrame and isHoldingItem and not self:playerUsedItemRecently(player) then
            self:playerPickedUpNewItem(player)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_USE_ITEM, self.postUseItem}, {ModCallback.POST_USE_CARD, self.postUseCard}, {ModCallback.POST_USE_PILL, self.postUsePill}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
function PostPurchase.prototype.playerUsedItemRecently(self, player)
    local gameFrameCount = game:GetFrameCount()
    local usedCollectibleOnFrame = defaultMapGetPlayer(nil, v.room.playersUsedItemOnFrame, player)
    return gameFrameCount == usedCollectibleOnFrame or gameFrameCount == usedCollectibleOnFrame + 1
end
function PostPurchase.prototype.playerPickedUpNewItem(self, player)
    local pickups = getPickups(nil)
    local disappearingPickup = __TS__ArrayFind(
        pickups,
        function(____, pickup) return not pickup:Exists() and pickup.Price ~= 0 end
    )
    if disappearingPickup ~= nil then
        self:fire(player, disappearingPickup)
    end
end
return ____exports
 end,
["classes.callbacks.PostRockRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getRocks = ____gridEntitiesSpecific.getRocks
local ____shouldFire = require("shouldFire")
local shouldFireRock = ____shouldFire.shouldFireRock
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostRockRender = __TS__Class()
local PostRockRender = ____exports.PostRockRender
PostRockRender.name = "PostRockRender"
__TS__ClassExtends(PostRockRender, CustomCallback)
function PostRockRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireRock
    self.postRender = function()
        for ____, rock in ipairs(getRocks(nil)) do
            self:fire(rock)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
return ____exports
 end,
["classes.callbacks.PostRockUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getRocks = ____gridEntitiesSpecific.getRocks
local ____shouldFire = require("shouldFire")
local shouldFireRock = ____shouldFire.shouldFireRock
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostRockUpdate = __TS__Class()
local PostRockUpdate = ____exports.PostRockUpdate
PostRockUpdate.name = "PostRockUpdate"
__TS__ClassExtends(PostRockUpdate, CustomCallback)
function PostRockUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireRock
    self.postUpdate = function()
        for ____, rock in ipairs(getRocks(nil)) do
            self:fire(rock)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostRoomClearChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {cleared = false}}
____exports.PostRoomClearChanged = __TS__Class()
local PostRoomClearChanged = ____exports.PostRoomClearChanged
PostRoomClearChanged.name = "PostRoomClearChanged"
__TS__ClassExtends(PostRoomClearChanged, CustomCallback)
function PostRoomClearChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local roomClear = table.unpack(fireArgs)
        local callbackRoomClear = table.unpack(optionalArgs)
        return callbackRoomClear == nil or callbackRoomClear == roomClear
    end
    self.postUpdate = function()
        local room = game:GetRoom()
        local roomClear = room:IsClear()
        if roomClear ~= v.room.cleared then
            v.room.cleared = roomClear
            self:fire(roomClear)
        end
    end
    self.postNewRoomReordered = function()
        local room = game:GetRoom()
        local roomClear = room:IsClear()
        v.room.cleared = roomClear
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}}
end
return ____exports
 end,
["classes.callbacks.PostSacrifice"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DamageFlag = ____isaac_2Dtypescript_2Ddefinitions.DamageFlag
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {level = {numSacrifices = 0}}
____exports.PostSacrifice = __TS__Class()
local PostSacrifice = ____exports.PostSacrifice
PostSacrifice.name = "PostSacrifice"
__TS__ClassExtends(PostSacrifice, CustomCallback)
function PostSacrifice.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFirePlayer
    self.entityTakeDmgPlayer = function(____, player, _amount, damageFlags, _source, _countdownFrames)
        local room = game:GetRoom()
        local roomType = room:GetType()
        local isSpikeDamage = hasFlag(nil, damageFlags, DamageFlag.SPIKES)
        if roomType == RoomType.SACRIFICE and isSpikeDamage then
            local ____v_level_0, ____numSacrifices_1 = v.level, "numSacrifices"
            ____v_level_0[____numSacrifices_1] = ____v_level_0[____numSacrifices_1] + 1
            self:fire(player, v.level.numSacrifices)
        end
        return nil
    end
    self.customCallbacksUsed = {{ModCallbackCustom.ENTITY_TAKE_DMG_PLAYER, self.entityTakeDmgPlayer}}
end
return ____exports
 end,
["classes.callbacks.PostSlotAnimationChanged"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireSlot = ____shouldFire.shouldFireSlot
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostSlotAnimationChanged = __TS__Class()
local PostSlotAnimationChanged = ____exports.PostSlotAnimationChanged
PostSlotAnimationChanged.name = "PostSlotAnimationChanged"
__TS__ClassExtends(PostSlotAnimationChanged, CustomCallback)
function PostSlotAnimationChanged.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireSlot
    self.featuresUsed = {ISCFeature.SLOT_RENDER_DETECTION}
end
return ____exports
 end,
["functions.entityTypes"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
--- For `EntityType.SLOT` (6).
function ____exports.isSlot(self, entity)
    return entity.Type == EntityType.SLOT
end
return ____exports
 end,
["classes.callbacks.PostSlotCollision"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____entityTypes = require("functions.entityTypes")
local isSlot = ____entityTypes.isSlot
local ____shouldFire = require("shouldFire")
local shouldFireSlot = ____shouldFire.shouldFireSlot
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostSlotCollision = __TS__Class()
local PostSlotCollision = ____exports.PostSlotCollision
PostSlotCollision.name = "PostSlotCollision"
__TS__ClassExtends(PostSlotCollision, CustomCallback)
function PostSlotCollision.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireSlot
    self.prePlayerCollision = function(____, player, collider)
        if isSlot(nil, collider) then
            self:fire(collider, player)
        end
        return nil
    end
    self.callbacksUsed = {{ModCallback.PRE_PLAYER_COLLISION, self.prePlayerCollision}}
end
return ____exports
 end,
["classes.callbacks.PostSlotDestroyed"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireSlot = ____shouldFire.shouldFireSlot
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostSlotDestroyed = __TS__Class()
local PostSlotDestroyed = ____exports.PostSlotDestroyed
PostSlotDestroyed.name = "PostSlotDestroyed"
__TS__ClassExtends(PostSlotDestroyed, CustomCallback)
function PostSlotDestroyed.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireSlot
    self.featuresUsed = {ISCFeature.SLOT_DESTROYED_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostSlotInit"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireSlot = ____shouldFire.shouldFireSlot
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostSlotInit = __TS__Class()
local PostSlotInit = ____exports.PostSlotInit
PostSlotInit.name = "PostSlotInit"
__TS__ClassExtends(PostSlotInit, CustomCallback)
function PostSlotInit.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireSlot
    self.featuresUsed = {ISCFeature.SLOT_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostSlotRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireSlot = ____shouldFire.shouldFireSlot
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostSlotRender = __TS__Class()
local PostSlotRender = ____exports.PostSlotRender
PostSlotRender.name = "PostSlotRender"
__TS__ClassExtends(PostSlotRender, CustomCallback)
function PostSlotRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireSlot
    self.featuresUsed = {ISCFeature.SLOT_RENDER_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostSlotUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireSlot = ____shouldFire.shouldFireSlot
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostSlotUpdate = __TS__Class()
local PostSlotUpdate = ____exports.PostSlotUpdate
PostSlotUpdate.name = "PostSlotUpdate"
__TS__ClassExtends(PostSlotUpdate, CustomCallback)
function PostSlotUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireSlot
    self.featuresUsed = {ISCFeature.SLOT_UPDATE_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PostSpikesRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getSpikes = ____gridEntitiesSpecific.getSpikes
local ____shouldFire = require("shouldFire")
local shouldFireSpikes = ____shouldFire.shouldFireSpikes
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostSpikesRender = __TS__Class()
local PostSpikesRender = ____exports.PostSpikesRender
PostSpikesRender.name = "PostSpikesRender"
__TS__ClassExtends(PostSpikesRender, CustomCallback)
function PostSpikesRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireSpikes
    self.postRender = function()
        for ____, spikes in ipairs(getSpikes(nil)) do
            self:fire(spikes)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
return ____exports
 end,
["classes.callbacks.PostSpikesUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getSpikes = ____gridEntitiesSpecific.getSpikes
local ____shouldFire = require("shouldFire")
local shouldFireSpikes = ____shouldFire.shouldFireSpikes
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostSpikesUpdate = __TS__Class()
local PostSpikesUpdate = ____exports.PostSpikesUpdate
PostSpikesUpdate.name = "PostSpikesUpdate"
__TS__ClassExtends(PostSpikesUpdate, CustomCallback)
function PostSpikesUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireSpikes
    self.postUpdate = function()
        for ____, spikes in ipairs(getSpikes(nil)) do
            self:fire(spikes)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostTNTRender"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getTNT = ____gridEntitiesSpecific.getTNT
local ____shouldFire = require("shouldFire")
local shouldFireTNT = ____shouldFire.shouldFireTNT
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostTNTRender = __TS__Class()
local PostTNTRender = ____exports.PostTNTRender
PostTNTRender.name = "PostTNTRender"
__TS__ClassExtends(PostTNTRender, CustomCallback)
function PostTNTRender.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireTNT
    self.postRender = function()
        for ____, tnt in ipairs(getTNT(nil)) do
            self:fire(tnt)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
return ____exports
 end,
["classes.callbacks.PostTNTUpdate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getTNT = ____gridEntitiesSpecific.getTNT
local ____shouldFire = require("shouldFire")
local shouldFireTNT = ____shouldFire.shouldFireTNT
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostTNTUpdate = __TS__Class()
local PostTNTUpdate = ____exports.PostTNTUpdate
PostTNTUpdate.name = "PostTNTUpdate"
__TS__ClassExtends(PostTNTUpdate, CustomCallback)
function PostTNTUpdate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireTNT
    self.postUpdate = function()
        for ____, tnt in ipairs(getTNT(nil)) do
            self:fire(tnt)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostTearInitFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireTear = ____shouldFire.shouldFireTear
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostTearInitFilter = __TS__Class()
local PostTearInitFilter = ____exports.PostTearInitFilter
PostTearInitFilter.name = "PostTearInitFilter"
__TS__ClassExtends(PostTearInitFilter, CustomCallback)
function PostTearInitFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireTear
    self.postTearInit = function(____, tear)
        self:fire(tear)
    end
    self.callbacksUsed = {{ModCallback.POST_TEAR_INIT, self.postTearInit}}
end
return ____exports
 end,
["classes.callbacks.PostTearInitLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireTear = ____shouldFire.shouldFireTear
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostTearInitLate = __TS__Class()
local PostTearInitLate = ____exports.PostTearInitLate
PostTearInitLate.name = "PostTearInitLate"
__TS__ClassExtends(PostTearInitLate, CustomCallback)
function PostTearInitLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireTear
    self.postTearUpdate = function(____, tear)
        local ptrHash = GetPtrHash(tear)
        if not v.room.firedSet:has(ptrHash) then
            v.room.firedSet:add(ptrHash)
            self:fire(tear)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_TEAR_UPDATE, self.postTearUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostTearInitVeryLate"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireTear = ____shouldFire.shouldFireTear
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostTearInitVeryLate = __TS__Class()
local PostTearInitVeryLate = ____exports.PostTearInitVeryLate
PostTearInitVeryLate.name = "PostTearInitVeryLate"
__TS__ClassExtends(PostTearInitVeryLate, CustomCallback)
function PostTearInitVeryLate.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireTear
    self.postTearUpdate = function(____, tear)
        if tear.FrameCount == 0 then
            return
        end
        local index = GetPtrHash(tear)
        if not v.room.firedSet:has(index) then
            v.room.firedSet:add(index)
            self:fire(tear)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_TEAR_UPDATE, self.postTearUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostTearKill"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireTear = ____shouldFire.shouldFireTear
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {room = {firedSet = __TS__New(Set)}}
____exports.PostTearKill = __TS__Class()
local PostTearKill = ____exports.PostTearKill
PostTearKill.name = "PostTearKill"
__TS__ClassExtends(PostTearKill, CustomCallback)
function PostTearKill.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireTear
    self.postTearUpdate = function(____, tear)
        local ptrHash = GetPtrHash(tear)
        if tear:CollidesWithGrid() or tear:IsDead() then
            v.room.firedSet:add(ptrHash)
        end
    end
    self.preTearCollision = function(____, tear)
        local ptrHash = GetPtrHash(tear)
        v.room.firedSet:add(ptrHash)
        return nil
    end
    self.postEntityRemove = function(____, entity)
        local tear = entity:ToTear()
        if tear == nil then
            return
        end
        local ptrHash = GetPtrHash(tear)
        if v.room.firedSet:has(ptrHash) then
            v.room.firedSet:add(ptrHash)
            self:fire(tear)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_TEAR_UPDATE, self.postTearUpdate}, {ModCallback.PRE_TEAR_COLLISION, self.preTearCollision}, {ModCallback.POST_ENTITY_REMOVE, self.postEntityRemove}}
end
return ____exports
 end,
["classes.callbacks.PostTearRenderFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireTear = ____shouldFire.shouldFireTear
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostTearRenderFilter = __TS__Class()
local PostTearRenderFilter = ____exports.PostTearRenderFilter
PostTearRenderFilter.name = "PostTearRenderFilter"
__TS__ClassExtends(PostTearRenderFilter, CustomCallback)
function PostTearRenderFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireTear
    self.postTearRender = function(____, tear, renderOffset)
        self:fire(tear, renderOffset)
    end
    self.callbacksUsed = {{ModCallback.POST_TEAR_RENDER, self.postTearRender}}
end
return ____exports
 end,
["classes.callbacks.PostTearUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireTear = ____shouldFire.shouldFireTear
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PostTearUpdateFilter = __TS__Class()
local PostTearUpdateFilter = ____exports.PostTearUpdateFilter
PostTearUpdateFilter.name = "PostTearUpdateFilter"
__TS__ClassExtends(PostTearUpdateFilter, CustomCallback)
function PostTearUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireTear
    self.postTearUpdate = function(____, tear)
        self:fire(tear)
    end
    self.callbacksUsed = {{ModCallback.POST_TEAR_UPDATE, self.postTearUpdate}}
end
return ____exports
 end,
["classes.callbacks.PostTransformation"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local PLAYER_FORM_VALUES = ____cachedEnumValues.PLAYER_FORM_VALUES
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____playerDataStructures = require("functions.playerDataStructures")
local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {playersTransformationsMap = __TS__New(
    DefaultMap,
    function() return __TS__New(Map) end
)}}
____exports.PostTransformation = __TS__Class()
local PostTransformation = ____exports.PostTransformation
PostTransformation.name = "PostTransformation"
__TS__ClassExtends(PostTransformation, CustomCallback)
function PostTransformation.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local _player, playerForm = table.unpack(fireArgs)
        local callbackPlayerForm = table.unpack(optionalArgs)
        return callbackPlayerForm == nil or callbackPlayerForm == playerForm
    end
    self.postPEffectUpdateReordered = function(____, player)
        local playerTransformationsMap = defaultMapGetPlayer(nil, v.run.playersTransformationsMap, player)
        for ____, playerForm in ipairs(PLAYER_FORM_VALUES) do
            local hasForm = player:HasPlayerForm(playerForm)
            local storedForm = playerTransformationsMap:get(playerForm)
            if storedForm == nil then
                storedForm = false
            end
            if hasForm ~= storedForm then
                playerTransformationsMap:set(playerForm, hasForm)
                self:fire(player, playerForm, hasForm)
            end
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
return ____exports
 end,
["classes.callbacks.PostTrinketBreak"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____playerDataStructures = require("functions.playerDataStructures")
local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
local ____shouldFire = require("shouldFire")
local shouldFireTrinketType = ____shouldFire.shouldFireTrinketType
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local TRINKETS_THAT_CAN_BREAK = {TrinketType.WISH_BONE, TrinketType.WALNUT}
local v = {run = {playersTrinketMap = __TS__New(
    DefaultMap,
    function() return __TS__New(Map) end
)}}
____exports.PostTrinketBreak = __TS__Class()
local PostTrinketBreak = ____exports.PostTrinketBreak
PostTrinketBreak.name = "PostTrinketBreak"
__TS__ClassExtends(PostTrinketBreak, CustomCallback)
function PostTrinketBreak.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.shouldFire = shouldFireTrinketType
    self.entityTakeDmgPlayer = function(____, player, _amount, _damageFlags, _source, _countdownFrames)
        local trinketMap = defaultMapGetPlayer(nil, v.run.playersTrinketMap, player)
        for ____, trinketType in ipairs(TRINKETS_THAT_CAN_BREAK) do
            do
                local numTrinketsHeld = player:GetTrinketMultiplier(trinketType)
                local oldNumTrinketsHeld = trinketMap:get(trinketType)
                if oldNumTrinketsHeld == nil then
                    oldNumTrinketsHeld = 0
                end
                if numTrinketsHeld >= oldNumTrinketsHeld then
                    goto __continue5
                end
                trinketMap:set(trinketType, numTrinketsHeld)
                local numTrinketsOnGround = Isaac.CountEntities(nil, EntityType.PICKUP, PickupVariant.TRINKET, trinketType)
                if numTrinketsOnGround > 0 then
                    goto __continue5
                end
                self:fire(player, trinketType)
            end
            ::__continue5::
        end
        return nil
    end
    self.postPEffectUpdateReordered = function(____, player)
        local trinketMap = defaultMapGetPlayer(nil, v.run.playersTrinketMap, player)
        for ____, trinketType in ipairs(TRINKETS_THAT_CAN_BREAK) do
            local numTrinkets = player:GetTrinketMultiplier(trinketType)
            if numTrinkets == 0 then
                trinketMap:delete(trinketType)
            else
                trinketMap:set(trinketType, numTrinkets)
            end
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.ENTITY_TAKE_DMG_PLAYER, self.entityTakeDmgPlayer}, {ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
return ____exports
 end,
["enums.PocketItemType"] = function(...) 
local ____exports = {}
--- This is used in the various pocket item helper functions.
____exports.PocketItemType = {}
____exports.PocketItemType.EMPTY = 0
____exports.PocketItemType[____exports.PocketItemType.EMPTY] = "EMPTY"
____exports.PocketItemType.CARD = 1
____exports.PocketItemType[____exports.PocketItemType.CARD] = "CARD"
____exports.PocketItemType.PILL = 2
____exports.PocketItemType[____exports.PocketItemType.PILL] = "PILL"
____exports.PocketItemType.ACTIVE_ITEM = 3
____exports.PocketItemType[____exports.PocketItemType.ACTIVE_ITEM] = "ACTIVE_ITEM"
____exports.PocketItemType.DICE_BAG_DICE = 4
____exports.PocketItemType[____exports.PocketItemType.DICE_BAG_DICE] = "DICE_BAG_DICE"
____exports.PocketItemType.UNDETERMINABLE = 5
____exports.PocketItemType[____exports.PocketItemType.UNDETERMINABLE] = "UNDETERMINABLE"
return ____exports
 end,
["maps.PHDPillConversionsMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PillEffect = ____isaac_2Dtypescript_2Ddefinitions.PillEffect
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
____exports.PHD_PILL_CONVERSIONS_MAP = __TS__New(ReadonlyMap, {
    {PillEffect.BAD_TRIP, PillEffect.BALLS_OF_STEEL},
    {PillEffect.HEALTH_DOWN, PillEffect.HEALTH_UP},
    {PillEffect.RANGE_DOWN, PillEffect.RANGE_UP},
    {PillEffect.SPEED_DOWN, PillEffect.SPEED_UP},
    {PillEffect.TEARS_DOWN, PillEffect.TEARS_UP},
    {PillEffect.LUCK_DOWN, PillEffect.LUCK_UP},
    {PillEffect.PARALYSIS, PillEffect.PHEROMONES},
    {PillEffect.AMNESIA, PillEffect.I_CAN_SEE_FOREVER},
    {PillEffect.R_U_A_WIZARD, PillEffect.POWER},
    {PillEffect.ADDICTED, PillEffect.PERCS},
    {PillEffect.QUESTION_MARKS, PillEffect.TELEPILLS},
    {PillEffect.RETRO_VISION, PillEffect.I_CAN_SEE_FOREVER},
    {PillEffect.X_LAX, PillEffect.SOMETHINGS_WRONG},
    {PillEffect.IM_EXCITED, PillEffect.IM_DROWSY},
    {PillEffect.HORF, PillEffect.GULP},
    {PillEffect.SHOT_SPEED_DOWN, PillEffect.SHOT_SPEED_UP}
})
return ____exports
 end,
["maps.falsePHDPillConversionsMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PillEffect = ____isaac_2Dtypescript_2Ddefinitions.PillEffect
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
____exports.FALSE_PHD_PILL_CONVERSIONS_MAP = __TS__New(ReadonlyMap, {
    {PillEffect.BAD_GAS, PillEffect.HEALTH_DOWN},
    {PillEffect.BALLS_OF_STEEL, PillEffect.BAD_TRIP},
    {PillEffect.BOMBS_ARE_KEYS, PillEffect.TEARS_DOWN},
    {PillEffect.EXPLOSIVE_DIARRHEA, PillEffect.RANGE_DOWN},
    {PillEffect.FULL_HEALTH, PillEffect.BAD_TRIP},
    {PillEffect.HEALTH_UP, PillEffect.HEALTH_DOWN},
    {PillEffect.PRETTY_FLY, PillEffect.LUCK_DOWN},
    {PillEffect.RANGE_UP, PillEffect.RANGE_DOWN},
    {PillEffect.SPEED_UP, PillEffect.SPEED_DOWN},
    {PillEffect.TEARS_UP, PillEffect.TEARS_DOWN},
    {PillEffect.LUCK_UP, PillEffect.LUCK_DOWN},
    {PillEffect.TELEPILLS, PillEffect.QUESTION_MARKS},
    {PillEffect.FORTY_EIGHT_HOUR_ENERGY, PillEffect.SPEED_DOWN},
    {PillEffect.HEMATEMESIS, PillEffect.BAD_TRIP},
    {PillEffect.I_CAN_SEE_FOREVER, PillEffect.AMNESIA},
    {PillEffect.PHEROMONES, PillEffect.PARALYSIS},
    {PillEffect.LEMON_PARTY, PillEffect.AMNESIA},
    {PillEffect.PERCS, PillEffect.ADDICTED},
    {PillEffect.ONE_MAKES_YOU_LARGER, PillEffect.RANGE_DOWN},
    {PillEffect.ONE_MAKES_YOU_SMALL, PillEffect.SPEED_DOWN},
    {PillEffect.INFESTED_EXCLAMATION, PillEffect.TEARS_DOWN},
    {PillEffect.INFESTED_QUESTION, PillEffect.LUCK_DOWN},
    {PillEffect.POWER, PillEffect.R_U_A_WIZARD},
    {PillEffect.FRIENDS_TILL_THE_END, PillEffect.HEALTH_DOWN},
    {PillEffect.SOMETHINGS_WRONG, PillEffect.X_LAX},
    {PillEffect.IM_DROWSY, PillEffect.IM_EXCITED},
    {PillEffect.GULP, PillEffect.HORF},
    {PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE, PillEffect.RETRO_VISION},
    {PillEffect.VURP, PillEffect.HORF},
    {PillEffect.SHOT_SPEED_UP, PillEffect.SHOT_SPEED_DOWN}
})
return ____exports
 end,
["objects.pillEffectClasses"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemConfigPillEffectClass = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigPillEffectClass
local PillEffect = ____isaac_2Dtypescript_2Ddefinitions.PillEffect
____exports.DEFAULT_PILL_EFFECT_CLASS = ItemConfigPillEffectClass.MODDED
____exports.PILL_EFFECT_CLASSES = {
    [PillEffect.BAD_GAS] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.BAD_TRIP] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.BALLS_OF_STEEL] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.BOMBS_ARE_KEYS] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.EXPLOSIVE_DIARRHEA] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.FULL_HEALTH] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.HEALTH_DOWN] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.HEALTH_UP] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.I_FOUND_PILLS] = ItemConfigPillEffectClass.JOKE,
    [PillEffect.PUBERTY] = ItemConfigPillEffectClass.JOKE,
    [PillEffect.PRETTY_FLY] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.RANGE_DOWN] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.RANGE_UP] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.SPEED_DOWN] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.SPEED_UP] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.TEARS_DOWN] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.TEARS_UP] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.LUCK_DOWN] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.LUCK_UP] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.TELEPILLS] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.FORTY_EIGHT_HOUR_ENERGY] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.HEMATEMESIS] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.PARALYSIS] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.I_CAN_SEE_FOREVER] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.PHEROMONES] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.AMNESIA] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.LEMON_PARTY] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.R_U_A_WIZARD] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.PERCS] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.ADDICTED] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.RELAX] = ItemConfigPillEffectClass.JOKE,
    [PillEffect.QUESTION_MARKS] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.ONE_MAKES_YOU_LARGER] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.ONE_MAKES_YOU_SMALL] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.INFESTED_EXCLAMATION] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.INFESTED_QUESTION] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.POWER] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.RETRO_VISION] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.FRIENDS_TILL_THE_END] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.X_LAX] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.SOMETHINGS_WRONG] = ItemConfigPillEffectClass.JOKE,
    [PillEffect.IM_DROWSY] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.IM_EXCITED] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.GULP] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.HORF] = ItemConfigPillEffectClass.JOKE,
    [PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE] = ItemConfigPillEffectClass.MINOR,
    [PillEffect.VURP] = ItemConfigPillEffectClass.MEDIUM,
    [PillEffect.SHOT_SPEED_DOWN] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.SHOT_SPEED_UP] = ItemConfigPillEffectClass.MAJOR,
    [PillEffect.EXPERIMENTAL] = ItemConfigPillEffectClass.MAJOR
}
return ____exports
 end,
["objects.pillEffectNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PillEffect = ____isaac_2Dtypescript_2Ddefinitions.PillEffect
____exports.DEFAULT_PILL_EFFECT_NAME = "Unknown"
____exports.PILL_EFFECT_NAMES = {
    [PillEffect.BAD_GAS] = "Bad Gas",
    [PillEffect.BAD_TRIP] = "Bad Trip",
    [PillEffect.BALLS_OF_STEEL] = "Balls of Steel",
    [PillEffect.BOMBS_ARE_KEYS] = "Bombs Are Key",
    [PillEffect.EXPLOSIVE_DIARRHEA] = "Explosive Diarrhea",
    [PillEffect.FULL_HEALTH] = "Full Health",
    [PillEffect.HEALTH_DOWN] = "Health Down",
    [PillEffect.HEALTH_UP] = "Health Up",
    [PillEffect.I_FOUND_PILLS] = "I Found Pills",
    [PillEffect.PUBERTY] = "Puberty",
    [PillEffect.PRETTY_FLY] = "Pretty Fly",
    [PillEffect.RANGE_DOWN] = "Range Down",
    [PillEffect.RANGE_UP] = "Range Up",
    [PillEffect.SPEED_DOWN] = "Speed Down",
    [PillEffect.SPEED_UP] = "Speed Up",
    [PillEffect.TEARS_DOWN] = "Tears Down",
    [PillEffect.TEARS_UP] = "Tears Up",
    [PillEffect.LUCK_DOWN] = "Luck Down",
    [PillEffect.LUCK_UP] = "Luck Up",
    [PillEffect.TELEPILLS] = "Telepills",
    [PillEffect.FORTY_EIGHT_HOUR_ENERGY] = "48 Hour Energy",
    [PillEffect.HEMATEMESIS] = "Hematemesis",
    [PillEffect.PARALYSIS] = "Paralysis",
    [PillEffect.I_CAN_SEE_FOREVER] = "I can see forever!",
    [PillEffect.PHEROMONES] = "Pheromones",
    [PillEffect.AMNESIA] = "Amnesia",
    [PillEffect.LEMON_PARTY] = "Lemon Party",
    [PillEffect.R_U_A_WIZARD] = "R U a Wizard?",
    [PillEffect.PERCS] = "Percs!",
    [PillEffect.ADDICTED] = "Addicted!",
    [PillEffect.RELAX] = "Re-Lax",
    [PillEffect.QUESTION_MARKS] = "???",
    [PillEffect.ONE_MAKES_YOU_LARGER] = "One makes you larger",
    [PillEffect.ONE_MAKES_YOU_SMALL] = "One makes you small",
    [PillEffect.INFESTED_EXCLAMATION] = "Infested!",
    [PillEffect.INFESTED_QUESTION] = "Infested?",
    [PillEffect.POWER] = "Power Pill!",
    [PillEffect.RETRO_VISION] = "Retro Vision",
    [PillEffect.FRIENDS_TILL_THE_END] = "Friends Till The End!",
    [PillEffect.X_LAX] = "X-Lax",
    [PillEffect.SOMETHINGS_WRONG] = "Something's wrong...",
    [PillEffect.IM_DROWSY] = "I'm Drowsy...",
    [PillEffect.IM_EXCITED] = "I'm Excited!!!",
    [PillEffect.GULP] = "Gulp!",
    [PillEffect.HORF] = "Horf!",
    [PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE] = "Feels like I'm walking on sunshine!",
    [PillEffect.VURP] = "Vurp!",
    [PillEffect.SHOT_SPEED_DOWN] = "Shot Speed Down",
    [PillEffect.SHOT_SPEED_UP] = "Shot Speed Up",
    [PillEffect.EXPERIMENTAL] = "Experimental Pill"
}
return ____exports
 end,
["objects.pillEffectTypes"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemConfigPillEffectType = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigPillEffectType
local PillEffect = ____isaac_2Dtypescript_2Ddefinitions.PillEffect
____exports.DEFAULT_PILL_EFFECT_TYPE = ItemConfigPillEffectType.MODDED
____exports.PILL_EFFECT_TYPES = {
    [PillEffect.BAD_GAS] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.BAD_TRIP] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.BALLS_OF_STEEL] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.BOMBS_ARE_KEYS] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.EXPLOSIVE_DIARRHEA] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.FULL_HEALTH] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.HEALTH_DOWN] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.HEALTH_UP] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.I_FOUND_PILLS] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.PUBERTY] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.PRETTY_FLY] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.RANGE_DOWN] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.RANGE_UP] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.SPEED_DOWN] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.SPEED_UP] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.TEARS_DOWN] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.TEARS_UP] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.LUCK_DOWN] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.LUCK_UP] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.TELEPILLS] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.FORTY_EIGHT_HOUR_ENERGY] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.HEMATEMESIS] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.PARALYSIS] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.I_CAN_SEE_FOREVER] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.PHEROMONES] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.AMNESIA] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.LEMON_PARTY] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.R_U_A_WIZARD] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.PERCS] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.ADDICTED] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.RELAX] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.QUESTION_MARKS] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.ONE_MAKES_YOU_LARGER] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.ONE_MAKES_YOU_SMALL] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.INFESTED_EXCLAMATION] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.INFESTED_QUESTION] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.POWER] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.RETRO_VISION] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.FRIENDS_TILL_THE_END] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.X_LAX] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.SOMETHINGS_WRONG] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.IM_DROWSY] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.IM_EXCITED] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.GULP] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.HORF] = ItemConfigPillEffectType.NEUTRAL,
    [PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.VURP] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.SHOT_SPEED_DOWN] = ItemConfigPillEffectType.NEGATIVE,
    [PillEffect.SHOT_SPEED_UP] = ItemConfigPillEffectType.POSITIVE,
    [PillEffect.EXPERIMENTAL] = ItemConfigPillEffectType.NEUTRAL
}
return ____exports
 end,
["objects.pillEffectTypeToPillEffects"] = function(...) 
local ____exports = {}
local getPillEffectsOfType
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemConfigPillEffectType = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigPillEffectType
local ____constantsVanilla = require("core.constantsVanilla")
local VANILLA_PILL_EFFECTS = ____constantsVanilla.VANILLA_PILL_EFFECTS
local ____array = require("functions.array")
local filterMap = ____array.filterMap
local ____pillEffectTypes = require("objects.pillEffectTypes")
local PILL_EFFECT_TYPES = ____pillEffectTypes.PILL_EFFECT_TYPES
function getPillEffectsOfType(self, matchingPillEffectType)
    return filterMap(
        nil,
        VANILLA_PILL_EFFECTS,
        function(____, pillEffect)
            local pillEffectType = PILL_EFFECT_TYPES[pillEffect]
            return pillEffectType == matchingPillEffectType and pillEffect or nil
        end
    )
end
____exports.PILL_EFFECT_TYPE_TO_PILL_EFFECTS = {
    [ItemConfigPillEffectType.POSITIVE] = getPillEffectsOfType(nil, ItemConfigPillEffectType.POSITIVE),
    [ItemConfigPillEffectType.NEGATIVE] = getPillEffectsOfType(nil, ItemConfigPillEffectType.NEGATIVE),
    [ItemConfigPillEffectType.NEUTRAL] = getPillEffectsOfType(nil, ItemConfigPillEffectType.NEUTRAL),
    [ItemConfigPillEffectType.MODDED] = getPillEffectsOfType(nil, ItemConfigPillEffectType.MODDED)
}
return ____exports
 end,
["functions.pills"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySlice = ____lualib.__TS__ArraySlice
local ____exports = {}
local HORSE_PILL_ADJUSTMENT
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PillColor = ____isaac_2Dtypescript_2Ddefinitions.PillColor
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local PILL_COLOR_VALUES = ____cachedEnumValues.PILL_COLOR_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local itemConfig = ____cachedClasses.itemConfig
local ____constantsFirstLast = require("core.constantsFirstLast")
local FIRST_HORSE_PILL_COLOR = ____constantsFirstLast.FIRST_HORSE_PILL_COLOR
local FIRST_PILL_COLOR = ____constantsFirstLast.FIRST_PILL_COLOR
local LAST_HORSE_PILL_COLOR = ____constantsFirstLast.LAST_HORSE_PILL_COLOR
local LAST_NORMAL_PILL_COLOR = ____constantsFirstLast.LAST_NORMAL_PILL_COLOR
local LAST_VANILLA_PILL_EFFECT = ____constantsFirstLast.LAST_VANILLA_PILL_EFFECT
local ____PHDPillConversionsMap = require("maps.PHDPillConversionsMap")
local PHD_PILL_CONVERSIONS_MAP = ____PHDPillConversionsMap.PHD_PILL_CONVERSIONS_MAP
local ____falsePHDPillConversionsMap = require("maps.falsePHDPillConversionsMap")
local FALSE_PHD_PILL_CONVERSIONS_MAP = ____falsePHDPillConversionsMap.FALSE_PHD_PILL_CONVERSIONS_MAP
local ____pillEffectClasses = require("objects.pillEffectClasses")
local DEFAULT_PILL_EFFECT_CLASS = ____pillEffectClasses.DEFAULT_PILL_EFFECT_CLASS
local PILL_EFFECT_CLASSES = ____pillEffectClasses.PILL_EFFECT_CLASSES
local ____pillEffectNames = require("objects.pillEffectNames")
local DEFAULT_PILL_EFFECT_NAME = ____pillEffectNames.DEFAULT_PILL_EFFECT_NAME
local PILL_EFFECT_NAMES = ____pillEffectNames.PILL_EFFECT_NAMES
local ____pillEffectTypeToPillEffects = require("objects.pillEffectTypeToPillEffects")
local PILL_EFFECT_TYPE_TO_PILL_EFFECTS = ____pillEffectTypeToPillEffects.PILL_EFFECT_TYPE_TO_PILL_EFFECTS
local ____pillEffectTypes = require("objects.pillEffectTypes")
local DEFAULT_PILL_EFFECT_TYPE = ____pillEffectTypes.DEFAULT_PILL_EFFECT_TYPE
local PILL_EFFECT_TYPES = ____pillEffectTypes.PILL_EFFECT_TYPES
local ____types = require("functions.types")
local asNumber = ____types.asNumber
local asPillColor = ____types.asPillColor
local asPillEffect = ____types.asPillEffect
local ____utils = require("functions.utils")
local iRange = ____utils.iRange
--- Helper function to see if the given pill color is a horse pill.
function ____exports.isHorsePill(self, pillColor)
    return asNumber(nil, pillColor) > HORSE_PILL_ADJUSTMENT
end
function ____exports.isVanillaPillEffect(self, pillEffect)
    return pillEffect <= LAST_VANILLA_PILL_EFFECT
end
HORSE_PILL_ADJUSTMENT = 2048
--- Helper function to get an array with every non-null pill color. This includes all gold colors and
-- all horse colors.
function ____exports.getAllPillColors(self)
    return __TS__ArraySlice(PILL_COLOR_VALUES, 1)
end
--- Helper function to get the associated pill effect after False PHD is acquired. If a pill effect
-- is not altered by False PHD, then the same pill effect will be returned.
function ____exports.getFalsePHDPillEffect(self, pillEffect)
    local convertedPillEffect = FALSE_PHD_PILL_CONVERSIONS_MAP:get(pillEffect)
    return convertedPillEffect or pillEffect
end
--- Helper function to get the corresponding horse pill color from a normal pill color.
-- 
-- For example, passing `PillColor.BLUE_BLUE` would result in 2049, which is the value that
-- corresponds to the horse pill color for blue/blue.
function ____exports.getHorsePillColor(self, pillColor)
    return pillColor + HORSE_PILL_ADJUSTMENT
end
--- Helper function to get an array with every non-gold horse pill color.
function ____exports.getHorsePillColors(self)
    return iRange(nil, FIRST_HORSE_PILL_COLOR, LAST_HORSE_PILL_COLOR)
end
--- Helper function to get the corresponding normal pill color from a horse pill color.
-- 
-- For example, passing 2049 would result in `PillColor.BLUE_BLUE`.
-- 
-- If called with a non-horse pill color, this function will return back the same color.
function ____exports.getNormalPillColorFromHorse(self, pillColor)
    return ____exports.isHorsePill(nil, pillColor) and asPillColor(nil, pillColor - HORSE_PILL_ADJUSTMENT) or pillColor
end
--- Helper function to get an array with every non-gold and non-horse pill color.
function ____exports.getNormalPillColors(self)
    return iRange(nil, FIRST_PILL_COLOR, LAST_NORMAL_PILL_COLOR)
end
--- Helper function to get the associated pill effect after PHD is acquired. If a pill effect is not
-- altered by PHD, then the same pill effect will be returned.
function ____exports.getPHDPillEffect(self, pillEffect)
    local convertedPillEffect = PHD_PILL_CONVERSIONS_MAP:get(pillEffect)
    return convertedPillEffect or pillEffect
end
--- Helper function to get the corresponding pill color from an effect by repeatedly using the
-- `ItemPool.GetPillEffect` method.
-- 
-- Note that this will return the corresponding effect even if the passed pill color is not yet
-- identified by the player.
-- 
-- Returns `PillColor.NULL` if there is the corresponding pill color cannot be found.
-- 
-- This function is especially useful in the `POST_USE_PILL` callback, since at that point, the used
-- pill is already consumed, and the callback only passes the effect. In this specific circumstance,
-- consider using the `POST_USE_PILL_FILTER` callback instead of the `POST_USE_PILL` callback, since
-- it correctly passes the color and handles the case of horse pills.
function ____exports.getPillColorFromEffect(self, pillEffect)
    local itemPool = game:GetItemPool()
    local normalPillColors = ____exports.getNormalPillColors(nil)
    for ____, normalPillColor in ipairs(normalPillColors) do
        local normalPillEffect = itemPool:GetPillEffect(normalPillColor)
        if normalPillEffect == pillEffect then
            return normalPillColor
        end
    end
    return PillColor.NULL
end
--- Helper function to get a pill effect class from a PillEffect enum value. In this context, the
-- class is equal to the numerical prefix in the "class" tag in the "pocketitems.xml" file. Use the
-- `getPillEffectType` helper function to determine whether the pill effect is positive, negative,
-- or neutral.
-- 
-- Due to limitations in the API, this function will not work properly for modded pill effects, and
-- will always return `DEFAULT_PILL_EFFECT_CLASS` in those cases.
function ____exports.getPillEffectClass(self, pillEffect)
    local pillEffectClass = PILL_EFFECT_CLASSES[pillEffect]
    return pillEffectClass or DEFAULT_PILL_EFFECT_CLASS
end
--- Helper function to get a pill effect name from a `PillEffect`. Returns "Unknown" if the provided
-- pill effect is not valid.
-- 
-- This function works for both vanilla and modded pill effects.
-- 
-- For example, `getPillEffectName(PillEffect.BAD_GAS)` would return "Bad Gas".
function ____exports.getPillEffectName(self, pillEffect)
    local pillEffectName = PILL_EFFECT_NAMES[pillEffect]
    if pillEffectName ~= nil then
        return pillEffectName
    end
    local itemConfigPillEffect = itemConfig:GetPillEffect(pillEffect)
    if itemConfigPillEffect ~= nil then
        return itemConfigPillEffect.Name
    end
    return DEFAULT_PILL_EFFECT_NAME
end
--- Helper function to get a pill effect type from a `PillEffect` enum value. In this context, the
-- type is equal to positive, negative, or neutral. This is derived from the suffix of the "class"
-- tag in the "pocketitems.xml" file. Use the `getPillEffectClass` helper function to determine the
-- "power" of the pill.
-- 
-- Due to limitations in the API, this function will not work properly for modded pill effects, and
-- will always return `DEFAULT_PILL_EFFECT_TYPE` in those cases.
function ____exports.getPillEffectType(self, pillEffect)
    local pillEffectType = PILL_EFFECT_TYPES[pillEffect]
    return pillEffectType or DEFAULT_PILL_EFFECT_TYPE
end
function ____exports.getVanillaPillEffectsOfType(self, pillEffectType)
    return PILL_EFFECT_TYPE_TO_PILL_EFFECTS[pillEffectType]
end
--- Helper function to see if the given pill color is either a gold pill or a horse gold pill.
function ____exports.isGoldPill(self, pillColor)
    return pillColor == PillColor.GOLD or pillColor == PillColor.HORSE_GOLD
end
function ____exports.isModdedPillEffect(self, pillEffect)
    return not ____exports.isVanillaPillEffect(nil, pillEffect)
end
function ____exports.isValidPillEffect(self, pillEffect)
    local potentialPillEffect = asPillEffect(nil, pillEffect)
    local itemConfigPillEffect = itemConfig:GetPillEffect(potentialPillEffect)
    return itemConfigPillEffect ~= nil
end
return ____exports
 end,
["interfaces.PocketItemDescription"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.pocketItems"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local __TS__ArraySome = ____lualib.__TS__ArraySome
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ActiveSlot = ____isaac_2Dtypescript_2Ddefinitions.ActiveSlot
local CardType = ____isaac_2Dtypescript_2Ddefinitions.CardType
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local PillColor = ____isaac_2Dtypescript_2Ddefinitions.PillColor
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local POCKET_ITEM_SLOT_VALUES = ____cachedEnumValues.POCKET_ITEM_SLOT_VALUES
local ____PocketItemType = require("enums.PocketItemType")
local PocketItemType = ____PocketItemType.PocketItemType
local ____players = require("functions.players")
local isCharacter = ____players.isCharacter
--- Use this helper function as a workaround for the `EntityPlayer.GetPocketItem` method not working
-- correctly.
-- 
-- Note that due to API limitations, there is no way to determine the location of a Dice Bag trinket
-- dice. Furthermore, when the player has a Dice Bag trinket dice and a pocket active at the same
-- time, there is no way to determine the location of the pocket active item. If this function
-- cannot determine the identity of a particular slot, it will mark the type of the slot as
-- `PocketItemType.UNDETERMINABLE`.
function ____exports.getPocketItems(self, player)
    local pocketItem = player:GetActiveItem(ActiveSlot.POCKET)
    local hasPocketItem = pocketItem ~= CollectibleType.NULL
    local pocketItem2 = player:GetActiveItem(ActiveSlot.POCKET_SINGLE_USE)
    local hasPocketItem2 = pocketItem2 ~= CollectibleType.NULL
    local maxPocketItems = player:GetMaxPocketItems()
    local pocketItems = {}
    local pocketItemIdentified = false
    local pocketItem2Identified = false
    for ____, slot in ipairs(POCKET_ITEM_SLOT_VALUES) do
        local cardType = player:GetCard(slot)
        local pillColor = player:GetPill(slot)
        if cardType ~= CardType.NULL then
            pocketItems[#pocketItems + 1] = {slot = slot, type = PocketItemType.CARD, subType = cardType}
        elseif pillColor ~= PillColor.NULL then
            pocketItems[#pocketItems + 1] = {slot = slot, type = PocketItemType.PILL, subType = pillColor}
        elseif hasPocketItem and not hasPocketItem2 and not pocketItemIdentified then
            pocketItemIdentified = true
            pocketItems[#pocketItems + 1] = {slot = slot, type = PocketItemType.ACTIVE_ITEM, subType = pocketItem}
        elseif not hasPocketItem and hasPocketItem2 and not pocketItem2Identified then
            pocketItem2Identified = true
            pocketItems[#pocketItems + 1] = {slot = slot, type = PocketItemType.DICE_BAG_DICE, subType = pocketItem2}
        elseif hasPocketItem and hasPocketItem2 then
            pocketItems[#pocketItems + 1] = {slot = slot, type = PocketItemType.UNDETERMINABLE, subType = 0}
        else
            pocketItems[#pocketItems + 1] = {slot = slot, type = PocketItemType.EMPTY, subType = 0}
        end
        if slot + 1 == maxPocketItems then
            break
        end
    end
    return pocketItems
end
--- Helper function to get the `PocketItemSlot` that the player's pocket active collectible item is
-- in, if any. Returns undefined if the player does not have a pocket active item.
function ____exports.getActivePocketItemSlot(self, player)
    local pocketItems = ____exports.getPocketItems(nil, player)
    for ____, pocketItem in ipairs(pocketItems) do
        if pocketItem.type == PocketItemType.ACTIVE_ITEM then
            return pocketItem.slot
        end
    end
    return nil
end
--- Helper item to get the first card that a player is holding in their pocket item slots.
function ____exports.getFirstCard(self, player)
    local pocketItems = ____exports.getPocketItems(nil, player)
    return __TS__ArrayFind(
        pocketItems,
        function(____, pocketItem) return pocketItem.type == PocketItemType.CARD end
    )
end
--- Helper item to get the first card or pill that a player is holding in their pocket item slots.
function ____exports.getFirstCardOrPill(self, player)
    local pocketItems = ____exports.getPocketItems(nil, player)
    return __TS__ArrayFind(
        pocketItems,
        function(____, pocketItem) return pocketItem.type == PocketItemType.CARD or pocketItem.type == PocketItemType.PILL end
    )
end
--- Helper item to get the first pill that a player is holding in their pocket item slots.
function ____exports.getFirstPill(self, player)
    local pocketItems = ____exports.getPocketItems(nil, player)
    return __TS__ArrayFind(
        pocketItems,
        function(____, pocketItem) return pocketItem.type == PocketItemType.PILL end
    )
end
--- Returns whether the player can hold an additional pocket item, beyond what they are currently
-- carrying. This takes into account items that modify the max number of pocket items, like Starter
-- Deck.
-- 
-- If the player is the Tainted Soul, this always returns false, since that character cannot pick up
-- items. (Only Tainted Forgotten can pick up items.)
function ____exports.hasOpenPocketItemSlot(self, player)
    if isCharacter(nil, player, PlayerType.SOUL_B) then
        return false
    end
    local pocketItems = ____exports.getPocketItems(nil, player)
    return __TS__ArraySome(
        pocketItems,
        function(____, pocketItem) return pocketItem.type == PocketItemType.EMPTY end
    )
end
--- Helper function to determine whether the player's "active" pocket item slot is set to their
-- pocket active item.
function ____exports.isFirstSlotPocketActiveItem(self, player)
    local pocketItems = ____exports.getPocketItems(nil, player)
    local firstPocketItem = pocketItems[1]
    if firstPocketItem == nil then
        return false
    end
    return firstPocketItem.type == PocketItemType.ACTIVE_ITEM
end
--- Helper function to see if two sets of pocket item descriptions are identical.
function ____exports.pocketItemsEquals(self, pocketItems1, pocketItems2)
    if #pocketItems1 ~= #pocketItems2 then
        return false
    end
    do
        local i = 0
        while i < #pocketItems1 do
            local pocketItem1 = pocketItems1[i + 1]
            local pocketItem2 = pocketItems2[i + 1]
            local keys = __TS__ObjectKeys(pocketItem1)
            for ____, key in ipairs(keys) do
                if pocketItem1[key] ~= pocketItem2[key] then
                    return false
                end
            end
            i = i + 1
        end
    end
    return true
end
return ____exports
 end,
["classes.callbacks.PostUsePillFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PocketItemSlot = ____isaac_2Dtypescript_2Ddefinitions.PocketItemSlot
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____PocketItemType = require("enums.PocketItemType")
local PocketItemType = ____PocketItemType.PocketItemType
local ____pills = require("functions.pills")
local getPillColorFromEffect = ____pills.getPillColorFromEffect
local ____playerDataStructures = require("functions.playerDataStructures")
local mapGetPlayer = ____playerDataStructures.mapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____pocketItems = require("functions.pocketItems")
local getPocketItems = ____pocketItems.getPocketItems
local pocketItemsEquals = ____pocketItems.pocketItemsEquals
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local v = {run = {
    pillColorToPillEffect = __TS__New(Map),
    playerPocketItems = __TS__New(Map)
}}
--- The vanilla `POST_USE_PILL` callback does not pass the `PillColor` of the used pill. We can
-- resolve pill effect to pill color by using the `ItemPool.GetPillEffect` method. However, this
-- does not tell us whether the pill used was a horse pill. Thus, we must keep track of the pills
-- that the player is holding on every frame to account for this.
-- 
-- In some cases, pills can be used without a corresponding pocket item slot, like in the case of
-- the reverse Temperance card. In this case, we fall back to looking up the color using the
-- `ItemPool.GetPillEffect` method.
____exports.PostUsePillFilter = __TS__Class()
local PostUsePillFilter = ____exports.PostUsePillFilter
PostUsePillFilter.name = "PostUsePillFilter"
__TS__ClassExtends(PostUsePillFilter, CustomCallback)
function PostUsePillFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.postUsePill = function(____, pillEffect, player, useFlags)
        local pillColor = self:getPillColorOfCurrentlyUsedPill(player, pillEffect)
        self:fire(pillEffect, pillColor, player, useFlags)
    end
    self.postPEffectUpdateReordered = function(____, player)
        self:updateCurrentPocketItems(player)
    end
    self.callbacksUsed = {{ModCallback.POST_USE_PILL, self.postUsePill}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
function PostUsePillFilter.prototype.getPillColorOfCurrentlyUsedPill(self, player, pillEffect)
    local oldPocketItems = mapGetPlayer(nil, v.run.playerPocketItems, player)
    if oldPocketItems ~= nil then
        local pocketItems = getPocketItems(nil, player)
        if not pocketItemsEquals(nil, oldPocketItems, pocketItems) then
            local oldPocketItemSlot1 = __TS__ArrayFind(
                oldPocketItems,
                function(____, pocketItem) return pocketItem.slot == PocketItemSlot.SLOT_1 end
            )
            if oldPocketItemSlot1 ~= nil and oldPocketItemSlot1.type == PocketItemType.PILL then
                return oldPocketItemSlot1.subType
            end
        end
    end
    return getPillColorFromEffect(nil, pillEffect)
end
function PostUsePillFilter.prototype.updateCurrentPocketItems(self, player)
    local pocketItems = getPocketItems(nil, player)
    mapSetPlayer(nil, v.run.playerPocketItems, player, pocketItems)
end
return ____exports
 end,
["classes.callbacks.PreBerserkDeath"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____playerIndex = require("functions.playerIndex")
local isChildPlayer = ____playerIndex.isChildPlayer
local ____players = require("functions.players")
local getPlayerNumHitsRemaining = ____players.getPlayerNumHitsRemaining
local ____revive = require("functions.revive")
local willPlayerRevive = ____revive.willPlayerRevive
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreBerserkDeath = __TS__Class()
local PreBerserkDeath = ____exports.PreBerserkDeath
PreBerserkDeath.name = "PreBerserkDeath"
__TS__ClassExtends(PreBerserkDeath, CustomCallback)
function PreBerserkDeath.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePlayer
    self.postPEffectUpdateReordered = function(____, player)
        if isChildPlayer(nil, player) then
            return
        end
        local effects = player:GetEffects()
        local berserkEffect = effects:GetCollectibleEffect(CollectibleType.BERSERK)
        local numHitsRemaining = getPlayerNumHitsRemaining(nil, player)
        if berserkEffect ~= nil and berserkEffect.Cooldown == 1 and numHitsRemaining == 0 and not willPlayerRevive(nil, player) then
            self:fire(player)
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
return ____exports
 end,
["classes.callbacks.PreBombCollisionFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireBomb = ____shouldFire.shouldFireBomb
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreBombCollisionFilter = __TS__Class()
local PreBombCollisionFilter = ____exports.PreBombCollisionFilter
PreBombCollisionFilter.name = "PreBombCollisionFilter"
__TS__ClassExtends(PreBombCollisionFilter, CustomCallback)
function PreBombCollisionFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireBomb
    self.preBombCollision = function(____, bomb, collider, low) return self:fire(bomb, collider, low) end
    self.callbacksUsed = {{ModCallback.PRE_BOMB_COLLISION, self.preBombCollision}}
end
return ____exports
 end,
["classes.callbacks.PreCustomRevive"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreCustomRevive = __TS__Class()
local PreCustomRevive = ____exports.PreCustomRevive
PreCustomRevive.name = "PreCustomRevive"
__TS__ClassExtends(PreCustomRevive, CustomCallback)
function PreCustomRevive.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePlayer
    self.featuresUsed = {ISCFeature.CUSTOM_REVIVE}
end
return ____exports
 end,
["classes.callbacks.PreEntitySpawnFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreEntitySpawnFilter = __TS__Class()
local PreEntitySpawnFilter = ____exports.PreEntitySpawnFilter
PreEntitySpawnFilter.name = "PreEntitySpawnFilter"
__TS__ClassExtends(PreEntitySpawnFilter, CustomCallback)
function PreEntitySpawnFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local entityType, variant, subType = table.unpack(fireArgs)
        local callbackEntityType, callbackVariant, callbackSubType = table.unpack(optionalArgs)
        return (callbackEntityType == nil or callbackEntityType == entityType) and (callbackVariant == nil or callbackVariant == variant) and (callbackSubType == nil or callbackSubType == subType)
    end
    self.preEntitySpawn = function(____, entityType, variant, subType, position, velocity, spawner, initSeed) return self:fire(
        entityType,
        variant,
        subType,
        position,
        velocity,
        spawner,
        initSeed
    ) end
    self.callbacksUsed = {{ModCallback.PRE_ENTITY_SPAWN, self.preEntitySpawn}}
end
return ____exports
 end,
["classes.callbacks.PreFamiliarCollisionFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireFamiliar = ____shouldFire.shouldFireFamiliar
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreFamiliarCollisionFilter = __TS__Class()
local PreFamiliarCollisionFilter = ____exports.PreFamiliarCollisionFilter
PreFamiliarCollisionFilter.name = "PreFamiliarCollisionFilter"
__TS__ClassExtends(PreFamiliarCollisionFilter, CustomCallback)
function PreFamiliarCollisionFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireFamiliar
    self.preFamiliarCollision = function(____, familiar, collider, low) return self:fire(familiar, collider, low) end
    self.callbacksUsed = {{ModCallback.PRE_FAMILIAR_COLLISION, self.preFamiliarCollision}}
end
return ____exports
 end,
["classes.callbacks.PreGetPedestal"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local ____shouldFire = require("shouldFire")
local shouldFirePlayer = ____shouldFire.shouldFirePlayer
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreGetPedestal = __TS__Class()
local PreGetPedestal = ____exports.PreGetPedestal
PreGetPedestal.name = "PreGetPedestal"
__TS__ClassExtends(PreGetPedestal, CustomCallback)
function PreGetPedestal.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFirePlayer
    self.prePickupCollision = function(____, pickup, collider, _low)
        local collectible = pickup
        if collectible.SubType == CollectibleType.NULL then
            return nil
        end
        local player = collider:ToPlayer()
        if player == nil then
            return nil
        end
        local numCoins = player:GetNumCoins()
        if collectible.Price > numCoins then
            return nil
        end
        if collectible.Wait > 0 or player.ItemHoldCooldown > 0 then
            return nil
        end
        if player:IsHoldingItem() then
            return nil
        end
        return self:fire(player, collectible)
    end
    self.callbacksUsed = {{ModCallback.PRE_PICKUP_COLLISION, self.prePickupCollision, {PickupVariant.COLLECTIBLE}}}
end
return ____exports
 end,
["classes.callbacks.PreItemPickup"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____shouldFire = require("shouldFire")
local shouldFireItemPickup = ____shouldFire.shouldFireItemPickup
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreItemPickup = __TS__Class()
local PreItemPickup = ____exports.PreItemPickup
PreItemPickup.name = "PreItemPickup"
__TS__ClassExtends(PreItemPickup, CustomCallback)
function PreItemPickup.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireItemPickup
    self.featuresUsed = {ISCFeature.ITEM_PICKUP_DETECTION}
end
return ____exports
 end,
["classes.callbacks.PreKnifeCollisionFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireKnife = ____shouldFire.shouldFireKnife
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreKnifeCollisionFilter = __TS__Class()
local PreKnifeCollisionFilter = ____exports.PreKnifeCollisionFilter
PreKnifeCollisionFilter.name = "PreKnifeCollisionFilter"
__TS__ClassExtends(PreKnifeCollisionFilter, CustomCallback)
function PreKnifeCollisionFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireKnife
    self.preKnifeCollision = function(____, knife, collider, low) return self:fire(knife, collider, low) end
    self.callbacksUsed = {{ModCallback.PRE_KNIFE_COLLISION, self.preKnifeCollision}}
end
return ____exports
 end,
["classes.callbacks.PreNPCCollisionFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireNPC = ____shouldFire.shouldFireNPC
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreNPCCollisionFilter = __TS__Class()
local PreNPCCollisionFilter = ____exports.PreNPCCollisionFilter
PreNPCCollisionFilter.name = "PreNPCCollisionFilter"
__TS__ClassExtends(PreNPCCollisionFilter, CustomCallback)
function PreNPCCollisionFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireNPC
    self.preNPCCollision = function(____, npc, collider, low) return self:fire(npc, collider, low) end
    self.callbacksUsed = {{ModCallback.PRE_NPC_COLLISION, self.preNPCCollision}}
end
return ____exports
 end,
["classes.callbacks.PreNPCUpdateFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireNPC = ____shouldFire.shouldFireNPC
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreNPCUpdateFilter = __TS__Class()
local PreNPCUpdateFilter = ____exports.PreNPCUpdateFilter
PreNPCUpdateFilter.name = "PreNPCUpdateFilter"
__TS__ClassExtends(PreNPCUpdateFilter, CustomCallback)
function PreNPCUpdateFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireNPC
    self.preNPCUpdate = function(____, npc) return self:fire(npc) end
    self.callbacksUsed = {{ModCallback.PRE_NPC_UPDATE, self.preNPCUpdate}}
end
return ____exports
 end,
["classes.callbacks.PreNewLevel"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____sprites = require("functions.sprites")
local getLastFrameOfAnimation = ____sprites.getLastFrameOfAnimation
local ____stage = require("functions.stage")
local getEffectiveStage = ____stage.getEffectiveStage
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
local TRAVELING_TO_NEXT_FLOOR_ANIMATIONS = __TS__New(ReadonlySet, {"Trapdoor", "LightTravel"})
local v = {run = {firedOnStage = nil}}
____exports.PreNewLevel = __TS__Class()
local PreNewLevel = ____exports.PreNewLevel
PreNewLevel.name = "PreNewLevel"
__TS__ClassExtends(PreNewLevel, CustomCallback)
function PreNewLevel.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.v = v
    self.postPlayerRenderReordered = function(____, player)
        local effectiveStage = getEffectiveStage(nil)
        if effectiveStage == v.run.firedOnStage then
            return
        end
        local sprite = player:GetSprite()
        local animation = sprite:GetAnimation()
        if not TRAVELING_TO_NEXT_FLOOR_ANIMATIONS:has(animation) then
            return
        end
        local frame = sprite:GetFrame()
        local finalFrame = getLastFrameOfAnimation(nil, sprite)
        if frame == finalFrame then
            v.run.firedOnStage = effectiveStage
            self:fire(player)
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PLAYER_RENDER_REORDERED, self.postPlayerRenderReordered}}
end
return ____exports
 end,
["classes.callbacks.PreProjectileCollisionFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireProjectile = ____shouldFire.shouldFireProjectile
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreProjectileCollisionFilter = __TS__Class()
local PreProjectileCollisionFilter = ____exports.PreProjectileCollisionFilter
PreProjectileCollisionFilter.name = "PreProjectileCollisionFilter"
__TS__ClassExtends(PreProjectileCollisionFilter, CustomCallback)
function PreProjectileCollisionFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireProjectile
    self.preProjectileCollision = function(____, projectile, collider, low) return self:fire(projectile, collider, low) end
    self.callbacksUsed = {{ModCallback.PRE_PROJECTILE_COLLISION, self.preProjectileCollision}}
end
return ____exports
 end,
["classes.callbacks.PreRoomEntitySpawnFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreRoomEntitySpawnFilter = __TS__Class()
local PreRoomEntitySpawnFilter = ____exports.PreRoomEntitySpawnFilter
PreRoomEntitySpawnFilter.name = "PreRoomEntitySpawnFilter"
__TS__ClassExtends(PreRoomEntitySpawnFilter, CustomCallback)
function PreRoomEntitySpawnFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = function(____, fireArgs, optionalArgs)
        local entityTypeOrGridEntityXMLType, variant, subType = table.unpack(fireArgs)
        local callbackEntityTypeOrGridEntityXMLType, callbackVariant, callbackSubType = table.unpack(optionalArgs)
        return (callbackEntityTypeOrGridEntityXMLType == nil or callbackEntityTypeOrGridEntityXMLType == entityTypeOrGridEntityXMLType) and (callbackVariant == nil or callbackVariant == variant) and (callbackSubType == nil or callbackSubType == subType)
    end
    self.preRoomEntitySpawn = function(____, entityTypeOrGridEntityXMLType, variant, subType, gridIndex, initSeed) return self:fire(
        entityTypeOrGridEntityXMLType,
        variant,
        subType,
        gridIndex,
        initSeed
    ) end
    self.callbacksUsed = {{ModCallback.PRE_ROOM_ENTITY_SPAWN, self.preRoomEntitySpawn}}
end
return ____exports
 end,
["classes.callbacks.PreTearCollisionFilter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____shouldFire = require("shouldFire")
local shouldFireTear = ____shouldFire.shouldFireTear
local ____CustomCallback = require("classes.private.CustomCallback")
local CustomCallback = ____CustomCallback.CustomCallback
____exports.PreTearCollisionFilter = __TS__Class()
local PreTearCollisionFilter = ____exports.PreTearCollisionFilter
PreTearCollisionFilter.name = "PreTearCollisionFilter"
__TS__ClassExtends(PreTearCollisionFilter, CustomCallback)
function PreTearCollisionFilter.prototype.____constructor(self)
    CustomCallback.prototype.____constructor(self)
    self.shouldFire = shouldFireTear
    self.preTearCollision = function(____, tear, collider, low) return self:fire(tear, collider, low) end
    self.callbacksUsed = {{ModCallback.PRE_TEAR_COLLISION, self.preTearCollision}}
end
return ____exports
 end,
["callbackClasses"] = function(...) 
local ____exports = {}
do
    local ____EntityTakeDmgFilter = require("classes.callbacks.EntityTakeDmgFilter")
    local EntityTakeDmgFilter = ____EntityTakeDmgFilter.EntityTakeDmgFilter
    ____exports.EntityTakeDmgFilter = EntityTakeDmgFilter
end
do
    local ____EntityTakeDmgPlayer = require("classes.callbacks.EntityTakeDmgPlayer")
    local EntityTakeDmgPlayer = ____EntityTakeDmgPlayer.EntityTakeDmgPlayer
    ____exports.EntityTakeDmgPlayer = EntityTakeDmgPlayer
end
do
    local ____InputActionFilter = require("classes.callbacks.InputActionFilter")
    local InputActionFilter = ____InputActionFilter.InputActionFilter
    ____exports.InputActionFilter = InputActionFilter
end
do
    local ____InputActionPlayer = require("classes.callbacks.InputActionPlayer")
    local InputActionPlayer = ____InputActionPlayer.InputActionPlayer
    ____exports.InputActionPlayer = InputActionPlayer
end
do
    local ____PostAmbushFinished = require("classes.callbacks.PostAmbushFinished")
    local PostAmbushFinished = ____PostAmbushFinished.PostAmbushFinished
    ____exports.PostAmbushFinished = PostAmbushFinished
end
do
    local ____PostAmbushStarted = require("classes.callbacks.PostAmbushStarted")
    local PostAmbushStarted = ____PostAmbushStarted.PostAmbushStarted
    ____exports.PostAmbushStarted = PostAmbushStarted
end
do
    local ____PostBombExploded = require("classes.callbacks.PostBombExploded")
    local PostBombExploded = ____PostBombExploded.PostBombExploded
    ____exports.PostBombExploded = PostBombExploded
end
do
    local ____PostBombInitFilter = require("classes.callbacks.PostBombInitFilter")
    local PostBombInitFilter = ____PostBombInitFilter.PostBombInitFilter
    ____exports.PostBombInitFilter = PostBombInitFilter
end
do
    local ____PostBombInitLate = require("classes.callbacks.PostBombInitLate")
    local PostBombInitLate = ____PostBombInitLate.PostBombInitLate
    ____exports.PostBombInitLate = PostBombInitLate
end
do
    local ____PostBombRenderFilter = require("classes.callbacks.PostBombRenderFilter")
    local PostBombRenderFilter = ____PostBombRenderFilter.PostBombRenderFilter
    ____exports.PostBombRenderFilter = PostBombRenderFilter
end
do
    local ____PostBombUpdateFilter = require("classes.callbacks.PostBombUpdateFilter")
    local PostBombUpdateFilter = ____PostBombUpdateFilter.PostBombUpdateFilter
    ____exports.PostBombUpdateFilter = PostBombUpdateFilter
end
do
    local ____PostBoneSwing = require("classes.callbacks.PostBoneSwing")
    local PostBoneSwing = ____PostBoneSwing.PostBoneSwing
    ____exports.PostBoneSwing = PostBoneSwing
end
do
    local ____PostCollectibleEmpty = require("classes.callbacks.PostCollectibleEmpty")
    local PostCollectibleEmpty = ____PostCollectibleEmpty.PostCollectibleEmpty
    ____exports.PostCollectibleEmpty = PostCollectibleEmpty
end
do
    local ____PostCursedTeleport = require("classes.callbacks.PostCursedTeleport")
    local PostCursedTeleport = ____PostCursedTeleport.PostCursedTeleport
    ____exports.PostCursedTeleport = PostCursedTeleport
end
do
    local ____PostCustomRevive = require("classes.callbacks.PostCustomRevive")
    local PostCustomRevive = ____PostCustomRevive.PostCustomRevive
    ____exports.PostCustomRevive = PostCustomRevive
end
do
    local ____PostDiceRoomActivated = require("classes.callbacks.PostDiceRoomActivated")
    local PostDiceRoomActivated = ____PostDiceRoomActivated.PostDiceRoomActivated
    ____exports.PostDiceRoomActivated = PostDiceRoomActivated
end
do
    local ____PostDoorRender = require("classes.callbacks.PostDoorRender")
    local PostDoorRender = ____PostDoorRender.PostDoorRender
    ____exports.PostDoorRender = PostDoorRender
end
do
    local ____PostDoorUpdate = require("classes.callbacks.PostDoorUpdate")
    local PostDoorUpdate = ____PostDoorUpdate.PostDoorUpdate
    ____exports.PostDoorUpdate = PostDoorUpdate
end
do
    local ____PostEffectInitFilter = require("classes.callbacks.PostEffectInitFilter")
    local PostEffectInitFilter = ____PostEffectInitFilter.PostEffectInitFilter
    ____exports.PostEffectInitFilter = PostEffectInitFilter
end
do
    local ____PostEffectInitLate = require("classes.callbacks.PostEffectInitLate")
    local PostEffectInitLate = ____PostEffectInitLate.PostEffectInitLate
    ____exports.PostEffectInitLate = PostEffectInitLate
end
do
    local ____PostEffectRenderFilter = require("classes.callbacks.PostEffectRenderFilter")
    local PostEffectRenderFilter = ____PostEffectRenderFilter.PostEffectRenderFilter
    ____exports.PostEffectRenderFilter = PostEffectRenderFilter
end
do
    local ____PostEffectStateChanged = require("classes.callbacks.PostEffectStateChanged")
    local PostEffectStateChanged = ____PostEffectStateChanged.PostEffectStateChanged
    ____exports.PostEffectStateChanged = PostEffectStateChanged
end
do
    local ____PostEffectUpdateFilter = require("classes.callbacks.PostEffectUpdateFilter")
    local PostEffectUpdateFilter = ____PostEffectUpdateFilter.PostEffectUpdateFilter
    ____exports.PostEffectUpdateFilter = PostEffectUpdateFilter
end
do
    local ____PostEntityKillFilter = require("classes.callbacks.PostEntityKillFilter")
    local PostEntityKillFilter = ____PostEntityKillFilter.PostEntityKillFilter
    ____exports.PostEntityKillFilter = PostEntityKillFilter
end
do
    local ____PostEsauJr = require("classes.callbacks.PostEsauJr")
    local PostEsauJr = ____PostEsauJr.PostEsauJr
    ____exports.PostEsauJr = PostEsauJr
end
do
    local ____PostFamiliarInitFilter = require("classes.callbacks.PostFamiliarInitFilter")
    local PostFamiliarInitFilter = ____PostFamiliarInitFilter.PostFamiliarInitFilter
    ____exports.PostFamiliarInitFilter = PostFamiliarInitFilter
end
do
    local ____PostFamiliarInitLate = require("classes.callbacks.PostFamiliarInitLate")
    local PostFamiliarInitLate = ____PostFamiliarInitLate.PostFamiliarInitLate
    ____exports.PostFamiliarInitLate = PostFamiliarInitLate
end
do
    local ____PostFamiliarRenderFilter = require("classes.callbacks.PostFamiliarRenderFilter")
    local PostFamiliarRenderFilter = ____PostFamiliarRenderFilter.PostFamiliarRenderFilter
    ____exports.PostFamiliarRenderFilter = PostFamiliarRenderFilter
end
do
    local ____PostFamiliarStateChanged = require("classes.callbacks.PostFamiliarStateChanged")
    local PostFamiliarStateChanged = ____PostFamiliarStateChanged.PostFamiliarStateChanged
    ____exports.PostFamiliarStateChanged = PostFamiliarStateChanged
end
do
    local ____PostFamiliarUpdateFilter = require("classes.callbacks.PostFamiliarUpdateFilter")
    local PostFamiliarUpdateFilter = ____PostFamiliarUpdateFilter.PostFamiliarUpdateFilter
    ____exports.PostFamiliarUpdateFilter = PostFamiliarUpdateFilter
end
do
    local ____PostFirstEsauJr = require("classes.callbacks.PostFirstEsauJr")
    local PostFirstEsauJr = ____PostFirstEsauJr.PostFirstEsauJr
    ____exports.PostFirstEsauJr = PostFirstEsauJr
end
do
    local ____PostFirstFlip = require("classes.callbacks.PostFirstFlip")
    local PostFirstFlip = ____PostFirstFlip.PostFirstFlip
    ____exports.PostFirstFlip = PostFirstFlip
end
do
    local ____PostFlip = require("classes.callbacks.PostFlip")
    local PostFlip = ____PostFlip.PostFlip
    ____exports.PostFlip = PostFlip
end
do
    local ____PostGameEndFilter = require("classes.callbacks.PostGameEndFilter")
    local PostGameEndFilter = ____PostGameEndFilter.PostGameEndFilter
    ____exports.PostGameEndFilter = PostGameEndFilter
end
do
    local ____PostGameStartedReordered = require("classes.callbacks.PostGameStartedReordered")
    local PostGameStartedReordered = ____PostGameStartedReordered.PostGameStartedReordered
    ____exports.PostGameStartedReordered = PostGameStartedReordered
end
do
    local ____PostGameStartedReorderedLast = require("classes.callbacks.PostGameStartedReorderedLast")
    local PostGameStartedReorderedLast = ____PostGameStartedReorderedLast.PostGameStartedReorderedLast
    ____exports.PostGameStartedReorderedLast = PostGameStartedReorderedLast
end
do
    local ____PostGreedModeWave = require("classes.callbacks.PostGreedModeWave")
    local PostGreedModeWave = ____PostGreedModeWave.PostGreedModeWave
    ____exports.PostGreedModeWave = PostGreedModeWave
end
do
    local ____PostGridEntityBroken = require("classes.callbacks.PostGridEntityBroken")
    local PostGridEntityBroken = ____PostGridEntityBroken.PostGridEntityBroken
    ____exports.PostGridEntityBroken = PostGridEntityBroken
end
do
    local ____PostGridEntityCollision = require("classes.callbacks.PostGridEntityCollision")
    local PostGridEntityCollision = ____PostGridEntityCollision.PostGridEntityCollision
    ____exports.PostGridEntityCollision = PostGridEntityCollision
end
do
    local ____PostGridEntityCustomBroken = require("classes.callbacks.PostGridEntityCustomBroken")
    local PostGridEntityCustomBroken = ____PostGridEntityCustomBroken.PostGridEntityCustomBroken
    ____exports.PostGridEntityCustomBroken = PostGridEntityCustomBroken
end
do
    local ____PostGridEntityCustomCollision = require("classes.callbacks.PostGridEntityCustomCollision")
    local PostGridEntityCustomCollision = ____PostGridEntityCustomCollision.PostGridEntityCustomCollision
    ____exports.PostGridEntityCustomCollision = PostGridEntityCustomCollision
end
do
    local ____PostGridEntityCustomInit = require("classes.callbacks.PostGridEntityCustomInit")
    local PostGridEntityCustomInit = ____PostGridEntityCustomInit.PostGridEntityCustomInit
    ____exports.PostGridEntityCustomInit = PostGridEntityCustomInit
end
do
    local ____PostGridEntityCustomRemove = require("classes.callbacks.PostGridEntityCustomRemove")
    local PostGridEntityCustomRemove = ____PostGridEntityCustomRemove.PostGridEntityCustomRemove
    ____exports.PostGridEntityCustomRemove = PostGridEntityCustomRemove
end
do
    local ____PostGridEntityCustomRender = require("classes.callbacks.PostGridEntityCustomRender")
    local PostGridEntityCustomRender = ____PostGridEntityCustomRender.PostGridEntityCustomRender
    ____exports.PostGridEntityCustomRender = PostGridEntityCustomRender
end
do
    local ____PostGridEntityCustomStateChanged = require("classes.callbacks.PostGridEntityCustomStateChanged")
    local PostGridEntityCustomStateChanged = ____PostGridEntityCustomStateChanged.PostGridEntityCustomStateChanged
    ____exports.PostGridEntityCustomStateChanged = PostGridEntityCustomStateChanged
end
do
    local ____PostGridEntityCustomUpdate = require("classes.callbacks.PostGridEntityCustomUpdate")
    local PostGridEntityCustomUpdate = ____PostGridEntityCustomUpdate.PostGridEntityCustomUpdate
    ____exports.PostGridEntityCustomUpdate = PostGridEntityCustomUpdate
end
do
    local ____PostGridEntityInit = require("classes.callbacks.PostGridEntityInit")
    local PostGridEntityInit = ____PostGridEntityInit.PostGridEntityInit
    ____exports.PostGridEntityInit = PostGridEntityInit
end
do
    local ____PostGridEntityRemove = require("classes.callbacks.PostGridEntityRemove")
    local PostGridEntityRemove = ____PostGridEntityRemove.PostGridEntityRemove
    ____exports.PostGridEntityRemove = PostGridEntityRemove
end
do
    local ____PostGridEntityRender = require("classes.callbacks.PostGridEntityRender")
    local PostGridEntityRender = ____PostGridEntityRender.PostGridEntityRender
    ____exports.PostGridEntityRender = PostGridEntityRender
end
do
    local ____PostGridEntityStateChanged = require("classes.callbacks.PostGridEntityStateChanged")
    local PostGridEntityStateChanged = ____PostGridEntityStateChanged.PostGridEntityStateChanged
    ____exports.PostGridEntityStateChanged = PostGridEntityStateChanged
end
do
    local ____PostGridEntityUpdate = require("classes.callbacks.PostGridEntityUpdate")
    local PostGridEntityUpdate = ____PostGridEntityUpdate.PostGridEntityUpdate
    ____exports.PostGridEntityUpdate = PostGridEntityUpdate
end
do
    local ____PostHolyMantleRemoved = require("classes.callbacks.PostHolyMantleRemoved")
    local PostHolyMantleRemoved = ____PostHolyMantleRemoved.PostHolyMantleRemoved
    ____exports.PostHolyMantleRemoved = PostHolyMantleRemoved
end
do
    local ____PostItemDischarge = require("classes.callbacks.PostItemDischarge")
    local PostItemDischarge = ____PostItemDischarge.PostItemDischarge
    ____exports.PostItemDischarge = PostItemDischarge
end
do
    local ____PostItemPickup = require("classes.callbacks.PostItemPickup")
    local PostItemPickup = ____PostItemPickup.PostItemPickup
    ____exports.PostItemPickup = PostItemPickup
end
do
    local ____PostKeyboardChanged = require("classes.callbacks.PostKeyboardChanged")
    local PostKeyboardPressed = ____PostKeyboardChanged.PostKeyboardChanged
    ____exports.PostKeyboardPressed = PostKeyboardPressed
end
do
    local ____PostKnifeInitFilter = require("classes.callbacks.PostKnifeInitFilter")
    local PostKnifeInitFilter = ____PostKnifeInitFilter.PostKnifeInitFilter
    ____exports.PostKnifeInitFilter = PostKnifeInitFilter
end
do
    local ____PostKnifeInitLate = require("classes.callbacks.PostKnifeInitLate")
    local PostKnifeInitLate = ____PostKnifeInitLate.PostKnifeInitLate
    ____exports.PostKnifeInitLate = PostKnifeInitLate
end
do
    local ____PostKnifeRenderFilter = require("classes.callbacks.PostKnifeRenderFilter")
    local PostKnifeRenderFilter = ____PostKnifeRenderFilter.PostKnifeRenderFilter
    ____exports.PostKnifeRenderFilter = PostKnifeRenderFilter
end
do
    local ____PostKnifeUpdateFilter = require("classes.callbacks.PostKnifeUpdateFilter")
    local PostKnifeUpdateFilter = ____PostKnifeUpdateFilter.PostKnifeUpdateFilter
    ____exports.PostKnifeUpdateFilter = PostKnifeUpdateFilter
end
do
    local ____PostLaserInitFilter = require("classes.callbacks.PostLaserInitFilter")
    local PostLaserInitFilter = ____PostLaserInitFilter.PostLaserInitFilter
    ____exports.PostLaserInitFilter = PostLaserInitFilter
end
do
    local ____PostLaserInitLate = require("classes.callbacks.PostLaserInitLate")
    local PostLaserInitLate = ____PostLaserInitLate.PostLaserInitLate
    ____exports.PostLaserInitLate = PostLaserInitLate
end
do
    local ____PostLaserRenderFilter = require("classes.callbacks.PostLaserRenderFilter")
    local PostLaserRenderFilter = ____PostLaserRenderFilter.PostLaserRenderFilter
    ____exports.PostLaserRenderFilter = PostLaserRenderFilter
end
do
    local ____PostLaserUpdateFilter = require("classes.callbacks.PostLaserUpdateFilter")
    local PostLaserUpdateFilter = ____PostLaserUpdateFilter.PostLaserUpdateFilter
    ____exports.PostLaserUpdateFilter = PostLaserUpdateFilter
end
do
    local ____PostNPCDeathFilter = require("classes.callbacks.PostNPCDeathFilter")
    local PostNPCDeathFilter = ____PostNPCDeathFilter.PostNPCDeathFilter
    ____exports.PostNPCDeathFilter = PostNPCDeathFilter
end
do
    local ____PostNPCInitFilter = require("classes.callbacks.PostNPCInitFilter")
    local PostNPCInitFilter = ____PostNPCInitFilter.PostNPCInitFilter
    ____exports.PostNPCInitFilter = PostNPCInitFilter
end
do
    local ____PostNPCInitLate = require("classes.callbacks.PostNPCInitLate")
    local PostNPCInitLate = ____PostNPCInitLate.PostNPCInitLate
    ____exports.PostNPCInitLate = PostNPCInitLate
end
do
    local ____PostNPCRenderFilter = require("classes.callbacks.PostNPCRenderFilter")
    local PostNPCRenderFilter = ____PostNPCRenderFilter.PostNPCRenderFilter
    ____exports.PostNPCRenderFilter = PostNPCRenderFilter
end
do
    local ____PostNPCStateChanged = require("classes.callbacks.PostNPCStateChanged")
    local PostNPCStateChanged = ____PostNPCStateChanged.PostNPCStateChanged
    ____exports.PostNPCStateChanged = PostNPCStateChanged
end
do
    local ____PostNPCUpdateFilter = require("classes.callbacks.PostNPCUpdateFilter")
    local PostNPCUpdateFilter = ____PostNPCUpdateFilter.PostNPCUpdateFilter
    ____exports.PostNPCUpdateFilter = PostNPCUpdateFilter
end
do
    local ____PostNewLevelReordered = require("classes.callbacks.PostNewLevelReordered")
    local PostNewLevelReordered = ____PostNewLevelReordered.PostNewLevelReordered
    ____exports.PostNewLevelReordered = PostNewLevelReordered
end
do
    local ____PostNewRoomEarly = require("classes.callbacks.PostNewRoomEarly")
    local PostNewRoomEarly = ____PostNewRoomEarly.PostNewRoomEarly
    ____exports.PostNewRoomEarly = PostNewRoomEarly
end
do
    local ____PostNewRoomReordered = require("classes.callbacks.PostNewRoomReordered")
    local PostNewRoomReordered = ____PostNewRoomReordered.PostNewRoomReordered
    ____exports.PostNewRoomReordered = PostNewRoomReordered
end
do
    local ____PostPEffectUpdateReordered = require("classes.callbacks.PostPEffectUpdateReordered")
    local PostPEffectUpdateReordered = ____PostPEffectUpdateReordered.PostPEffectUpdateReordered
    ____exports.PostPEffectUpdateReordered = PostPEffectUpdateReordered
end
do
    local ____PostPickupChanged = require("classes.callbacks.PostPickupChanged")
    local PostPickupChanged = ____PostPickupChanged.PostPickupChanged
    ____exports.PostPickupChanged = PostPickupChanged
end
do
    local ____PostPickupCollect = require("classes.callbacks.PostPickupCollect")
    local PostPickupCollect = ____PostPickupCollect.PostPickupCollect
    ____exports.PostPickupCollect = PostPickupCollect
end
do
    local ____PostPickupInitFilter = require("classes.callbacks.PostPickupInitFilter")
    local PostPickupInitFilter = ____PostPickupInitFilter.PostPickupInitFilter
    ____exports.PostPickupInitFilter = PostPickupInitFilter
end
do
    local ____PostPickupInitFirst = require("classes.callbacks.PostPickupInitFirst")
    local PostPickupInitFirst = ____PostPickupInitFirst.PostPickupInitFirst
    ____exports.PostPickupInitFirst = PostPickupInitFirst
end
do
    local ____PostPickupInitLate = require("classes.callbacks.PostPickupInitLate")
    local PostPickupInitLate = ____PostPickupInitLate.PostPickupInitLate
    ____exports.PostPickupInitLate = PostPickupInitLate
end
do
    local ____PostPickupRenderFilter = require("classes.callbacks.PostPickupRenderFilter")
    local PostPickupRenderFilter = ____PostPickupRenderFilter.PostPickupRenderFilter
    ____exports.PostPickupRenderFilter = PostPickupRenderFilter
end
do
    local ____PostPickupSelectionFilter = require("classes.callbacks.PostPickupSelectionFilter")
    local PostPickupSelectionFilter = ____PostPickupSelectionFilter.PostPickupSelectionFilter
    ____exports.PostPickupSelectionFilter = PostPickupSelectionFilter
end
do
    local ____PostPickupStateChanged = require("classes.callbacks.PostPickupStateChanged")
    local PostPickupStateChanged = ____PostPickupStateChanged.PostPickupStateChanged
    ____exports.PostPickupStateChanged = PostPickupStateChanged
end
do
    local ____PostPickupUpdateFilter = require("classes.callbacks.PostPickupUpdateFilter")
    local PostPickupUpdateFilter = ____PostPickupUpdateFilter.PostPickupUpdateFilter
    ____exports.PostPickupUpdateFilter = PostPickupUpdateFilter
end
do
    local ____PostPitRender = require("classes.callbacks.PostPitRender")
    local PostPitRender = ____PostPitRender.PostPitRender
    ____exports.PostPitRender = PostPitRender
end
do
    local ____PostPitUpdate = require("classes.callbacks.PostPitUpdate")
    local PostPitUpdate = ____PostPitUpdate.PostPitUpdate
    ____exports.PostPitUpdate = PostPitUpdate
end
do
    local ____PostPlayerChangeHealth = require("classes.callbacks.PostPlayerChangeHealth")
    local PostPlayerChangeHealth = ____PostPlayerChangeHealth.PostPlayerChangeHealth
    ____exports.PostPlayerChangeHealth = PostPlayerChangeHealth
end
do
    local ____PostPlayerChangeStat = require("classes.callbacks.PostPlayerChangeStat")
    local PostPlayerChangeStat = ____PostPlayerChangeStat.PostPlayerChangeStat
    ____exports.PostPlayerChangeStat = PostPlayerChangeStat
end
do
    local ____PostPlayerChangeType = require("classes.callbacks.PostPlayerChangeType")
    local PostPlayerChangeType = ____PostPlayerChangeType.PostPlayerChangeType
    ____exports.PostPlayerChangeType = PostPlayerChangeType
end
do
    local ____PostPlayerCollectibleAdded = require("classes.callbacks.PostPlayerCollectibleAdded")
    local PostPlayerCollectibleAdded = ____PostPlayerCollectibleAdded.PostPlayerCollectibleAdded
    ____exports.PostPlayerCollectibleAdded = PostPlayerCollectibleAdded
end
do
    local ____PostPlayerCollectibleRemoved = require("classes.callbacks.PostPlayerCollectibleRemoved")
    local PostPlayerCollectibleRemoved = ____PostPlayerCollectibleRemoved.PostPlayerCollectibleRemoved
    ____exports.PostPlayerCollectibleRemoved = PostPlayerCollectibleRemoved
end
do
    local ____PostPlayerFatalDamage = require("classes.callbacks.PostPlayerFatalDamage")
    local PostPlayerFatalDamage = ____PostPlayerFatalDamage.PostPlayerFatalDamage
    ____exports.PostPlayerFatalDamage = PostPlayerFatalDamage
end
do
    local ____PostPlayerInitFirst = require("classes.callbacks.PostPlayerInitFirst")
    local PostPlayerInitFirst = ____PostPlayerInitFirst.PostPlayerInitFirst
    ____exports.PostPlayerInitFirst = PostPlayerInitFirst
end
do
    local ____PostPlayerInitLate = require("classes.callbacks.PostPlayerInitLate")
    local PostPlayerInitLate = ____PostPlayerInitLate.PostPlayerInitLate
    ____exports.PostPlayerInitLate = PostPlayerInitLate
end
do
    local ____PostPlayerRenderReordered = require("classes.callbacks.PostPlayerRenderReordered")
    local PostPlayerRenderReordered = ____PostPlayerRenderReordered.PostPlayerRenderReordered
    ____exports.PostPlayerRenderReordered = PostPlayerRenderReordered
end
do
    local ____PostPlayerUpdateReordered = require("classes.callbacks.PostPlayerUpdateReordered")
    local PostPlayerUpdateReordered = ____PostPlayerUpdateReordered.PostPlayerUpdateReordered
    ____exports.PostPlayerUpdateReordered = PostPlayerUpdateReordered
end
do
    local ____PostPoopRender = require("classes.callbacks.PostPoopRender")
    local PostPoopRender = ____PostPoopRender.PostPoopRender
    ____exports.PostPoopRender = PostPoopRender
end
do
    local ____PostPoopUpdate = require("classes.callbacks.PostPoopUpdate")
    local PostPoopUpdate = ____PostPoopUpdate.PostPoopUpdate
    ____exports.PostPoopUpdate = PostPoopUpdate
end
do
    local ____PostPressurePlateRender = require("classes.callbacks.PostPressurePlateRender")
    local PostPressurePlateRender = ____PostPressurePlateRender.PostPressurePlateRender
    ____exports.PostPressurePlateRender = PostPressurePlateRender
end
do
    local ____PostPressurePlateUpdate = require("classes.callbacks.PostPressurePlateUpdate")
    local PostPressurePlateUpdate = ____PostPressurePlateUpdate.PostPressurePlateUpdate
    ____exports.PostPressurePlateUpdate = PostPressurePlateUpdate
end
do
    local ____PostProjectileInitFilter = require("classes.callbacks.PostProjectileInitFilter")
    local PostProjectileInitFilter = ____PostProjectileInitFilter.PostProjectileInitFilter
    ____exports.PostProjectileInitFilter = PostProjectileInitFilter
end
do
    local ____PostProjectileInitLate = require("classes.callbacks.PostProjectileInitLate")
    local PostProjectileInitLate = ____PostProjectileInitLate.PostProjectileInitLate
    ____exports.PostProjectileInitLate = PostProjectileInitLate
end
do
    local ____PostProjectileKill = require("classes.callbacks.PostProjectileKill")
    local PostProjectileKill = ____PostProjectileKill.PostProjectileKill
    ____exports.PostProjectileKill = PostProjectileKill
end
do
    local ____PostProjectileRenderFilter = require("classes.callbacks.PostProjectileRenderFilter")
    local PostProjectileRenderFilter = ____PostProjectileRenderFilter.PostProjectileRenderFilter
    ____exports.PostProjectileRenderFilter = PostProjectileRenderFilter
end
do
    local ____PostProjectileUpdateFilter = require("classes.callbacks.PostProjectileUpdateFilter")
    local PostProjectileUpdateFilter = ____PostProjectileUpdateFilter.PostProjectileUpdateFilter
    ____exports.PostProjectileUpdateFilter = PostProjectileUpdateFilter
end
do
    local ____PostPurchase = require("classes.callbacks.PostPurchase")
    local PostPurchase = ____PostPurchase.PostPurchase
    ____exports.PostPurchase = PostPurchase
end
do
    local ____PostRockRender = require("classes.callbacks.PostRockRender")
    local PostRockRender = ____PostRockRender.PostRockRender
    ____exports.PostRockRender = PostRockRender
end
do
    local ____PostRockUpdate = require("classes.callbacks.PostRockUpdate")
    local PostRockUpdate = ____PostRockUpdate.PostRockUpdate
    ____exports.PostRockUpdate = PostRockUpdate
end
do
    local ____PostRoomClearChanged = require("classes.callbacks.PostRoomClearChanged")
    local PostRoomClearChanged = ____PostRoomClearChanged.PostRoomClearChanged
    ____exports.PostRoomClearChanged = PostRoomClearChanged
end
do
    local ____PostSacrifice = require("classes.callbacks.PostSacrifice")
    local PostSacrifice = ____PostSacrifice.PostSacrifice
    ____exports.PostSacrifice = PostSacrifice
end
do
    local ____PostSlotAnimationChanged = require("classes.callbacks.PostSlotAnimationChanged")
    local PostSlotAnimationChanged = ____PostSlotAnimationChanged.PostSlotAnimationChanged
    ____exports.PostSlotAnimationChanged = PostSlotAnimationChanged
end
do
    local ____PostSlotCollision = require("classes.callbacks.PostSlotCollision")
    local PostSlotCollision = ____PostSlotCollision.PostSlotCollision
    ____exports.PostSlotCollision = PostSlotCollision
end
do
    local ____PostSlotDestroyed = require("classes.callbacks.PostSlotDestroyed")
    local PostSlotDestroyed = ____PostSlotDestroyed.PostSlotDestroyed
    ____exports.PostSlotDestroyed = PostSlotDestroyed
end
do
    local ____PostSlotInit = require("classes.callbacks.PostSlotInit")
    local PostSlotInit = ____PostSlotInit.PostSlotInit
    ____exports.PostSlotInit = PostSlotInit
end
do
    local ____PostSlotRender = require("classes.callbacks.PostSlotRender")
    local PostSlotRender = ____PostSlotRender.PostSlotRender
    ____exports.PostSlotRender = PostSlotRender
end
do
    local ____PostSlotUpdate = require("classes.callbacks.PostSlotUpdate")
    local PostSlotUpdate = ____PostSlotUpdate.PostSlotUpdate
    ____exports.PostSlotUpdate = PostSlotUpdate
end
do
    local ____PostSpikesRender = require("classes.callbacks.PostSpikesRender")
    local PostSpikesRender = ____PostSpikesRender.PostSpikesRender
    ____exports.PostSpikesRender = PostSpikesRender
end
do
    local ____PostSpikesUpdate = require("classes.callbacks.PostSpikesUpdate")
    local PostSpikesUpdate = ____PostSpikesUpdate.PostSpikesUpdate
    ____exports.PostSpikesUpdate = PostSpikesUpdate
end
do
    local ____PostTNTRender = require("classes.callbacks.PostTNTRender")
    local PostTNTRender = ____PostTNTRender.PostTNTRender
    ____exports.PostTNTRender = PostTNTRender
end
do
    local ____PostTNTUpdate = require("classes.callbacks.PostTNTUpdate")
    local PostTNTUpdate = ____PostTNTUpdate.PostTNTUpdate
    ____exports.PostTNTUpdate = PostTNTUpdate
end
do
    local ____PostTearInitFilter = require("classes.callbacks.PostTearInitFilter")
    local PostTearInitFilter = ____PostTearInitFilter.PostTearInitFilter
    ____exports.PostTearInitFilter = PostTearInitFilter
end
do
    local ____PostTearInitLate = require("classes.callbacks.PostTearInitLate")
    local PostTearInitLate = ____PostTearInitLate.PostTearInitLate
    ____exports.PostTearInitLate = PostTearInitLate
end
do
    local ____PostTearInitVeryLate = require("classes.callbacks.PostTearInitVeryLate")
    local PostTearInitVeryLate = ____PostTearInitVeryLate.PostTearInitVeryLate
    ____exports.PostTearInitVeryLate = PostTearInitVeryLate
end
do
    local ____PostTearKill = require("classes.callbacks.PostTearKill")
    local PostTearKill = ____PostTearKill.PostTearKill
    ____exports.PostTearKill = PostTearKill
end
do
    local ____PostTearRenderFilter = require("classes.callbacks.PostTearRenderFilter")
    local PostTearRenderFilter = ____PostTearRenderFilter.PostTearRenderFilter
    ____exports.PostTearRenderFilter = PostTearRenderFilter
end
do
    local ____PostTearUpdateFilter = require("classes.callbacks.PostTearUpdateFilter")
    local PostTearUpdateFilter = ____PostTearUpdateFilter.PostTearUpdateFilter
    ____exports.PostTearUpdateFilter = PostTearUpdateFilter
end
do
    local ____PostTransformation = require("classes.callbacks.PostTransformation")
    local PostTransformation = ____PostTransformation.PostTransformation
    ____exports.PostTransformation = PostTransformation
end
do
    local ____PostTrinketBreak = require("classes.callbacks.PostTrinketBreak")
    local PostTrinketBreak = ____PostTrinketBreak.PostTrinketBreak
    ____exports.PostTrinketBreak = PostTrinketBreak
end
do
    local ____PostUsePillFilter = require("classes.callbacks.PostUsePillFilter")
    local PostUsePillFilter = ____PostUsePillFilter.PostUsePillFilter
    ____exports.PostUsePillFilter = PostUsePillFilter
end
do
    local ____PreBerserkDeath = require("classes.callbacks.PreBerserkDeath")
    local PreBerserkDeath = ____PreBerserkDeath.PreBerserkDeath
    ____exports.PreBerserkDeath = PreBerserkDeath
end
do
    local ____PreBombCollisionFilter = require("classes.callbacks.PreBombCollisionFilter")
    local PreBombCollisionFilter = ____PreBombCollisionFilter.PreBombCollisionFilter
    ____exports.PreBombCollisionFilter = PreBombCollisionFilter
end
do
    local ____PreCustomRevive = require("classes.callbacks.PreCustomRevive")
    local PreCustomRevive = ____PreCustomRevive.PreCustomRevive
    ____exports.PreCustomRevive = PreCustomRevive
end
do
    local ____PreEntitySpawnFilter = require("classes.callbacks.PreEntitySpawnFilter")
    local PreEntitySpawnFilter = ____PreEntitySpawnFilter.PreEntitySpawnFilter
    ____exports.PreEntitySpawnFilter = PreEntitySpawnFilter
end
do
    local ____PreFamiliarCollisionFilter = require("classes.callbacks.PreFamiliarCollisionFilter")
    local PreFamiliarCollisionFilter = ____PreFamiliarCollisionFilter.PreFamiliarCollisionFilter
    ____exports.PreFamiliarCollisionFilter = PreFamiliarCollisionFilter
end
do
    local ____PreGetPedestal = require("classes.callbacks.PreGetPedestal")
    local PreGetPedestal = ____PreGetPedestal.PreGetPedestal
    ____exports.PreGetPedestal = PreGetPedestal
end
do
    local ____PreItemPickup = require("classes.callbacks.PreItemPickup")
    local PreItemPickup = ____PreItemPickup.PreItemPickup
    ____exports.PreItemPickup = PreItemPickup
end
do
    local ____PreKnifeCollisionFilter = require("classes.callbacks.PreKnifeCollisionFilter")
    local PreKnifeCollisionFilter = ____PreKnifeCollisionFilter.PreKnifeCollisionFilter
    ____exports.PreKnifeCollisionFilter = PreKnifeCollisionFilter
end
do
    local ____PreNPCCollisionFilter = require("classes.callbacks.PreNPCCollisionFilter")
    local PreNPCCollisionFilter = ____PreNPCCollisionFilter.PreNPCCollisionFilter
    ____exports.PreNPCCollisionFilter = PreNPCCollisionFilter
end
do
    local ____PreNPCUpdateFilter = require("classes.callbacks.PreNPCUpdateFilter")
    local PreNPCUpdateFilter = ____PreNPCUpdateFilter.PreNPCUpdateFilter
    ____exports.PreNPCUpdateFilter = PreNPCUpdateFilter
end
do
    local ____PreNewLevel = require("classes.callbacks.PreNewLevel")
    local PreNewLevel = ____PreNewLevel.PreNewLevel
    ____exports.PreNewLevel = PreNewLevel
end
do
    local ____PreProjectileCollisionFilter = require("classes.callbacks.PreProjectileCollisionFilter")
    local PreProjectileCollisionFilter = ____PreProjectileCollisionFilter.PreProjectileCollisionFilter
    ____exports.PreProjectileCollisionFilter = PreProjectileCollisionFilter
end
do
    local ____PreRoomEntitySpawnFilter = require("classes.callbacks.PreRoomEntitySpawnFilter")
    local PreRoomEntitySpawnFilter = ____PreRoomEntitySpawnFilter.PreRoomEntitySpawnFilter
    ____exports.PreRoomEntitySpawnFilter = PreRoomEntitySpawnFilter
end
do
    local ____PreTearCollisionFilter = require("classes.callbacks.PreTearCollisionFilter")
    local PreTearCollisionFilter = ____PreTearCollisionFilter.PreTearCollisionFilter
    ____exports.PreTearCollisionFilter = PreTearCollisionFilter
end
return ____exports
 end,
["types.AnyClass"] = function(...) 
local ____exports = {}
return ____exports
 end,
["callbacks"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local MOD_CALLBACK_CUSTOM_VALUES = ____cachedEnumValues.MOD_CALLBACK_CUSTOM_VALUES
local cc = require("callbackClasses")
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local MOD_CALLBACK_CUSTOM_TO_CLASS = {
    [ModCallbackCustom.ENTITY_TAKE_DMG_FILTER] = cc.EntityTakeDmgFilter,
    [ModCallbackCustom.ENTITY_TAKE_DMG_PLAYER] = cc.EntityTakeDmgPlayer,
    [ModCallbackCustom.INPUT_ACTION_FILTER] = cc.InputActionFilter,
    [ModCallbackCustom.INPUT_ACTION_PLAYER] = cc.InputActionPlayer,
    [ModCallbackCustom.POST_AMBUSH_FINISHED] = cc.PostAmbushFinished,
    [ModCallbackCustom.POST_AMBUSH_STARTED] = cc.PostAmbushStarted,
    [ModCallbackCustom.POST_BOMB_EXPLODED] = cc.PostBombExploded,
    [ModCallbackCustom.POST_BOMB_INIT_FILTER] = cc.PostBombInitFilter,
    [ModCallbackCustom.POST_BOMB_INIT_LATE] = cc.PostBombInitLate,
    [ModCallbackCustom.POST_BOMB_RENDER_FILTER] = cc.PostBombRenderFilter,
    [ModCallbackCustom.POST_BOMB_UPDATE_FILTER] = cc.PostBombUpdateFilter,
    [ModCallbackCustom.POST_BONE_SWING] = cc.PostBoneSwing,
    [ModCallbackCustom.POST_COLLECTIBLE_EMPTY] = cc.PostCollectibleEmpty,
    [ModCallbackCustom.POST_CURSED_TELEPORT] = cc.PostCursedTeleport,
    [ModCallbackCustom.POST_CUSTOM_REVIVE] = cc.PostCustomRevive,
    [ModCallbackCustom.POST_DICE_ROOM_ACTIVATED] = cc.PostDiceRoomActivated,
    [ModCallbackCustom.POST_DOOR_RENDER] = cc.PostDoorRender,
    [ModCallbackCustom.POST_DOOR_UPDATE] = cc.PostDoorUpdate,
    [ModCallbackCustom.POST_EFFECT_INIT_FILTER] = cc.PostEffectInitFilter,
    [ModCallbackCustom.POST_EFFECT_INIT_LATE] = cc.PostEffectInitLate,
    [ModCallbackCustom.POST_EFFECT_RENDER_FILTER] = cc.PostEffectRenderFilter,
    [ModCallbackCustom.POST_EFFECT_STATE_CHANGED] = cc.PostEffectStateChanged,
    [ModCallbackCustom.POST_EFFECT_UPDATE_FILTER] = cc.PostEffectUpdateFilter,
    [ModCallbackCustom.POST_ENTITY_KILL_FILTER] = cc.PostEntityKillFilter,
    [ModCallbackCustom.POST_ESAU_JR] = cc.PostEsauJr,
    [ModCallbackCustom.POST_FAMILIAR_INIT_FILTER] = cc.PostFamiliarInitFilter,
    [ModCallbackCustom.POST_FAMILIAR_INIT_LATE] = cc.PostFamiliarInitLate,
    [ModCallbackCustom.POST_FAMILIAR_RENDER_FILTER] = cc.PostFamiliarRenderFilter,
    [ModCallbackCustom.POST_FAMILIAR_STATE_CHANGED] = cc.PostFamiliarStateChanged,
    [ModCallbackCustom.POST_FAMILIAR_UPDATE_FILTER] = cc.PostFamiliarUpdateFilter,
    [ModCallbackCustom.POST_FIRST_FLIP] = cc.PostFirstFlip,
    [ModCallbackCustom.POST_FIRST_ESAU_JR] = cc.PostFirstEsauJr,
    [ModCallbackCustom.POST_FLIP] = cc.PostFlip,
    [ModCallbackCustom.POST_GAME_END_FILTER] = cc.PostGameEndFilter,
    [ModCallbackCustom.POST_GAME_STARTED_REORDERED] = cc.PostGameStartedReordered,
    [ModCallbackCustom.POST_GAME_STARTED_REORDERED_LAST] = cc.PostGameStartedReorderedLast,
    [ModCallbackCustom.POST_GREED_MODE_WAVE] = cc.PostGreedModeWave,
    [ModCallbackCustom.POST_GRID_ENTITY_BROKEN] = cc.PostGridEntityBroken,
    [ModCallbackCustom.POST_GRID_ENTITY_COLLISION] = cc.PostGridEntityCollision,
    [ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_BROKEN] = cc.PostGridEntityCustomBroken,
    [ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_COLLISION] = cc.PostGridEntityCustomCollision,
    [ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_INIT] = cc.PostGridEntityCustomInit,
    [ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_REMOVE] = cc.PostGridEntityCustomRemove,
    [ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_RENDER] = cc.PostGridEntityCustomRender,
    [ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_STATE_CHANGED] = cc.PostGridEntityCustomStateChanged,
    [ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_UPDATE] = cc.PostGridEntityCustomUpdate,
    [ModCallbackCustom.POST_GRID_ENTITY_INIT] = cc.PostGridEntityInit,
    [ModCallbackCustom.POST_GRID_ENTITY_REMOVE] = cc.PostGridEntityRemove,
    [ModCallbackCustom.POST_GRID_ENTITY_RENDER] = cc.PostGridEntityRender,
    [ModCallbackCustom.POST_GRID_ENTITY_STATE_CHANGED] = cc.PostGridEntityStateChanged,
    [ModCallbackCustom.POST_GRID_ENTITY_UPDATE] = cc.PostGridEntityUpdate,
    [ModCallbackCustom.POST_HOLY_MANTLE_REMOVED] = cc.PostHolyMantleRemoved,
    [ModCallbackCustom.POST_ITEM_DISCHARGE] = cc.PostItemDischarge,
    [ModCallbackCustom.POST_ITEM_PICKUP] = cc.PostItemPickup,
    [ModCallbackCustom.POST_KEYBOARD_CHANGED] = cc.PostKeyboardPressed,
    [ModCallbackCustom.POST_KNIFE_INIT_FILTER] = cc.PostKnifeInitFilter,
    [ModCallbackCustom.POST_KNIFE_INIT_LATE] = cc.PostKnifeInitLate,
    [ModCallbackCustom.POST_KNIFE_RENDER_FILTER] = cc.PostKnifeRenderFilter,
    [ModCallbackCustom.POST_KNIFE_UPDATE_FILTER] = cc.PostKnifeUpdateFilter,
    [ModCallbackCustom.POST_LASER_INIT_FILTER] = cc.PostLaserInitFilter,
    [ModCallbackCustom.POST_LASER_INIT_LATE] = cc.PostLaserInitLate,
    [ModCallbackCustom.POST_LASER_RENDER_FILTER] = cc.PostLaserRenderFilter,
    [ModCallbackCustom.POST_LASER_UPDATE_FILTER] = cc.PostLaserUpdateFilter,
    [ModCallbackCustom.POST_NEW_LEVEL_REORDERED] = cc.PostNewLevelReordered,
    [ModCallbackCustom.POST_NEW_ROOM_EARLY] = cc.PostNewRoomEarly,
    [ModCallbackCustom.POST_NEW_ROOM_REORDERED] = cc.PostNewRoomReordered,
    [ModCallbackCustom.POST_NPC_DEATH_FILTER] = cc.PostNPCDeathFilter,
    [ModCallbackCustom.POST_NPC_INIT_FILTER] = cc.PostNPCInitFilter,
    [ModCallbackCustom.POST_NPC_INIT_LATE] = cc.PostNPCInitLate,
    [ModCallbackCustom.POST_NPC_RENDER_FILTER] = cc.PostNPCRenderFilter,
    [ModCallbackCustom.POST_NPC_STATE_CHANGED] = cc.PostNPCStateChanged,
    [ModCallbackCustom.POST_NPC_UPDATE_FILTER] = cc.PostNPCUpdateFilter,
    [ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED] = cc.PostPEffectUpdateReordered,
    [ModCallbackCustom.POST_PICKUP_CHANGED] = cc.PostPickupChanged,
    [ModCallbackCustom.POST_PICKUP_COLLECT] = cc.PostPickupCollect,
    [ModCallbackCustom.POST_PICKUP_INIT_FILTER] = cc.PostPickupInitFilter,
    [ModCallbackCustom.POST_PICKUP_INIT_FIRST] = cc.PostPickupInitFirst,
    [ModCallbackCustom.POST_PICKUP_INIT_LATE] = cc.PostPickupInitLate,
    [ModCallbackCustom.POST_PICKUP_RENDER_FILTER] = cc.PostPickupRenderFilter,
    [ModCallbackCustom.POST_PICKUP_SELECTION_FILTER] = cc.PostPickupSelectionFilter,
    [ModCallbackCustom.POST_PICKUP_STATE_CHANGED] = cc.PostPickupStateChanged,
    [ModCallbackCustom.POST_PICKUP_UPDATE_FILTER] = cc.PostPickupUpdateFilter,
    [ModCallbackCustom.POST_PIT_RENDER] = cc.PostPitRender,
    [ModCallbackCustom.POST_PIT_UPDATE] = cc.PostPitUpdate,
    [ModCallbackCustom.POST_PLAYER_CHANGE_HEALTH] = cc.PostPlayerChangeHealth,
    [ModCallbackCustom.POST_PLAYER_CHANGE_STAT] = cc.PostPlayerChangeStat,
    [ModCallbackCustom.POST_PLAYER_CHANGE_TYPE] = cc.PostPlayerChangeType,
    [ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED] = cc.PostPlayerCollectibleAdded,
    [ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED] = cc.PostPlayerCollectibleRemoved,
    [ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE] = cc.PostPlayerFatalDamage,
    [ModCallbackCustom.POST_PLAYER_INIT_FIRST] = cc.PostPlayerInitFirst,
    [ModCallbackCustom.POST_PLAYER_INIT_LATE] = cc.PostPlayerInitLate,
    [ModCallbackCustom.POST_PLAYER_RENDER_REORDERED] = cc.PostPlayerRenderReordered,
    [ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED] = cc.PostPlayerUpdateReordered,
    [ModCallbackCustom.POST_POOP_RENDER] = cc.PostPoopRender,
    [ModCallbackCustom.POST_POOP_UPDATE] = cc.PostPoopUpdate,
    [ModCallbackCustom.POST_PRESSURE_PLATE_RENDER] = cc.PostPressurePlateRender,
    [ModCallbackCustom.POST_PRESSURE_PLATE_UPDATE] = cc.PostPressurePlateUpdate,
    [ModCallbackCustom.POST_PROJECTILE_INIT_FILTER] = cc.PostProjectileInitFilter,
    [ModCallbackCustom.POST_PROJECTILE_INIT_LATE] = cc.PostProjectileInitLate,
    [ModCallbackCustom.POST_PROJECTILE_KILL] = cc.PostProjectileKill,
    [ModCallbackCustom.POST_PROJECTILE_RENDER_FILTER] = cc.PostProjectileRenderFilter,
    [ModCallbackCustom.POST_PROJECTILE_UPDATE_FILTER] = cc.PostProjectileUpdateFilter,
    [ModCallbackCustom.POST_PURCHASE] = cc.PostPurchase,
    [ModCallbackCustom.POST_ROCK_RENDER] = cc.PostRockRender,
    [ModCallbackCustom.POST_ROCK_UPDATE] = cc.PostRockUpdate,
    [ModCallbackCustom.POST_ROOM_CLEAR_CHANGED] = cc.PostRoomClearChanged,
    [ModCallbackCustom.POST_SACRIFICE] = cc.PostSacrifice,
    [ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED] = cc.PostSlotAnimationChanged,
    [ModCallbackCustom.POST_SLOT_COLLISION] = cc.PostSlotCollision,
    [ModCallbackCustom.POST_SLOT_DESTROYED] = cc.PostSlotDestroyed,
    [ModCallbackCustom.POST_SLOT_INIT] = cc.PostSlotInit,
    [ModCallbackCustom.POST_SLOT_RENDER] = cc.PostSlotRender,
    [ModCallbackCustom.POST_SLOT_UPDATE] = cc.PostSlotUpdate,
    [ModCallbackCustom.POST_SPIKES_RENDER] = cc.PostSpikesRender,
    [ModCallbackCustom.POST_SPIKES_UPDATE] = cc.PostSpikesUpdate,
    [ModCallbackCustom.POST_TEAR_INIT_FILTER] = cc.PostTearInitFilter,
    [ModCallbackCustom.POST_TEAR_INIT_LATE] = cc.PostTearInitLate,
    [ModCallbackCustom.POST_TEAR_INIT_VERY_LATE] = cc.PostTearInitVeryLate,
    [ModCallbackCustom.POST_TEAR_KILL] = cc.PostTearKill,
    [ModCallbackCustom.POST_TEAR_RENDER_FILTER] = cc.PostTearRenderFilter,
    [ModCallbackCustom.POST_TEAR_UPDATE_FILTER] = cc.PostTearUpdateFilter,
    [ModCallbackCustom.POST_TNT_RENDER] = cc.PostTNTRender,
    [ModCallbackCustom.POST_TNT_UPDATE] = cc.PostTNTUpdate,
    [ModCallbackCustom.POST_TRANSFORMATION] = cc.PostTransformation,
    [ModCallbackCustom.POST_TRINKET_BREAK] = cc.PostTrinketBreak,
    [ModCallbackCustom.POST_USE_PILL_FILTER] = cc.PostUsePillFilter,
    [ModCallbackCustom.PRE_BERSERK_DEATH] = cc.PreBerserkDeath,
    [ModCallbackCustom.PRE_BOMB_COLLISION_FILTER] = cc.PreBombCollisionFilter,
    [ModCallbackCustom.PRE_CUSTOM_REVIVE] = cc.PreCustomRevive,
    [ModCallbackCustom.PRE_ENTITY_SPAWN_FILTER] = cc.PreEntitySpawnFilter,
    [ModCallbackCustom.PRE_FAMILIAR_COLLISION_FILTER] = cc.PreFamiliarCollisionFilter,
    [ModCallbackCustom.PRE_GET_PEDESTAL] = cc.PreGetPedestal,
    [ModCallbackCustom.PRE_ITEM_PICKUP] = cc.PreItemPickup,
    [ModCallbackCustom.PRE_KNIFE_COLLISION_FILTER] = cc.PreKnifeCollisionFilter,
    [ModCallbackCustom.PRE_NEW_LEVEL] = cc.PreNewLevel,
    [ModCallbackCustom.PRE_NPC_COLLISION_FILTER] = cc.PreNPCCollisionFilter,
    [ModCallbackCustom.PRE_NPC_UPDATE_FILTER] = cc.PreNPCUpdateFilter,
    [ModCallbackCustom.PRE_PROJECTILE_COLLISION_FILTER] = cc.PreProjectileCollisionFilter,
    [ModCallbackCustom.PRE_ROOM_ENTITY_SPAWN_FILTER] = cc.PreRoomEntitySpawnFilter,
    [ModCallbackCustom.PRE_TEAR_COLLISION_FILTER] = cc.PreTearCollisionFilter
}
function ____exports.getCallbacks(self)
    local instantiatedClasses = {}
    for ____, modCallbackCustom in ipairs(MOD_CALLBACK_CUSTOM_VALUES) do
        local constructor = MOD_CALLBACK_CUSTOM_TO_CLASS[modCallbackCustom]
        instantiatedClasses[modCallbackCustom] = __TS__New(constructor)
    end
    return instantiatedClasses
end
return ____exports
 end,
["decorators"] = function(...) 
local ____exports = {}
____exports.EXPORTED_METHOD_NAMES_KEY = "__exportedMethodNames"
--- A decorator function that signifies that the decorated class method should be added to the
-- `ModUpgraded` object.
-- 
-- This is only meant to be used internally.
function ____exports.Exported(self, target, propertyKey)
    local constructor = target.constructor
    if not (constructor[____exports.EXPORTED_METHOD_NAMES_KEY] ~= nil) then
        constructor[____exports.EXPORTED_METHOD_NAMES_KEY] = {}
    end
    local exportedMethodNames = constructor[____exports.EXPORTED_METHOD_NAMES_KEY]
    exportedMethodNames[#exportedMethodNames + 1] = propertyKey
end
return ____exports
 end,
["interfaces.GridEntityCustomData"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.run"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__ArraySome = ____lualib.__TS__ArraySome
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local SeedEffect = ____isaac_2Dtypescript_2Ddefinitions.SeedEffect
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local SEED_EFFECTS = ____cachedEnumValues.SEED_EFFECTS
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____characters = require("functions.characters")
local getCharacterName = ____characters.getCharacterName
local ____log = require("functions.log")
local log = ____log.log
local ____types = require("functions.types")
local isString = ____types.isString
--- Helper function to see if any seed effects (i.e. Easter Eggs) are enabled for the current run.
-- 
-- @param exceptions Optional. An array of seed effects to ignore.
function ____exports.anySeedEffectEnabled(self, exceptions)
    local seeds = game:GetSeeds()
    if exceptions == nil then
        local numSeedEffects = seeds:CountSeedEffects()
        return numSeedEffects > 0
    end
    local exceptionsSet = __TS__New(Set, exceptions)
    return __TS__ArraySome(
        SEED_EFFECTS,
        function(____, seedEffect) return seeds:HasSeedEffect(seedEffect) and not exceptionsSet:has(seedEffect) end
    )
end
--- Alias for the `anySeedEffectEnabled` function.
function ____exports.anyEasterEggEnabled(self, exceptions)
    return ____exports.anySeedEffectEnabled(nil, exceptions)
end
--- Helper function to get the seed effects (i.e. Easter Eggs) that are enabled for the current run.
function ____exports.getSeedEffects(self)
    local seeds = game:GetSeeds()
    return __TS__ArrayFilter(
        SEED_EFFECTS,
        function(____, seedEffect) return seedEffect ~= SeedEffect.NORMAL and seeds:HasSeedEffect(seedEffect) end
    )
end
--- Helper function to check whether the player is playing on a set seed (i.e. that they entered in a
-- specific seed by pressing tab on the character selection screen). When the player resets the game
-- on a set seed, the game will not switch to a different seed.
-- 
-- Under the hood, this checks if the current challenge is `Challenge.NULL` and the
-- `Seeds.IsCustomRun` method.
function ____exports.onSetSeed(self)
    local seeds = game:GetSeeds()
    local customRun = seeds:IsCustomRun()
    local challenge = Isaac.GetChallenge()
    return challenge == Challenge.NULL and customRun
end
--- Helper function to check whether the player is on a Victory Lap (i.e. they answered "yes" to the
-- popup that happens after defeating The Lamb).
function ____exports.onVictoryLap(self)
    local numVictoryLaps = game:GetVictoryLap()
    return numVictoryLaps > 0
end
--- Helper function to restart the run using the console command of "restart". If the player is
-- playing a seeded run, then it will restart the game to the beginning of the seed. Otherwise, it
-- will put the player on a run with an entirely new seed.
-- 
-- You can optionally specify a `PlayerType` to restart the game as that character.
function ____exports.restart(self, character)
    if character == nil then
        local command = "restart"
        log("Restarting the run with a console command of: " .. command)
        Isaac.ExecuteCommand(command)
        return
    end
    if character < PlayerType.ISAAC then
        error(("Restarting as a character of " .. tostring(character)) .. " would crash the game.")
    end
    local command = "restart " .. tostring(character)
    local characterName = getCharacterName(nil, character)
    log((((("Restarting the run as " .. characterName) .. " (") .. tostring(character)) .. ") with a console command of: ") .. command)
    Isaac.ExecuteCommand(command)
end
--- Helper function to restart the run on a particular starting seed.
-- 
-- Under the hood, this function executes the `seed` console command.
-- 
-- @param startSeedOrStartSeedString Either the numerical start seed (e.g. 268365970) or the start
-- seed string (e.g. "AAJ2 8V9C").
function ____exports.setRunSeed(self, startSeedOrStartSeedString)
    local startSeedString = isString(nil, startSeedOrStartSeedString) and startSeedOrStartSeedString or Seeds.Seed2String(startSeedOrStartSeedString)
    local command = "seed " .. startSeedString
    log("Restarting the run to set a seed with a console command of: " .. command)
    Isaac.ExecuteCommand(command)
end
--- Helper function to change the run status to that of an unseeded run with a new random seed.
-- 
-- This is useful to revert the behavior where playing on a set seed and restarting the game will
-- not take you to a new seed.
-- 
-- Under the hood, this function calls the `Seeds.Reset` method and the
-- `Seeds.Restart(Challenge.NULL)` method.
function ____exports.setUnseeded(self)
    local seeds = game:GetSeeds()
    seeds:Reset()
    seeds:Restart(Challenge.NULL)
end
return ____exports
 end,
["interfaces.RoomDescription"] = function(...) 
local ____exports = {}
return ____exports
 end,
["classes.features.other.RoomHistory"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__ArrayAt = ____lualib.__TS__ArrayAt
local ____exports = {}
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____dimensions = require("functions.dimensions")
local getDimension = ____dimensions.getDimension
local ____roomData = require("functions.roomData")
local getRoomGridIndex = ____roomData.getRoomGridIndex
local getRoomListIndex = ____roomData.getRoomListIndex
local getRoomName = ____roomData.getRoomName
local getRoomStageID = ____roomData.getRoomStageID
local getRoomSubType = ____roomData.getRoomSubType
local getRoomVariant = ____roomData.getRoomVariant
local getRoomVisitedCount = ____roomData.getRoomVisitedCount
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {roomHistory = {}}}
____exports.RoomHistory = __TS__Class()
local RoomHistory = ____exports.RoomHistory
RoomHistory.name = "RoomHistory"
__TS__ClassExtends(RoomHistory, Feature)
function RoomHistory.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postNewRoomEarly = function()
        local level = game:GetLevel()
        local stage = level:GetStage()
        local stageType = level:GetStageType()
        local room = game:GetRoom()
        local roomType = room:GetType()
        local seeds = game:GetSeeds()
        local startSeedString = seeds:GetStartSeedString()
        local stageID = getRoomStageID(nil)
        local dimension = getDimension(nil)
        local roomVariant = getRoomVariant(nil)
        local roomSubType = getRoomSubType(nil)
        local roomName = getRoomName(nil)
        local roomGridIndex = getRoomGridIndex(nil)
        local roomListIndex = getRoomListIndex(nil)
        local roomVisitedCount = getRoomVisitedCount(nil)
        local roomDescription = {
            startSeedString = startSeedString,
            stage = stage,
            stageType = stageType,
            stageID = stageID,
            dimension = dimension,
            roomType = roomType,
            roomVariant = roomVariant,
            roomSubType = roomSubType,
            roomName = roomName,
            roomGridIndex = roomGridIndex,
            roomListIndex = roomListIndex,
            roomVisitedCount = roomVisitedCount
        }
        local ____v_run_roomHistory_0 = v.run.roomHistory
        ____v_run_roomHistory_0[#____v_run_roomHistory_0 + 1] = roomDescription
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_EARLY, self.postNewRoomEarly}}
end
function RoomHistory.prototype.deleteLastRoomDescription(self)
    table.remove(v.run.roomHistory)
end
__TS__DecorateLegacy({Exported}, RoomHistory.prototype, "deleteLastRoomDescription", true)
function RoomHistory.prototype.getNumRoomsEntered(self)
    return #v.run.roomHistory
end
__TS__DecorateLegacy({Exported}, RoomHistory.prototype, "getNumRoomsEntered", true)
function RoomHistory.prototype.getRoomHistory(self)
    return v.run.roomHistory
end
__TS__DecorateLegacy({Exported}, RoomHistory.prototype, "getRoomHistory", true)
function RoomHistory.prototype.getPreviousRoomDescription(self)
    local previousRoomDescription = __TS__ArrayAt(v.run.roomHistory, -2)
    if previousRoomDescription ~= nil then
        return previousRoomDescription
    end
    local startingRoomDescription = v.run.roomHistory[1]
    if startingRoomDescription ~= nil then
        return startingRoomDescription
    end
    error("Failed to find a room description for any rooms thus far on this run.")
end
__TS__DecorateLegacy({Exported}, RoomHistory.prototype, "getPreviousRoomDescription", true)
function RoomHistory.prototype.getLatestRoomDescription(self)
    return __TS__ArrayAt(v.run.roomHistory, -1)
end
__TS__DecorateLegacy({Exported}, RoomHistory.prototype, "getLatestRoomDescription", true)
function RoomHistory.prototype.inFirstRoom(self)
    return #v.run.roomHistory == 1
end
__TS__DecorateLegacy({Exported}, RoomHistory.prototype, "inFirstRoom", true)
function RoomHistory.prototype.isLeavingRoom(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    local seeds = game:GetSeeds()
    local startSeedString = seeds:GetStartSeedString()
    local roomListIndex = getRoomListIndex(nil)
    local roomVisitedCount = getRoomVisitedCount(nil)
    local latestRoomDescription = self:getLatestRoomDescription()
    if latestRoomDescription == nil then
        return false
    end
    return startSeedString ~= latestRoomDescription.startSeedString or stage ~= latestRoomDescription.stage or stageType ~= latestRoomDescription.stageType or roomListIndex ~= latestRoomDescription.roomListIndex or roomVisitedCount ~= latestRoomDescription.roomVisitedCount
end
__TS__DecorateLegacy({Exported}, RoomHistory.prototype, "isLeavingRoom", true)
return ____exports
 end,
["classes.features.other.RunInNFrames"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local ____exports = {}
local checkExecuteQueuedFunctions, checkExecuteIntervalFunctions
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____array = require("functions.array")
local arrayRemoveInPlace = ____array.arrayRemoveInPlace
local ____run = require("functions.run")
local restart = ____run.restart
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
function checkExecuteQueuedFunctions(self, queuedFunctions, frameCount, newNumRoomsEntered)
    local firingFunctions = __TS__ArrayFilter(
        queuedFunctions,
        function(____, ____bindingPattern0)
            local frameCountToFire
            frameCountToFire = ____bindingPattern0.frameCountToFire
            return frameCount >= frameCountToFire
        end
    )
    for ____, firingFunction in ipairs(firingFunctions) do
        local func = firingFunction.func
        local cancelIfRoomChanges = firingFunction.cancelIfRoomChanges
        local numRoomsEntered = firingFunction.numRoomsEntered
        if not cancelIfRoomChanges or numRoomsEntered == newNumRoomsEntered then
            func(nil)
        end
        arrayRemoveInPlace(nil, queuedFunctions, firingFunction)
    end
end
function checkExecuteIntervalFunctions(self, intervalFunctions, frameCount, newNumRoomsEntered)
    local firingFunctions = __TS__ArrayFilter(
        intervalFunctions,
        function(____, ____bindingPattern0)
            local frameCountToFire
            frameCountToFire = ____bindingPattern0.frameCountToFire
            return frameCount >= frameCountToFire
        end
    )
    for ____, firingFunction in ipairs(firingFunctions) do
        local func = firingFunction.func
        local cancelIfRoomChanges = firingFunction.cancelIfRoomChanges
        local numRoomsEntered = firingFunction.numRoomsEntered
        local numIntervalFrames = firingFunction.numIntervalFrames
        local returnValue = false
        if not cancelIfRoomChanges or numRoomsEntered == newNumRoomsEntered then
            returnValue = func(nil)
        end
        arrayRemoveInPlace(nil, intervalFunctions, firingFunction)
        if returnValue then
            local newIntervalFunction = {
                func = func,
                frameCountToFire = frameCount + numIntervalFrames,
                numRoomsEntered = numRoomsEntered,
                cancelIfRoomChanges = cancelIfRoomChanges,
                numIntervalFrames = numIntervalFrames
            }
            intervalFunctions[#intervalFunctions + 1] = newIntervalFunction
        end
    end
end
local v = {run = {queuedGameFunctions = {}, queuedRenderFunctions = {}, intervalGameFunctions = {}, intervalRenderFunctions = {}}}
____exports.RunInNFrames = __TS__Class()
local RunInNFrames = ____exports.RunInNFrames
RunInNFrames.name = "RunInNFrames"
__TS__ClassExtends(RunInNFrames, Feature)
function RunInNFrames.prototype.____constructor(self, roomHistory)
    Feature.prototype.____constructor(self)
    self.v = v
    self.vConditionalFunc = function() return false end
    self.postUpdate = function()
        local gameFrameCount = game:GetFrameCount()
        local numRoomsEntered = self.roomHistory:getNumRoomsEntered()
        checkExecuteQueuedFunctions(nil, v.run.queuedGameFunctions, gameFrameCount, numRoomsEntered)
        checkExecuteIntervalFunctions(nil, v.run.intervalGameFunctions, gameFrameCount, numRoomsEntered)
    end
    self.postRender = function()
        local renderFrameCount = Isaac.GetFrameCount()
        local numRoomsEntered = self.roomHistory:getNumRoomsEntered()
        checkExecuteQueuedFunctions(nil, v.run.queuedRenderFunctions, renderFrameCount, numRoomsEntered)
        checkExecuteIntervalFunctions(nil, v.run.intervalRenderFunctions, renderFrameCount, numRoomsEntered)
    end
    self.featuresUsed = {ISCFeature.ROOM_HISTORY}
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}, {ModCallback.POST_RENDER, self.postRender}}
    self.roomHistory = roomHistory
end
function RunInNFrames.prototype.restartNextRenderFrame(self, character)
    self:runNextRenderFrame(function()
        restart(nil, character)
    end)
end
__TS__DecorateLegacy({Exported}, RunInNFrames.prototype, "restartNextRenderFrame", true)
function RunInNFrames.prototype.runInNGameFrames(self, func, numGameFrames, cancelIfRoomChanges)
    if cancelIfRoomChanges == nil then
        cancelIfRoomChanges = false
    end
    local gameFrameCount = game:GetFrameCount()
    local numRoomsEntered = self.roomHistory:getNumRoomsEntered()
    local frameCountToFire = gameFrameCount + numGameFrames
    local queuedFunction = {func = func, frameCountToFire = frameCountToFire, numRoomsEntered = numRoomsEntered, cancelIfRoomChanges = cancelIfRoomChanges}
    local ____v_run_queuedGameFunctions_0 = v.run.queuedGameFunctions
    ____v_run_queuedGameFunctions_0[#____v_run_queuedGameFunctions_0 + 1] = queuedFunction
end
__TS__DecorateLegacy({Exported}, RunInNFrames.prototype, "runInNGameFrames", true)
function RunInNFrames.prototype.runInNRenderFrames(self, func, numRenderFrames, cancelIfRoomChanges)
    if cancelIfRoomChanges == nil then
        cancelIfRoomChanges = false
    end
    local renderFrameCount = Isaac.GetFrameCount()
    local numRoomsEntered = self.roomHistory:getNumRoomsEntered()
    local frameCountToFire = renderFrameCount + numRenderFrames
    local queuedFunction = {func = func, frameCountToFire = frameCountToFire, numRoomsEntered = numRoomsEntered, cancelIfRoomChanges = cancelIfRoomChanges}
    local ____v_run_queuedRenderFunctions_1 = v.run.queuedRenderFunctions
    ____v_run_queuedRenderFunctions_1[#____v_run_queuedRenderFunctions_1 + 1] = queuedFunction
end
__TS__DecorateLegacy({Exported}, RunInNFrames.prototype, "runInNRenderFrames", true)
function RunInNFrames.prototype.runNextGameFrame(self, func, cancelIfRoomChanges)
    if cancelIfRoomChanges == nil then
        cancelIfRoomChanges = false
    end
    self:runInNGameFrames(func, 1, cancelIfRoomChanges)
end
__TS__DecorateLegacy({Exported}, RunInNFrames.prototype, "runNextGameFrame", true)
function RunInNFrames.prototype.runNextRenderFrame(self, func, cancelIfRoomChanges)
    if cancelIfRoomChanges == nil then
        cancelIfRoomChanges = false
    end
    self:runInNRenderFrames(func, 1, cancelIfRoomChanges)
end
__TS__DecorateLegacy({Exported}, RunInNFrames.prototype, "runNextRenderFrame", true)
function RunInNFrames.prototype.setIntervalGameFrames(self, func, numGameFrames, runImmediately, cancelIfRoomChanges)
    if cancelIfRoomChanges == nil then
        cancelIfRoomChanges = false
    end
    if runImmediately then
        local returnValue = func(nil)
        if not returnValue then
            return
        end
    end
    local gameFrameCount = game:GetFrameCount()
    local numRoomsEntered = self.roomHistory:getNumRoomsEntered()
    local intervalFunction = {
        func = func,
        frameCountToFire = gameFrameCount + numGameFrames,
        numRoomsEntered = numRoomsEntered,
        cancelIfRoomChanges = cancelIfRoomChanges,
        numIntervalFrames = numGameFrames
    }
    local ____v_run_intervalGameFunctions_2 = v.run.intervalGameFunctions
    ____v_run_intervalGameFunctions_2[#____v_run_intervalGameFunctions_2 + 1] = intervalFunction
end
__TS__DecorateLegacy({Exported}, RunInNFrames.prototype, "setIntervalGameFrames", true)
function RunInNFrames.prototype.setIntervalRenderFrames(self, func, numRenderFrames, runImmediately, cancelIfRoomChanges)
    if cancelIfRoomChanges == nil then
        cancelIfRoomChanges = false
    end
    if runImmediately then
        local returnValue = func(nil)
        if not returnValue then
            return
        end
    end
    local renderFrameCount = Isaac.GetFrameCount()
    local numRoomsEntered = self.roomHistory:getNumRoomsEntered()
    local intervalFunction = {
        func = func,
        frameCountToFire = renderFrameCount + numRenderFrames,
        numRoomsEntered = numRoomsEntered,
        cancelIfRoomChanges = cancelIfRoomChanges,
        numIntervalFrames = numRenderFrames
    }
    local ____v_run_intervalRenderFunctions_3 = v.run.intervalRenderFunctions
    ____v_run_intervalRenderFunctions_3[#____v_run_intervalRenderFunctions_3 + 1] = intervalFunction
end
__TS__DecorateLegacy({Exported}, RunInNFrames.prototype, "setIntervalRenderFrames", true)
return ____exports
 end,
["classes.features.callbackLogic.CustomGridEntities"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local Set = ____lualib.Set
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local GridCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.GridCollisionClass
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____gridEntities = require("functions.gridEntities")
local removeGridEntity = ____gridEntities.removeGridEntity
local spawnGridEntityWithVariant = ____gridEntities.spawnGridEntityWithVariant
local ____players = require("functions.players")
local getPlayerFromPtr = ____players.getPlayerFromPtr
local ____roomData = require("functions.roomData")
local getRoomListIndex = ____roomData.getRoomListIndex
local ____types = require("functions.types")
local isInteger = ____types.isInteger
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____vector = require("functions.vector")
local isVector = ____vector.isVector
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {
    level = {customGridEntities = __TS__New(
        DefaultMap,
        function() return __TS__New(Map) end
    )},
    room = {
        genericPropPtrHashes = __TS__New(Set),
        manuallyUsingShovel = false
    }
}
____exports.CustomGridEntities = __TS__Class()
local CustomGridEntities = ____exports.CustomGridEntities
CustomGridEntities.name = "CustomGridEntities"
__TS__ClassExtends(CustomGridEntities, Feature)
function CustomGridEntities.prototype.____constructor(self, runInNFrames)
    Feature.prototype.____constructor(self)
    self.v = v
    self.preUseItemWeNeedToGoDeeper = function(____, _collectibleType, _rng, player, _useFlags, _activeSlot, _customVarData)
        local room = game:GetRoom()
        local roomListIndex = getRoomListIndex(nil)
        local roomCustomGridEntities = v.level.customGridEntities:get(roomListIndex)
        if roomCustomGridEntities == nil then
            return nil
        end
        local gridIndex = room:GetGridIndex(player.Position)
        local customGridEntity = roomCustomGridEntities:get(gridIndex)
        if customGridEntity == nil then
            return nil
        end
        if customGridEntity.gridCollisionClass ~= GridCollisionClass.NONE then
            return nil
        end
        removeGridEntity(nil, customGridEntity.gridIndex, false)
        local entityPtr = EntityPtr(player)
        self.runInNFrames:runNextGameFrame(function()
            local futurePlayer = getPlayerFromPtr(nil, entityPtr)
            if futurePlayer == nil then
                return
            end
            v.room.manuallyUsingShovel = true
            futurePlayer:UseActiveItem(CollectibleType.WE_NEED_TO_GO_DEEPER)
            v.room.manuallyUsingShovel = false
        end)
        return true
    end
    self.postNewRoomReordered = function()
        local roomListIndex = getRoomListIndex(nil)
        local roomCustomGridEntities = v.level.customGridEntities:get(roomListIndex)
        if roomCustomGridEntities == nil then
            return
        end
        local room = game:GetRoom()
        for ____, ____value in __TS__Iterator(roomCustomGridEntities) do
            local gridIndex = ____value[1]
            local data = ____value[2]
            do
                local decoration = room:GetGridEntity(gridIndex)
                if decoration == nil then
                    roomCustomGridEntities:delete(gridIndex)
                    goto __continue12
                end
                if data.anm2Path ~= nil then
                    local sprite = decoration:GetSprite()
                    sprite:Load(data.anm2Path, true)
                    local animationToPlay = data.defaultAnimation or sprite:GetDefaultAnimation()
                    sprite:Play(animationToPlay, true)
                end
            end
            ::__continue12::
        end
    end
    self.featuresUsed = {ISCFeature.RUN_IN_N_FRAMES}
    self.callbacksUsed = {{ModCallback.PRE_USE_ITEM, self.preUseItemWeNeedToGoDeeper, {CollectibleType.WE_NEED_TO_GO_DEEPER}}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}}
    self.runInNFrames = runInNFrames
end
function CustomGridEntities.prototype.spawnCustomGridEntity(self, gridEntityTypeCustom, gridIndexOrPosition, gridCollisionClass, anm2Path, defaultAnimation, baseGridEntityType, baseGridEntityVariant)
    if baseGridEntityType == nil then
        baseGridEntityType = GridEntityType.DECORATION
    end
    if baseGridEntityVariant == nil then
        baseGridEntityVariant = 0
    end
    local room = game:GetRoom()
    local roomListIndex = getRoomListIndex(nil)
    local gridIndex = isVector(nil, gridIndexOrPosition) and room:GetGridIndex(gridIndexOrPosition) or gridIndexOrPosition
    local customGridEntity = spawnGridEntityWithVariant(nil, baseGridEntityType, baseGridEntityVariant, gridIndexOrPosition)
    assertDefined(nil, customGridEntity, "Failed to spawn a custom grid entity.")
    if gridCollisionClass ~= nil then
        customGridEntity.CollisionClass = gridCollisionClass
    end
    if anm2Path ~= nil then
        local sprite = customGridEntity:GetSprite()
        sprite:Load(anm2Path, true)
        local animationToPlay = defaultAnimation or sprite:GetDefaultAnimation()
        sprite:Play(animationToPlay, true)
    end
    local customGridEntityData = {
        gridEntityTypeCustom = gridEntityTypeCustom,
        roomListIndex = roomListIndex,
        gridIndex = gridIndex,
        anm2Path = anm2Path,
        defaultAnimation = defaultAnimation,
        gridCollisionClass = gridCollisionClass
    }
    local roomCustomGridEntities = v.level.customGridEntities:getAndSetDefault(roomListIndex)
    roomCustomGridEntities:set(gridIndex, customGridEntityData)
    return customGridEntity
end
__TS__DecorateLegacy({Exported}, CustomGridEntities.prototype, "spawnCustomGridEntity", true)
function CustomGridEntities.prototype.removeCustomGridEntity(self, gridIndexOrPositionOrGridEntity, updateRoom)
    if updateRoom == nil then
        updateRoom = true
    end
    local room = game:GetRoom()
    local roomListIndex = getRoomListIndex(nil)
    local decoration
    if type(gridIndexOrPositionOrGridEntity) == "number" then
        local gridIndex = gridIndexOrPositionOrGridEntity
        local gridEntity = room:GetGridEntity(gridIndex)
        if gridEntity == nil then
            return nil
        end
        decoration = gridEntity
    elseif isVector(nil, gridIndexOrPositionOrGridEntity) then
        local position = gridIndexOrPositionOrGridEntity
        local gridEntity = room:GetGridEntityFromPos(position)
        if gridEntity == nil then
            return nil
        end
        decoration = gridEntity
    else
        decoration = gridIndexOrPositionOrGridEntity
    end
    local gridIndex = decoration:GetGridIndex()
    local roomCustomGridEntities = v.level.customGridEntities:getAndSetDefault(roomListIndex)
    local exists = roomCustomGridEntities:has(gridIndex)
    if not exists then
        return nil
    end
    roomCustomGridEntities:delete(gridIndex)
    removeGridEntity(nil, decoration, updateRoom)
    return decoration
end
__TS__DecorateLegacy({Exported}, CustomGridEntities.prototype, "removeCustomGridEntity", true)
function CustomGridEntities.prototype.getCustomGridEntities(self)
    local roomListIndex = getRoomListIndex(nil)
    local roomCustomGridEntities = v.level.customGridEntities:get(roomListIndex)
    if roomCustomGridEntities == nil then
        return {}
    end
    local room = game:GetRoom()
    local customGridEntities = {}
    for ____, ____value in __TS__Iterator(roomCustomGridEntities) do
        local gridIndex = ____value[1]
        local data = ____value[2]
        local gridEntity = room:GetGridEntity(gridIndex)
        if gridEntity ~= nil then
            customGridEntities[#customGridEntities + 1] = {gridEntity = gridEntity, data = data}
        end
    end
    return customGridEntities
end
__TS__DecorateLegacy({Exported}, CustomGridEntities.prototype, "getCustomGridEntities", true)
function CustomGridEntities.prototype.getCustomGridEntityType(self, gridEntityOrGridIndex)
    if not self.initialized then
        return nil
    end
    local gridIndex = isInteger(nil, gridEntityOrGridIndex) and gridEntityOrGridIndex or gridEntityOrGridIndex:GetGridIndex()
    local roomListIndex = getRoomListIndex(nil)
    local roomCustomGridEntities = v.level.customGridEntities:get(roomListIndex)
    if roomCustomGridEntities == nil then
        return nil
    end
    for ____, ____value in __TS__Iterator(roomCustomGridEntities) do
        local _gridIndex = ____value[1]
        local data = ____value[2]
        if data.gridIndex == gridIndex then
            return data.gridEntityTypeCustom
        end
    end
    return nil
end
__TS__DecorateLegacy({Exported}, CustomGridEntities.prototype, "getCustomGridEntityType", true)
function CustomGridEntities.prototype.isCustomGridEntity(self, gridEntityOrGridIndex)
    local gridEntityTypeCustom = self:getCustomGridEntityType(gridEntityOrGridIndex)
    return gridEntityTypeCustom ~= nil
end
__TS__DecorateLegacy({Exported}, CustomGridEntities.prototype, "isCustomGridEntity", true)
return ____exports
 end,
["functions.external"] = function(...) 
local ____exports = {}
local ____collectibles = require("functions.collectibles")
local getCollectibleName = ____collectibles.getCollectibleName
local REBIRTH_ITEM_TRACKER_REMOVE_COLLECTIBLE_COMMAND = "REBIRTH_ITEM_TRACKER_REMOVE_COLLECTIBLE"
local REBIRTH_ITEM_TRACKER_WRITE_TO_FILE_COMMAND = "REBIRTH_ITEM_TRACKER_WRITE_TO_FILE"
--- Helper function to let the Rebirth Item Tracker know that it should remove a collectible from its
-- list.
-- 
-- The "item tracker" in this function does not refer to the in-game item tracker, but rather to the
-- external Python program.
-- 
-- This function is variadic, meaning that you can pass as many collectible types as you want to
-- remove.
-- 
-- Note that calling this function is not normally necessary when removing collectibles from
-- players. For example, when you remove a collectible with the `EntityPlayer.RemoveCollectible`
-- method, a message is sent to the log file by the game and the item tracker will automatically
-- remove it. However, in some cases, manually removing collectibles can be useful:
-- 
-- - We may be giving the player a "fake" collectible (e.g. 1-Up for the purposes of an extra life)
--   and do not want the fake collectible to show up on the tracker.
-- - We may be removing a starting active item. Since active items are never removed from the
--   tracker, we want to tell the item tracker that the player never had a particular active item to
--   begin with.
-- 
-- @see https ://github.com/Rchardon/RebirthItemTracker
function ____exports.rebirthItemTrackerRemoveCollectible(self, ...)
    local collectibleTypes = {...}
    for ____, collectibleType in ipairs(collectibleTypes) do
        local collectibleName = getCollectibleName(nil, collectibleType)
        Isaac.DebugString(((((REBIRTH_ITEM_TRACKER_REMOVE_COLLECTIBLE_COMMAND .. " Removing collectible ") .. tostring(collectibleType)) .. " (") .. collectibleName) .. ") on player 0 (Player)")
    end
end
--- Helper function to let the Rebirth Item Tracker know that it should write the submitted text
-- string to a file. This is useful for capturing text in programs like Open Broadcaster Software
-- (OBS).
-- 
-- The "item tracker" in this function does not refer to the in-game item tracker, but rather to the
-- external Python program.
-- 
-- @see https ://github.com/Rchardon/RebirthItemTracker
function ____exports.rebirthItemTrackerWriteToFile(self, msg)
    Isaac.DebugString((REBIRTH_ITEM_TRACKER_WRITE_TO_FILE_COMMAND .. " ") .. msg)
end
return ____exports
 end,
["classes.features.callbackLogic.CustomRevive"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local FamiliarVariant = ____isaac_2Dtypescript_2Ddefinitions.FamiliarVariant
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local SoundEffect = ____isaac_2Dtypescript_2Ddefinitions.SoundEffect
local ____cachedClasses = require("core.cachedClasses")
local sfxManager = ____cachedClasses.sfxManager
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____external = require("functions.external")
local rebirthItemTrackerRemoveCollectible = ____external.rebirthItemTrackerRemoveCollectible
local ____log = require("functions.log")
local log = ____log.log
local logError = ____log.logError
local ____playerIndex = require("functions.playerIndex")
local getPlayerFromIndex = ____playerIndex.getPlayerFromIndex
local getPlayerIndex = ____playerIndex.getPlayerIndex
local ____players = require("functions.players")
local isCharacter = ____players.isCharacter
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local DEBUG = false
local CustomReviveState = {}
CustomReviveState.DISABLED = 0
CustomReviveState[CustomReviveState.DISABLED] = "DISABLED"
CustomReviveState.WAITING_FOR_ROOM_TRANSITION = 1
CustomReviveState[CustomReviveState.WAITING_FOR_ROOM_TRANSITION] = "WAITING_FOR_ROOM_TRANSITION"
CustomReviveState.WAITING_FOR_ITEM_ANIMATION = 2
CustomReviveState[CustomReviveState.WAITING_FOR_ITEM_ANIMATION] = "WAITING_FOR_ITEM_ANIMATION"
local v = {run = {state = CustomReviveState.DISABLED, revivalType = nil, dyingPlayerIndex = nil}}
____exports.CustomRevive = __TS__Class()
local CustomRevive = ____exports.CustomRevive
CustomRevive.name = "CustomRevive"
__TS__ClassExtends(CustomRevive, Feature)
function CustomRevive.prototype.____constructor(self, preCustomRevive, postCustomRevive, runInNFrames)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postRender = function()
        if v.run.state ~= CustomReviveState.WAITING_FOR_ITEM_ANIMATION then
            return
        end
        sfxManager:Stop(SoundEffect.ONE_UP)
    end
    self.postFamiliarInitOneUp = function(____, familiar)
        if v.run.state ~= CustomReviveState.WAITING_FOR_ROOM_TRANSITION then
            return
        end
        familiar:Remove()
    end
    self.postNewRoomReordered = function()
        if v.run.state ~= CustomReviveState.WAITING_FOR_ROOM_TRANSITION then
            return
        end
        v.run.state = CustomReviveState.WAITING_FOR_ITEM_ANIMATION
        self:logStateChanged()
    end
    self.postPEffectUpdateReordered = function(____, player)
        self:checkWaitingForItemAnimation(player)
    end
    self.postPlayerFatalDamage = function(____, player)
        self:playerIsAboutToDie(player)
        return nil
    end
    self.preBerserkDeath = function(____, player)
        self:playerIsAboutToDie(player)
    end
    self.featuresUsed = {ISCFeature.RUN_IN_N_FRAMES}
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}, {ModCallback.POST_FAMILIAR_INIT, self.postFamiliarInitOneUp, {FamiliarVariant.ONE_UP}}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}, {ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}, {ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE, self.postPlayerFatalDamage}, {ModCallbackCustom.PRE_BERSERK_DEATH, self.preBerserkDeath}}
    self.preCustomRevive = preCustomRevive
    self.postCustomRevive = postCustomRevive
    self.runInNFrames = runInNFrames
end
function CustomRevive.prototype.checkWaitingForItemAnimation(self, player)
    if v.run.state ~= CustomReviveState.WAITING_FOR_ITEM_ANIMATION then
        return
    end
    if v.run.dyingPlayerIndex == nil then
        return
    end
    local playerIndex = getPlayerIndex(nil, player)
    if playerIndex ~= v.run.dyingPlayerIndex then
        return
    end
    local playerToCheckHoldingItem = player
    if isCharacter(nil, player, PlayerType.SOUL_B) then
        local forgottenBody = player:GetOtherTwin()
        if forgottenBody ~= nil then
            playerToCheckHoldingItem = forgottenBody
        end
    end
    if not playerToCheckHoldingItem:IsHoldingItem() then
        return
    end
    if v.run.revivalType ~= nil then
        self.postCustomRevive:fire(playerToCheckHoldingItem, v.run.revivalType)
    end
    v.run.state = CustomReviveState.DISABLED
    v.run.revivalType = nil
    v.run.dyingPlayerIndex = nil
    self:logStateChanged()
end
function CustomRevive.prototype.playerIsAboutToDie(self, player)
    local revivalType = self.preCustomRevive:fire(player)
    if revivalType == nil then
        return
    end
    v.run.state = CustomReviveState.WAITING_FOR_ROOM_TRANSITION
    v.run.revivalType = revivalType
    v.run.dyingPlayerIndex = getPlayerIndex(nil, player)
    self:logStateChanged()
    player:AddCollectible(CollectibleType.ONE_UP, 0, false)
    rebirthItemTrackerRemoveCollectible(nil, CollectibleType.ONE_UP)
    local playerIndex = getPlayerIndex(nil, player)
    self.runInNFrames:runNextGameFrame(function()
        local futurePlayer = getPlayerFromIndex(nil, playerIndex)
        if futurePlayer == nil then
            return
        end
        if futurePlayer:IsDead() then
            return
        end
        logError("The player is still alive after initializing a custom revive. Explicitly killing the player.")
        futurePlayer:Kill()
    end)
end
function CustomRevive.prototype.logStateChanged(self)
    if DEBUG then
        log(((("Custom revive state changed: " .. CustomReviveState[v.run.state]) .. " (") .. tostring(v.run.state)) .. ")")
    end
end
return ____exports
 end,
["classes.features.callbackLogic.EsauJrDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____players = require("functions.players")
local getPlayersWithControllerIndex = ____players.getPlayersWithControllerIndex
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {usedEsauJrFrame = nil, usedEsauJrControllerIndex = nil, usedEsauJrAtLeastOnce = false}}
____exports.EsauJrDetection = __TS__Class()
local EsauJrDetection = ____exports.EsauJrDetection
EsauJrDetection.name = "EsauJrDetection"
__TS__ClassExtends(EsauJrDetection, Feature)
function EsauJrDetection.prototype.____constructor(self, postEsauJr, postFirstEsauJr)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postUpdate = function()
        local gameFrameCount = game:GetFrameCount()
        if v.run.usedEsauJrFrame == nil or gameFrameCount < v.run.usedEsauJrFrame + 1 then
            return
        end
        v.run.usedEsauJrFrame = nil
        if v.run.usedEsauJrControllerIndex == nil then
            return
        end
        local players = getPlayersWithControllerIndex(nil, v.run.usedEsauJrControllerIndex)
        v.run.usedEsauJrControllerIndex = nil
        local player = players[1]
        if player == nil then
            return
        end
        if not v.run.usedEsauJrAtLeastOnce then
            v.run.usedEsauJrAtLeastOnce = true
            self.postFirstEsauJr:fire(player)
        end
        self.postEsauJr:fire(player)
    end
    self.postUseItemEsauJr = function(____, _collectibleType, _rng, player, _useFlags, _activeSlot, _customVarData)
        local gameFrameCount = game:GetFrameCount()
        v.run.usedEsauJrFrame = gameFrameCount + 1
        v.run.usedEsauJrControllerIndex = player.ControllerIndex
        return nil
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}, {ModCallback.POST_USE_ITEM, self.postUseItemEsauJr, {CollectibleType.ESAU_JR}}}
    self.postEsauJr = postEsauJr
    self.postFirstEsauJr = postFirstEsauJr
end
return ____exports
 end,
["classes.features.callbackLogic.FlipDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local ____exports = {}
local getNewLazarus
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____players = require("functions.players")
local getPlayersOfType = ____players.getPlayersOfType
local isTaintedLazarus = ____players.isTaintedLazarus
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
function getNewLazarus(self, oldLazarus)
    local oldCharacter = oldLazarus:GetPlayerType()
    local newCharacter
    if oldCharacter == PlayerType.LAZARUS_B then
        newCharacter = PlayerType.LAZARUS_2_B
    elseif oldCharacter == PlayerType.LAZARUS_2_B then
        newCharacter = PlayerType.LAZARUS_B
    else
        return nil
    end
    local playersOfType = getPlayersOfType(nil, newCharacter)
    return __TS__ArrayFind(
        playersOfType,
        function(____, player) return player.FrameCount == oldLazarus.FrameCount end
    )
end
local v = {run = {usedFlipAtLeastOnce = false}}
____exports.FlipDetection = __TS__Class()
local FlipDetection = ____exports.FlipDetection
FlipDetection.name = "FlipDetection"
__TS__ClassExtends(FlipDetection, Feature)
function FlipDetection.prototype.____constructor(self, postFlip, postFirstFlip)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postUseItemFlip = function(____, _collectibleType, _rng, player, _useFlags, _activeSlot, _customVarData)
        if not isTaintedLazarus(nil, player) then
            return nil
        end
        local newLazarus = getNewLazarus(nil, player)
        if newLazarus == nil then
            return nil
        end
        if not v.run.usedFlipAtLeastOnce then
            v.run.usedFlipAtLeastOnce = true
            self.postFirstFlip:fire(newLazarus, player)
        end
        self.postFlip:fire(newLazarus, player)
        return nil
    end
    self.callbacksUsed = {{ModCallback.POST_USE_ITEM, self.postUseItemFlip, {CollectibleType.FLIP}}}
    self.postFlip = postFlip
    self.postFirstFlip = postFirstFlip
end
return ____exports
 end,
["classes.features.callbackLogic.GameReorderedCallbacks"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____frames = require("functions.frames")
local onGameFrame = ____frames.onGameFrame
local onRenderFrame = ____frames.onRenderFrame
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
--- By default, callbacks fire in the following order:
-- - `POST_NEW_ROOM` --> `POST_NEW_LEVEL` --> `POST_GAME_STARTED`
-- 
-- It is easier to write mod code if the callbacks run in a more logical order:
-- - `POST_GAME_STARTED` --> `POST_NEW_LEVEL` --> `POST_NEW_ROOM`
-- 
-- `isaacscript-common` provides three new callbacks that change the order to this:
-- - `POST_GAME_STARTED_REORDERED`
-- - `POST_NEW_LEVEL_REORDERED`
-- - `POST_NEW_ROOM_REORDERED`
-- 
-- Additionally, there are some helper functions listed below that can deal with some edge cases
-- that you may run into with these callbacks.
____exports.GameReorderedCallbacks = __TS__Class()
local GameReorderedCallbacks = ____exports.GameReorderedCallbacks
GameReorderedCallbacks.name = "GameReorderedCallbacks"
__TS__ClassExtends(GameReorderedCallbacks, Feature)
function GameReorderedCallbacks.prototype.____constructor(self, postGameStartedReordered, postNewLevelReordered, postNewRoomReordered, postGameStartedReorderedLast)
    Feature.prototype.____constructor(self)
    self.renderFrameRunStarted = nil
    self.currentStage = nil
    self.currentStageType = nil
    self.usedGlowingHourGlass = false
    self.forceNewLevel = false
    self.forceNewRoom = false
    self.postUseItemGlowingHourGlass = function()
        self.usedGlowingHourGlass = true
        return nil
    end
    self.postPlayerInit = function(____, _player)
        if self.renderFrameRunStarted == nil then
            self.renderFrameRunStarted = Isaac.GetFrameCount()
        end
    end
    self.postGameStarted = function(____, isContinued)
        local level = game:GetLevel()
        local stage = level:GetStage()
        local stageType = level:GetStageType()
        local room = game:GetRoom()
        local roomType = room:GetType()
        self:recordCurrentStage()
        self.postGameStartedReordered:fire(isContinued)
        self.postGameStartedReorderedLast:fire(isContinued)
        if not isContinued then
            self.postNewLevelReordered:fire(stage, stageType)
        end
        self.postNewRoomReordered:fire(roomType)
    end
    self.preGameExit = function()
        self.renderFrameRunStarted = nil
    end
    self.postNewLevel = function()
        local level = game:GetLevel()
        local stage = level:GetStage()
        local stageType = level:GetStageType()
        local room = game:GetRoom()
        local roomType = room:GetType()
        if onGameFrame(nil, 0) and not self.forceNewLevel then
            return
        end
        self.forceNewLevel = false
        self:recordCurrentStage()
        self.postNewLevelReordered:fire(stage, stageType)
        self.postNewRoomReordered:fire(roomType)
    end
    self.postNewRoom = function()
        local level = game:GetLevel()
        local stage = level:GetStage()
        local stageType = level:GetStageType()
        local room = game:GetRoom()
        local roomType = room:GetType()
        if self.usedGlowingHourGlass then
            self.usedGlowingHourGlass = false
            if self.currentStage ~= stage or self.currentStageType ~= stageType then
                self:recordCurrentStage()
                self.postNewLevelReordered:fire(stage, stageType)
                self.postNewRoomReordered:fire(roomType)
                return
            end
        end
        if (onGameFrame(nil, 0) or onRenderFrame(nil, self.renderFrameRunStarted) or self.currentStage ~= stage or self.currentStageType ~= stageType) and not self.forceNewRoom then
            return
        end
        self.forceNewRoom = false
        self.postNewRoomReordered:fire(roomType)
    end
    self.callbacksUsed = {
        {ModCallback.POST_USE_ITEM, self.postUseItemGlowingHourGlass, {CollectibleType.GLOWING_HOUR_GLASS}},
        {ModCallback.POST_PLAYER_INIT, self.postPlayerInit},
        {ModCallback.POST_GAME_STARTED, self.postGameStarted},
        {ModCallback.PRE_GAME_EXIT, self.preGameExit},
        {ModCallback.POST_NEW_LEVEL, self.postNewLevel},
        {ModCallback.POST_NEW_ROOM, self.postNewRoom}
    }
    self.postGameStartedReordered = postGameStartedReordered
    self.postNewLevelReordered = postNewLevelReordered
    self.postNewRoomReordered = postNewRoomReordered
    self.postGameStartedReorderedLast = postGameStartedReorderedLast
end
function GameReorderedCallbacks.prototype.recordCurrentStage(self)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    self.currentStage = stage
    self.currentStageType = stageType
end
function GameReorderedCallbacks.prototype.forceNewLevelCallback(self)
    self.forceNewLevel = true
end
__TS__DecorateLegacy({Exported}, GameReorderedCallbacks.prototype, "forceNewLevelCallback", true)
function GameReorderedCallbacks.prototype.forceNewRoomCallback(self)
    self.forceNewRoom = true
end
__TS__DecorateLegacy({Exported}, GameReorderedCallbacks.prototype, "forceNewRoomCallback", true)
function GameReorderedCallbacks.prototype.reorderedCallbacksSetStage(self, stage, stageType)
    self.currentStage = stage
    self.currentStageType = stageType
end
__TS__DecorateLegacy({Exported}, GameReorderedCallbacks.prototype, "reorderedCallbacksSetStage", true)
return ____exports
 end,
["classes.features.callbackLogic.GridEntityCollisionDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GridCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.GridCollisionClass
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntities = require("functions.gridEntities")
local getCollidingEntitiesWithGridEntity = ____gridEntities.getCollidingEntitiesWithGridEntity
local getGridEntities = ____gridEntities.getGridEntities
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {room = {collidingEntitiesMap = __TS__New(
    DefaultMap,
    function() return __TS__New(Set) end
)}}
____exports.GridEntityCollisionDetection = __TS__Class()
local GridEntityCollisionDetection = ____exports.GridEntityCollisionDetection
GridEntityCollisionDetection.name = "GridEntityCollisionDetection"
__TS__ClassExtends(GridEntityCollisionDetection, Feature)
function GridEntityCollisionDetection.prototype.____constructor(self, postGridEntityCollision, postGridEntityCustomCollision, customGridEntities)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postUpdate = function()
        local gridEntities = getGridEntities(nil)
        local gridEntitiesWithCollision = __TS__ArrayFilter(
            gridEntities,
            function(____, gridEntity) return gridEntity.CollisionClass ~= GridCollisionClass.NONE end
        )
        for ____, gridEntity in ipairs(gridEntitiesWithCollision) do
            local gridEntityPtrHash = GetPtrHash(gridEntity)
            local oldCollidingEntities = v.room.collidingEntitiesMap:getAndSetDefault(gridEntityPtrHash)
            local collidingEntities = getCollidingEntitiesWithGridEntity(nil, gridEntity)
            for ____, entity in ipairs(collidingEntities) do
                local entityPtrHash = GetPtrHash(entity)
                if not oldCollidingEntities:has(entityPtrHash) then
                    oldCollidingEntities:add(entityPtrHash)
                    local gridEntityTypeCustom = self.customGridEntities:getCustomGridEntityType(gridEntity)
                    if gridEntityTypeCustom == nil then
                        self.postGridEntityCollision:fire(gridEntity, entity)
                    else
                        self.postGridEntityCustomCollision:fire(gridEntity, gridEntityTypeCustom, entity)
                    end
                end
            end
            local collidingEntitiesPtrHashes = __TS__ArrayMap(
                collidingEntities,
                function(____, entity) return GetPtrHash(entity) end
            )
            local collidingEntitiesPtrHashSet = __TS__New(Set, collidingEntitiesPtrHashes)
            for ____, oldCollidingEntityPtrHash in __TS__Iterator(oldCollidingEntities) do
                if not collidingEntitiesPtrHashSet:has(oldCollidingEntityPtrHash) then
                    oldCollidingEntities:delete(oldCollidingEntityPtrHash)
                end
            end
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
    self.postGridEntityCollision = postGridEntityCollision
    self.postGridEntityCustomCollision = postGridEntityCustomCollision
    self.customGridEntities = customGridEntities
end
return ____exports
 end,
["classes.features.callbackLogic.GridEntityRenderDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____gridEntities = require("functions.gridEntities")
local getGridEntities = ____gridEntities.getGridEntities
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
____exports.GridEntityRenderDetection = __TS__Class()
local GridEntityRenderDetection = ____exports.GridEntityRenderDetection
GridEntityRenderDetection.name = "GridEntityRenderDetection"
__TS__ClassExtends(GridEntityRenderDetection, Feature)
function GridEntityRenderDetection.prototype.____constructor(self, postGridEntityRender, postGridEntityCustomRender, customGridEntities)
    Feature.prototype.____constructor(self)
    self.postRender = function()
        for ____, gridEntity in ipairs(getGridEntities(nil)) do
            local gridIndex = gridEntity:GetGridIndex()
            local gridEntityTypeCustom = self.customGridEntities:getCustomGridEntityType(gridIndex)
            if gridEntityTypeCustom == nil then
                self.postGridEntityRender:fire(gridEntity)
            else
                self.postGridEntityCustomRender:fire(gridEntity, gridEntityTypeCustom)
            end
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
    self.postGridEntityRender = postGridEntityRender
    self.postGridEntityCustomRender = postGridEntityCustomRender
    self.customGridEntities = customGridEntities
end
return ____exports
 end,
["classes.features.callbackLogic.GridEntityUpdateDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____gridEntities = require("functions.gridEntities")
local getGridEntitiesMap = ____gridEntities.getGridEntitiesMap
local isGridEntityBroken = ____gridEntities.isGridEntityBroken
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {room = {initializedGridEntities = __TS__New(Map)}}
____exports.GridEntityUpdateDetection = __TS__Class()
local GridEntityUpdateDetection = ____exports.GridEntityUpdateDetection
GridEntityUpdateDetection.name = "GridEntityUpdateDetection"
__TS__ClassExtends(GridEntityUpdateDetection, Feature)
function GridEntityUpdateDetection.prototype.____constructor(self, postGridEntityInit, postGridEntityCustomInit, postGridEntityUpdate, postGridEntityCustomUpdate, postGridEntityRemove, postGridEntityCustomRemove, postGridEntityStateChanged, postGridEntityCustomStateChanged, postGridEntityBroken, postGridEntityCustomBroken, customGridEntities)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postUpdate = function()
        local gridEntitiesMap = getGridEntitiesMap(nil)
        self:checkGridEntitiesRemoved(gridEntitiesMap)
        for ____, ____value in __TS__Iterator(gridEntitiesMap) do
            local gridIndex = ____value[1]
            local gridEntity = ____value[2]
            self:checkGridEntityStateChanged(gridIndex, gridEntity)
            self:checkNewGridEntity(gridIndex, gridEntity)
            local gridEntityTypeCustom = self.customGridEntities:getCustomGridEntityType(gridIndex)
            if gridEntityTypeCustom == nil then
                self.postGridEntityUpdate:fire(gridEntity)
            else
                self.postGridEntityCustomUpdate:fire(gridEntity, gridEntityTypeCustom)
            end
        end
    end
    self.postNewRoomReordered = function()
        local gridEntitiesMap = getGridEntitiesMap(nil)
        for ____, ____value in __TS__Iterator(gridEntitiesMap) do
            local gridIndex = ____value[1]
            local gridEntity = ____value[2]
            self:checkNewGridEntity(gridIndex, gridEntity)
        end
    end
    self.featuresUsed = {ISCFeature.RUN_IN_N_FRAMES}
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}}
    self.postGridEntityInit = postGridEntityInit
    self.postGridEntityCustomInit = postGridEntityCustomInit
    self.postGridEntityUpdate = postGridEntityUpdate
    self.postGridEntityCustomUpdate = postGridEntityCustomUpdate
    self.postGridEntityRemove = postGridEntityRemove
    self.postGridEntityCustomRemove = postGridEntityCustomRemove
    self.postGridEntityStateChanged = postGridEntityStateChanged
    self.postGridEntityCustomStateChanged = postGridEntityCustomStateChanged
    self.postGridEntityBroken = postGridEntityBroken
    self.postGridEntityCustomBroken = postGridEntityCustomBroken
    self.customGridEntities = customGridEntities
end
function GridEntityUpdateDetection.prototype.checkGridEntitiesRemoved(self, gridEntitiesMap)
    for ____, ____value in __TS__Iterator(v.room.initializedGridEntities) do
        local gridIndex = ____value[1]
        local gridEntityTuple = ____value[2]
        local storedGridEntityType, storedGridEntityVariant = table.unpack(gridEntityTuple)
        local gridEntity = gridEntitiesMap:get(gridIndex)
        if gridEntity == nil or gridEntity:GetType() ~= storedGridEntityType then
            v.room.initializedGridEntities:delete(gridIndex)
            local gridEntityTypeCustom = self.customGridEntities:getCustomGridEntityType(gridIndex)
            if gridEntityTypeCustom == nil then
                self.postGridEntityRemove:fire(gridIndex, storedGridEntityType, storedGridEntityVariant)
            else
                self.postGridEntityCustomRemove:fire(gridIndex, gridEntityTypeCustom)
            end
        end
    end
end
function GridEntityUpdateDetection.prototype.checkGridEntityStateChanged(self, gridIndex, gridEntity)
    local gridEntityTuple = v.room.initializedGridEntities:get(gridIndex)
    if gridEntityTuple == nil then
        return
    end
    local _gridEntityType, _gridEntityVariant, oldState = table.unpack(gridEntityTuple)
    local newState = gridEntity.State
    if oldState ~= newState then
        self:updateTupleInMap(gridEntity)
        local gridEntityTypeCustom = self.customGridEntities:getCustomGridEntityType(gridEntity)
        if gridEntityTypeCustom == nil then
            self.postGridEntityStateChanged:fire(gridEntity, oldState, newState)
        else
            self.postGridEntityCustomStateChanged:fire(gridEntity, gridEntityTypeCustom, oldState, newState)
        end
        if isGridEntityBroken(nil, gridEntity) then
            if gridEntityTypeCustom == nil then
                self.postGridEntityBroken:fire(gridEntity)
            else
                self.postGridEntityCustomBroken:fire(gridEntity, gridEntityTypeCustom)
            end
        end
    end
end
function GridEntityUpdateDetection.prototype.checkNewGridEntity(self, gridIndex, gridEntity)
    local gridEntityType = gridEntity:GetType()
    local gridEntityTuple = v.room.initializedGridEntities:get(gridIndex)
    if gridEntityTuple == nil or gridEntityTuple[1] ~= gridEntityType then
        self:updateTupleInMap(gridEntity)
        local gridEntityTypeCustom = self.customGridEntities:getCustomGridEntityType(gridEntity)
        if gridEntityTypeCustom == nil then
            self.postGridEntityInit:fire(gridEntity)
        else
            self.postGridEntityCustomInit:fire(gridEntity, gridEntityTypeCustom)
        end
    end
end
function GridEntityUpdateDetection.prototype.updateTupleInMap(self, gridEntity)
    local gridEntityType = gridEntity:GetType()
    local variant = gridEntity:GetVariant()
    local gridIndex = gridEntity:GetGridIndex()
    local newTuple = {gridEntityType, variant, gridEntity.State}
    v.room.initializedGridEntities:set(gridIndex, newTuple)
end
return ____exports
 end,
["classes.features.callbackLogic.ItemPickupDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemType = ____isaac_2Dtypescript_2Ddefinitions.ItemType
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____playerDataStructures = require("functions.playerDataStructures")
local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
local ____types = require("functions.types")
local asNumber = ____types.asNumber
local ____PickingUpItem = require("types.PickingUpItem")
local newPickingUpItem = ____PickingUpItem.newPickingUpItem
local resetPickingUpItem = ____PickingUpItem.resetPickingUpItem
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {playersPickingUpItemMap = __TS__New(
    DefaultMap,
    function() return newPickingUpItem(nil) end
)}}
____exports.ItemPickupDetection = __TS__Class()
local ItemPickupDetection = ____exports.ItemPickupDetection
ItemPickupDetection.name = "ItemPickupDetection"
__TS__ClassExtends(ItemPickupDetection, Feature)
function ItemPickupDetection.prototype.____constructor(self, postItemPickup, preItemPickup)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postPEffectUpdateReordered = function(____, player)
        local pickingUpItem = defaultMapGetPlayer(nil, v.run.playersPickingUpItemMap, player)
        if player:IsItemQueueEmpty() then
            self:queueEmpty(player, pickingUpItem)
        else
            self:queueNotEmpty(player, pickingUpItem)
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
    self.postItemPickup = postItemPickup
    self.preItemPickup = preItemPickup
end
function ItemPickupDetection.prototype.queueEmpty(self, player, pickingUpItem)
    if pickingUpItem.itemType == ItemType.NULL or asNumber(nil, pickingUpItem.subType) == 0 then
        return
    end
    self.postItemPickup:fire(player, pickingUpItem)
    resetPickingUpItem(nil, pickingUpItem)
end
function ItemPickupDetection.prototype.queueNotEmpty(self, player, pickingUpItem)
    local queuedItem = player.QueuedItem.Item
    if queuedItem == nil or queuedItem.Type == ItemType.NULL then
        return
    end
    if queuedItem.Type ~= pickingUpItem.itemType or queuedItem.ID ~= pickingUpItem.subType then
        pickingUpItem.itemType = queuedItem.Type
        pickingUpItem.subType = queuedItem.ID
        self.preItemPickup:fire(player, pickingUpItem)
    end
end
return ____exports
 end,
["types.PickupIndex"] = function(...) 
local ____exports = {}
return ____exports
 end,
["enums.SaveDataKey"] = function(...) 
local ____exports = {}
--- These are the types of keys that you can put on the local variables that you feed to the save
-- data manager.
____exports.SaveDataKey = {}
____exports.SaveDataKey.PERSISTENT = "persistent"
____exports.SaveDataKey.RUN = "run"
____exports.SaveDataKey.LEVEL = "level"
____exports.SaveDataKey.ROOM = "room"
return ____exports
 end,
["enums.SerializationType"] = function(...) 
local ____exports = {}
--- This is used with the `deepCopy` and `merge` functions.
____exports.SerializationType = {}
____exports.SerializationType.NONE = 0
____exports.SerializationType[____exports.SerializationType.NONE] = "NONE"
____exports.SerializationType.SERIALIZE = 1
____exports.SerializationType[____exports.SerializationType.SERIALIZE] = "SERIALIZE"
____exports.SerializationType.DESERIALIZE = 2
____exports.SerializationType[____exports.SerializationType.DESERIALIZE] = "DESERIALIZE"
return ____exports
 end,
["classes.features.other.saveDataManager.constants"] = function(...) 
local ____exports = {}
____exports.SAVE_DATA_MANAGER_DEBUG = false
return ____exports
 end,
["serialization"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local SERIALIZATION_BRAND_VALUES = ____cachedEnumValues.SERIALIZATION_BRAND_VALUES
local ____types = require("functions.types")
local isString = ____types.isString
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local SERIALIZATION_BRAND_SET = __TS__New(ReadonlySet, SERIALIZATION_BRAND_VALUES)
--- Helper function to check if a key of a table in the "save#.dat" file is a serialization brand
-- inserted by the save data manager (i.e. the `deepCopy` function).
-- 
-- This is separated from the other serialization functions because end-users would not normally be
-- iterating through a serialized object directly.
function ____exports.isSerializationBrand(self, key)
    if not isString(nil, key) then
        return false
    end
    return SERIALIZATION_BRAND_SET:has(key)
end
return ____exports
 end,
["objects.isaacAPIClassTypeToBrand"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CopyableIsaacAPIClassType = ____isaac_2Dtypescript_2Ddefinitions.CopyableIsaacAPIClassType
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
____exports.ISAAC_API_CLASS_TYPE_TO_BRAND = {
    [CopyableIsaacAPIClassType.BIT_SET_128] = SerializationBrand.BIT_SET_128,
    [CopyableIsaacAPIClassType.COLOR] = SerializationBrand.COLOR,
    [CopyableIsaacAPIClassType.K_COLOR] = SerializationBrand.K_COLOR,
    [CopyableIsaacAPIClassType.RNG] = SerializationBrand.RNG,
    [CopyableIsaacAPIClassType.VECTOR] = SerializationBrand.VECTOR
}
return ____exports
 end,
["functions.serialization"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__TypeOf = ____lualib.__TS__TypeOf
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local __TS__ObjectValues = ____lualib.__TS__ObjectValues
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local getSerializedTableType
local ____isaacAPIClassTypeToBrand = require("objects.isaacAPIClassTypeToBrand")
local ISAAC_API_CLASS_TYPE_TO_BRAND = ____isaacAPIClassTypeToBrand.ISAAC_API_CLASS_TYPE_TO_BRAND
local ____isaacAPIClassTypeToFunctions = require("objects.isaacAPIClassTypeToFunctions")
local ISAAC_API_CLASS_TYPE_TO_FUNCTIONS = ____isaacAPIClassTypeToFunctions.ISAAC_API_CLASS_TYPE_TO_FUNCTIONS
local ____isaacAPIClass = require("functions.isaacAPIClass")
local getIsaacAPIClassName = ____isaacAPIClass.getIsaacAPIClassName
local ____types = require("functions.types")
local isTable = ____types.isTable
local isUserdata = ____types.isUserdata
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
function getSerializedTableType(self, serializedIsaacAPIClass)
    for ____, ____value in ipairs(__TS__ObjectEntries(ISAAC_API_CLASS_TYPE_TO_BRAND)) do
        local copyableIsaacAPIClassType = ____value[1]
        local serializationBrand = ____value[2]
        if serializedIsaacAPIClass[serializationBrand] ~= nil then
            return copyableIsaacAPIClassType
        end
    end
    return nil
end
--- Helper function to generically copy an Isaac API class without knowing what specific type of
-- class it is. (This is used by the save data manager.)
-- 
-- For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
function ____exports.copyIsaacAPIClass(self, isaacAPIClass)
    if not isUserdata(nil, isaacAPIClass) then
        error("Failed to copy an Isaac API class since the provided object was of type: " .. __TS__TypeOf(isaacAPIClass))
    end
    local isaacAPIClassType = getIsaacAPIClassName(nil, isaacAPIClass)
    assertDefined(nil, isaacAPIClassType, "Failed to copy an Isaac API class since it does not have a class type.")
    local copyableIsaacAPIClassType = isaacAPIClassType
    local functions = ISAAC_API_CLASS_TYPE_TO_FUNCTIONS[copyableIsaacAPIClassType]
    assertDefined(nil, functions, "Failed to copy an Isaac API class since the associated functions were not found for Isaac API class type: " .. copyableIsaacAPIClassType)
    return functions:copy(isaacAPIClass)
end
--- Helper function to generically deserialize an Isaac API class without knowing what specific type
-- of class it is. (This is used by the save data manager when reading data from the "save#.dat"
-- file.)
-- 
-- For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
function ____exports.deserializeIsaacAPIClass(self, serializedIsaacAPIClass)
    if not isTable(nil, serializedIsaacAPIClass) then
        error("Failed to deserialize an Isaac API class since the provided object was of type: " .. __TS__TypeOf(serializedIsaacAPIClass))
    end
    local copyableIsaacAPIClassType = getSerializedTableType(nil, serializedIsaacAPIClass)
    assertDefined(nil, copyableIsaacAPIClassType, "Failed to deserialize an Isaac API class since a valid class type brand was not found.")
    local functions = ISAAC_API_CLASS_TYPE_TO_FUNCTIONS[copyableIsaacAPIClassType]
    assertDefined(nil, functions, "Failed to deserialize an Isaac API class since the associated functions were not found for class type: " .. copyableIsaacAPIClassType)
    return functions:deserialize(serializedIsaacAPIClass)
end
--- Helper function to generically check if a given object is a copyable Isaac API class. (This is
-- used by the save data manager when determining what is safe to copy.)
-- 
-- For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
function ____exports.isCopyableIsaacAPIClass(self, object)
    local allFunctions = __TS__ObjectValues(ISAAC_API_CLASS_TYPE_TO_FUNCTIONS)
    local isFunctions = __TS__ArrayMap(
        allFunctions,
        function(____, functions) return functions.is end
    )
    return __TS__ArraySome(
        isFunctions,
        function(____, identityFunction) return identityFunction(nil, object) end
    )
end
--- Helper function to generically check if a given Lua table is a serialized Isaac API class. (This
-- is used by the save data manager when reading data from the "save#.dat" file.)
-- 
-- For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
function ____exports.isSerializedIsaacAPIClass(self, object)
    local allFunctions = __TS__ObjectValues(ISAAC_API_CLASS_TYPE_TO_FUNCTIONS)
    local isSerializedFunctions = __TS__ArrayMap(
        allFunctions,
        function(____, functions) return functions.isSerialized end
    )
    return __TS__ArraySome(
        isSerializedFunctions,
        function(____, identityFunction) return identityFunction(nil, object) end
    )
end
--- Helper function to generically serialize an Isaac API class without knowing what specific type of
-- class it is. (This is used by the save data manager when writing data to the "save#.dat" file.)
-- 
-- For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
function ____exports.serializeIsaacAPIClass(self, isaacAPIClass)
    if not isUserdata(nil, isaacAPIClass) then
        error("Failed to serialize an Isaac API class since the provided object was of type: " .. __TS__TypeOf(isaacAPIClass))
    end
    local isaacAPIClassType = getIsaacAPIClassName(nil, isaacAPIClass)
    assertDefined(nil, isaacAPIClassType, "Failed to serialize an Isaac API class since it does not have a class name.")
    local copyableIsaacAPIClassType = isaacAPIClassType
    local functions = ISAAC_API_CLASS_TYPE_TO_FUNCTIONS[copyableIsaacAPIClassType]
    assertDefined(nil, functions, "Failed to serialize an Isaac API class since the associated functions were not found for class type: " .. copyableIsaacAPIClassType)
    return functions:serialize(isaacAPIClass)
end
return ____exports
 end,
["functions.deepCopy"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local Map = ____lualib.Map
local Set = ____lualib.Set
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__ArraySort = ____lualib.__TS__ArraySort
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local deepCopyTable, deepCopyDefaultMap, getNewDefaultMap, deepCopyMap, deepCopySet, deepCopyTSTLClass, deepCopyArray, deepCopyNormalLuaTable, getCopiedEntries, checkMetatable, deepCopyUserdata
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____constants = require("classes.features.other.saveDataManager.constants")
local SAVE_DATA_MANAGER_DEBUG = ____constants.SAVE_DATA_MANAGER_DEBUG
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
local ____SerializationType = require("enums.SerializationType")
local SerializationType = ____SerializationType.SerializationType
local ____serialization = require("serialization")
local isSerializationBrand = ____serialization.isSerializationBrand
local ____array = require("functions.array")
local isArray = ____array.isArray
local ____isaacAPIClass = require("functions.isaacAPIClass")
local getIsaacAPIClassName = ____isaacAPIClass.getIsaacAPIClassName
local ____log = require("functions.log")
local log = ____log.log
local ____serialization = require("functions.serialization")
local copyIsaacAPIClass = ____serialization.copyIsaacAPIClass
local deserializeIsaacAPIClass = ____serialization.deserializeIsaacAPIClass
local isCopyableIsaacAPIClass = ____serialization.isCopyableIsaacAPIClass
local isSerializedIsaacAPIClass = ____serialization.isSerializedIsaacAPIClass
local serializeIsaacAPIClass = ____serialization.serializeIsaacAPIClass
local ____sort = require("functions.sort")
local sortTwoDimensionalArray = ____sort.sortTwoDimensionalArray
local ____tstlClass = require("functions.tstlClass")
local getTSTLClassName = ____tstlClass.getTSTLClassName
local isDefaultMap = ____tstlClass.isDefaultMap
local isTSTLMap = ____tstlClass.isTSTLMap
local isTSTLSet = ____tstlClass.isTSTLSet
local newTSTLClass = ____tstlClass.newTSTLClass
local ____types = require("functions.types")
local asString = ____types.asString
local isNumber = ____types.isNumber
local isPrimitive = ____types.isPrimitive
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local getTraversalDescription = ____utils.getTraversalDescription
--- `deepCopy` is a semi-generic deep cloner. It will recursively copy all of the values so that none
-- of the nested references remain.
-- 
-- `deepCopy` is used by the IsaacScript save data manager to make a backup of your variables, so
-- that it can restore them to the default values at the beginning of a new room, floor, or run.
-- 
-- `deepCopy` supports the following object types:
-- 
-- - Primitives (i.e. strings, numbers, and booleans)
-- - Basic TSTL objects (which are the same thing as Lua tables)
-- - TSTL `Map`
-- - TSTL `Set`
-- - TSTL classes
-- - `DefaultMap`
-- - Isaac `BitSet128` objects
-- - Isaac `Color` objects
-- - Isaac `KColor` objects
-- - Isaac `RNG` objects
-- - Isaac `Vector` objects
-- 
-- It does not support:
-- - objects with values of `null` (since that transpiles to `nil`)
-- - other Isaac API objects such as `EntityPtr` (that have a type of "userdata")
-- 
-- @param value The primitive or object to copy.
-- @param serializationType Optional. Has 3 possible values. Can copy objects as-is, or can
-- serialize objects to Lua tables, or can deserialize Lua tables to
-- objects. Default is `SerializationType.NONE`.
-- @param traversalDescription Optional. Used to track the current key that we are operating on for
-- debugging purposes. Default is an empty string.
-- @param classConstructors Optional. A Lua table that maps the name of a user-defined TSTL class to
-- its corresponding constructor. If the `deepCopy` function finds any
-- user-defined TSTL classes when recursively iterating through the given
-- object, it will use this map to instantiate a new class. Default is an
-- empty Lua table.
-- @param insideMap Optional. Tracks whether the deep copy function is in the process of recursively
-- copying a TSTL Map. Default is false.
function ____exports.deepCopy(self, value, serializationType, traversalDescription, classConstructors, insideMap)
    if serializationType == nil then
        serializationType = SerializationType.NONE
    end
    if traversalDescription == nil then
        traversalDescription = ""
    end
    if classConstructors == nil then
        classConstructors = {}
    end
    if insideMap == nil then
        insideMap = false
    end
    if SAVE_DATA_MANAGER_DEBUG then
        local logString = "deepCopy is operating on: " .. traversalDescription
        if serializationType == SerializationType.SERIALIZE then
            logString = logString .. " (serializing)"
        elseif serializationType == SerializationType.DESERIALIZE then
            logString = logString .. " (deserializing)"
        end
        logString = logString .. ": " .. tostring(value)
        log(logString)
    end
    local valueType = type(value)
    repeat
        local ____switch6 = valueType
        local ____cond6 = ____switch6 == "nil" or ____switch6 == "boolean" or ____switch6 == "number" or ____switch6 == "string"
        if ____cond6 then
            do
                return value
            end
        end
        ____cond6 = ____cond6 or (____switch6 == "function" or ____switch6 == "thread")
        if ____cond6 then
            do
                if serializationType == SerializationType.SERIALIZE then
                    error((("The deep copy function does not support serialization of \"" .. traversalDescription) .. "\", since it is type: ") .. valueType)
                end
                if serializationType == SerializationType.DESERIALIZE then
                    error((("The deep copy function does not support deserialization of \"" .. traversalDescription) .. "\", since it is type: ") .. valueType)
                end
                return value
            end
        end
        ____cond6 = ____cond6 or ____switch6 == "table"
        if ____cond6 then
            do
                local luaMap = value
                return deepCopyTable(
                    nil,
                    luaMap,
                    serializationType,
                    traversalDescription,
                    classConstructors,
                    insideMap
                )
            end
        end
        ____cond6 = ____cond6 or ____switch6 == "userdata"
        if ____cond6 then
            do
                return deepCopyUserdata(nil, value, serializationType, traversalDescription)
            end
        end
    until true
end
function deepCopyTable(self, luaMap, serializationType, traversalDescription, classConstructors, insideMap)
    if isDefaultMap(nil, luaMap) or luaMap[SerializationBrand.DEFAULT_MAP] ~= nil then
        return deepCopyDefaultMap(
            nil,
            luaMap,
            serializationType,
            traversalDescription,
            classConstructors,
            insideMap
        )
    end
    if isTSTLMap(nil, luaMap) or luaMap[SerializationBrand.MAP] ~= nil then
        return deepCopyMap(
            nil,
            luaMap,
            serializationType,
            traversalDescription,
            classConstructors,
            insideMap
        )
    end
    if isTSTLSet(nil, luaMap) or luaMap[SerializationBrand.SET] ~= nil then
        return deepCopySet(
            nil,
            luaMap,
            serializationType,
            traversalDescription,
            classConstructors,
            insideMap
        )
    end
    local className = getTSTLClassName(nil, luaMap)
    if className == "WeakMap" then
        error("The deep copy function does not support copying the \"WeakMap\" class for: " .. traversalDescription)
    end
    if className == "WeakSet" then
        error("The deep copy function does not support copying the \"WeakSet\" class for: " .. traversalDescription)
    end
    if className ~= nil or luaMap[SerializationBrand.TSTL_CLASS] ~= nil then
        return deepCopyTSTLClass(
            nil,
            luaMap,
            serializationType,
            traversalDescription,
            classConstructors,
            insideMap
        )
    end
    checkMetatable(nil, luaMap, traversalDescription)
    if isSerializedIsaacAPIClass(nil, luaMap) and serializationType == SerializationType.DESERIALIZE then
        return deserializeIsaacAPIClass(nil, luaMap)
    end
    if isArray(nil, luaMap) then
        return deepCopyArray(
            nil,
            luaMap,
            serializationType,
            traversalDescription,
            classConstructors,
            insideMap
        )
    end
    return deepCopyNormalLuaTable(
        nil,
        luaMap,
        serializationType,
        traversalDescription,
        classConstructors,
        insideMap
    )
end
function deepCopyDefaultMap(self, defaultMap, serializationType, traversalDescription, classConstructors, insideMap)
    if SAVE_DATA_MANAGER_DEBUG then
        log("deepCopy is copying a DefaultMap.")
    end
    local ____isDefaultMap_result_0
    if isDefaultMap(nil, defaultMap) then
        ____isDefaultMap_result_0 = defaultMap:getConstructorArg()
    else
        ____isDefaultMap_result_0 = nil
    end
    local constructorArg = ____isDefaultMap_result_0
    if serializationType == SerializationType.SERIALIZE and not isPrimitive(nil, constructorArg) then
        if insideMap then
            error("Failed to deep copy a DefaultMap because it was instantiated with a factory function and was also inside of an array, map, or set. For more information, see: https://isaacscript.github.io/main/gotchas#failed-to-deep-copy-a-defaultmap")
        else
            return deepCopyMap(
                nil,
                defaultMap,
                serializationType,
                traversalDescription,
                classConstructors,
                insideMap
            )
        end
    end
    local newDefaultMap = getNewDefaultMap(
        nil,
        defaultMap,
        serializationType,
        traversalDescription,
        constructorArg
    )
    insideMap = true
    local ____getCopiedEntries_result_1 = getCopiedEntries(
        nil,
        defaultMap,
        serializationType,
        traversalDescription,
        classConstructors,
        insideMap
    )
    local entries = ____getCopiedEntries_result_1.entries
    local convertedNumberKeysToStrings = ____getCopiedEntries_result_1.convertedNumberKeysToStrings
    if convertedNumberKeysToStrings then
        if isDefaultMap(nil, newDefaultMap) then
            newDefaultMap:set(SerializationBrand.OBJECT_WITH_NUMBER_KEYS, "")
        else
            newDefaultMap[SerializationBrand.OBJECT_WITH_NUMBER_KEYS] = ""
        end
    end
    for ____, ____value in ipairs(entries) do
        local key = ____value[1]
        local value = ____value[2]
        if isDefaultMap(nil, newDefaultMap) then
            newDefaultMap:set(key, value)
        else
            newDefaultMap[key] = value
        end
    end
    insideMap = false
    return newDefaultMap
end
function getNewDefaultMap(self, defaultMap, serializationType, traversalDescription, constructorArg)
    repeat
        local ____switch35 = serializationType
        local ____cond35 = ____switch35 == SerializationType.NONE
        if ____cond35 then
            do
                return __TS__New(DefaultMap, constructorArg)
            end
        end
        ____cond35 = ____cond35 or ____switch35 == SerializationType.SERIALIZE
        if ____cond35 then
            do
                local newDefaultMap = {}
                newDefaultMap[SerializationBrand.DEFAULT_MAP] = ""
                newDefaultMap[SerializationBrand.DEFAULT_MAP_VALUE] = constructorArg
                return newDefaultMap
            end
        end
        ____cond35 = ____cond35 or ____switch35 == SerializationType.DESERIALIZE
        if ____cond35 then
            do
                if isDefaultMap(nil, defaultMap) then
                    error(("Failed to deserialize a default map of \"" .. traversalDescription) .. "\", since it was not a Lua table.")
                end
                local defaultMapValue = defaultMap[SerializationBrand.DEFAULT_MAP_VALUE]
                assertDefined(nil, defaultMapValue, (("Failed to deserialize a default map of \"" .. traversalDescription) .. "\", since there was no serialization brand of: ") .. SerializationBrand.DEFAULT_MAP_VALUE)
                return __TS__New(DefaultMap, defaultMapValue)
            end
        end
    until true
end
function deepCopyMap(self, map, serializationType, traversalDescription, classConstructors, insideMap)
    if SAVE_DATA_MANAGER_DEBUG then
        log("deepCopy is copying a Map.")
    end
    local newMap
    if serializationType == SerializationType.SERIALIZE then
        newMap = {}
        newMap[SerializationBrand.MAP] = ""
    else
        newMap = __TS__New(Map)
    end
    insideMap = true
    local ____getCopiedEntries_result_2 = getCopiedEntries(
        nil,
        map,
        serializationType,
        traversalDescription,
        classConstructors,
        insideMap
    )
    local entries = ____getCopiedEntries_result_2.entries
    local convertedNumberKeysToStrings = ____getCopiedEntries_result_2.convertedNumberKeysToStrings
    if convertedNumberKeysToStrings then
        if isTSTLMap(nil, newMap) then
            newMap:set(SerializationBrand.OBJECT_WITH_NUMBER_KEYS, "")
        else
            newMap[SerializationBrand.OBJECT_WITH_NUMBER_KEYS] = ""
        end
    end
    for ____, ____value in ipairs(entries) do
        local key = ____value[1]
        local value = ____value[2]
        if isTSTLMap(nil, newMap) then
            newMap:set(key, value)
        else
            newMap[key] = value
        end
    end
    insideMap = false
    return newMap
end
function deepCopySet(self, set, serializationType, traversalDescription, classConstructors, insideMap)
    if SAVE_DATA_MANAGER_DEBUG then
        log("deepCopy is copying a Set.")
    end
    local newSet
    if serializationType == SerializationType.SERIALIZE then
        newSet = {}
        newSet[SerializationBrand.SET] = ""
    else
        newSet = __TS__New(Set)
    end
    local ____getCopiedEntries_result_3 = getCopiedEntries(
        nil,
        set,
        serializationType,
        traversalDescription,
        classConstructors,
        insideMap
    )
    local entries = ____getCopiedEntries_result_3.entries
    local convertedNumberKeysToStrings = ____getCopiedEntries_result_3.convertedNumberKeysToStrings
    if convertedNumberKeysToStrings then
        if isTSTLSet(nil, newSet) then
            error("The deep copy function cannot convert number keys to strings for a Set.")
        else
            newSet[SerializationBrand.OBJECT_WITH_NUMBER_KEYS] = ""
        end
    end
    for ____, ____value in ipairs(entries) do
        local key = ____value[1]
        if isTSTLSet(nil, newSet) then
            newSet:add(key)
        else
            newSet[key] = ""
        end
    end
    return newSet
end
function deepCopyTSTLClass(self, tstlClass, serializationType, traversalDescription, classConstructors, insideMap)
    if SAVE_DATA_MANAGER_DEBUG then
        log("deepCopy is copying a TSTL class.")
    end
    local newClass
    repeat
        local ____switch64 = serializationType
        local ____cond64 = ____switch64 == SerializationType.NONE
        if ____cond64 then
            do
                newClass = newTSTLClass(nil, tstlClass)
                break
            end
        end
        ____cond64 = ____cond64 or ____switch64 == SerializationType.SERIALIZE
        if ____cond64 then
            do
                newClass = {}
                local tstlClassName = getTSTLClassName(nil, tstlClass)
                if tstlClassName ~= nil then
                    newClass[SerializationBrand.TSTL_CLASS] = tstlClassName
                end
                break
            end
        end
        ____cond64 = ____cond64 or ____switch64 == SerializationType.DESERIALIZE
        if ____cond64 then
            do
                local tstlClassName = tstlClass[SerializationBrand.TSTL_CLASS]
                assertDefined(nil, tstlClassName, "Failed to deserialize a TSTL class since the brand did not contain the class name.")
                local classConstructor = classConstructors[tstlClassName]
                assertDefined(nil, classConstructor, ("Failed to deserialize a TSTL class since there was no constructor registered for a class name of \"" .. tstlClassName) .. "\". If this mod is using the save data manager, it must register the class constructor with the \"saveDataManagerRegisterClass\" method.")
                newClass = __TS__New(classConstructor)
                break
            end
        end
    until true
    local ____getCopiedEntries_result_4 = getCopiedEntries(
        nil,
        tstlClass,
        serializationType,
        traversalDescription,
        classConstructors,
        insideMap
    )
    local entries = ____getCopiedEntries_result_4.entries
    local convertedNumberKeysToStrings = ____getCopiedEntries_result_4.convertedNumberKeysToStrings
    if convertedNumberKeysToStrings then
        newClass[SerializationBrand.OBJECT_WITH_NUMBER_KEYS] = ""
    end
    for ____, ____value in ipairs(entries) do
        local key = ____value[1]
        local value = ____value[2]
        newClass[key] = value
    end
    return newClass
end
function deepCopyArray(self, array, serializationType, traversalDescription, classConstructors, insideMap)
    if SAVE_DATA_MANAGER_DEBUG then
        log("deepCopy is copying an array.")
    end
    local newArray = {}
    for ____, value in ipairs(array) do
        local newValue = ____exports.deepCopy(
            nil,
            value,
            serializationType,
            traversalDescription,
            classConstructors,
            insideMap
        )
        newArray[#newArray + 1] = newValue
    end
    return newArray
end
function deepCopyNormalLuaTable(self, luaMap, serializationType, traversalDescription, classConstructors, insideMap)
    if SAVE_DATA_MANAGER_DEBUG then
        log("deepCopy is copying a normal Lua table.")
    end
    local newTable = {}
    local ____getCopiedEntries_result_5 = getCopiedEntries(
        nil,
        luaMap,
        serializationType,
        traversalDescription,
        classConstructors,
        insideMap
    )
    local entries = ____getCopiedEntries_result_5.entries
    local convertedNumberKeysToStrings = ____getCopiedEntries_result_5.convertedNumberKeysToStrings
    if convertedNumberKeysToStrings then
        newTable[SerializationBrand.OBJECT_WITH_NUMBER_KEYS] = ""
    end
    for ____, ____value in ipairs(entries) do
        local key = ____value[1]
        local value = ____value[2]
        newTable[key] = value
    end
    return newTable
end
function getCopiedEntries(self, object, serializationType, traversalDescription, classConstructors, insideMap)
    local entries = {}
    if isTSTLMap(nil, object) or isTSTLSet(nil, object) or isDefaultMap(nil, object) then
        for ____, ____value in __TS__Iterator(object:entries()) do
            local key = ____value[1]
            local value = ____value[2]
            entries[#entries + 1] = {key, value}
        end
    else
        for key, value in pairs(object) do
            entries[#entries + 1] = {key, value}
        end
    end
    if SAVE_DATA_MANAGER_DEBUG then
        __TS__ArraySort(entries, sortTwoDimensionalArray)
    end
    local convertStringKeysToNumbers = serializationType == SerializationType.DESERIALIZE and __TS__ArraySome(
        entries,
        function(____, ____bindingPattern0)
            local key
            key = ____bindingPattern0[1]
            return key == asString(nil, SerializationBrand.OBJECT_WITH_NUMBER_KEYS)
        end
    )
    local hasNumberKeys = __TS__ArraySome(
        entries,
        function(____, ____bindingPattern0)
            local key
            key = ____bindingPattern0[1]
            return isNumber(nil, key)
        end
    )
    local convertNumberKeysToStrings = serializationType == SerializationType.SERIALIZE and hasNumberKeys
    local copiedEntries = {}
    for ____, ____value in ipairs(entries) do
        local key = ____value[1]
        local value = ____value[2]
        do
            if isSerializationBrand(nil, key) then
                goto __continue90
            end
            traversalDescription = getTraversalDescription(nil, key, traversalDescription)
            local newValue = ____exports.deepCopy(
                nil,
                value,
                serializationType,
                traversalDescription,
                classConstructors,
                insideMap
            )
            local keyToUse = key
            if convertStringKeysToNumbers then
                local numberKey = tonumber(key)
                if numberKey ~= nil then
                    keyToUse = numberKey
                end
            end
            if convertNumberKeysToStrings then
                keyToUse = tostring(key)
            end
            copiedEntries[#copiedEntries + 1] = {keyToUse, newValue}
        end
        ::__continue90::
    end
    return {entries = copiedEntries, convertedNumberKeysToStrings = convertNumberKeysToStrings}
end
function checkMetatable(self, luaMap, traversalDescription)
    local metatable = getmetatable(luaMap)
    if metatable == nil then
        return
    end
    local tableDescription = traversalDescription == "" and "the table to copy" or ("\"" .. traversalDescription) .. "\""
    error(("The deepCopy function detected that " .. tableDescription) .. " has a metatable. Copying tables with metatables is not supported, unless they are explicitly handled by the save data manager. (e.g. TypeScriptToLua Maps, TypeScriptToLua Sets, etc.)")
end
function deepCopyUserdata(self, value, serializationType, traversalDescription)
    if not isCopyableIsaacAPIClass(nil, value) then
        local className = getIsaacAPIClassName(nil, value) or "Unknown"
        error((("The deep copy function does not support serializing \"" .. traversalDescription) .. "\", since it is an Isaac API class of type: ") .. className)
    end
    repeat
        local ____switch100 = serializationType
        local ____cond100 = ____switch100 == SerializationType.NONE
        if ____cond100 then
            do
                return copyIsaacAPIClass(nil, value)
            end
        end
        ____cond100 = ____cond100 or ____switch100 == SerializationType.SERIALIZE
        if ____cond100 then
            do
                return serializeIsaacAPIClass(nil, value)
            end
        end
        ____cond100 = ____cond100 or ____switch100 == SerializationType.DESERIALIZE
        if ____cond100 then
            do
                return error(("The deep copy function can not deserialize \"" .. traversalDescription) .. "\", since it is userdata.")
            end
        end
    until true
end
return ____exports
 end,
["functions.merge"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local Map = ____lualib.Map
local ____exports = {}
local mergeSerializedArray, mergeSerializedTSTLObject, mergeSerializedTable
local ____constants = require("classes.features.other.saveDataManager.constants")
local SAVE_DATA_MANAGER_DEBUG = ____constants.SAVE_DATA_MANAGER_DEBUG
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
local ____SerializationType = require("enums.SerializationType")
local SerializationType = ____SerializationType.SerializationType
local ____serialization = require("serialization")
local isSerializationBrand = ____serialization.isSerializationBrand
local ____array = require("functions.array")
local isArray = ____array.isArray
local ____deepCopy = require("functions.deepCopy")
local deepCopy = ____deepCopy.deepCopy
local ____log = require("functions.log")
local log = ____log.log
local ____serialization = require("functions.serialization")
local deserializeIsaacAPIClass = ____serialization.deserializeIsaacAPIClass
local isSerializedIsaacAPIClass = ____serialization.isSerializedIsaacAPIClass
local ____table = require("functions.table")
local clearTable = ____table.clearTable
local iterateTableInOrder = ____table.iterateTableInOrder
local ____tstlClass = require("functions.tstlClass")
local isDefaultMap = ____tstlClass.isDefaultMap
local isTSTLMap = ____tstlClass.isTSTLMap
local isTSTLSet = ____tstlClass.isTSTLSet
local ____types = require("functions.types")
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local getTraversalDescription = ____utils.getTraversalDescription
--- `merge` takes the values from a new table and recursively merges them into an old object (while
-- performing appropriate deserialization).
-- 
-- This function is used to merge incoming data from the "save#.dat" file into a mod's variables.
-- Merging is useful instead of blowing away a table entirely because mod code often relies on the
-- local table/object references.
-- 
-- This function always assumes that the new table is serialized data and will attempt to perform
-- deserialization on the objects within. In other words, unlike the `deepCopy` function, the
-- `merge` function will always operates in the mode of `SerializationType.DESERIALIZE`. For the
-- types of objects that will be deserialized, see the documentation for the `deepCopy` function.
-- 
-- This function does not iterate over the old object, like you would naively expect. This is
-- because it is common for a variable to have a type of `something | null`. If this is the case,
-- the key would not appear when iterating over the old object (because a value of null transpiles
-- to nil, which means the table key does not exist). Thus, we must instead iterate over the new
-- object and copy the values backwards. The consequence of this is that `merge` can copy over old
-- variables that are no longer used in the code, or copy over old variables of a different type,
-- which can cause run-time errors. In such cases, users will have to manually delete their save
-- data.
-- 
-- @param oldObject The old object to merge the values into. This can be either a Lua table, a TSTL
-- map, or a TSTL set.
-- @param newTable The new table to merge the values from. This must be a Lua table that represents
-- serialized data. In other words, it should be created with the `deepCopy`
-- function using `SerializationType.SERIALIZE`.
-- @param traversalDescription Used to track the current key that we are operating on for debugging
-- purposes. Use a name that corresponds to the name of the merging
-- table.
-- @param classConstructors Optional. A Lua table that maps the name of a user-defined TSTL class to
-- its corresponding constructor. If the `deepCopy` function finds any
-- user-defined TSTL classes when recursively iterating through the given
-- object, it will use this map to instantiate a new class. Default is an
-- empty Lua table.
function ____exports.merge(self, oldObject, newTable, traversalDescription, classConstructors)
    if classConstructors == nil then
        classConstructors = {}
    end
    if SAVE_DATA_MANAGER_DEBUG then
        log("merge is traversing: " .. traversalDescription)
    end
    if not isTable(nil, oldObject) then
        error("The first argument given to the merge function is not a table.")
    end
    if not isTable(nil, newTable) then
        error("The second argument given to the merge function is not a table.")
    end
    if isArray(nil, oldObject) and isArray(nil, newTable) then
        mergeSerializedArray(
            nil,
            oldObject,
            newTable,
            traversalDescription,
            classConstructors
        )
        return
    end
    if isTSTLMap(nil, oldObject) or isTSTLSet(nil, oldObject) or isDefaultMap(nil, oldObject) then
        mergeSerializedTSTLObject(
            nil,
            oldObject,
            newTable,
            traversalDescription,
            classConstructors
        )
    else
        mergeSerializedTable(
            nil,
            oldObject,
            newTable,
            traversalDescription,
            classConstructors
        )
    end
end
function mergeSerializedArray(self, oldArray, newArray, traversalDescription, classConstructors)
    if SAVE_DATA_MANAGER_DEBUG then
        log("merge encountered an array: " .. traversalDescription)
    end
    clearTable(nil, oldArray)
    iterateTableInOrder(
        nil,
        newArray,
        function(____, key, value)
            local deserializedValue = deepCopy(
                nil,
                value,
                SerializationType.DESERIALIZE,
                traversalDescription,
                classConstructors
            )
            oldArray[key] = deserializedValue
        end,
        SAVE_DATA_MANAGER_DEBUG
    )
end
function mergeSerializedTSTLObject(self, oldObject, newTable, traversalDescription, classConstructors)
    if SAVE_DATA_MANAGER_DEBUG then
        log("merge encountered a TSTL object: " .. traversalDescription)
    end
    oldObject:clear()
    local convertStringKeysToNumbers = newTable[SerializationBrand.OBJECT_WITH_NUMBER_KEYS] ~= nil
    iterateTableInOrder(
        nil,
        newTable,
        function(____, key, value)
            if isSerializationBrand(nil, key) then
                return
            end
            local keyToUse = key
            if convertStringKeysToNumbers then
                local numberKey = tonumber(key)
                if numberKey == nil then
                    return
                end
                keyToUse = numberKey
            end
            if isTSTLMap(nil, oldObject) or isDefaultMap(nil, oldObject) then
                local deserializedValue = deepCopy(
                    nil,
                    value,
                    SerializationType.DESERIALIZE,
                    traversalDescription,
                    classConstructors
                )
                oldObject:set(keyToUse, deserializedValue)
            elseif isTSTLSet(nil, oldObject) then
                oldObject:add(keyToUse)
            end
        end,
        SAVE_DATA_MANAGER_DEBUG
    )
end
function mergeSerializedTable(self, oldTable, newTable, traversalDescription, classConstructors)
    if SAVE_DATA_MANAGER_DEBUG then
        log("merge encountered a Lua table: " .. traversalDescription)
    end
    iterateTableInOrder(
        nil,
        newTable,
        function(____, key, value)
            if SAVE_DATA_MANAGER_DEBUG then
                local valueToPrint = value == "" and "(empty string)" or tostring(value)
                log((("merge is merging: " .. traversalDescription) .. " --> ") .. valueToPrint)
            end
            if isSerializationBrand(nil, key) then
                return
            end
            if isSerializedIsaacAPIClass(nil, value) then
                if SAVE_DATA_MANAGER_DEBUG then
                    log("merge found a serialized Isaac API class.")
                end
                local deserializedObject = deserializeIsaacAPIClass(nil, value)
                oldTable[key] = deserializedObject
                return
            end
            if isTable(nil, value) then
                local oldValue = oldTable[key]
                if not isTable(nil, oldValue) then
                    oldValue = {}
                    oldTable[key] = oldValue
                end
                traversalDescription = getTraversalDescription(nil, key, traversalDescription)
                ____exports.merge(
                    nil,
                    oldValue,
                    value,
                    traversalDescription,
                    classConstructors
                )
            else
                oldTable[key] = value
            end
        end,
        SAVE_DATA_MANAGER_DEBUG
    )
end
return ____exports
 end,
["classes.features.other.saveDataManager.glowingHourGlass"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
local ____exports = {}
local getKeysToBackup, GLOWING_HOUR_GLASS_BACKUP_KEYS, REWIND_WITH_GLOWING_HOUR_GLASS_KEY
local ____SaveDataKey = require("enums.SaveDataKey")
local SaveDataKey = ____SaveDataKey.SaveDataKey
local ____SerializationType = require("enums.SerializationType")
local SerializationType = ____SerializationType.SerializationType
local ____deepCopy = require("functions.deepCopy")
local deepCopy = ____deepCopy.deepCopy
local ____merge = require("functions.merge")
local merge = ____merge.merge
local ____table = require("functions.table")
local iterateTableInOrder = ____table.iterateTableInOrder
local ____constants = require("classes.features.other.saveDataManager.constants")
local SAVE_DATA_MANAGER_DEBUG = ____constants.SAVE_DATA_MANAGER_DEBUG
function getKeysToBackup(self, saveData)
    local shouldBackupPersistentObject = saveData.persistent ~= nil and saveData.persistent[REWIND_WITH_GLOWING_HOUR_GLASS_KEY] ~= nil
    local ____shouldBackupPersistentObject_1
    if shouldBackupPersistentObject then
        local ____array_0 = __TS__SparseArrayNew(table.unpack(GLOWING_HOUR_GLASS_BACKUP_KEYS))
        __TS__SparseArrayPush(____array_0, SaveDataKey.PERSISTENT)
        ____shouldBackupPersistentObject_1 = {__TS__SparseArraySpread(____array_0)}
    else
        ____shouldBackupPersistentObject_1 = GLOWING_HOUR_GLASS_BACKUP_KEYS
    end
    return ____shouldBackupPersistentObject_1
end
GLOWING_HOUR_GLASS_BACKUP_KEYS = {SaveDataKey.RUN, SaveDataKey.LEVEL}
local IGNORE_GLOWING_HOUR_GLASS_KEY = "__ignoreGlowingHourGlass"
REWIND_WITH_GLOWING_HOUR_GLASS_KEY = "__rewindWithGlowingHourGlass"
function ____exports.makeGlowingHourGlassBackup(self, saveDataMap, saveDataConditionalFuncMap, saveDataGlowingHourGlassMap)
    iterateTableInOrder(
        nil,
        saveDataMap,
        function(____, subscriberName, saveData)
            local conditionalFunc = saveDataConditionalFuncMap[subscriberName]
            if conditionalFunc ~= nil then
                local shouldSave = conditionalFunc(nil)
                if not shouldSave then
                    return
                end
            end
            for ____, saveDataKey in ipairs(getKeysToBackup(nil, saveData)) do
                do
                    local childTable = saveData[saveDataKey]
                    if childTable == nil then
                        goto __continue6
                    end
                    local childTableLuaMap = childTable
                    if childTableLuaMap[IGNORE_GLOWING_HOUR_GLASS_KEY] ~= nil then
                        goto __continue6
                    end
                    local saveDataGlowingHourGlass = saveDataGlowingHourGlassMap[subscriberName]
                    if saveDataGlowingHourGlass == nil then
                        saveDataGlowingHourGlass = {}
                        saveDataGlowingHourGlassMap[subscriberName] = saveDataGlowingHourGlass
                    end
                    local copiedChildTable = deepCopy(nil, childTable, SerializationType.SERIALIZE)
                    saveDataGlowingHourGlass[saveDataKey] = copiedChildTable
                end
                ::__continue6::
            end
        end,
        SAVE_DATA_MANAGER_DEBUG
    )
end
function ____exports.restoreGlowingHourGlassBackup(self, saveDataMap, saveDataConditionalFuncMap, saveDataGlowingHourGlassMap, classConstructors)
    iterateTableInOrder(
        nil,
        saveDataMap,
        function(____, subscriberName, saveData)
            local conditionalFunc = saveDataConditionalFuncMap[subscriberName]
            if conditionalFunc ~= nil then
                local shouldSave = conditionalFunc(nil)
                if not shouldSave then
                    return
                end
            end
            for ____, saveDataKey in ipairs(getKeysToBackup(nil, saveData)) do
                do
                    local childTable = saveData[saveDataKey]
                    if childTable == nil then
                        goto __continue15
                    end
                    local childTableLuaMap = childTable
                    if childTableLuaMap[IGNORE_GLOWING_HOUR_GLASS_KEY] ~= nil then
                        goto __continue15
                    end
                    local saveDataGlowingHourGlass = saveDataGlowingHourGlassMap[subscriberName]
                    if saveDataGlowingHourGlass == nil then
                        goto __continue15
                    end
                    local childTableBackup = saveDataGlowingHourGlass[saveDataKey]
                    if childTableBackup == nil then
                        goto __continue15
                    end
                    merge(
                        nil,
                        childTable,
                        childTableBackup,
                        subscriberName .. "__glowingHourGlass",
                        classConstructors
                    )
                end
                ::__continue15::
            end
        end,
        SAVE_DATA_MANAGER_DEBUG
    )
end
return ____exports
 end,
["functions.jsonHelpers"] = function(...) 
local ____exports = {}
local jsonLua = require("lib.jsonLua")
local ____log = require("functions.log")
local logError = ____log.logError
local function tryDecode(jsonString)
    return jsonLua.decode(jsonString)
end
local function tryEncode(luaTable)
    return jsonLua.encode(luaTable)
end
--- Converts a JSON string to a Lua table.
-- 
-- In most cases, this function will be used for reading data from a "save#.dat" file. If decoding
-- fails, it will return a blank Lua table instead of throwing an error. (This allows execution to
-- continue in cases where users have no current save data or have manually removed their existing
-- save data.)
-- 
-- Under the hood, this uses a custom JSON parser that was measured to be 11.8 times faster than the
-- vanilla JSON parser.
function ____exports.jsonDecode(self, jsonString)
    local ok, luaTableOrErrMsg = pcall(tryDecode, jsonString)
    if not ok then
        logError("Failed to convert the JSON string to a Lua table: " .. jsonString)
        return {}
    end
    return luaTableOrErrMsg
end
--- Converts a Lua table to a JSON string.
-- 
-- In most cases, this function will be used for writing data to a "save#.dat" file. If encoding
-- fails, it will throw an error to prevent writing a blank string or corrupted data to a user's
-- "save#.dat" file.
-- 
-- Under the hood, this uses a custom JSON parser that was measured to be 11.8 times faster than the
-- vanilla JSON parser.
function ____exports.jsonEncode(self, luaTable)
    local ok, jsonStringOrErrMsg = pcall(tryEncode, luaTable)
    if not ok then
        error("Failed to convert the Lua table to JSON: " .. jsonStringOrErrMsg)
    end
    return jsonStringOrErrMsg
end
return ____exports
 end,
["lib.jsonLua"] = function(...) 
-- cspell:disable

--
-- json.lua
--
-- Copyright (c) 2020 rxi
--
-- Permission is hereby granted, free of charge, to any person obtaining a copy of
-- this software and associated documentation files (the "Software"), to deal in
-- the Software without restriction, including without limitation the rights to
-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-- of the Software, and to permit persons to whom the Software is furnished to do
-- so, subject to the following conditions:
--
-- The above copyright notice and this permission notice shall be included in all
-- copies or substantial portions of the Software.
--
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-- SOFTWARE.
--

-- The IsaacScript version of this file contains modifications for better error messages, which
-- assist when debugging.

local json = { _version = "0.1.2" }

-------------------------------------------------------------------------------
-- Encode
-------------------------------------------------------------------------------

local encode

local escape_char_map = {
  [ "\\" ] = "\\",
  [ "\"" ] = "\"",
  [ "\b" ] = "b",
  [ "\f" ] = "f",
  [ "\n" ] = "n",
  [ "\r" ] = "r",
  [ "\t" ] = "t",
}

local escape_char_map_inv = { [ "/" ] = "/" }
for k, v in pairs(escape_char_map) do
  escape_char_map_inv[v] = k
end


local function escape_char(c)
  return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte()))
end


local function encode_nil(val)
  return "null"
end


local function encode_table(val, stack, traversalDescription)
  local res = {}
  stack = stack or {}
  traversalDescription = traversalDescription or ""

  -- Circular reference?
  if stack[val] then error("circular reference") end

  stack[val] = true

  if rawget(val, 1) ~= nil or next(val) == nil then
    -- Treat as array -- check keys are valid and it is not sparse
    local n = 0
    for k in pairs(val) do
      if type(k) ~= "number" then
        error("invalid table: mixed or invalid key types for array, excepted number, got: " .. tostring(type(k)))
      end
      n = n + 1
    end
    if n ~= #val then
      error("invalid table: sparse array")
    end
    -- Encode
    for i, v in ipairs(val) do
      local newTraversalDescription = traversalDescription .. tostring(i) .. " - "
      table.insert(res, encode(v, stack, newTraversalDescription))
    end
    stack[val] = nil
    return "[" .. table.concat(res, ",") .. "]"

  else
    -- Treat as an object
    for k, v in pairs(val) do
      local newTraversalDescription = traversalDescription .. tostring(k) .. " - "
      if type(k) ~= "string" then
        error(
          "invalid table: mixed or invalid key types for object \"" .. newTraversalDescription .. "\", "
          .. "excepted string, got: " .. tostring(type(k))
        )
      end
      table.insert(res, encode(k, stack, newTraversalDescription) .. ":" .. encode(v, stack, newTraversalDescription))
    end
    stack[val] = nil
    return "{" .. table.concat(res, ",") .. "}"
  end
end


local function encode_string(val)
  return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
end


local function encode_number(val)
  -- Check for NaN, -inf and inf
  if val ~= val or val <= -math.huge or val >= math.huge then
    error("unexpected number value '" .. tostring(val) .. "'")
  end
  return string.format("%.14g", val)
end


local type_func_map = {
  [ "nil"     ] = encode_nil,
  [ "table"   ] = encode_table,
  [ "string"  ] = encode_string,
  [ "number"  ] = encode_number,
  [ "boolean" ] = tostring,
}


encode = function(val, stack, traversalDescription)
  local t = type(val)
  local f = type_func_map[t]
  if f then
    return f(val, stack, traversalDescription)
  end
  error("unexpected type '" .. t .. "'")
end


function json.encode(val)
  return ( encode(val) )
end


-------------------------------------------------------------------------------
-- Decode
-------------------------------------------------------------------------------

local parse

local function create_set(...)
  local res = {}
  for i = 1, select("#", ...) do
    res[ select(i, ...) ] = true
  end
  return res
end

local space_chars   = create_set(" ", "\t", "\r", "\n")
local delim_chars   = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
local escape_chars  = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
local literals      = create_set("true", "false", "null")

local literal_map = {
  [ "true"  ] = true,
  [ "false" ] = false,
  [ "null"  ] = nil,
}


local function next_char(str, idx, set, negate)
  for i = idx, #str do
    if set[str:sub(i, i)] ~= negate then
      return i
    end
  end
  return #str + 1
end


local function decode_error(str, idx, msg)
  local line_count = 1
  local col_count = 1
  for i = 1, idx - 1 do
    col_count = col_count + 1
    if str:sub(i, i) == "\n" then
      line_count = line_count + 1
      col_count = 1
    end
  end
  error( string.format("%s at line %d col %d", msg, line_count, col_count) )
end


local function codepoint_to_utf8(n)
  -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
  local f = math.floor
  if n <= 0x7f then
    return string.char(n)
  elseif n <= 0x7ff then
    return string.char(f(n / 64) + 192, n % 64 + 128)
  elseif n <= 0xffff then
    return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
  elseif n <= 0x10ffff then
    return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128,
                       f(n % 4096 / 64) + 128, n % 64 + 128)
  end
  error( string.format("invalid unicode codepoint '%x'", n) )
end


local function parse_unicode_escape(s)
  local n1 = tonumber( s:sub(1, 4),  16 )
  local n2 = tonumber( s:sub(7, 10), 16 )
   -- Surrogate pair?
  if n2 then
    return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
  else
    return codepoint_to_utf8(n1)
  end
end


local function parse_string(str, i)
  local res = ""
  local j = i + 1
  local k = j

  while j <= #str do
    local x = str:byte(j)

    if x < 32 then
      decode_error(str, j, "control character in string")

    elseif x == 92 then -- `\`: Escape
      res = res .. str:sub(k, j - 1)
      j = j + 1
      local c = str:sub(j, j)
      if c == "u" then
        local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1)
                 or str:match("^%x%x%x%x", j + 1)
                 or decode_error(str, j - 1, "invalid unicode escape in string")
        res = res .. parse_unicode_escape(hex)
        j = j + #hex
      else
        if not escape_chars[c] then
          decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string")
        end
        res = res .. escape_char_map_inv[c]
      end
      k = j + 1

    elseif x == 34 then -- `"`: End of string
      res = res .. str:sub(k, j - 1)
      return res, j + 1
    end

    j = j + 1
  end

  decode_error(str, i, "expected closing quote for string")
end


local function parse_number(str, i)
  local x = next_char(str, i, delim_chars)
  local s = str:sub(i, x - 1)
  local n = tonumber(s)
  if not n then
    decode_error(str, i, "invalid number '" .. s .. "'")
  end
  return n, x
end


local function parse_literal(str, i)
  local x = next_char(str, i, delim_chars)
  local word = str:sub(i, x - 1)
  if not literals[word] then
    decode_error(str, i, "invalid literal '" .. word .. "'")
  end
  return literal_map[word], x
end


local function parse_array(str, i)
  local res = {}
  local n = 1
  i = i + 1
  while 1 do
    local x
    i = next_char(str, i, space_chars, true)
    -- Empty / end of array?
    if str:sub(i, i) == "]" then
      i = i + 1
      break
    end
    -- Read token
    x, i = parse(str, i)
    res[n] = x
    n = n + 1
    -- Next token
    i = next_char(str, i, space_chars, true)
    local chr = str:sub(i, i)
    i = i + 1
    if chr == "]" then break end
    if chr ~= "," then decode_error(str, i, "expected ']' or ','") end
  end
  return res, i
end


local function parse_object(str, i)
  local res = {}
  i = i + 1
  while 1 do
    local key, val
    i = next_char(str, i, space_chars, true)
    -- Empty / end of object?
    if str:sub(i, i) == "}" then
      i = i + 1
      break
    end
    -- Read key
    if str:sub(i, i) ~= '"' then
      decode_error(str, i, "expected string for key")
    end
    key, i = parse(str, i)
    -- Read ':' delimiter
    i = next_char(str, i, space_chars, true)
    if str:sub(i, i) ~= ":" then
      decode_error(str, i, "expected ':' after key")
    end
    i = next_char(str, i + 1, space_chars, true)
    -- Read value
    val, i = parse(str, i)
    -- Set
    res[key] = val
    -- Next token
    i = next_char(str, i, space_chars, true)
    local chr = str:sub(i, i)
    i = i + 1
    if chr == "}" then break end
    if chr ~= "," then decode_error(str, i, "expected '}' or ','") end
  end
  return res, i
end


local char_func_map = {
  [ '"' ] = parse_string,
  [ "0" ] = parse_number,
  [ "1" ] = parse_number,
  [ "2" ] = parse_number,
  [ "3" ] = parse_number,
  [ "4" ] = parse_number,
  [ "5" ] = parse_number,
  [ "6" ] = parse_number,
  [ "7" ] = parse_number,
  [ "8" ] = parse_number,
  [ "9" ] = parse_number,
  [ "-" ] = parse_number,
  [ "t" ] = parse_literal,
  [ "f" ] = parse_literal,
  [ "n" ] = parse_literal,
  [ "[" ] = parse_array,
  [ "{" ] = parse_object,
}


parse = function(str, idx)
  local chr = str:sub(idx, idx)
  local f = char_func_map[chr]
  if f then
    return f(str, idx)
  end
  decode_error(str, idx, "unexpected character '" .. chr .. "'")
end


function json.decode(str)
  if type(str) ~= "string" then
    error("expected argument of type string, got " .. type(str))
  end
  local res, idx = parse(str, next_char(str, 1, space_chars, true))
  idx = next_char(str, idx, space_chars, true)
  if idx <= #str then
    decode_error(str, idx, "trailing garbage")
  end
  return res
end


return json
 end,
["classes.features.other.saveDataManager.loadFromDisk"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__StringTrim = ____lualib.__TS__StringTrim
local ____exports = {}
local readSaveDatFile, tryLoadModData, DEFAULT_MOD_DATA
local ____jsonHelpers = require("functions.jsonHelpers")
local jsonDecode = ____jsonHelpers.jsonDecode
local ____log = require("functions.log")
local log = ____log.log
local logError = ____log.logError
local ____merge = require("functions.merge")
local merge = ____merge.merge
local ____table = require("functions.table")
local iterateTableInOrder = ____table.iterateTableInOrder
local ____types = require("functions.types")
local isString = ____types.isString
local isTable = ____types.isTable
local ____constants = require("classes.features.other.saveDataManager.constants")
local SAVE_DATA_MANAGER_DEBUG = ____constants.SAVE_DATA_MANAGER_DEBUG
function readSaveDatFile(self, mod)
    local renderFrameCount = Isaac.GetFrameCount()
    local ok, jsonStringOrErrMsg = pcall(tryLoadModData, mod)
    if not ok then
        logError((("Failed to read from the \"save#.dat\" file on render frame " .. tostring(renderFrameCount)) .. ": ") .. jsonStringOrErrMsg)
        return DEFAULT_MOD_DATA
    end
    if jsonStringOrErrMsg == nil then
        return DEFAULT_MOD_DATA
    end
    local jsonStringTrimmed = __TS__StringTrim(jsonStringOrErrMsg)
    if jsonStringTrimmed == "" then
        return DEFAULT_MOD_DATA
    end
    return jsonStringTrimmed
end
function tryLoadModData(mod)
    return mod:LoadData()
end
DEFAULT_MOD_DATA = "{}"
function ____exports.loadFromDisk(self, mod, oldSaveData, classConstructors)
    if not mod:HasData() then
        return
    end
    local jsonString = readSaveDatFile(nil, mod)
    local newSaveData = jsonDecode(nil, jsonString)
    if SAVE_DATA_MANAGER_DEBUG then
        log("Converted data from the \"save#.dat\" to a Lua table.")
    end
    iterateTableInOrder(
        nil,
        newSaveData,
        function(____, subscriberName, saveData)
            if not isString(nil, subscriberName) then
                return
            end
            if not isTable(nil, saveData) then
                return
            end
            local oldSaveDataForSubscriber = oldSaveData[subscriberName]
            if oldSaveDataForSubscriber == nil then
                return
            end
            if SAVE_DATA_MANAGER_DEBUG then
                log("Merging in stored data for feature: " .. subscriberName)
            end
            merge(
                nil,
                oldSaveDataForSubscriber,
                saveData,
                subscriberName,
                classConstructors
            )
        end,
        SAVE_DATA_MANAGER_DEBUG
    )
    log("The save data manager loaded data from the \"save#.dat\" file for mod: " .. mod.Name)
end
return ____exports
 end,
["classes.features.other.saveDataManager.restoreDefaults"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local clearAndCopyAllElements, RESETTABLE_SAVE_DATA_KEYS
local ____SaveDataKey = require("enums.SaveDataKey")
local SaveDataKey = ____SaveDataKey.SaveDataKey
local ____SerializationType = require("enums.SerializationType")
local SerializationType = ____SerializationType.SerializationType
local ____deepCopy = require("functions.deepCopy")
local deepCopy = ____deepCopy.deepCopy
local ____log = require("functions.log")
local logError = ____log.logError
local ____table = require("functions.table")
local clearTable = ____table.clearTable
local iterateTableInOrder = ____table.iterateTableInOrder
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____constants = require("classes.features.other.saveDataManager.constants")
local SAVE_DATA_MANAGER_DEBUG = ____constants.SAVE_DATA_MANAGER_DEBUG
function ____exports.restoreDefaultsForAllFeaturesKey(self, saveDataMap, saveDataDefaultsMap, saveDataKey)
    iterateTableInOrder(
        nil,
        saveDataMap,
        function(____, subscriberName, saveData)
            ____exports.restoreDefaultForFeatureKey(
                nil,
                saveDataDefaultsMap,
                subscriberName,
                saveData,
                saveDataKey
            )
        end,
        SAVE_DATA_MANAGER_DEBUG
    )
end
function ____exports.restoreDefaultForFeatureKey(self, saveDataDefaultsMap, subscriberName, saveData, saveDataKey)
    if not RESETTABLE_SAVE_DATA_KEYS:has(saveDataKey) then
        error(("Failed to restore default values for a save data key of \"" .. saveDataKey) .. "\", since it is not on the allowed list of resettable save data keys.")
    end
    local childTable = saveData[saveDataKey]
    if childTable == nil then
        return
    end
    local saveDataDefaults = saveDataDefaultsMap[subscriberName]
    if saveDataDefaults == nil then
        logError("Failed to find the default copy of the save data for subscriber: " .. subscriberName)
        return
    end
    local childTableDefaults = saveDataDefaults[saveDataKey]
    if childTableDefaults == nil then
        logError(((("Failed to find the default copy of the child table \"" .. saveDataKey) .. "\" for subscriber \"") .. subscriberName) .. "\". This error usually means that your mod-specific save data is out of date. You can try purging all of your mod-specific save data by deleting the following directory: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Binding of Isaac Rebirth\\data")
        return
    end
    local childTableDefaultsCopy = deepCopy(nil, childTableDefaults, SerializationType.NONE, (subscriberName .. " --> ") .. saveDataKey)
    clearAndCopyAllElements(nil, childTable, childTableDefaultsCopy)
end
function clearAndCopyAllElements(self, oldTable, newTable)
    clearTable(nil, oldTable)
    for key, value in pairs(newTable) do
        oldTable[key] = value
    end
end
RESETTABLE_SAVE_DATA_KEYS = __TS__New(ReadonlySet, {SaveDataKey.RUN, SaveDataKey.LEVEL, SaveDataKey.ROOM})
function ____exports.restoreDefaultsForAllFeaturesAndKeys(self, saveDataMap, saveDataDefaultsMap)
    for ____, saveDataKey in __TS__Iterator(RESETTABLE_SAVE_DATA_KEYS) do
        ____exports.restoreDefaultsForAllFeaturesKey(nil, saveDataMap, saveDataDefaultsMap, saveDataKey)
    end
end
return ____exports
 end,
["classes.features.other.saveDataManager.saveToDisk"] = function(...) 
local ____exports = {}
local getAllSaveDataToWriteToDisk
local ____SerializationType = require("enums.SerializationType")
local SerializationType = ____SerializationType.SerializationType
local ____deepCopy = require("functions.deepCopy")
local deepCopy = ____deepCopy.deepCopy
local ____jsonHelpers = require("functions.jsonHelpers")
local jsonEncode = ____jsonHelpers.jsonEncode
local ____log = require("functions.log")
local log = ____log.log
local ____table = require("functions.table")
local isTableEmpty = ____table.isTableEmpty
local iterateTableInOrder = ____table.iterateTableInOrder
local ____constants = require("classes.features.other.saveDataManager.constants")
local SAVE_DATA_MANAGER_DEBUG = ____constants.SAVE_DATA_MANAGER_DEBUG
function getAllSaveDataToWriteToDisk(self, saveDataMap, saveDataConditionalFuncMap)
    local allSaveData = {}
    iterateTableInOrder(
        nil,
        saveDataMap,
        function(____, subscriberName, saveData)
            local conditionalFunc = saveDataConditionalFuncMap[subscriberName]
            if conditionalFunc ~= nil then
                local shouldSave = conditionalFunc(nil)
                if not shouldSave then
                    return
                end
            end
            local saveDataWithoutRoom = {persistent = saveData.persistent, run = saveData.run, level = saveData.level}
            if isTableEmpty(nil, saveDataWithoutRoom) then
                return
            end
            local saveDataCopy = deepCopy(nil, saveDataWithoutRoom, SerializationType.SERIALIZE, subscriberName)
            allSaveData[subscriberName] = saveDataCopy
        end,
        SAVE_DATA_MANAGER_DEBUG
    )
    return allSaveData
end
function ____exports.saveToDisk(self, mod, saveDataMap, saveDataConditionalFuncMap)
    local allSaveData = getAllSaveDataToWriteToDisk(nil, saveDataMap, saveDataConditionalFuncMap)
    local jsonString = jsonEncode(nil, allSaveData)
    mod:SaveData(jsonString)
    log("The save data manager wrote data to the \"save#.dat\" file for mod: " .. mod.Name)
end
return ____exports
 end,
["classes.features.other.SaveDataManager"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__TypeOf = ____lualib.__TS__TypeOf
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__ArraySort = ____lualib.__TS__ArraySort
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____SaveDataKey = require("enums.SaveDataKey")
local SaveDataKey = ____SaveDataKey.SaveDataKey
local ____SerializationType = require("enums.SerializationType")
local SerializationType = ____SerializationType.SerializationType
local ____deepCopy = require("functions.deepCopy")
local deepCopy = ____deepCopy.deepCopy
local ____frames = require("functions.frames")
local isAfterGameFrame = ____frames.isAfterGameFrame
local ____log = require("functions.log")
local log = ____log.log
local ____stage = require("functions.stage")
local onFirstFloor = ____stage.onFirstFloor
local ____tstlClass = require("functions.tstlClass")
local getTSTLClassName = ____tstlClass.getTSTLClassName
local isTSTLClass = ____tstlClass.isTSTLClass
local ____types = require("functions.types")
local isString = ____types.isString
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____glowingHourGlass = require("classes.features.other.saveDataManager.glowingHourGlass")
local makeGlowingHourGlassBackup = ____glowingHourGlass.makeGlowingHourGlassBackup
local restoreGlowingHourGlassBackup = ____glowingHourGlass.restoreGlowingHourGlassBackup
local ____loadFromDisk = require("classes.features.other.saveDataManager.loadFromDisk")
local loadFromDisk = ____loadFromDisk.loadFromDisk
local ____restoreDefaults = require("classes.features.other.saveDataManager.restoreDefaults")
local restoreDefaultForFeatureKey = ____restoreDefaults.restoreDefaultForFeatureKey
local restoreDefaultsForAllFeaturesAndKeys = ____restoreDefaults.restoreDefaultsForAllFeaturesAndKeys
local restoreDefaultsForAllFeaturesKey = ____restoreDefaults.restoreDefaultsForAllFeaturesKey
local ____saveToDisk = require("classes.features.other.saveDataManager.saveToDisk")
local saveToDisk = ____saveToDisk.saveToDisk
local NON_USER_DEFINED_CLASS_NAMES = __TS__New(ReadonlySet, {"Map", "Set", "DefaultMap"})
____exports.SaveDataManager = __TS__Class()
local SaveDataManager = ____exports.SaveDataManager
SaveDataManager.name = "SaveDataManager"
__TS__ClassExtends(SaveDataManager, Feature)
function SaveDataManager.prototype.____constructor(self, mod)
    Feature.prototype.____constructor(self)
    self.saveDataMap = {}
    self.saveDataDefaultsMap = {}
    self.saveDataConditionalFuncMap = {}
    self.saveDataGlowingHourGlassMap = {}
    self.classConstructors = {}
    self.inARun = false
    self.restoreGlowingHourGlassDataOnNextRoom = false
    self.postUseItemGlowingHourGlass = function(____, _collectibleType, _rng, _player, _useFlags, _activeSlot, _customVarData)
        self.restoreGlowingHourGlassDataOnNextRoom = true
        return nil
    end
    self.postPlayerInit = function(____, _player)
        if self.inARun then
            return
        end
        self.inARun = true
        self.restoreGlowingHourGlassDataOnNextRoom = false
        loadFromDisk(nil, self.mod, self.saveDataMap, self.classConstructors)
        local isContinued = isAfterGameFrame(nil, 0)
        if not isContinued then
            restoreDefaultsForAllFeaturesAndKeys(nil, self.saveDataMap, self.saveDataDefaultsMap)
        end
    end
    self.preGameExit = function()
        saveToDisk(nil, self.mod, self.saveDataMap, self.saveDataConditionalFuncMap)
        self.inARun = false
    end
    self.postNewLevel = function()
        restoreDefaultsForAllFeaturesKey(nil, self.saveDataMap, self.saveDataDefaultsMap, SaveDataKey.LEVEL)
        if not onFirstFloor(nil) then
            saveToDisk(nil, self.mod, self.saveDataMap, self.saveDataConditionalFuncMap)
        end
    end
    self.postNewRoomEarly = function()
        restoreDefaultsForAllFeaturesKey(nil, self.saveDataMap, self.saveDataDefaultsMap, SaveDataKey.ROOM)
        if self.restoreGlowingHourGlassDataOnNextRoom then
            self.restoreGlowingHourGlassDataOnNextRoom = false
            restoreGlowingHourGlassBackup(
                nil,
                self.saveDataMap,
                self.saveDataConditionalFuncMap,
                self.saveDataGlowingHourGlassMap,
                self.classConstructors
            )
        else
            makeGlowingHourGlassBackup(nil, self.saveDataMap, self.saveDataConditionalFuncMap, self.saveDataGlowingHourGlassMap)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_USE_ITEM, self.postUseItemGlowingHourGlass, {CollectibleType.GLOWING_HOUR_GLASS}}, {ModCallback.POST_PLAYER_INIT, self.postPlayerInit}, {ModCallback.PRE_GAME_EXIT, self.preGameExit}, {ModCallback.POST_NEW_LEVEL, self.postNewLevel}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_EARLY, self.postNewRoomEarly}}
    self.mod = mod
end
function SaveDataManager.prototype.saveDataManager(self, key, v, conditionalFunc)
    if isTSTLClass(nil, key) then
        local className = getTSTLClassName(nil, key)
        assertDefined(nil, className, "Failed to get the class name for the submitted class (as part of the \"key\" parameter) when registering new data with the save data manager.")
        key = className
    end
    if not isString(nil, key) then
        error("The save data manager requires that keys are strings or TSTL classes. You tried to use a key of type: " .. __TS__TypeOf(key))
    end
    if self.saveDataMap[key] ~= nil then
        error("The save data manager is already managing save data for a key of: " .. key)
    end
    self:storeClassConstructorsFromObject(v)
    self.saveDataMap[key] = v
    if conditionalFunc == false then
        conditionalFunc = function() return false end
    end
    local saveDataKeys = __TS__ObjectKeys(v)
    if #saveDataKeys == 1 and saveDataKeys[1] == "room" then
        conditionalFunc = function() return false end
    end
    local saveDataCopy = deepCopy(nil, v, SerializationType.NONE, key)
    self.saveDataDefaultsMap[key] = saveDataCopy
    if conditionalFunc ~= nil then
        self.saveDataConditionalFuncMap[key] = conditionalFunc
    end
end
__TS__DecorateLegacy({Exported}, SaveDataManager.prototype, "saveDataManager", true)
function SaveDataManager.prototype.storeClassConstructorsFromObject(self, luaMap)
    local tstlClassName = getTSTLClassName(nil, luaMap)
    if tstlClassName ~= nil and not NON_USER_DEFINED_CLASS_NAMES:has(tstlClassName) then
        self.classConstructors[tstlClassName] = luaMap
    end
    for _key, value in pairs(luaMap) do
        if isTable(nil, value) then
            self:storeClassConstructorsFromObject(value)
        end
    end
end
function SaveDataManager.prototype.saveDataManagerLoad(self)
    loadFromDisk(nil, self.mod, self.saveDataMap, self.classConstructors)
end
__TS__DecorateLegacy({Exported}, SaveDataManager.prototype, "saveDataManagerLoad", true)
function SaveDataManager.prototype.saveDataManagerSave(self)
    saveToDisk(nil, self.mod, self.saveDataMap, self.saveDataConditionalFuncMap)
end
__TS__DecorateLegacy({Exported}, SaveDataManager.prototype, "saveDataManagerSave", true)
function SaveDataManager.prototype.saveDataManagerSetGlobal(self)
    g = self.saveDataMap
end
__TS__DecorateLegacy({Exported}, SaveDataManager.prototype, "saveDataManagerSetGlobal", true)
function SaveDataManager.prototype.saveDataManagerRegisterClass(self, ...)
    local tstlClasses = {...}
    for ____, tstlClass in ipairs(tstlClasses) do
        local name = tstlClass.name
        assertDefined(nil, name, "Failed to register a class with the save data manager due to not being able to derive the name of the class.")
        self.classConstructors[name] = tstlClass
    end
end
__TS__DecorateLegacy({Exported}, SaveDataManager.prototype, "saveDataManagerRegisterClass", true)
function SaveDataManager.prototype.saveDataManagerRemove(self, key)
    if not isString(nil, key) then
        error("The save data manager requires that keys are strings. You tried to use a key of type: " .. __TS__TypeOf(key))
    end
    if not (self.saveDataMap[key] ~= nil) then
        error("The save data manager is not managing save data for a key of: " .. key)
    end
    self.saveDataMap[key] = nil
    self.saveDataDefaultsMap[key] = nil
    self.saveDataConditionalFuncMap[key] = nil
    self.saveDataGlowingHourGlassMap[key] = nil
end
__TS__DecorateLegacy({Exported}, SaveDataManager.prototype, "saveDataManagerRemove", true)
function SaveDataManager.prototype.saveDataManagerReset(self, key, childObjectKey)
    if not isString(nil, key) then
        error("The save data manager requires that keys are strings. You tried to use a key of type: " .. __TS__TypeOf(key))
    end
    local saveData = self.saveDataMap[key]
    assertDefined(nil, saveData, "The save data manager is not managing save data for a key of: " .. key)
    restoreDefaultForFeatureKey(
        nil,
        self.saveDataDefaultsMap,
        key,
        saveData,
        childObjectKey
    )
end
__TS__DecorateLegacy({Exported}, SaveDataManager.prototype, "saveDataManagerReset", true)
function SaveDataManager.prototype.saveDataManagerInMenu(self)
    return not self.inARun
end
__TS__DecorateLegacy({Exported}, SaveDataManager.prototype, "saveDataManagerInMenu", true)
function SaveDataManager.prototype.saveDataManagerLogSubscribers(self)
    log("List of save data manager subscribers:")
    local keys = __TS__ObjectKeys(self.saveDataMap)
    __TS__ArraySort(keys)
    for ____, key in ipairs(keys) do
        log("- " .. key)
    end
end
__TS__DecorateLegacy({Exported}, SaveDataManager.prototype, "saveDataManagerLogSubscribers", true)
return ____exports
 end,
["classes.features.other.PickupIndexCreation"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local getStoredPickupIndex
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____entities = require("functions.entities")
local getEntityID = ____entities.getEntityID
local ____frames = require("functions.frames")
local onOrBeforeRoomFrame = ____frames.onOrBeforeRoomFrame
local ____roomData = require("functions.roomData")
local getRoomListIndex = ____roomData.getRoomListIndex
local ____stage = require("functions.stage")
local onAscent = ____stage.onAscent
local ____vector = require("functions.vector")
local vectorEquals = ____vector.vectorEquals
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
function getStoredPickupIndex(self, pickup, pickupDescriptions)
    for ____, ____value in __TS__Iterator(pickupDescriptions) do
        local pickupIndex = ____value[1]
        local pickupDescription = ____value[2]
        if vectorEquals(nil, pickupDescription.position, pickup.Position) and pickupDescription.initSeed == pickup.InitSeed then
            return pickupIndex
        end
    end
    return nil
end
local v = {
    run = {
        pickupCounter = 0,
        pickupDataTreasureRooms = __TS__New(Map),
        pickupDataBossRooms = __TS__New(Map)
    },
    level = {pickupData = __TS__New(
        DefaultMap,
        function() return __TS__New(Map) end
    )},
    room = {pickupIndexes = __TS__New(Map)}
}
____exports.PickupIndexCreation = __TS__Class()
local PickupIndexCreation = ____exports.PickupIndexCreation
PickupIndexCreation.name = "PickupIndexCreation"
__TS__ClassExtends(PickupIndexCreation, Feature)
function PickupIndexCreation.prototype.____constructor(self, roomHistory, saveDataManager)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postPickupInit = function(____, pickup)
        self:setPickupIndex(pickup)
    end
    self.postEntityRemovePickup = function(____, entity)
        self:checkDespawningFromPlayerLeavingRoom(entity)
    end
    self.featuresUsed = {ISCFeature.ROOM_HISTORY, ISCFeature.SAVE_DATA_MANAGER}
    self.callbacksUsed = {{ModCallback.POST_PICKUP_INIT, self.postPickupInit}, {ModCallback.POST_ENTITY_REMOVE, self.postEntityRemovePickup, {EntityType.PICKUP}}}
    self.roomHistory = roomHistory
    self.saveDataManager = saveDataManager
end
function PickupIndexCreation.prototype.setPickupIndex(self, pickup)
    local ptrHash = GetPtrHash(pickup)
    if v.room.pickupIndexes:has(ptrHash) then
        return
    end
    local pickupIndexFromLevelData = self:getPickupIndexFromPreviousData(pickup)
    local room = game:GetRoom()
    local isFirstVisit = room:IsFirstVisit()
    if pickupIndexFromLevelData ~= nil and not isFirstVisit and onOrBeforeRoomFrame(nil, 0) then
        v.room.pickupIndexes:set(ptrHash, pickupIndexFromLevelData)
        return
    end
    local ____v_run_0, ____pickupCounter_1 = v.run, "pickupCounter"
    ____v_run_0[____pickupCounter_1] = ____v_run_0[____pickupCounter_1] + 1
    v.room.pickupIndexes:set(ptrHash, v.run.pickupCounter)
end
function PickupIndexCreation.prototype.getPickupIndexFromPreviousData(self, pickup)
    local roomListIndex = getRoomListIndex(nil)
    local pickupDescriptions = v.level.pickupData:getAndSetDefault(roomListIndex)
    local pickupIndex = getStoredPickupIndex(nil, pickup, pickupDescriptions)
    if pickupIndex == nil then
        pickupIndex = self:getPostAscentPickupIndex(pickup)
    end
    return pickupIndex
end
function PickupIndexCreation.prototype.checkDespawningFromPlayerLeavingRoom(self, entity)
    local ptrHash = GetPtrHash(entity)
    local pickupIndex = v.room.pickupIndexes:get(ptrHash)
    if pickupIndex == nil then
        return
    end
    if not self.roomHistory:isLeavingRoom() then
        return
    end
    self:trackDespawningPickupMetadata(entity, pickupIndex)
end
function PickupIndexCreation.prototype.trackDespawningPickupMetadata(self, entity, pickupIndex)
    local previousRoomDescription = self.roomHistory:getLatestRoomDescription()
    if previousRoomDescription == nil then
        return
    end
    local previousRoomListIndex = previousRoomDescription.roomListIndex
    local pickupDescriptions = v.level.pickupData:getAndSetDefault(previousRoomListIndex)
    local pickupDescription = {position = entity.Position, initSeed = entity.InitSeed}
    pickupDescriptions:set(pickupIndex, pickupDescription)
    local pickupDataMapForCurrentRoom = self:getPickupDataMapForCurrentRoom()
    if pickupDataMapForCurrentRoom ~= nil then
        pickupDataMapForCurrentRoom:set(pickupIndex, pickupDescription)
    end
    if self.saveDataManager:saveDataManagerInMenu() then
        self.saveDataManager:saveDataManagerSave()
    end
end
function PickupIndexCreation.prototype.getPickupDataMapForCurrentRoom(self)
    if onAscent(nil) then
        return nil
    end
    local room = game:GetRoom()
    local roomType = room:GetType()
    repeat
        local ____switch20 = roomType
        local ____cond20 = ____switch20 == RoomType.TREASURE
        if ____cond20 then
            do
                return v.run.pickupDataTreasureRooms
            end
        end
        ____cond20 = ____cond20 or ____switch20 == RoomType.BOSS
        if ____cond20 then
            do
                return v.run.pickupDataBossRooms
            end
        end
        do
            do
                return nil
            end
        end
    until true
end
function PickupIndexCreation.prototype.getPostAscentPickupIndex(self, pickup)
    if not onAscent(nil) then
        return nil
    end
    local room = game:GetRoom()
    local roomType = room:GetType()
    repeat
        local ____switch26 = roomType
        local ____cond26 = ____switch26 == RoomType.TREASURE
        if ____cond26 then
            do
                return getStoredPickupIndex(nil, pickup, v.run.pickupDataTreasureRooms)
            end
        end
        ____cond26 = ____cond26 or ____switch26 == RoomType.BOSS
        if ____cond26 then
            do
                return getStoredPickupIndex(nil, pickup, v.run.pickupDataBossRooms)
            end
        end
        do
            do
                return nil
            end
        end
    until true
end
function PickupIndexCreation.prototype.getPickupIndex(self, pickup)
    local ptrHash = GetPtrHash(pickup)
    local pickupIndexInitial = v.room.pickupIndexes:get(ptrHash)
    if pickupIndexInitial ~= nil then
        return pickupIndexInitial
    end
    self:setPickupIndex(pickup)
    local pickupIndex = v.room.pickupIndexes:get(ptrHash)
    if pickupIndex ~= nil then
        return pickupIndex
    end
    local entityID = getEntityID(nil, pickup)
    error("Failed to generate a new pickup index for pickup: " .. entityID)
end
__TS__DecorateLegacy({Exported}, PickupIndexCreation.prototype, "getPickupIndex", true)
return ____exports
 end,
["classes.features.callbackLogic.PickupChangeDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {room = {
    pickupVariants = __TS__New(Map),
    pickupSubTypes = __TS__New(Map)
}}
____exports.PickupChangeDetection = __TS__Class()
local PickupChangeDetection = ____exports.PickupChangeDetection
PickupChangeDetection.name = "PickupChangeDetection"
__TS__ClassExtends(PickupChangeDetection, Feature)
function PickupChangeDetection.prototype.____constructor(self, postPickupChanged, pickupIndexCreation)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postPickupUpdate = function(____, pickup)
        local pickupIndex = self.pickupIndexCreation:getPickupIndex(pickup)
        local oldVariant = v.room.pickupVariants:get(pickupIndex)
        v.room.pickupVariants:set(pickupIndex, pickup.Variant)
        local oldSubType = v.room.pickupSubTypes:get(pickupIndex)
        v.room.pickupSubTypes:set(pickupIndex, pickup.SubType)
        if oldVariant == nil or oldSubType == nil then
            return
        end
        if oldVariant ~= pickup.Variant or oldSubType ~= pickup.SubType then
            self.postPickupChanged:fire(
                pickup,
                oldVariant,
                oldSubType,
                pickup.Variant,
                pickup.SubType
            )
        end
    end
    self.featuresUsed = {ISCFeature.PICKUP_INDEX_CREATION}
    self.callbacksUsed = {{ModCallback.POST_PICKUP_UPDATE, self.postPickupUpdate}}
    self.postPickupChanged = postPickupChanged
    self.pickupIndexCreation = pickupIndexCreation
end
return ____exports
 end,
["objects.cardDescriptions"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CardType = ____isaac_2Dtypescript_2Ddefinitions.CardType
____exports.DEFAULT_CARD_DESCRIPTION = "Unknown"
--- This is a temporary map due to missing features in the vanilla API.
____exports.CARD_DESCRIPTIONS = {
    [CardType.NULL] = ____exports.DEFAULT_CARD_DESCRIPTION,
    [CardType.FOOL] = "Where journey begins",
    [CardType.MAGICIAN] = "May you never miss your goal",
    [CardType.HIGH_PRIESTESS] = "Mother is watching you",
    [CardType.EMPRESS] = "May your rage bring power",
    [CardType.EMPEROR] = "Challenge me!",
    [CardType.HIEROPHANT] = "Two prayers for the lost",
    [CardType.LOVERS] = "May you prosper and be in good health",
    [CardType.CHARIOT] = "May nothing stand before you",
    [CardType.JUSTICE] = "May your future become balanced",
    [CardType.HERMIT] = "May you see what life has to offer",
    [CardType.WHEEL_OF_FORTUNE] = "Spin the wheel of destiny",
    [CardType.STRENGTH] = "May your power bring rage",
    [CardType.HANGED_MAN] = "May you find enlightenment ",
    [CardType.DEATH] = "Lay waste to all that oppose you ",
    [CardType.TEMPERANCE] = "May you be pure in heart",
    [CardType.DEVIL] = "Revel in the power of darkness",
    [CardType.TOWER] = "Destruction brings creation",
    [CardType.STARS] = "May you find what you desire ",
    [CardType.MOON] = "May you find all you have lost",
    [CardType.SUN] = "May the light heal and enlighten you",
    [CardType.JUDGEMENT] = "Judge lest ye be judged",
    [CardType.WORLD] = "Open your eyes and see",
    [CardType.TWO_OF_CLUBS] = "Item multiplier",
    [CardType.TWO_OF_DIAMONDS] = "Item multiplier",
    [CardType.TWO_OF_SPADES] = "Item multiplier",
    [CardType.TWO_OF_HEARTS] = "Item multiplier",
    [CardType.ACE_OF_CLUBS] = "Convert all",
    [CardType.ACE_OF_DIAMONDS] = "Convert all",
    [CardType.ACE_OF_SPADES] = "Convert all",
    [CardType.ACE_OF_HEARTS] = "Convert all",
    [CardType.JOKER] = "???",
    [CardType.RUNE_HAGALAZ] = "Destruction",
    [CardType.RUNE_JERA] = "Abundance",
    [CardType.RUNE_EHWAZ] = "Passage",
    [CardType.RUNE_DAGAZ] = "Purity",
    [CardType.RUNE_ANSUZ] = "Vision",
    [CardType.RUNE_PERTHRO] = "Change",
    [CardType.RUNE_BERKANO] = "Companionship",
    [CardType.RUNE_ALGIZ] = "Resistance",
    [CardType.RUNE_BLANK] = "???",
    [CardType.RUNE_BLACK] = "Void",
    [CardType.CHAOS] = "???",
    [CardType.CREDIT] = "Charge it!",
    [CardType.RULES] = "???",
    [CardType.AGAINST_HUMANITY] = "Something stinks...",
    [CardType.SUICIDE_KING] = "A true ending?",
    [CardType.GET_OUT_OF_JAIL_FREE] = "Open Sesame",
    [CardType.QUESTION_MARK] = "Double active",
    [CardType.DICE_SHARD] = "D6 + D20",
    [CardType.EMERGENCY_CONTACT] = "Help from above",
    [CardType.HOLY] = "You feel protected",
    [CardType.HUGE_GROWTH] = "Become immense!",
    [CardType.ANCIENT_RECALL] = "Draw 3 cards",
    [CardType.ERA_WALK] = "Savor the moment",
    [CardType.RUNE_SHARD] = "It still glows faintly",
    [CardType.REVERSE_FOOL] = "Let go and move on",
    [CardType.REVERSE_MAGICIAN] = "May no harm come to you",
    [CardType.REVERSE_HIGH_PRIESTESS] = "Run",
    [CardType.REVERSE_EMPRESS] = "May your love bring protection",
    [CardType.REVERSE_EMPEROR] = "May you find a worthy opponent",
    [CardType.REVERSE_HIEROPHANT] = "Two prayers for the forgotten",
    [CardType.REVERSE_LOVERS] = "May your heart shatter into pieces",
    [CardType.REVERSE_CHARIOT] = "May nothing walk past you",
    [CardType.REVERSE_JUSTICE] = "May your sins come back to torment you",
    [CardType.REVERSE_HERMIT] = "May you see the value of all things in life",
    [CardType.REVERSE_WHEEL_OF_FORTUNE] = "Throw the dice of fate",
    [CardType.REVERSE_STRENGTH] = "May you break their resolve",
    [CardType.REVERSE_HANGED_MAN] = "May your greed know no bounds",
    [CardType.REVERSE_DEATH] = "May life spring forth from the fallen",
    [CardType.REVERSE_TEMPERANCE] = "May your hunger be satiated",
    [CardType.REVERSE_DEVIL] = "Bask in the light of your mercy",
    [CardType.REVERSE_TOWER] = "Creation brings destruction",
    [CardType.REVERSE_STARS] = "May your loss bring fortune",
    [CardType.REVERSE_MOON] = "May you remember lost memories",
    [CardType.REVERSE_SUN] = "May the darkness swallow all around you",
    [CardType.REVERSE_JUDGEMENT] = "May you redeem those found wanting",
    [CardType.REVERSE_WORLD] = "Step into the abyss",
    [CardType.CRACKED_KEY] = "???",
    [CardType.QUEEN_OF_HEARTS] = "<3",
    [CardType.WILD] = "Again",
    [CardType.SOUL_OF_ISAAC] = "Reroll... or not",
    [CardType.SOUL_OF_MAGDALENE] = "Give me your love!",
    [CardType.SOUL_OF_CAIN] = "Opens the unopenable",
    [CardType.SOUL_OF_JUDAS] = "Right behind you",
    [CardType.SOUL_OF_BLUE_BABY] = "Chemical warfare",
    [CardType.SOUL_OF_EVE] = "Your very own murder",
    [CardType.SOUL_OF_SAMSON] = "Slay a thousand",
    [CardType.SOUL_OF_AZAZEL] = "Demon rage!",
    [CardType.SOUL_OF_LAZARUS] = "Life after death",
    [CardType.SOUL_OF_EDEN] = "Embrace chaos",
    [CardType.SOUL_OF_LOST] = "Leave your body behind",
    [CardType.SOUL_OF_LILITH] = "Motherhood",
    [CardType.SOUL_OF_KEEPER] = "$$$",
    [CardType.SOUL_OF_APOLLYON] = "Bringer of calamity",
    [CardType.SOUL_OF_FORGOTTEN] = "Skeletal protector",
    [CardType.SOUL_OF_BETHANY] = "Friends from beyond",
    [CardType.SOUL_OF_JACOB_AND_ESAU] = "Bound by blood"
}
return ____exports
 end,
["objects.cardNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CardType = ____isaac_2Dtypescript_2Ddefinitions.CardType
____exports.DEFAULT_CARD_NAME = "Unknown"
--- This is a temporary map due to missing features in the vanilla API.
____exports.CARD_NAMES = {
    [CardType.NULL] = ____exports.DEFAULT_CARD_NAME,
    [CardType.FOOL] = "0 - The Fool",
    [CardType.MAGICIAN] = "I - The Magician",
    [CardType.HIGH_PRIESTESS] = "II - The High Priestess",
    [CardType.EMPRESS] = "III - The Empress",
    [CardType.EMPEROR] = "IV - The Emperor",
    [CardType.HIEROPHANT] = "V - The Hierophant",
    [CardType.LOVERS] = "VI - The Lovers",
    [CardType.CHARIOT] = "VII - The Chariot",
    [CardType.JUSTICE] = "VIII - Justice",
    [CardType.HERMIT] = "IX - The Hermit",
    [CardType.WHEEL_OF_FORTUNE] = "X - Wheel of Fortune",
    [CardType.STRENGTH] = "XI - Strength",
    [CardType.HANGED_MAN] = "XII - The Hanged Man",
    [CardType.DEATH] = "XIII - Death",
    [CardType.TEMPERANCE] = "XIV - Temperance",
    [CardType.DEVIL] = "XV - The Devil",
    [CardType.TOWER] = "XVI - The Tower",
    [CardType.STARS] = "XVII - The Stars",
    [CardType.MOON] = "XVIII - The Moon",
    [CardType.SUN] = "XIX - The Sun",
    [CardType.JUDGEMENT] = "XX - Judgement",
    [CardType.WORLD] = "XXI - The World",
    [CardType.TWO_OF_CLUBS] = "2 of Clubs",
    [CardType.TWO_OF_DIAMONDS] = "2 of Diamonds",
    [CardType.TWO_OF_SPADES] = "2 of Spades",
    [CardType.TWO_OF_HEARTS] = "2 of Hearts",
    [CardType.ACE_OF_CLUBS] = "Ace of Clubs",
    [CardType.ACE_OF_DIAMONDS] = "Ace of Diamonds",
    [CardType.ACE_OF_SPADES] = "Ace of Spades",
    [CardType.ACE_OF_HEARTS] = "Ace of Hearts",
    [CardType.JOKER] = "Joker",
    [CardType.RUNE_HAGALAZ] = "Hagalaz",
    [CardType.RUNE_JERA] = "Jera",
    [CardType.RUNE_EHWAZ] = "Ehwaz",
    [CardType.RUNE_DAGAZ] = "Dagaz",
    [CardType.RUNE_ANSUZ] = "Ansuz",
    [CardType.RUNE_PERTHRO] = "Perthro",
    [CardType.RUNE_BERKANO] = "Berkano",
    [CardType.RUNE_ALGIZ] = "Algiz",
    [CardType.RUNE_BLANK] = "Blank Rune",
    [CardType.RUNE_BLACK] = "Black Rune",
    [CardType.CHAOS] = "Chaos Card",
    [CardType.CREDIT] = "Credit Card",
    [CardType.RULES] = "Rules Card",
    [CardType.AGAINST_HUMANITY] = "A Card Against Humanity",
    [CardType.SUICIDE_KING] = "Suicide King",
    [CardType.GET_OUT_OF_JAIL_FREE] = "Get Out Of Jail Free Card",
    [CardType.QUESTION_MARK] = "? Card",
    [CardType.DICE_SHARD] = "Dice Shard",
    [CardType.EMERGENCY_CONTACT] = "Emergency Contact",
    [CardType.HOLY] = "Holy Card",
    [CardType.HUGE_GROWTH] = "Huge Growth",
    [CardType.ANCIENT_RECALL] = "Ancient Recall",
    [CardType.ERA_WALK] = "Era Walk",
    [CardType.RUNE_SHARD] = "Rune Shard",
    [CardType.REVERSE_FOOL] = "0 - The Fool?",
    [CardType.REVERSE_MAGICIAN] = "I - The Magician?",
    [CardType.REVERSE_HIGH_PRIESTESS] = "II - The High Priestess?",
    [CardType.REVERSE_EMPRESS] = "III - The Empress?",
    [CardType.REVERSE_EMPEROR] = "IV - The Emperor?",
    [CardType.REVERSE_HIEROPHANT] = "V - The Hierophant?",
    [CardType.REVERSE_LOVERS] = "VI - The Lovers?",
    [CardType.REVERSE_CHARIOT] = "VII - The Chariot?",
    [CardType.REVERSE_JUSTICE] = "VIII - Justice?",
    [CardType.REVERSE_HERMIT] = "IX - The Hermit?",
    [CardType.REVERSE_WHEEL_OF_FORTUNE] = "X - Wheel of Fortune?",
    [CardType.REVERSE_STRENGTH] = "XI - Strength?",
    [CardType.REVERSE_HANGED_MAN] = "XII - The Hanged Man?",
    [CardType.REVERSE_DEATH] = "XIII - Death?",
    [CardType.REVERSE_TEMPERANCE] = "XIV - Temperance?",
    [CardType.REVERSE_DEVIL] = "XV - The Devil?",
    [CardType.REVERSE_TOWER] = "XVI - The Tower?",
    [CardType.REVERSE_STARS] = "XVII - The Stars?",
    [CardType.REVERSE_MOON] = "XVIII - The Moon?",
    [CardType.REVERSE_SUN] = "XIX - The Sun?",
    [CardType.REVERSE_JUDGEMENT] = "XX - Judgement?",
    [CardType.REVERSE_WORLD] = "XXI - The World?",
    [CardType.CRACKED_KEY] = "Cracked Key",
    [CardType.QUEEN_OF_HEARTS] = "Queen of Hearts",
    [CardType.WILD] = "Wild Card",
    [CardType.SOUL_OF_ISAAC] = "Soul of Isaac",
    [CardType.SOUL_OF_MAGDALENE] = "Soul of Magdalene",
    [CardType.SOUL_OF_CAIN] = "Soul of Cain",
    [CardType.SOUL_OF_JUDAS] = "Soul of Judas",
    [CardType.SOUL_OF_BLUE_BABY] = "Soul of ???",
    [CardType.SOUL_OF_EVE] = "Soul of Eve",
    [CardType.SOUL_OF_SAMSON] = "Soul of Samson",
    [CardType.SOUL_OF_AZAZEL] = "Soul of Azazel",
    [CardType.SOUL_OF_LAZARUS] = "Soul of Lazarus",
    [CardType.SOUL_OF_EDEN] = "Soul of Eden",
    [CardType.SOUL_OF_LOST] = "Soul of the Lost",
    [CardType.SOUL_OF_LILITH] = "Soul of Lilith",
    [CardType.SOUL_OF_KEEPER] = "Soul of the Keeper",
    [CardType.SOUL_OF_APOLLYON] = "Soul of Apollyon",
    [CardType.SOUL_OF_FORGOTTEN] = "Soul of the Forgotten",
    [CardType.SOUL_OF_BETHANY] = "Soul of Bethany",
    [CardType.SOUL_OF_JACOB_AND_ESAU] = "Soul of Jacob and Esau"
}
return ____exports
 end,
["sets.itemConfigCardTypesForCards"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemConfigCardType = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigCardType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
--- The set of all `ItemConfigCardType` values that are not a rune or special object.
____exports.ITEM_CONFIG_CARD_TYPES_FOR_CARDS = __TS__New(ReadonlySet, {ItemConfigCardType.TAROT, ItemConfigCardType.SUIT, ItemConfigCardType.SPECIAL, ItemConfigCardType.TAROT_REVERSE})
return ____exports
 end,
["functions.cards"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemConfigCardType = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigCardType
local UseFlag = ____isaac_2Dtypescript_2Ddefinitions.UseFlag
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local POCKET_ITEM_SLOT_VALUES = ____cachedEnumValues.POCKET_ITEM_SLOT_VALUES
local ____cachedClasses = require("core.cachedClasses")
local itemConfig = ____cachedClasses.itemConfig
local ____constantsFirstLast = require("core.constantsFirstLast")
local LAST_VANILLA_CARD_TYPE = ____constantsFirstLast.LAST_VANILLA_CARD_TYPE
local ____cardDescriptions = require("objects.cardDescriptions")
local CARD_DESCRIPTIONS = ____cardDescriptions.CARD_DESCRIPTIONS
local DEFAULT_CARD_DESCRIPTION = ____cardDescriptions.DEFAULT_CARD_DESCRIPTION
local ____cardNames = require("objects.cardNames")
local CARD_NAMES = ____cardNames.CARD_NAMES
local DEFAULT_CARD_NAME = ____cardNames.DEFAULT_CARD_NAME
local ____itemConfigCardTypesForCards = require("sets.itemConfigCardTypesForCards")
local ITEM_CONFIG_CARD_TYPES_FOR_CARDS = ____itemConfigCardTypesForCards.ITEM_CONFIG_CARD_TYPES_FOR_CARDS
local ____flag = require("functions.flag")
local addFlag = ____flag.addFlag
local ____types = require("functions.types")
local asCardType = ____types.asCardType
function ____exports.isVanillaCardType(self, cardType)
    return cardType <= LAST_VANILLA_CARD_TYPE
end
--- Helper function to get a card description from a `CardType` value. Returns "Unknown" if the
-- provided card type is not valid.
-- 
-- This function works for both vanilla and modded trinkets.
-- 
-- For example, `getCardDescription(CardType.FOOL)` would return "Where journey begins".
function ____exports.getCardDescription(self, cardType)
    local cardDescription = CARD_DESCRIPTIONS[cardType]
    if cardDescription ~= nil then
        return cardDescription
    end
    local itemConfigCard = itemConfig:GetCard(cardType)
    if itemConfigCard ~= nil then
        return itemConfigCard.Description
    end
    return DEFAULT_CARD_DESCRIPTION
end
--- Helper function to get the name of a card. Returns "Unknown" if the provided card type is not
-- valid.
-- 
-- This function works for both vanilla and modded trinkets.
-- 
-- For example, `getCardName(Card.FOOL)` would return "0 - The Fool".
function ____exports.getCardName(self, cardType)
    local cardName = CARD_NAMES[cardType]
    if cardName ~= nil then
        return cardName
    end
    local itemConfigCard = itemConfig:GetCard(cardType)
    if itemConfigCard ~= nil then
        return itemConfigCard.Name
    end
    return DEFAULT_CARD_NAME
end
--- Helper function to get the item config card type of a particular card, rune, or object. For
-- example, the item config card type of `CardType.FOOL` is equal to `ItemConfigCardType.TAROT`.
-- 
-- Returns undefined if the provided card type was not valid.
function ____exports.getItemConfigCardType(self, cardType)
    local itemConfigCard = itemConfig:GetCard(cardType)
    if itemConfigCard == nil then
        return nil
    end
    return itemConfigCard.CardType
end
--- Helper function to check if a player is holding a specific card in one of their pocket item
-- slots.
-- 
-- This function is variadic, meaning that you can pass as many cards as you want to check for. The
-- function will return true if the player has any of the cards.
function ____exports.hasCard(self, player, ...)
    local cardTypes = {...}
    local cardTypesSet = __TS__New(Set, cardTypes)
    return __TS__ArraySome(
        POCKET_ITEM_SLOT_VALUES,
        function(____, pocketItemSlot)
            local cardType = player:GetCard(pocketItemSlot)
            return cardTypesSet:has(cardType)
        end
    )
end
--- Returns true for card types that have the following item config card type:
-- 
-- - `ItemConfigCardType.TAROT` (0)
-- - `ItemConfigCardType.SUIT` (1)
-- - `ItemConfigCardType.SPECIAL` (3)
-- - `ItemConfigCardType.TAROT_REVERSE` (5)
function ____exports.isCard(self, cardType)
    local itemConfigCardType = ____exports.getItemConfigCardType(nil, cardType)
    if itemConfigCardType == nil then
        return false
    end
    return ITEM_CONFIG_CARD_TYPES_FOR_CARDS:has(itemConfigCardType)
end
--- Returns whether the given card type matches the specified item config card type.
function ____exports.isCardType(self, cardType, itemConfigCardType)
    return itemConfigCardType == ____exports.getItemConfigCardType(nil, cardType)
end
--- Returns true for any card type added by a mod.
function ____exports.isModdedCardType(self, cardType)
    return not ____exports.isVanillaCardType(nil, cardType)
end
--- Returns true for card types that have `ItemConfigCardType.SPECIAL_OBJECT`.
function ____exports.isPocketItemObject(self, cardType)
    return ____exports.isCardType(nil, cardType, ItemConfigCardType.SPECIAL_OBJECT)
end
--- Returns true for card types that have `ItemConfigCardType.TAROT_REVERSE`.
function ____exports.isReverseTarotCard(self, cardType)
    return ____exports.isCardType(nil, cardType, ItemConfigCardType.TAROT_REVERSE)
end
--- Returns true for card types that have `ItemConfigCardType.RUNE`.
function ____exports.isRune(self, cardType)
    return ____exports.isCardType(nil, cardType, ItemConfigCardType.RUNE)
end
--- Returns true for card types that have `ItemConfigCardType.SPECIAL`.
function ____exports.isSpecialCard(self, cardType)
    return ____exports.isCardType(nil, cardType, ItemConfigCardType.SPECIAL)
end
--- Returns true for card types that have `ItemConfigCardType.SUIT`.
function ____exports.isSuitCard(self, cardType)
    return ____exports.isCardType(nil, cardType, ItemConfigCardType.SUIT)
end
--- Returns true for card types that have `ItemConfigCardType.TAROT`.
function ____exports.isTarotCard(self, cardType)
    return ____exports.isCardType(nil, cardType, ItemConfigCardType.TAROT)
end
function ____exports.isValidCardType(self, cardType)
    local potentialCardType = asCardType(nil, cardType)
    local itemConfigCard = itemConfig:GetCard(potentialCardType)
    return itemConfigCard ~= nil
end
--- Helper function to use a card without showing an animation and without the announcer voice
-- playing.
function ____exports.useCardTemp(self, player, cardType)
    local useFlags = addFlag(nil, UseFlag.NO_ANIMATION, UseFlag.NO_ANNOUNCER_VOICE)
    player:UseCard(cardType, useFlags)
end
return ____exports
 end,
["functions.collectibleTag"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemConfigTag = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigTag
local ____cachedClasses = require("core.cachedClasses")
local itemConfig = ____cachedClasses.itemConfig
local ____types = require("functions.types")
local isInteger = ____types.isInteger
function ____exports.collectibleHasTag(self, collectibleOrCollectibleType, tag)
    local collectibleType = isInteger(nil, collectibleOrCollectibleType) and collectibleOrCollectibleType or collectibleOrCollectibleType.SubType
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    if itemConfigItem == nil then
        return false
    end
    return itemConfigItem:HasTags(tag)
end
function ____exports.isQuestCollectible(self, collectibleOrCollectibleType)
    local collectibleType = isInteger(nil, collectibleOrCollectibleType) and collectibleOrCollectibleType or collectibleOrCollectibleType.SubType
    return ____exports.collectibleHasTag(nil, collectibleType, ItemConfigTag.QUEST)
end
return ____exports
 end,
["functions.set"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__New = ____lualib.__TS__New
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__Spread = ____lualib.__TS__Spread
local __TS__ArraySort = ____lualib.__TS__ArraySort
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
local __TS__ObjectValues = ____lualib.__TS__ObjectValues
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____array = require("functions.array")
local getArrayCombinations = ____array.getArrayCombinations
local getRandomArrayElement = ____array.getRandomArrayElement
local sumArray = ____array.sumArray
local ____types = require("functions.types")
local isPrimitive = ____types.isPrimitive
--- Helper function to get a sorted array based on the contents of a set.
-- 
-- Normally, set values are returned in insertion order, so use this function when the ordering of
-- the contents is important.
function ____exports.getSortedSetValues(self, set)
    local values = {__TS__Spread(set)}
    local firstElement = values[1]
    if firstElement ~= nil then
        local arrayType = type(firstElement)
        if not isPrimitive(nil, arrayType) then
            error(("Failed to get the sorted set values because the provided set was of type \"" .. tostring(arrayType)) .. "\". Having sets with non-primitive types doesn't make much sense in general, so you might need to rethink what you are doing.")
        end
    end
    __TS__ArraySort(values)
    return values
end
--- Helper function to convert the keys of an object to a set.
-- 
-- Note that the set values will be inserted in a random order, due to how `pairs` works under the
-- hood.
-- 
-- Also see the `objectKeysToReadonlySet` function.
function ____exports.objectKeysToSet(self, object)
    local set = __TS__New(Set)
    for ____, key in ipairs(__TS__ObjectKeys(object)) do
        set:add(key)
    end
    return set
end
--- Helper function to convert the values of an object to a set.
-- 
-- Note that the set values will be inserted in a random order, due to how `pairs` works under the
-- hood.
-- 
-- Also see the `objectValuesToReadonlySet` function.
function ____exports.objectValuesToSet(self, object)
    local set = __TS__New(Set)
    for ____, key in ipairs(__TS__ObjectValues(object)) do
        set:add(key)
    end
    return set
end
--- Helper function to add all of the values in one set to another set. The first set passed will be
-- modified in place.
-- 
-- This function is variadic, meaning that you can specify N sets to add to the first set.
function ____exports.addSetsToSet(self, mainSet, ...)
    local setsToAdd = {...}
    for ____, set in ipairs(setsToAdd) do
        for ____, value in __TS__Iterator(set) do
            mainSet:add(value)
        end
    end
end
--- Helper function to create a new set that is the composition of two or more sets.
-- 
-- This function is variadic, meaning that you can specify N sets.
function ____exports.combineSets(self, ...)
    local sets = {...}
    local newSet = __TS__New(Set)
    for ____, set in ipairs(sets) do
        for ____, value in __TS__Iterator(set) do
            newSet:add(value)
        end
    end
    return newSet
end
--- Helper function to copy a set. (You can also use a Set constructor to accomplish this task.)
function ____exports.copySet(self, oldSet)
    local newSet = __TS__New(Set)
    for ____, value in __TS__Iterator(oldSet) do
        newSet:add(value)
    end
    return newSet
end
--- Helper function to delete all of the values in one set from another set. The first set passed
-- will be modified in place.
-- 
-- This function is variadic, meaning that you can specify N sets to remove from the first set.
function ____exports.deleteSetsFromSet(self, mainSet, ...)
    local setsToRemove = {...}
    for ____, set in ipairs(setsToRemove) do
        for ____, value in __TS__Iterator(set) do
            mainSet:delete(value)
        end
    end
end
--- Helper function to get a random element from the provided set.
-- 
-- If you want to get an unseeded element, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- @param set The set to get an element from.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param exceptions Optional. An array of elements to skip over if selected.
function ____exports.getRandomSetElement(self, set, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    local array = ____exports.getSortedSetValues(nil, set)
    return getRandomArrayElement(nil, array, seedOrRNG, exceptions)
end
--- Helper function to get all possible combinations of the given set. This includes the combination
-- of an empty set.
-- 
-- For example, if this function is provided a set containing 1, 2, and 3, then it will return an
-- array containing the following sets:
-- 
-- - [] (if `includeEmptyArray` is set to true)
-- - [1]
-- - [2]
-- - [3]
-- - [1, 2]
-- - [1, 3]
-- - [2, 3]
-- - [1, 2, 3]
-- 
-- @param set The set to get the combinations of.
-- @param includeEmptyArray Whether to include an empty array in the combinations.
function ____exports.getSetCombinations(self, set, includeEmptyArray)
    local values = ____exports.getSortedSetValues(nil, set)
    local combinations = getArrayCombinations(nil, values, includeEmptyArray)
    return __TS__ArrayMap(
        combinations,
        function(____, array) return __TS__New(ReadonlySet, array) end
    )
end
--- Helper function to convert the keys of an object to a read-only set.
-- 
-- Note that the set values will be inserted in a random order, due to how `pairs` works under the
-- hood.
-- 
-- Also see the `objectKeysToSet` function.
function ____exports.objectKeysToReadonlySet(self, object)
    return ____exports.objectKeysToSet(nil, object)
end
--- Helper function to convert the values of an object to a read-only set.
-- 
-- Note that the set values will be inserted in a random order, due to how `pairs` works under the
-- hood.
-- 
-- Also see the `objectValuesToSet` function.
function ____exports.objectValuesToReadonlySet(self, object)
    return ____exports.objectValuesToSet(nil, object)
end
--- Helper function to add one or more elements to a set at once without having to repeatedly call
-- the `Set.add` method.
-- 
-- This function is variadic, meaning that you can pass as many things as you want to add.
function ____exports.setAdd(self, set, ...)
    local elements = {...}
    for ____, element in ipairs(elements) do
        set:add(element)
    end
end
--- Helper function to check for one or more elements in a set at once without having to repeatedly
-- call the `Set.has` method.
-- 
-- This function is variadic, meaning that you can pass as many things as you want to check for. It
-- will return true if one or more elements are found.
function ____exports.setHas(self, set, ...)
    local elements = {...}
    return __TS__ArraySome(
        elements,
        function(____, element) return set:has(element) end
    )
end
--- Helper function to sum every value in a set together.
function ____exports.sumSet(self, set)
    local values = {__TS__Spread(set)}
    return sumArray(nil, values)
end
return ____exports
 end,
["classes.features.other.ModdedElementDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local itemConfig = ____cachedClasses.itemConfig
local ____constantsFirstLast = require("core.constantsFirstLast")
local LAST_VANILLA_CARD_TYPE = ____constantsFirstLast.LAST_VANILLA_CARD_TYPE
local LAST_VANILLA_COLLECTIBLE_TYPE = ____constantsFirstLast.LAST_VANILLA_COLLECTIBLE_TYPE
local LAST_VANILLA_PILL_EFFECT = ____constantsFirstLast.LAST_VANILLA_PILL_EFFECT
local LAST_VANILLA_TRINKET_TYPE = ____constantsFirstLast.LAST_VANILLA_TRINKET_TYPE
local NUM_VANILLA_CARD_TYPES = ____constantsFirstLast.NUM_VANILLA_CARD_TYPES
local NUM_VANILLA_COLLECTIBLE_TYPES = ____constantsFirstLast.NUM_VANILLA_COLLECTIBLE_TYPES
local NUM_VANILLA_PILL_EFFECTS = ____constantsFirstLast.NUM_VANILLA_PILL_EFFECTS
local NUM_VANILLA_TRINKET_TYPES = ____constantsFirstLast.NUM_VANILLA_TRINKET_TYPES
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local FIRST_MODDED_COLLECTIBLE_TYPE = LAST_VANILLA_COLLECTIBLE_TYPE + 1
local FIRST_MODDED_TRINKET_TYPE = LAST_VANILLA_TRINKET_TYPE + 1
local FIRST_MODDED_CARD_TYPE = LAST_VANILLA_CARD_TYPE + 1
local FIRST_MODDED_PILL_EFFECT = LAST_VANILLA_PILL_EFFECT + 1
--- Mods can add extra things to the game (e.g. collectibles, trinkets, and so on). Since mods load
-- in alphabetical order, the total number of things can't be properly be known until at least one
-- callback fires (which indicates that all mods have been loaded).
-- 
-- This feature gates all such functions behind a callback check. Subsequently, these functions will
-- throw a runtime error if they are called in the menu, before any callbacks have occurred. This
-- ensures that the proper values are always returned and allows you to get immediate feedback if
-- you accidentally access them from the menu.
____exports.ModdedElementDetection = __TS__Class()
local ModdedElementDetection = ____exports.ModdedElementDetection
ModdedElementDetection.name = "ModdedElementDetection"
__TS__ClassExtends(ModdedElementDetection, Feature)
function ModdedElementDetection.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.atLeastOneCallbackFired = false
    self.postPlayerInit = function()
        self.atLeastOneCallbackFired = true
    end
    self.callbacksUsed = {{ModCallback.POST_PLAYER_INIT, self.postPlayerInit}}
end
function ModdedElementDetection.prototype.errorIfNoCallbacksFired(self, constantType)
    if not self.atLeastOneCallbackFired then
        error(("Failed to retrieve a " .. constantType) .. " constant. Since not all mods have been loaded yet, any constants of this type will be inaccurate. Thus, you must wait until at least one callback fires before retrieving these types of constants.")
    end
end
function ModdedElementDetection.prototype.getFirstModdedCollectibleType(self)
    self:errorIfNoCallbacksFired("collectible")
    local itemConfigItem = itemConfig:GetCollectible(FIRST_MODDED_COLLECTIBLE_TYPE)
    local ____temp_0
    if itemConfigItem == nil then
        ____temp_0 = nil
    else
        ____temp_0 = FIRST_MODDED_COLLECTIBLE_TYPE
    end
    return ____temp_0
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getFirstModdedCollectibleType", true)
function ModdedElementDetection.prototype.getLastCollectibleType(self)
    self:errorIfNoCallbacksFired("collectible")
    return itemConfig:GetCollectibles().Size - 1
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getLastCollectibleType", true)
function ModdedElementDetection.prototype.getNumCollectibleTypes(self)
    self:errorIfNoCallbacksFired("collectible")
    return NUM_VANILLA_COLLECTIBLE_TYPES + self:getNumModdedCollectibleTypes()
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getNumCollectibleTypes", true)
function ModdedElementDetection.prototype.getNumModdedCollectibleTypes(self)
    self:errorIfNoCallbacksFired("collectible")
    return self:getLastCollectibleType() - LAST_VANILLA_COLLECTIBLE_TYPE
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getNumModdedCollectibleTypes", true)
function ModdedElementDetection.prototype.getFirstModdedTrinketType(self)
    self:errorIfNoCallbacksFired("trinket")
    local itemConfigItem = itemConfig:GetTrinket(FIRST_MODDED_TRINKET_TYPE)
    local ____temp_1
    if itemConfigItem == nil then
        ____temp_1 = nil
    else
        ____temp_1 = FIRST_MODDED_TRINKET_TYPE
    end
    return ____temp_1
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getFirstModdedTrinketType", true)
function ModdedElementDetection.prototype.getLastTrinketType(self)
    self:errorIfNoCallbacksFired("trinket")
    return itemConfig:GetTrinkets().Size - 1
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getLastTrinketType", true)
function ModdedElementDetection.prototype.getNumTrinketTypes(self)
    self:errorIfNoCallbacksFired("trinket")
    return NUM_VANILLA_TRINKET_TYPES + self:getNumModdedTrinketTypes()
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getNumTrinketTypes", true)
function ModdedElementDetection.prototype.getNumModdedTrinketTypes(self)
    self:errorIfNoCallbacksFired("trinket")
    return self:getLastTrinketType() - LAST_VANILLA_TRINKET_TYPE
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getNumModdedTrinketTypes", true)
function ModdedElementDetection.prototype.getFirstModdedCardType(self)
    self:errorIfNoCallbacksFired("card")
    local itemConfigCard = itemConfig:GetCard(FIRST_MODDED_CARD_TYPE)
    local ____temp_2
    if itemConfigCard == nil then
        ____temp_2 = nil
    else
        ____temp_2 = FIRST_MODDED_CARD_TYPE
    end
    return ____temp_2
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getFirstModdedCardType", true)
function ModdedElementDetection.prototype.getLastCardType(self)
    self:errorIfNoCallbacksFired("card")
    return itemConfig:GetCards().Size - 1
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getLastCardType", true)
function ModdedElementDetection.prototype.getNumCardTypes(self)
    self:errorIfNoCallbacksFired("card")
    return NUM_VANILLA_CARD_TYPES + self:getNumModdedCardTypes()
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getNumCardTypes", true)
function ModdedElementDetection.prototype.getNumModdedCardTypes(self)
    self:errorIfNoCallbacksFired("card")
    return self:getLastCardType() - LAST_VANILLA_CARD_TYPE
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getNumModdedCardTypes", true)
function ModdedElementDetection.prototype.getFirstModdedPillEffect(self)
    self:errorIfNoCallbacksFired("pill")
    local itemConfigPillEffect = itemConfig:GetPillEffect(FIRST_MODDED_PILL_EFFECT)
    local ____temp_3
    if itemConfigPillEffect == nil then
        ____temp_3 = nil
    else
        ____temp_3 = FIRST_MODDED_PILL_EFFECT
    end
    return ____temp_3
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getFirstModdedPillEffect", true)
function ModdedElementDetection.prototype.getLastPillEffect(self)
    self:errorIfNoCallbacksFired("pill")
    return itemConfig:GetPillEffects().Size - 1
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getLastPillEffect", true)
function ModdedElementDetection.prototype.getNumPillEffects(self)
    self:errorIfNoCallbacksFired("pill")
    return NUM_VANILLA_PILL_EFFECTS + self:getNumModdedPillEffects()
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getNumPillEffects", true)
function ModdedElementDetection.prototype.getNumModdedPillEffects(self)
    self:errorIfNoCallbacksFired("card")
    return self:getLastPillEffect() - LAST_VANILLA_PILL_EFFECT
end
__TS__DecorateLegacy({Exported}, ModdedElementDetection.prototype, "getNumModdedPillEffects", true)
return ____exports
 end,
["classes.features.other.ModdedElementSets"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Set = ____lualib.Set
local Map = ____lualib.Map
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CacheFlag = ____isaac_2Dtypescript_2Ddefinitions.CacheFlag
local CardType = ____isaac_2Dtypescript_2Ddefinitions.CardType
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ItemConfigCardType = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigCardType
local ItemConfigTag = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigTag
local PlayerForm = ____isaac_2Dtypescript_2Ddefinitions.PlayerForm
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local CACHE_FLAG_VALUES = ____cachedEnumValues.CACHE_FLAG_VALUES
local ITEM_CONFIG_CARD_TYPE_VALUES = ____cachedEnumValues.ITEM_CONFIG_CARD_TYPE_VALUES
local ITEM_CONFIG_TAG_VALUES = ____cachedEnumValues.ITEM_CONFIG_TAG_VALUES
local ____cachedClasses = require("core.cachedClasses")
local itemConfig = ____cachedClasses.itemConfig
local ____constants = require("core.constants")
local FIRST_GLITCHED_COLLECTIBLE_TYPE = ____constants.FIRST_GLITCHED_COLLECTIBLE_TYPE
local QUALITIES = ____constants.QUALITIES
local ____constantsVanilla = require("core.constantsVanilla")
local VANILLA_CARD_TYPES = ____constantsVanilla.VANILLA_CARD_TYPES
local VANILLA_COLLECTIBLE_TYPES = ____constantsVanilla.VANILLA_COLLECTIBLE_TYPES
local VANILLA_PILL_EFFECTS = ____constantsVanilla.VANILLA_PILL_EFFECTS
local VANILLA_TRINKET_TYPES = ____constantsVanilla.VANILLA_TRINKET_TYPES
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____array = require("functions.array")
local arrayRemove = ____array.arrayRemove
local getRandomArrayElement = ____array.getRandomArrayElement
local ____cards = require("functions.cards")
local getItemConfigCardType = ____cards.getItemConfigCardType
local ____collectibleTag = require("functions.collectibleTag")
local collectibleHasTag = ____collectibleTag.collectibleHasTag
local ____collectibles = require("functions.collectibles")
local collectibleHasCacheFlag = ____collectibles.collectibleHasCacheFlag
local getCollectibleQuality = ____collectibles.getCollectibleQuality
local isActiveCollectible = ____collectibles.isActiveCollectible
local isHiddenCollectible = ____collectibles.isHiddenCollectible
local isPassiveOrFamiliarCollectible = ____collectibles.isPassiveOrFamiliarCollectible
local ____flag = require("functions.flag")
local getFlagName = ____flag.getFlagName
local ____set = require("functions.set")
local getRandomSetElement = ____set.getRandomSetElement
local ____trinkets = require("functions.trinkets")
local trinketHasCacheFlag = ____trinkets.trinketHasCacheFlag
local ____types = require("functions.types")
local asCardType = ____types.asCardType
local asCollectibleType = ____types.asCollectibleType
local asPillEffect = ____types.asPillEffect
local asTrinketType = ____types.asTrinketType
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local iRange = ____utils.iRange
local ____repeat = ____utils["repeat"]
local ____itemConfigCardTypesForCards = require("sets.itemConfigCardTypesForCards")
local ITEM_CONFIG_CARD_TYPES_FOR_CARDS = ____itemConfigCardTypesForCards.ITEM_CONFIG_CARD_TYPES_FOR_CARDS
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local CONDITIONAL_FLYING_COLLECTIBLE_TYPES = {CollectibleType.BIBLE, CollectibleType.EMPTY_VESSEL, CollectibleType.ASTRAL_PROJECTION, CollectibleType.RECALL}
local TRANSFORMATION_TO_TAG_MAP = __TS__New(ReadonlyMap, {
    {PlayerForm.GUPPY, ItemConfigTag.GUPPY},
    {PlayerForm.BEELZEBUB, ItemConfigTag.FLY},
    {PlayerForm.FUN_GUY, ItemConfigTag.MUSHROOM},
    {PlayerForm.SERAPHIM, ItemConfigTag.ANGEL},
    {PlayerForm.BOB, ItemConfigTag.BOB},
    {PlayerForm.SPUN, ItemConfigTag.SYRINGE},
    {PlayerForm.YES_MOTHER, ItemConfigTag.MOM},
    {PlayerForm.CONJOINED, ItemConfigTag.BABY},
    {PlayerForm.LEVIATHAN, ItemConfigTag.DEVIL},
    {PlayerForm.OH_CRAP, ItemConfigTag.POOP},
    {PlayerForm.BOOKWORM, ItemConfigTag.BOOK},
    {PlayerForm.SPIDER_BABY, ItemConfigTag.SPIDER}
})
--- A feature that lazy-inits and caches various arrays and sets that include both vanilla and modded
-- elements. This is useful for performance purposes (so that we do not have to reconstruct the
-- arrays/sets multiple times).
-- 
-- The modded arrays/sets are created using the functions from
-- `ISCFeature.MODDED_ELEMENT_DETECTION`.
____exports.ModdedElementSets = __TS__Class()
local ModdedElementSets = ____exports.ModdedElementSets
ModdedElementSets.name = "ModdedElementSets"
__TS__ClassExtends(ModdedElementSets, Feature)
function ModdedElementSets.prototype.____constructor(self, moddedElementDetection)
    Feature.prototype.____constructor(self)
    self.arraysInitialized = false
    self.allCollectibleTypesArray = {}
    self.allCollectibleTypesSet = __TS__New(Set)
    self.moddedCollectibleTypesArray = {}
    self.moddedCollectibleTypesSet = __TS__New(Set)
    self.allTrinketTypesArray = {}
    self.allTrinketTypesSet = __TS__New(Set)
    self.moddedTrinketTypesArray = {}
    self.moddedTrinketTypesSet = __TS__New(Set)
    self.allCardTypesArray = {}
    self.allCardTypesSet = __TS__New(Set)
    self.moddedCardTypesArray = {}
    self.moddedCardTypesSet = __TS__New(Set)
    self.allPillEffectsArray = {}
    self.allPillEffectsSet = __TS__New(Set)
    self.moddedPillEffectsArray = {}
    self.moddedPillEffectsSet = __TS__New(Set)
    self.cacheFlagToCollectibleTypesMap = __TS__New(Map)
    self.cacheFlagToTrinketTypesMap = __TS__New(Map)
    self.flyingCollectibleTypes = {}
    self.permanentFlyingCollectibleTypes = {}
    self.flyingTrinketTypes = {}
    self.tagToCollectibleTypesMap = __TS__New(Map)
    self.edenActiveCollectibleTypesSet = __TS__New(Set)
    self.edenPassiveCollectibleTypesSet = __TS__New(Set)
    self.qualityToCollectibleTypesMap = __TS__New(Map)
    self.itemConfigCardTypeToCardTypeMap = __TS__New(Map)
    self.cardTypeCardArray = {}
    self.featuresUsed = {ISCFeature.MODDED_ELEMENT_DETECTION}
    self.moddedElementDetection = moddedElementDetection
end
function ModdedElementSets.prototype.lazyInit(self)
    if self.arraysInitialized then
        return
    end
    self.arraysInitialized = true
    self:lazyInitModdedCollectibleTypes()
    self:lazyInitModdedTrinketTypes()
    self:lazyInitModdedCardTypes()
    self:lazyInitModdedPillEffects()
    self:lazyInitTagToCollectibleTypesMap()
    self:lazyInitCacheFlagToCollectibleTypesMap()
    self:lazyInitCacheFlagToTrinketTypesMap()
    self:lazyInitFlyingCollectibleTypesSet()
    self:lazyInitFlyingTrinketTypesSet()
    self:lazyInitEdenCollectibleTypesSet()
    self:lazyInitQualityToCollectibleTypesMap()
    self:lazyInitCardTypes()
end
function ModdedElementSets.prototype.lazyInitModdedCollectibleTypes(self)
    for ____, collectibleType in ipairs(VANILLA_COLLECTIBLE_TYPES) do
        local ____self_allCollectibleTypesArray_0 = self.allCollectibleTypesArray
        ____self_allCollectibleTypesArray_0[#____self_allCollectibleTypesArray_0 + 1] = collectibleType
        self.allCollectibleTypesSet:add(collectibleType)
    end
    local firstModdedCollectibleType = self.moddedElementDetection:getFirstModdedCollectibleType()
    if firstModdedCollectibleType == nil then
        return
    end
    local lastCollectibleType = self.moddedElementDetection:getLastCollectibleType()
    local moddedCollectibleTypes = iRange(nil, firstModdedCollectibleType, lastCollectibleType)
    for ____, collectibleTypeInt in ipairs(moddedCollectibleTypes) do
        local collectibleType = asCollectibleType(nil, collectibleTypeInt)
        local itemConfigItem = itemConfig:GetCollectible(collectibleType)
        if itemConfigItem ~= nil then
            local ____self_moddedCollectibleTypesArray_1 = self.moddedCollectibleTypesArray
            ____self_moddedCollectibleTypesArray_1[#____self_moddedCollectibleTypesArray_1 + 1] = collectibleType
            self.moddedCollectibleTypesSet:add(collectibleType)
            local ____self_allCollectibleTypesArray_2 = self.allCollectibleTypesArray
            ____self_allCollectibleTypesArray_2[#____self_allCollectibleTypesArray_2 + 1] = collectibleType
            self.allCollectibleTypesSet:add(collectibleType)
        end
    end
end
function ModdedElementSets.prototype.lazyInitModdedTrinketTypes(self)
    for ____, trinketType in ipairs(VANILLA_TRINKET_TYPES) do
        local ____self_allTrinketTypesArray_3 = self.allTrinketTypesArray
        ____self_allTrinketTypesArray_3[#____self_allTrinketTypesArray_3 + 1] = trinketType
        self.allTrinketTypesSet:add(trinketType)
    end
    local firstModdedTrinketType = self.moddedElementDetection:getFirstModdedTrinketType()
    if firstModdedTrinketType == nil then
        return
    end
    local lastTrinketType = self.moddedElementDetection:getLastTrinketType()
    local moddedTrinketTypes = iRange(nil, firstModdedTrinketType, lastTrinketType)
    for ____, trinketTypeInt in ipairs(moddedTrinketTypes) do
        local trinketType = asTrinketType(nil, trinketTypeInt)
        local itemConfigItem = itemConfig:GetTrinket(trinketType)
        if itemConfigItem ~= nil then
            local ____self_moddedTrinketTypesArray_4 = self.moddedTrinketTypesArray
            ____self_moddedTrinketTypesArray_4[#____self_moddedTrinketTypesArray_4 + 1] = trinketType
            self.moddedTrinketTypesSet:add(trinketType)
            local ____self_allTrinketTypesArray_5 = self.allTrinketTypesArray
            ____self_allTrinketTypesArray_5[#____self_allTrinketTypesArray_5 + 1] = trinketType
            self.allTrinketTypesSet:add(trinketType)
        end
    end
end
function ModdedElementSets.prototype.lazyInitModdedCardTypes(self)
    for ____, cardType in ipairs(VANILLA_CARD_TYPES) do
        local ____self_allCardTypesArray_6 = self.allCardTypesArray
        ____self_allCardTypesArray_6[#____self_allCardTypesArray_6 + 1] = cardType
        self.allCardTypesSet:add(cardType)
    end
    local firstModdedCardType = self.moddedElementDetection:getFirstModdedCardType()
    if firstModdedCardType == nil then
        return
    end
    local lastCardType = self.moddedElementDetection:getLastCardType()
    local moddedCardTypes = iRange(nil, firstModdedCardType, lastCardType)
    for ____, cardTypeInt in ipairs(moddedCardTypes) do
        local cardType = asCardType(nil, cardTypeInt)
        local itemConfigCard = itemConfig:GetCard(cardType)
        if itemConfigCard ~= nil then
            local ____self_moddedCardTypesArray_7 = self.moddedCardTypesArray
            ____self_moddedCardTypesArray_7[#____self_moddedCardTypesArray_7 + 1] = cardType
            self.moddedCardTypesSet:add(cardType)
            local ____self_allCardTypesArray_8 = self.allCardTypesArray
            ____self_allCardTypesArray_8[#____self_allCardTypesArray_8 + 1] = cardType
            self.allCardTypesSet:add(cardType)
        end
    end
end
function ModdedElementSets.prototype.lazyInitModdedPillEffects(self)
    for ____, pillEffect in ipairs(VANILLA_PILL_EFFECTS) do
        local ____self_allPillEffectsArray_9 = self.allPillEffectsArray
        ____self_allPillEffectsArray_9[#____self_allPillEffectsArray_9 + 1] = pillEffect
        self.allPillEffectsSet:add(pillEffect)
    end
    local firstModdedPillEffect = self.moddedElementDetection:getFirstModdedPillEffect()
    if firstModdedPillEffect == nil then
        return
    end
    local lastPillEffect = self.moddedElementDetection:getLastPillEffect()
    local moddedPillEffects = iRange(nil, firstModdedPillEffect, lastPillEffect)
    for ____, pillEffectInt in ipairs(moddedPillEffects) do
        local pillEffect = asPillEffect(nil, pillEffectInt)
        local itemConfigPillEffect = itemConfig:GetPillEffect(pillEffect)
        if itemConfigPillEffect ~= nil then
            local ____self_moddedPillEffectsArray_10 = self.moddedPillEffectsArray
            ____self_moddedPillEffectsArray_10[#____self_moddedPillEffectsArray_10 + 1] = pillEffect
            self.moddedPillEffectsSet:add(pillEffect)
            local ____self_allPillEffectsArray_11 = self.allPillEffectsArray
            ____self_allPillEffectsArray_11[#____self_allPillEffectsArray_11 + 1] = pillEffect
            self.allPillEffectsSet:add(pillEffect)
        end
    end
end
function ModdedElementSets.prototype.lazyInitTagToCollectibleTypesMap(self)
    for ____, itemConfigTag in ipairs(ITEM_CONFIG_TAG_VALUES) do
        self.tagToCollectibleTypesMap:set(itemConfigTag, {})
    end
    for ____, collectibleType in ipairs(self:getCollectibleTypes()) do
        for ____, itemConfigTag in ipairs(ITEM_CONFIG_TAG_VALUES) do
            do
                if not collectibleHasTag(nil, collectibleType, itemConfigTag) then
                    goto __continue37
                end
                local collectibleTypes = self.tagToCollectibleTypesMap:get(itemConfigTag)
                if collectibleTypes == nil then
                    local flagName = getFlagName(nil, itemConfigTag, ItemConfigTag)
                    error("Failed to get the collectible types for item tag: " .. tostring(flagName))
                end
                collectibleTypes[#collectibleTypes + 1] = collectibleType
            end
            ::__continue37::
        end
    end
end
function ModdedElementSets.prototype.lazyInitCacheFlagToCollectibleTypesMap(self)
    for ____, cacheFlag in ipairs(CACHE_FLAG_VALUES) do
        local collectibleTypes = {}
        for ____, collectibleType in ipairs(self:getCollectibleTypes()) do
            if collectibleHasCacheFlag(nil, collectibleType, cacheFlag) then
                collectibleTypes[#collectibleTypes + 1] = collectibleType
            end
        end
        self.cacheFlagToCollectibleTypesMap:set(cacheFlag, collectibleTypes)
    end
end
function ModdedElementSets.prototype.lazyInitCacheFlagToTrinketTypesMap(self)
    for ____, cacheFlag in ipairs(CACHE_FLAG_VALUES) do
        local trinketTypes = {}
        for ____, trinketType in ipairs(self:getTrinketTypes()) do
            if trinketHasCacheFlag(nil, trinketType, cacheFlag) then
                trinketTypes[#trinketTypes + 1] = trinketType
            end
        end
        self.cacheFlagToTrinketTypesMap:set(cacheFlag, trinketTypes)
    end
end
function ModdedElementSets.prototype.lazyInitFlyingCollectibleTypesSet(self)
    local collectibleTypesWithFlyingCacheFlag = self:getCollectibleTypesWithCacheFlag(CacheFlag.FLYING)
    local collectibleTypesWithAllCacheFlag = self:getCollectibleTypesWithCacheFlag(CacheFlag.ALL)
    self.flyingCollectibleTypes = arrayRemove(
        nil,
        collectibleTypesWithFlyingCacheFlag,
        table.unpack(collectibleTypesWithAllCacheFlag)
    )
    self.permanentFlyingCollectibleTypes = arrayRemove(
        nil,
        self.flyingCollectibleTypes,
        table.unpack(CONDITIONAL_FLYING_COLLECTIBLE_TYPES)
    )
end
function ModdedElementSets.prototype.lazyInitFlyingTrinketTypesSet(self)
    local trinketTypesWithFlyingCacheFlag = self:getTrinketsTypesWithCacheFlag(CacheFlag.FLYING)
    local trinketTypesWithAllCacheFlag = self:getTrinketsTypesWithCacheFlag(CacheFlag.ALL)
    local trinketTypesWithAllCacheFlagThatDontGrantFlying = arrayRemove(nil, trinketTypesWithAllCacheFlag, TrinketType.AZAZELS_STUMP)
    self.flyingTrinketTypes = arrayRemove(
        nil,
        trinketTypesWithFlyingCacheFlag,
        table.unpack(trinketTypesWithAllCacheFlagThatDontGrantFlying)
    )
end
function ModdedElementSets.prototype.lazyInitEdenCollectibleTypesSet(self)
    for ____, collectibleType in ipairs(self:getCollectibleTypes()) do
        do
            if isHiddenCollectible(nil, collectibleType) or collectibleHasTag(nil, collectibleType, ItemConfigTag.NO_EDEN) then
                goto __continue57
            end
            if isActiveCollectible(nil, collectibleType) then
                self.edenActiveCollectibleTypesSet:add(collectibleType)
            end
            if isPassiveOrFamiliarCollectible(nil, collectibleType) then
                self.edenPassiveCollectibleTypesSet:add(collectibleType)
            end
        end
        ::__continue57::
    end
end
function ModdedElementSets.prototype.lazyInitQualityToCollectibleTypesMap(self)
    for ____, quality in ipairs(QUALITIES) do
        local collectibleTypes = {}
        for ____, collectibleType in ipairs(self:getCollectibleTypes()) do
            local collectibleTypeQuality = getCollectibleQuality(nil, collectibleType)
            if collectibleTypeQuality == quality then
                collectibleTypes[#collectibleTypes + 1] = collectibleType
            end
        end
        self.qualityToCollectibleTypesMap:set(quality, collectibleTypes)
    end
end
function ModdedElementSets.prototype.lazyInitCardTypes(self)
    for ____, itemConfigCardType in ipairs(ITEM_CONFIG_CARD_TYPE_VALUES) do
        self.itemConfigCardTypeToCardTypeMap:set(itemConfigCardType, {})
    end
    for ____, cardType in ipairs(self:getCardTypes()) do
        local itemConfigCardType = getItemConfigCardType(nil, cardType)
        if itemConfigCardType ~= nil then
            local cardTypes = self.itemConfigCardTypeToCardTypeMap:get(itemConfigCardType)
            assertDefined(
                nil,
                cardTypes,
                "Failed to get the card types for item config card type: " .. tostring(itemConfigCardType)
            )
            cardTypes[#cardTypes + 1] = cardType
            if ITEM_CONFIG_CARD_TYPES_FOR_CARDS:has(itemConfigCardType) then
                local ____self_cardTypeCardArray_12 = self.cardTypeCardArray
                ____self_cardTypeCardArray_12[#____self_cardTypeCardArray_12 + 1] = cardType
            end
        end
    end
end
function ModdedElementSets.prototype.getCollectibleTypes(self)
    self:lazyInit()
    return self.allCollectibleTypesArray
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getCollectibleTypes", true)
function ModdedElementSets.prototype.getCollectibleTypeSet(self)
    self:lazyInit()
    return self.allCollectibleTypesSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getCollectibleTypeSet", true)
function ModdedElementSets.prototype.getModdedCollectibleTypes(self)
    self:lazyInit()
    return self.moddedCollectibleTypesArray
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getModdedCollectibleTypes", true)
function ModdedElementSets.prototype.getModdedCollectibleTypesSet(self)
    self:lazyInit()
    return self.moddedCollectibleTypesSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getModdedCollectibleTypesSet", true)
function ModdedElementSets.prototype.getPlayerCollectibleMap(self, player)
    local collectibleArray = self:getCollectibleTypes()
    local collectibleMap = __TS__New(Map)
    for ____, collectibleType in ipairs(collectibleArray) do
        local numCollectibles = player:GetCollectibleNum(collectibleType, true)
        if numCollectibles > 0 then
            collectibleMap:set(collectibleType, numCollectibles)
        end
    end
    if player:HasCollectible(CollectibleType.TMTRAINER) then
        local collectibleType = FIRST_GLITCHED_COLLECTIBLE_TYPE
        local itemConfigItem
        repeat
            do
                itemConfigItem = itemConfig:GetCollectible(collectibleType)
                if itemConfigItem ~= nil then
                    local hasCollectibles = player:HasCollectible(collectibleType, true)
                    if hasCollectibles then
                        collectibleMap:set(collectibleType, 1)
                    end
                end
                collectibleType = collectibleType - 1
            end
        until not (itemConfigItem ~= nil)
    end
    return collectibleMap
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getPlayerCollectibleMap", true)
function ModdedElementSets.prototype.getTrinketTypes(self)
    self:lazyInit()
    return self.allTrinketTypesArray
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getTrinketTypes", true)
function ModdedElementSets.prototype.getTrinketTypesSet(self)
    self:lazyInit()
    return self.allTrinketTypesSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getTrinketTypesSet", true)
function ModdedElementSets.prototype.getModdedTrinketTypes(self)
    self:lazyInit()
    return self.moddedTrinketTypesArray
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getModdedTrinketTypes", true)
function ModdedElementSets.prototype.getModdedTrinketTypesSet(self)
    self:lazyInit()
    return self.moddedTrinketTypesSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getModdedTrinketTypesSet", true)
function ModdedElementSets.prototype.getCardTypes(self)
    self:lazyInit()
    return self.allCardTypesArray
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getCardTypes", true)
function ModdedElementSets.prototype.getCardTypesSet(self)
    self:lazyInit()
    return self.allCardTypesSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getCardTypesSet", true)
function ModdedElementSets.prototype.getModdedCardTypes(self)
    self:lazyInit()
    return self.moddedCardTypesArray
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getModdedCardTypes", true)
function ModdedElementSets.prototype.getModdedCardTypesSet(self)
    self:lazyInit()
    return self.moddedCardTypesSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getModdedCardTypesSet", true)
function ModdedElementSets.prototype.getPillEffects(self)
    self:lazyInit()
    return self.allPillEffectsArray
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getPillEffects", true)
function ModdedElementSets.prototype.getPillEffectsSet(self)
    self:lazyInit()
    return self.allPillEffectsSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getPillEffectsSet", true)
function ModdedElementSets.prototype.getModdedPillEffects(self)
    self:lazyInit()
    return self.moddedPillEffectsArray
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getModdedPillEffects", true)
function ModdedElementSets.prototype.getModdedPillEffectsSet(self)
    self:lazyInit()
    return self.moddedPillEffectsSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getModdedPillEffectsSet", true)
function ModdedElementSets.prototype.getCollectibleTypesWithCacheFlag(self, cacheFlag)
    self:lazyInit()
    local collectiblesSet = self.cacheFlagToCollectibleTypesMap:get(cacheFlag)
    if collectiblesSet == nil then
        return {}
    end
    return collectiblesSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getCollectibleTypesWithCacheFlag", true)
function ModdedElementSets.prototype.getTrinketsTypesWithCacheFlag(self, cacheFlag)
    self:lazyInit()
    local trinketTypes = self.cacheFlagToTrinketTypesMap:get(cacheFlag)
    if trinketTypes == nil then
        return {}
    end
    return trinketTypes
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getTrinketsTypesWithCacheFlag", true)
function ModdedElementSets.prototype.getPlayerCollectiblesWithCacheFlag(self, player, cacheFlag)
    local collectiblesWithCacheFlag = self:getCollectibleTypesWithCacheFlag(cacheFlag)
    local playerCollectibles = {}
    for ____, collectibleType in ipairs(collectiblesWithCacheFlag) do
        local numCollectibles = player:GetCollectibleNum(collectibleType, true)
        ____repeat(
            nil,
            numCollectibles,
            function()
                playerCollectibles[#playerCollectibles + 1] = collectibleType
            end
        )
    end
    return playerCollectibles
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getPlayerCollectiblesWithCacheFlag", true)
function ModdedElementSets.prototype.getPlayerTrinketsWithCacheFlag(self, player, cacheFlag)
    local trinketTypesWithCacheFlag = self:getTrinketsTypesWithCacheFlag(cacheFlag)
    local playerTrinkets = __TS__New(Map)
    for ____, trinketType in ipairs(trinketTypesWithCacheFlag) do
        local trinketMultiplier = player:GetTrinketMultiplier(trinketType)
        if trinketMultiplier > 0 then
            playerTrinkets:set(trinketType, trinketMultiplier)
        end
    end
    return playerTrinkets
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getPlayerTrinketsWithCacheFlag", true)
function ModdedElementSets.prototype.getFlyingCollectibleTypes(self, includeConditionalItems)
    self:lazyInit()
    return includeConditionalItems and self.flyingCollectibleTypes or self.permanentFlyingCollectibleTypes
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getFlyingCollectibleTypes", true)
function ModdedElementSets.prototype.getFlyingTrinketTypes(self)
    self:lazyInit()
    return self.flyingTrinketTypes
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getFlyingTrinketTypes", true)
function ModdedElementSets.prototype.getCollectibleTypesWithTag(self, itemConfigTag)
    self:lazyInit()
    local collectibleTypes = self.tagToCollectibleTypesMap:get(itemConfigTag)
    assertDefined(
        nil,
        collectibleTypes,
        ("The item config tag of " .. tostring(itemConfigTag)) .. " is not a valid value of the \"ItemConfigTag\" enum."
    )
    return collectibleTypes
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getCollectibleTypesWithTag", true)
function ModdedElementSets.prototype.getPlayerCollectiblesWithTag(self, player, itemConfigTag)
    local collectibleTypesWithTag = self:getCollectibleTypesWithTag(itemConfigTag)
    local playerCollectibles = {}
    for ____, collectibleType in ipairs(collectibleTypesWithTag) do
        local numCollectibles = player:GetCollectibleNum(collectibleType, true)
        ____repeat(
            nil,
            numCollectibles,
            function()
                playerCollectibles[#playerCollectibles + 1] = collectibleType
            end
        )
    end
    return playerCollectibles
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getPlayerCollectiblesWithTag", true)
function ModdedElementSets.prototype.getCollectibleTypesForTransformation(self, playerForm)
    local itemConfigTag = TRANSFORMATION_TO_TAG_MAP:get(playerForm)
    assertDefined(
        nil,
        itemConfigTag,
        ("Failed to get the collectible types for the transformation of " .. tostring(playerForm)) .. " because that transformation is not based on collectibles."
    )
    return self:getCollectibleTypesWithTag(itemConfigTag)
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getCollectibleTypesForTransformation", true)
function ModdedElementSets.prototype.getPlayerCollectiblesForTransformation(self, player, playerForm)
    local collectibleForTransformation = self:getCollectibleTypesForTransformation(playerForm)
    local playerCollectibles = {}
    for ____, collectibleType in ipairs(collectibleForTransformation) do
        local numCollectibles = player:GetCollectibleNum(collectibleType, true)
        ____repeat(
            nil,
            numCollectibles,
            function()
                playerCollectibles[#playerCollectibles + 1] = collectibleType
            end
        )
    end
    return playerCollectibles
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getPlayerCollectiblesForTransformation", true)
function ModdedElementSets.prototype.getEdenActiveCollectibleTypes(self)
    self:lazyInit()
    return self.edenActiveCollectibleTypesSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getEdenActiveCollectibleTypes", true)
function ModdedElementSets.prototype.getEdenPassiveCollectibleTypes(self)
    self:lazyInit()
    return self.edenPassiveCollectibleTypesSet
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getEdenPassiveCollectibleTypes", true)
function ModdedElementSets.prototype.getRandomEdenActiveCollectibleType(self, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    self:lazyInit()
    return getRandomSetElement(nil, self.edenPassiveCollectibleTypesSet, seedOrRNG, exceptions)
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getRandomEdenActiveCollectibleType", true)
function ModdedElementSets.prototype.getRandomEdenPassiveCollectibleType(self, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    self:lazyInit()
    return getRandomSetElement(nil, self.edenPassiveCollectibleTypesSet, seedOrRNG, exceptions)
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getRandomEdenPassiveCollectibleType", true)
function ModdedElementSets.prototype.getCollectibleTypesOfQuality(self, quality)
    self:lazyInit()
    local collectibleTypes = self.qualityToCollectibleTypesMap:get(quality)
    assertDefined(
        nil,
        collectibleTypes,
        ("The quality of " .. tostring(quality)) .. " is not a valid quality."
    )
    return collectibleTypes
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getCollectibleTypesOfQuality", true)
function ModdedElementSets.prototype.getPlayerCollectiblesOfQuality(self, player, quality)
    local collectibleTypesOfQuality = self:getCollectibleTypesOfQuality(quality)
    local playerCollectibleTypes = {}
    for ____, collectibleType in ipairs(collectibleTypesOfQuality) do
        local numCollectibles = player:GetCollectibleNum(collectibleType, true)
        ____repeat(
            nil,
            numCollectibles,
            function()
                playerCollectibleTypes[#playerCollectibleTypes + 1] = collectibleType
            end
        )
    end
    return playerCollectibleTypes
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getPlayerCollectiblesOfQuality", true)
function ModdedElementSets.prototype.getCardTypesOfType(self, ...)
    local itemConfigCardTypes = {...}
    self:lazyInit()
    local matchingCardTypes = {}
    for ____, itemConfigCardType in ipairs(itemConfigCardTypes) do
        local cardTypes = self.itemConfigCardTypeToCardTypeMap:get(itemConfigCardType)
        assertDefined(
            nil,
            cardTypes,
            "Failed to get the card types for item config type: " .. tostring(itemConfigCardType)
        )
        for ____, cardType in ipairs(cardTypes) do
            matchingCardTypes[#matchingCardTypes + 1] = cardType
        end
    end
    return matchingCardTypes
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getCardTypesOfType", true)
function ModdedElementSets.prototype.getRandomCardTypeOfType(self, itemConfigCardType, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    local cardTypes = self:getCardTypesOfType(itemConfigCardType)
    return getRandomArrayElement(nil, cardTypes, seedOrRNG, exceptions)
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getRandomCardTypeOfType", true)
function ModdedElementSets.prototype.getRandomCard(self, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    self:lazyInit()
    return getRandomArrayElement(nil, self.cardTypeCardArray, seedOrRNG, exceptions)
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getRandomCard", true)
function ModdedElementSets.prototype.getRandomRune(self, seedOrRNG, exceptions)
    if exceptions == nil then
        exceptions = {}
    end
    local runeCardTypes = self:getCardTypesOfType(ItemConfigCardType.RUNE)
    local ____array_13 = __TS__SparseArrayNew(table.unpack(exceptions))
    __TS__SparseArrayPush(____array_13, CardType.RUNE_SHARD)
    local runeExceptions = {__TS__SparseArraySpread(____array_13)}
    return getRandomArrayElement(nil, runeCardTypes, seedOrRNG, runeExceptions)
end
__TS__DecorateLegacy({Exported}, ModdedElementSets.prototype, "getRandomRune", true)
return ____exports
 end,
["classes.features.callbackLogic.PlayerCollectibleDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local Map = ____lualib.Map
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Set = ____lualib.Set
local __TS__Spread = ____lualib.__TS__Spread
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__ArraySort = ____lualib.__TS__ArraySort
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local DamageFlag = ____isaac_2Dtypescript_2Ddefinitions.DamageFlag
local ItemType = ____isaac_2Dtypescript_2Ddefinitions.ItemType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local ACTIVE_SLOT_VALUES = ____cachedEnumValues.ACTIVE_SLOT_VALUES
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____array = require("functions.array")
local arrayEquals = ____array.arrayEquals
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____playerDataStructures = require("functions.playerDataStructures")
local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____players = require("functions.players")
local getPlayerFromPtr = ____players.getPlayerFromPtr
local ____utils = require("functions.utils")
local ____repeat = ____utils["repeat"]
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {
    playersCollectibleCount = __TS__New(DefaultMap, 0),
    playersCollectibleMap = __TS__New(
        DefaultMap,
        function() return __TS__New(Map) end
    ),
    playersActiveItemMap = __TS__New(
        DefaultMap,
        function() return __TS__New(Map) end
    )
}}
____exports.PlayerCollectibleDetection = __TS__Class()
local PlayerCollectibleDetection = ____exports.PlayerCollectibleDetection
PlayerCollectibleDetection.name = "PlayerCollectibleDetection"
__TS__ClassExtends(PlayerCollectibleDetection, Feature)
function PlayerCollectibleDetection.prototype.____constructor(self, postPlayerCollectibleAdded, postPlayerCollectibleRemoved, moddedElementSets, runInNFrames)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postUseItemD4 = function(____, _collectibleType, _rng, player)
        self:updateCollectibleMapAndFire(player, nil)
        return nil
    end
    self.entityTakeDmgPlayer = function(____, player, _amount, damageFlags, _source, _countdownFrames)
        if hasFlag(nil, damageFlags, DamageFlag.FAKE) then
            return nil
        end
        local character = player:GetPlayerType()
        if character ~= PlayerType.EDEN_B then
            return nil
        end
        local entityPtr = EntityPtr(player)
        self.runInNFrames:runNextGameFrame(function()
            local futurePlayer = getPlayerFromPtr(nil, entityPtr)
            if futurePlayer ~= nil then
                self:updateCollectibleMapAndFire(player, nil)
            end
        end)
        return nil
    end
    self.postItemPickup = function(____, player, pickingUpItem)
        if pickingUpItem.itemType == ItemType.TRINKET or pickingUpItem.itemType == ItemType.NULL then
            return
        end
        local newCollectibleCount = player:GetCollectibleCount()
        mapSetPlayer(nil, v.run.playersCollectibleCount, player, newCollectibleCount)
        self:updateCollectibleMapAndFire(player, 1)
    end
    self.postPEffectUpdateReordered = function(____, player)
        local oldCollectibleCount = defaultMapGetPlayer(nil, v.run.playersCollectibleCount, player)
        local newCollectibleCount = player:GetCollectibleCount()
        mapSetPlayer(nil, v.run.playersCollectibleCount, player, newCollectibleCount)
        local difference = newCollectibleCount - oldCollectibleCount
        if difference > 0 then
            self:updateCollectibleMapAndFire(player, difference)
        elseif difference < 0 then
            self:updateCollectibleMapAndFire(player, difference * -1)
        elseif difference == 0 then
            self:checkActiveItemsChanged(player)
        end
    end
    self.featuresUsed = {ISCFeature.MODDED_ELEMENT_SETS, ISCFeature.RUN_IN_N_FRAMES}
    self.callbacksUsed = {{ModCallback.POST_USE_ITEM, self.postUseItemD4, {CollectibleType.D4}}}
    self.customCallbacksUsed = {{ModCallbackCustom.ENTITY_TAKE_DMG_PLAYER, self.entityTakeDmgPlayer}, {ModCallbackCustom.POST_ITEM_PICKUP, self.postItemPickup}, {ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
    self.postPlayerCollectibleAdded = postPlayerCollectibleAdded
    self.postPlayerCollectibleRemoved = postPlayerCollectibleRemoved
    self.moddedElementSets = moddedElementSets
    self.runInNFrames = runInNFrames
end
function PlayerCollectibleDetection.prototype.updateCollectibleMapAndFire(self, player, numCollectiblesChanged)
    local oldCollectibleMap = defaultMapGetPlayer(nil, v.run.playersCollectibleMap, player)
    local newCollectibleMap = self.moddedElementSets:getPlayerCollectibleMap(player)
    mapSetPlayer(nil, v.run.playersCollectibleMap, player, newCollectibleMap)
    local ____Set_1 = Set
    local ____array_0 = __TS__SparseArrayNew(__TS__Spread(oldCollectibleMap:keys()))
    __TS__SparseArrayPush(
        ____array_0,
        __TS__Spread(newCollectibleMap:keys())
    )
    local collectibleTypesSet = __TS__New(
        ____Set_1,
        {__TS__SparseArraySpread(____array_0)}
    )
    local numFired = 0
    for ____, collectibleType in __TS__Iterator(collectibleTypesSet) do
        local oldNum = oldCollectibleMap:get(collectibleType) or 0
        local newNum = newCollectibleMap:get(collectibleType) or 0
        local difference = newNum - oldNum
        local increased = difference > 0
        local absoluteDifference = math.abs(difference)
        ____repeat(
            nil,
            absoluteDifference,
            function()
                if increased then
                    self.postPlayerCollectibleAdded:fire(player, collectibleType)
                else
                    self.postPlayerCollectibleRemoved:fire(player, collectibleType)
                end
                numFired = numFired + 1
            end
        )
        if numFired == numCollectiblesChanged then
            return
        end
    end
end
function PlayerCollectibleDetection.prototype.checkActiveItemsChanged(self, player)
    local activeItemMap = defaultMapGetPlayer(nil, v.run.playersActiveItemMap, player)
    local oldCollectibleTypes = {}
    local newCollectibleTypes = {}
    for ____, activeSlot in ipairs(ACTIVE_SLOT_VALUES) do
        local oldCollectibleType = activeItemMap:get(activeSlot) or CollectibleType.NULL
        local newCollectibleType = player:GetActiveItem(activeSlot)
        activeItemMap:set(activeSlot, newCollectibleType)
        oldCollectibleTypes[#oldCollectibleTypes + 1] = oldCollectibleType
        newCollectibleTypes[#newCollectibleTypes + 1] = newCollectibleType
    end
    __TS__ArraySort(oldCollectibleTypes)
    __TS__ArraySort(newCollectibleTypes)
    if not arrayEquals(nil, oldCollectibleTypes, newCollectibleTypes) then
        self:updateCollectibleMapAndFire(player, nil)
    end
end
return ____exports
 end,
["classes.features.callbackLogic.PlayerReorderedCallbacks"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local dequeue
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____array = require("functions.array")
local emptyArray = ____array.emptyArray
local ____playerIndex = require("functions.playerIndex")
local getPlayerFromIndex = ____playerIndex.getPlayerFromIndex
local getPlayerIndex = ____playerIndex.getPlayerIndex
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
function dequeue(self, queue, fireFunc)
    for ____, element in ipairs(queue) do
        local playerIndex = element.playerIndex
        local renderOffset = element.renderOffset
        local player = getPlayerFromIndex(nil, playerIndex)
        if player ~= nil then
            fireFunc(nil, player, renderOffset)
        end
    end
    emptyArray(nil, queue)
end
local v = {run = {postGameStartedFiredOnThisRun = false, postPEffectUpdateQueue = {}, postPlayerUpdateQueue = {}, postPlayerRenderQueue = {}}}
____exports.PlayerReorderedCallbacks = __TS__Class()
local PlayerReorderedCallbacks = ____exports.PlayerReorderedCallbacks
PlayerReorderedCallbacks.name = "PlayerReorderedCallbacks"
__TS__ClassExtends(PlayerReorderedCallbacks, Feature)
function PlayerReorderedCallbacks.prototype.____constructor(self, postPEffectUpdateReordered, postPlayerRenderReordered, postPlayerUpdateReordered)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postPEffectUpdate = function(____, player)
        if v.run.postGameStartedFiredOnThisRun then
            self.postPEffectUpdateReordered:fire(player)
        else
            local playerIndex = getPlayerIndex(nil, player)
            local ____v_run_postPEffectUpdateQueue_0 = v.run.postPEffectUpdateQueue
            ____v_run_postPEffectUpdateQueue_0[#____v_run_postPEffectUpdateQueue_0 + 1] = {playerIndex = playerIndex, renderOffset = VectorZero}
        end
    end
    self.postPlayerUpdate = function(____, player)
        if v.run.postGameStartedFiredOnThisRun then
            self.postPlayerUpdateReordered:fire(player)
        else
            local playerIndex = getPlayerIndex(nil, player)
            local ____v_run_postPlayerUpdateQueue_1 = v.run.postPlayerUpdateQueue
            ____v_run_postPlayerUpdateQueue_1[#____v_run_postPlayerUpdateQueue_1 + 1] = {playerIndex = playerIndex, renderOffset = VectorZero}
        end
    end
    self.postPlayerRender = function(____, player, renderOffset)
        if v.run.postGameStartedFiredOnThisRun then
            self.postPlayerRenderReordered:fire(player, renderOffset)
        else
            local playerIndex = getPlayerIndex(nil, player)
            local ____v_run_postPlayerRenderQueue_2 = v.run.postPlayerRenderQueue
            ____v_run_postPlayerRenderQueue_2[#____v_run_postPlayerRenderQueue_2 + 1] = {playerIndex = playerIndex, renderOffset = renderOffset}
        end
    end
    self.postGameStartedReorderedLast = function()
        v.run.postGameStartedFiredOnThisRun = true
        dequeue(nil, v.run.postPEffectUpdateQueue, self.postPEffectUpdateReordered.fire)
        dequeue(nil, v.run.postPlayerUpdateQueue, self.postPlayerUpdateReordered.fire)
        dequeue(nil, v.run.postPlayerRenderQueue, self.postPlayerRenderReordered.fire)
    end
    self.callbacksUsed = {{ModCallback.POST_PEFFECT_UPDATE, self.postPEffectUpdate}, {ModCallback.POST_PLAYER_UPDATE, self.postPlayerUpdate}, {ModCallback.POST_PLAYER_RENDER, self.postPlayerRender}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_GAME_STARTED_REORDERED_LAST, self.postGameStartedReorderedLast}}
    self.postPEffectUpdateReordered = postPEffectUpdateReordered
    self.postPlayerRenderReordered = postPlayerRenderReordered
    self.postPlayerUpdateReordered = postPlayerUpdateReordered
end
return ____exports
 end,
["objects.slotNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local SlotVariant = ____isaac_2Dtypescript_2Ddefinitions.SlotVariant
____exports.DEFAULT_SLOT_NAME = "Unknown"
--- Taken from "entities2.xml".
____exports.SLOT_NAMES = {
    [SlotVariant.SLOT_MACHINE] = "Slot Machine",
    [SlotVariant.BLOOD_DONATION_MACHINE] = "Blood Donation Machine",
    [SlotVariant.FORTUNE_TELLING_MACHINE] = "Fortune Telling Machine",
    [SlotVariant.BEGGAR] = "Beggar",
    [SlotVariant.DEVIL_BEGGAR] = "Devil Beggar",
    [SlotVariant.SHELL_GAME] = "Shell Game",
    [SlotVariant.KEY_MASTER] = "Key Master",
    [SlotVariant.DONATION_MACHINE] = "Donation Machine",
    [SlotVariant.BOMB_BUM] = "Bomb Bum",
    [SlotVariant.SHOP_RESTOCK_MACHINE] = "Shop Restock Machine",
    [SlotVariant.GREED_DONATION_MACHINE] = "Greed Donation Machine",
    [SlotVariant.MOMS_DRESSING_TABLE] = "Mom's Dressing Table",
    [SlotVariant.BATTERY_BUM] = "Battery Bum",
    [SlotVariant.ISAAC_SECRET] = "Isaac (secret)",
    [SlotVariant.HELL_GAME] = "Hell Game",
    [SlotVariant.CRANE_GAME] = "Crane Game",
    [SlotVariant.CONFESSIONAL] = "Confessional",
    [SlotVariant.ROTTEN_BEGGAR] = "Rotten Beggar"
}
return ____exports
 end,
["functions.slots"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local SlotVariant = ____isaac_2Dtypescript_2Ddefinitions.SlotVariant
local ____slotNames = require("objects.slotNames")
local DEFAULT_SLOT_NAME = ____slotNames.DEFAULT_SLOT_NAME
local SLOT_NAMES = ____slotNames.SLOT_NAMES
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____entityTypes = require("functions.entityTypes")
local isSlot = ____entityTypes.isSlot
local SLOT_MACHINE_VARIANTS = __TS__New(ReadonlySet, {
    SlotVariant.SLOT_MACHINE,
    SlotVariant.BLOOD_DONATION_MACHINE,
    SlotVariant.FORTUNE_TELLING_MACHINE,
    SlotVariant.DONATION_MACHINE,
    SlotVariant.SHOP_RESTOCK_MACHINE,
    SlotVariant.GREED_DONATION_MACHINE,
    SlotVariant.MOMS_DRESSING_TABLE,
    SlotVariant.CRANE_GAME,
    SlotVariant.CONFESSIONAL
})
--- Helper function to get the name of a slot, as listed in the "entities2.xml" file. Returns
-- "Unknown" if the provided slot variant is not valid.
-- 
-- This function only works for vanilla slot variants.
-- 
-- For example, `getSlotName(SlotVariant.BLOOD_DONATION_MACHINE)` would return "Blood Donation
-- Machine".
function ____exports.getSlotName(self, slotVariant)
    return SLOT_NAMES[slotVariant] or DEFAULT_SLOT_NAME
end
--- Returns true for the specific variants of `EntityType.SLOT` that are machines.
function ____exports.isSlotMachine(self, entity)
    if not isSlot(nil, entity) then
        return false
    end
    return SLOT_MACHINE_VARIANTS:has(entity.Variant)
end
return ____exports
 end,
["classes.features.callbackLogic.SlotDestroyedDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityGridCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.EntityGridCollisionClass
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____SlotDestructionType = require("enums.SlotDestructionType")
local SlotDestructionType = ____SlotDestructionType.SlotDestructionType
local ____slots = require("functions.slots")
local isSlotMachine = ____slots.isSlotMachine
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {room = {destroyedSlotSet = __TS__New(Set)}}
____exports.SlotDestroyedDetection = __TS__Class()
local SlotDestroyedDetection = ____exports.SlotDestroyedDetection
SlotDestroyedDetection.name = "SlotDestroyedDetection"
__TS__ClassExtends(SlotDestroyedDetection, Feature)
function SlotDestroyedDetection.prototype.____constructor(self, postSlotDestroyed, roomHistory)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postEntityRemoveSlot = function(____, entity)
        local slot = entity
        if self.roomHistory:isLeavingRoom() then
            return
        end
        if isSlotMachine(nil, slot) then
            self:postEntityRemoveSlotMachine(slot)
        else
            self:postEntityRemoveBeggar(slot)
        end
    end
    self.postSlotUpdate = function(____, slot)
        local ptrHash = GetPtrHash(slot)
        local alreadyDestroyed = v.room.destroyedSlotSet:has(ptrHash)
        if alreadyDestroyed then
            return
        end
        self:checkDestroyedFromCollisionClass(slot)
    end
    self.featuresUsed = {ISCFeature.ROOM_HISTORY}
    self.callbacksUsed = {{ModCallback.POST_ENTITY_REMOVE, self.postEntityRemoveSlot, {EntityType.SLOT}}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_SLOT_UPDATE, self.postSlotUpdate}}
    self.postSlotDestroyed = postSlotDestroyed
    self.roomHistory = roomHistory
end
function SlotDestroyedDetection.prototype.postEntityRemoveSlotMachine(self, slot)
    self.postSlotDestroyed:fire(slot, SlotDestructionType.COLLECTIBLE_PAYOUT)
end
function SlotDestroyedDetection.prototype.postEntityRemoveBeggar(self, slot)
    local sprite = slot:GetSprite()
    local animation = sprite:GetAnimation()
    local slotDestructionType = animation == "Teleport" and SlotDestructionType.COLLECTIBLE_PAYOUT or SlotDestructionType.NORMAL
    self.postSlotDestroyed:fire(slot, slotDestructionType)
end
function SlotDestroyedDetection.prototype.checkDestroyedFromCollisionClass(self, slot)
    if slot.GridCollisionClass == EntityGridCollisionClass.GROUND then
        local ptrHash = GetPtrHash(slot)
        v.room.destroyedSlotSet:add(ptrHash)
        self.postSlotDestroyed:fire(slot, SlotDestructionType.NORMAL)
    end
end
return ____exports
 end,
["classes.features.callbackLogic.SlotRenderDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local Set = ____lualib.Set
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getSlots = ____entitiesSpecific.getSlots
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {room = {
    slotAnimations = __TS__New(
        DefaultMap,
        function(____, slot)
            local sprite = slot:GetSprite()
            return sprite:GetAnimation()
        end
    ),
    brokenSlots = __TS__New(Set)
}}
____exports.SlotRenderDetection = __TS__Class()
local SlotRenderDetection = ____exports.SlotRenderDetection
SlotRenderDetection.name = "SlotRenderDetection"
__TS__ClassExtends(SlotRenderDetection, Feature)
function SlotRenderDetection.prototype.____constructor(self, postSlotRender, postSlotAnimationChanged)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postRender = function()
        for ____, slot in ipairs(getSlots(nil)) do
            self.postSlotRender:fire(slot)
            self:checkSlotAnimationChanged(slot)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
    self.postSlotRender = postSlotRender
    self.postSlotAnimationChanged = postSlotAnimationChanged
end
function SlotRenderDetection.prototype.checkSlotAnimationChanged(self, slot)
    local sprite = slot:GetSprite()
    local currentAnimation = sprite:GetAnimation()
    local ptrHash = GetPtrHash(slot)
    local previousAnimation = v.room.slotAnimations:getAndSetDefault(ptrHash, slot)
    v.room.slotAnimations:set(ptrHash, currentAnimation)
    if currentAnimation ~= previousAnimation then
        self.postSlotAnimationChanged:fire(slot, previousAnimation, currentAnimation)
    end
end
return ____exports
 end,
["classes.features.callbackLogic.SlotUpdateDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getSlots = ____entitiesSpecific.getSlots
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {room = {initializedSlots = __TS__New(Set)}}
____exports.SlotUpdateDetection = __TS__Class()
local SlotUpdateDetection = ____exports.SlotUpdateDetection
SlotUpdateDetection.name = "SlotUpdateDetection"
__TS__ClassExtends(SlotUpdateDetection, Feature)
function SlotUpdateDetection.prototype.____constructor(self, postSlotInit, postSlotUpdate)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postUpdate = function()
        for ____, slot in ipairs(getSlots(nil)) do
            self:checkNewEntity(slot)
            self.postSlotUpdate:fire(slot)
        end
    end
    self.postNewRoomReordered = function()
        for ____, slot in ipairs(getSlots(nil)) do
            self:checkNewEntity(slot)
        end
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}}
    self.postSlotInit = postSlotInit
    self.postSlotUpdate = postSlotUpdate
end
function SlotUpdateDetection.prototype.checkNewEntity(self, slot)
    local ptrHash = GetPtrHash(slot)
    if not v.room.initializedSlots:has(ptrHash) then
        v.room.initializedSlots:add(ptrHash)
        self.postSlotInit:fire(slot)
    end
end
return ____exports
 end,
["objects.batteryNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BatterySubType = ____isaac_2Dtypescript_2Ddefinitions.BatterySubType
____exports.DEFAULT_BATTERY_NAME = "Unknown"
--- Taken from "entities2.xml".
____exports.BATTERY_NAMES = {
    [BatterySubType.NULL] = ____exports.DEFAULT_BATTERY_NAME,
    [BatterySubType.NORMAL] = "Lil' Battery",
    [BatterySubType.MICRO] = "Micro Battery",
    [BatterySubType.MEGA] = "Mega Battery",
    [BatterySubType.GOLDEN] = "Golden Battery"
}
return ____exports
 end,
["objects.bombNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BombSubType = ____isaac_2Dtypescript_2Ddefinitions.BombSubType
____exports.DEFAULT_BOMB_NAME = "Unknown"
--- Taken from "entities2.xml".
____exports.BOMB_NAMES = {
    [BombSubType.NULL] = ____exports.DEFAULT_BOMB_NAME,
    [BombSubType.NORMAL] = "Bomb",
    [BombSubType.DOUBLE_PACK] = "Double Bomb",
    [BombSubType.TROLL] = "Troll Bomb",
    [BombSubType.GOLDEN] = "Golden Bomb",
    [BombSubType.MEGA_TROLL] = "Megatroll Bomb",
    [BombSubType.GOLDEN_TROLL] = "Golden Troll Bomb",
    [BombSubType.GIGA] = "Giga Bomb"
}
return ____exports
 end,
["objects.chestNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
____exports.DEFAULT_CHEST_NAME = "Unknown"
--- Taken from "entities2.xml".
____exports.CHEST_NAMES = {
    [PickupVariant.CHEST] = "Chest",
    [PickupVariant.BOMB_CHEST] = "Bomb Chest",
    [PickupVariant.SPIKED_CHEST] = "Spiked Chest",
    [PickupVariant.ETERNAL_CHEST] = "Eternal Chest",
    [PickupVariant.MIMIC_CHEST] = "Mimic Chest",
    [PickupVariant.OLD_CHEST] = "Old Chest",
    [PickupVariant.WOODEN_CHEST] = "Wooden Chest",
    [PickupVariant.MEGA_CHEST] = "Mega Chest",
    [PickupVariant.HAUNTED_CHEST] = "Haunted Chest",
    [PickupVariant.LOCKED_CHEST] = "Locked Chest",
    [PickupVariant.RED_CHEST] = "Red Chest",
    [PickupVariant.MOMS_CHEST] = "Mom's Chest"
}
return ____exports
 end,
["objects.coinNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CoinSubType = ____isaac_2Dtypescript_2Ddefinitions.CoinSubType
____exports.DEFAULT_COIN_NAME = "Unknown"
--- Taken from "entities2.xml".
____exports.COIN_NAMES = {
    [CoinSubType.NULL] = ____exports.DEFAULT_COIN_NAME,
    [CoinSubType.PENNY] = "Penny",
    [CoinSubType.NICKEL] = "Nickel",
    [CoinSubType.DIME] = "Dime",
    [CoinSubType.DOUBLE_PACK] = "Double Penny",
    [CoinSubType.LUCKY_PENNY] = "Lucky Penny",
    [CoinSubType.STICKY_NICKEL] = "Sticky Nickel",
    [CoinSubType.GOLDEN] = "Golden Penny"
}
return ____exports
 end,
["objects.coinSubTypeToValue"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CoinSubType = ____isaac_2Dtypescript_2Ddefinitions.CoinSubType
____exports.DEFAULT_COIN_VALUE = 1
____exports.COIN_SUB_TYPE_TO_VALUE = {
    [CoinSubType.NULL] = 0,
    [CoinSubType.PENNY] = 1,
    [CoinSubType.NICKEL] = 5,
    [CoinSubType.DIME] = 10,
    [CoinSubType.DOUBLE_PACK] = 2,
    [CoinSubType.LUCKY_PENNY] = 1,
    [CoinSubType.STICKY_NICKEL] = 5,
    [CoinSubType.GOLDEN] = 1
}
return ____exports
 end,
["objects.heartNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local HeartSubType = ____isaac_2Dtypescript_2Ddefinitions.HeartSubType
____exports.DEFAULT_HEART_NAME = "Unknown"
--- Taken from "entities2.xml".
____exports.HEART_NAMES = {
    [HeartSubType.NULL] = ____exports.DEFAULT_HEART_NAME,
    [HeartSubType.FULL] = "Heart",
    [HeartSubType.HALF] = "Heart (half)",
    [HeartSubType.SOUL] = "Heart (soul)",
    [HeartSubType.ETERNAL] = "Heart (eternal)",
    [HeartSubType.DOUBLE_PACK] = "Heart (double)",
    [HeartSubType.BLACK] = "Black Heart",
    [HeartSubType.GOLDEN] = "Gold Heart",
    [HeartSubType.HALF_SOUL] = "Heart (half soul)",
    [HeartSubType.SCARED] = "Scared Heart",
    [HeartSubType.BLENDED] = "Blended Heart",
    [HeartSubType.BONE] = "Bone Heart",
    [HeartSubType.ROTTEN] = "Rotten Heart"
}
return ____exports
 end,
["objects.keyNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local KeySubType = ____isaac_2Dtypescript_2Ddefinitions.KeySubType
____exports.DEFAULT_KEY_NAME = "Unknown"
--- Taken from "entities2.xml".
____exports.KEY_NAMES = {
    [KeySubType.NULL] = ____exports.DEFAULT_KEY_NAME,
    [KeySubType.NORMAL] = "Key",
    [KeySubType.GOLDEN] = "Golden Key",
    [KeySubType.DOUBLE_PACK] = "Key Ring",
    [KeySubType.CHARGED] = "Charged Key"
}
return ____exports
 end,
["objects.sackNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local SackSubType = ____isaac_2Dtypescript_2Ddefinitions.SackSubType
____exports.DEFAULT_SACK_NAME = "Unknown"
--- Taken from "entities2.xml".
____exports.SACK_NAMES = {[SackSubType.NULL] = ____exports.DEFAULT_SACK_NAME, [SackSubType.NORMAL] = "Grab Bag", [SackSubType.BLACK] = "Black Sack"}
return ____exports
 end,
["sets.redHeartSubTypesSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local HeartSubType = ____isaac_2Dtypescript_2Ddefinitions.HeartSubType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.RED_HEART_SUB_TYPES_SET = __TS__New(ReadonlySet, {HeartSubType.FULL, HeartSubType.HALF, HeartSubType.DOUBLE_PACK})
return ____exports
 end,
["functions.pickupsSpecific"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayPushArray = ____lualib.__TS__ArrayPushArray
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local ____constants = require("core.constants")
local CHEST_PICKUP_VARIANTS = ____constants.CHEST_PICKUP_VARIANTS
local VectorZero = ____constants.VectorZero
local ____entities = require("functions.entities")
local removeEntities = ____entities.removeEntities
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getPickups = ____entitiesSpecific.getPickups
local removeAllPickups = ____entitiesSpecific.removeAllPickups
local spawnPickup = ____entitiesSpecific.spawnPickup
--- Helper function to get all of the battery entities in the room.
-- 
-- @param batterySubType Optional. If specified, will only get the batteries that match the
-- sub-type. Default is -1, which matches every sub-type.
function ____exports.getBatteries(self, batterySubType)
    if batterySubType == nil then
        batterySubType = -1
    end
    return getPickups(nil, PickupVariant.LIL_BATTERY, batterySubType)
end
--- Helper function to get all of the bomb entities in the room. (Specifically, this refers to bomb
-- pickups, not the `EntityBomb` class.)
-- 
-- @param bombSubType Optional. If specified, will only get the bombs that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getBombPickups(self, bombSubType)
    if bombSubType == nil then
        bombSubType = -1
    end
    return getPickups(nil, PickupVariant.BOMB, bombSubType)
end
--- Helper function to get all of the card entities in the room.
-- 
-- @param cardType Optional. If specified, will only get the cards that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getCards(self, cardType)
    if cardType == nil then
        cardType = -1
    end
    return getPickups(nil, PickupVariant.CARD, cardType)
end
--- Helper function to get all of the chest entities in the room. Specifically, this is all of the
-- pickups with a variant in the `CHEST_PICKUP_VARIANTS` constant.
-- 
-- @param subType Optional. If specified, will only get the chests that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getChests(self, subType)
    if subType == nil then
        subType = -1
    end
    local chests = {}
    for ____, pickupVariant in ipairs(CHEST_PICKUP_VARIANTS) do
        local pickups = getPickups(nil, pickupVariant, subType)
        __TS__ArrayPushArray(chests, pickups)
    end
    return chests
end
--- Helper function to get all of the coin pickup entities in the room.
-- 
-- @param coinSubType Optional. If specified, will only get the coins that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getCoins(self, coinSubType)
    if coinSubType == nil then
        coinSubType = -1
    end
    return getPickups(nil, PickupVariant.COIN, coinSubType)
end
--- Helper function to get all of the collectible entities in the room.
-- 
-- @param collectibleType Optional. If specified, will only get the collectibles that match the
-- sub-type. Default is -1, which matches every sub-type.
function ____exports.getCollectibles(self, collectibleType)
    if collectibleType == nil then
        collectibleType = -1
    end
    return getPickups(nil, PickupVariant.COLLECTIBLE, collectibleType)
end
--- Helper function to get all of the heart pickup entities in the room.
-- 
-- @param heartSubType Optional. If specified, will only get the hearts that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getHearts(self, heartSubType)
    if heartSubType == nil then
        heartSubType = -1
    end
    return getPickups(nil, PickupVariant.HEART, heartSubType)
end
--- Helper function to get all of the key pickup entities in the room.
-- 
-- @param keySubType Optional. If specified, will only get the keys that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getKeys(self, keySubType)
    if keySubType == nil then
        keySubType = -1
    end
    return getPickups(nil, PickupVariant.KEY, keySubType)
end
--- Helper function to get all of the pill entities in the room.
-- 
-- @param pillColor Optional. If specified, will only get the pills that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getPills(self, pillColor)
    if pillColor == nil then
        pillColor = -1
    end
    return getPickups(nil, PickupVariant.PILL, pillColor)
end
--- Helper function to get all of the sack (i.e. grab bag) entities in the room.
-- 
-- @param sackSubType Optional. If specified, will only get the sacks that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getSacks(self, sackSubType)
    if sackSubType == nil then
        sackSubType = -1
    end
    return getPickups(nil, PickupVariant.SACK, sackSubType)
end
--- Helper function to get all of the trinket entities in the room.
-- 
-- @param trinketType Optional. If specified, will only get the trinkets that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getTrinkets(self, trinketType)
    if trinketType == nil then
        trinketType = -1
    end
    return getPickups(nil, PickupVariant.TRINKET, trinketType)
end
--- Helper function to remove all of the batteries in the room.
-- 
-- @param batterySubType Optional. If specified, will only remove the batteries that match this
-- sub-type. Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of cards.
-- @returns The batteries that were removed.
function ____exports.removeAllBatteries(self, batterySubType, cap)
    if batterySubType == nil then
        batterySubType = -1
    end
    return removeAllPickups(nil, PickupVariant.LIL_BATTERY, batterySubType, cap)
end
--- Helper function to remove all of the bomb pickups in the room. (Specifically, this refers to bomb
-- pickups, not the `EntityBomb` class.)
-- 
-- @param bombSubType Optional. If specified, will only remove bombs that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of bombs.
-- @returns The bombs that were removed.
function ____exports.removeAllBombPickups(self, bombSubType, cap)
    if bombSubType == nil then
        bombSubType = -1
    end
    return removeAllPickups(nil, PickupVariant.BOMB, bombSubType, cap)
end
--- Helper function to remove all of the cards in the room.
-- 
-- @param cardType Optional. If specified, will only remove cards that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of cards.
-- @returns The cards that were removed.
function ____exports.removeAllCards(self, cardType, cap)
    if cardType == nil then
        cardType = -1
    end
    return removeAllPickups(nil, PickupVariant.CARD, cardType, cap)
end
--- Helper function to remove all of the chests in the room. Specifically, this is all of the pickups
-- with a variant in the `CHEST_PICKUP_VARIANTS` constant.
-- 
-- @param subType Optional. If specified, will only remove chests that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of chests.
-- @returns The chests that were removed.
function ____exports.removeAllChests(self, subType, cap)
    if subType == nil then
        subType = -1
    end
    local chests = ____exports.getChests(nil, subType)
    return removeEntities(nil, chests, cap)
end
--- Helper function to remove all of the coins in the room.
-- 
-- @param coinSubType Optional. If specified, will only remove coins that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of coins.
-- @returns The coins that were removed.
function ____exports.removeAllCoins(self, coinSubType, cap)
    return removeAllPickups(nil, PickupVariant.COIN, coinSubType, cap)
end
--- Helper function to remove all of the collectibles in the room.
-- 
-- @param collectibleType Optional. If specified, will only remove collectibles that match this
-- sub-type. Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of collectibles.
-- @returns The collectibles that were removed.
function ____exports.removeAllCollectibles(self, collectibleType, cap)
    return removeAllPickups(nil, PickupVariant.COLLECTIBLE, collectibleType, cap)
end
--- Helper function to remove all of the heart pickup entities in the room.
-- 
-- @param heartSubType Optional. If specified, will only remove hearts that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of hearts.
-- @returns The hearts that were removed.
function ____exports.removeAllHearts(self, heartSubType, cap)
    return removeAllPickups(nil, PickupVariant.HEART, heartSubType, cap)
end
--- Helper function to remove all of the keys in the room.
-- 
-- @param keySubType Optional. If specified, will only remove keys that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of keys.
-- @returns The keys that were removed.
function ____exports.removeAllKeys(self, keySubType, cap)
    return removeAllPickups(nil, PickupVariant.KEY, keySubType, cap)
end
--- Helper function to remove all of the pills in the room.
-- 
-- @param pillColor Optional. If specified, will only remove pills that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of pills.
-- @returns The pills that were removed.
function ____exports.removeAllPills(self, pillColor, cap)
    return removeAllPickups(nil, PickupVariant.PILL, pillColor, cap)
end
--- Helper function to remove all of the sacks (i.e. grab bags) in the room.
-- 
-- @param sackSubType Optional. If specified, will only remove sacks that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of sacks.
-- @returns The sacks that were removed.
function ____exports.removeAllSacks(self, sackSubType, cap)
    return removeAllPickups(nil, PickupVariant.SACK, sackSubType, cap)
end
--- Helper function to remove all of the trinkets in the room.
-- 
-- @param trinketType Optional. If specified, will only remove trinkets that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of trinkets.
-- @returns The trinkets that were removed.
function ____exports.removeAllTrinkets(self, trinketType, cap)
    return removeAllPickups(nil, PickupVariant.TRINKET, trinketType, cap)
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.LIL_BATTERY` (90).
function ____exports.spawnBattery(self, batterySubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.LIL_BATTERY,
        batterySubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.LIL_BATTERY` (90)
-- and a specific seed.
function ____exports.spawnBatteryWithSeed(self, batterySubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnBattery(
        nil,
        batterySubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.BOMB` (40).
function ____exports.spawnBombPickup(self, bombSubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.BOMB,
        bombSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.BOMB` (40) and a
-- specific seed.
function ____exports.spawnBombPickupWithSeed(self, bombSubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnBombPickup(
        nil,
        bombSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.CARD` (300).
function ____exports.spawnCard(self, cardType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.CARD,
        cardType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.CARD` (300) and a
-- specific seed.
function ____exports.spawnCardWithSeed(self, cardType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnCard(
        nil,
        cardType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.COIN` (20).
function ____exports.spawnCoin(self, coinSubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.COIN,
        coinSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.COIN` (20) and a
-- specific seed.
function ____exports.spawnCoinWithSeed(self, coinSubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnCoin(
        nil,
        coinSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.HEART` (10).
function ____exports.spawnHeart(self, heartSubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.HEART,
        heartSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
function ____exports.spawnHeartWithSeed(self, heartSubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnHeart(
        nil,
        heartSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.KEY` (30).
function ____exports.spawnKey(self, keySubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.KEY,
        keySubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.KEY` (30) and a
-- specific seed.
function ____exports.spawnKeyWithSeed(self, keySubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnKey(
        nil,
        keySubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.PILL` (70).
function ____exports.spawnPill(self, pillColor, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.PILL,
        pillColor,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.PILL` (70) and a
-- specific seed.
function ____exports.spawnPillWithSeed(self, pillColor, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnPill(
        nil,
        pillColor,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.SACK` (69).
function ____exports.spawnSack(self, sackSubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.SACK,
        sackSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.SACK` (69) and a
-- specific seed.
function ____exports.spawnSackWithSeed(self, sackSubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnSack(
        nil,
        sackSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.TRINKET` (350).
function ____exports.spawnTrinket(self, trinketType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.TRINKET,
        trinketType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.TRINKET` (350) and
-- a specific seed.
function ____exports.spawnTrinketWithSeed(self, trinketType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnTrinket(
        nil,
        trinketType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
return ____exports
 end,
["functions.pickups"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local ____exports = {}
local ____constants = require("core.constants")
local CHEST_PICKUP_VARIANTS_SET = ____constants.CHEST_PICKUP_VARIANTS_SET
local ____batteryNames = require("objects.batteryNames")
local BATTERY_NAMES = ____batteryNames.BATTERY_NAMES
local DEFAULT_BATTERY_NAME = ____batteryNames.DEFAULT_BATTERY_NAME
local ____bombNames = require("objects.bombNames")
local BOMB_NAMES = ____bombNames.BOMB_NAMES
local DEFAULT_BOMB_NAME = ____bombNames.DEFAULT_BOMB_NAME
local ____chestNames = require("objects.chestNames")
local CHEST_NAMES = ____chestNames.CHEST_NAMES
local DEFAULT_CHEST_NAME = ____chestNames.DEFAULT_CHEST_NAME
local ____coinNames = require("objects.coinNames")
local COIN_NAMES = ____coinNames.COIN_NAMES
local DEFAULT_COIN_NAME = ____coinNames.DEFAULT_COIN_NAME
local ____coinSubTypeToValue = require("objects.coinSubTypeToValue")
local COIN_SUB_TYPE_TO_VALUE = ____coinSubTypeToValue.COIN_SUB_TYPE_TO_VALUE
local DEFAULT_COIN_VALUE = ____coinSubTypeToValue.DEFAULT_COIN_VALUE
local ____heartNames = require("objects.heartNames")
local DEFAULT_HEART_NAME = ____heartNames.DEFAULT_HEART_NAME
local HEART_NAMES = ____heartNames.HEART_NAMES
local ____keyNames = require("objects.keyNames")
local DEFAULT_KEY_NAME = ____keyNames.DEFAULT_KEY_NAME
local KEY_NAMES = ____keyNames.KEY_NAMES
local ____sackNames = require("objects.sackNames")
local DEFAULT_SACK_NAME = ____sackNames.DEFAULT_SACK_NAME
local SACK_NAMES = ____sackNames.SACK_NAMES
local ____redHeartSubTypesSet = require("sets.redHeartSubTypesSet")
local RED_HEART_SUB_TYPES_SET = ____redHeartSubTypesSet.RED_HEART_SUB_TYPES_SET
local ____entities = require("functions.entities")
local removeEntities = ____entities.removeEntities
local ____pickupVariants = require("functions.pickupVariants")
local isHeart = ____pickupVariants.isHeart
local ____pickupsSpecific = require("functions.pickupsSpecific")
local getHearts = ____pickupsSpecific.getHearts
--- Helper function to test if the provided pickup variant matches one of the various chest variants.
function ____exports.isChestVariant(self, pickupVariant)
    return CHEST_PICKUP_VARIANTS_SET:has(pickupVariant)
end
--- Helper function to get the name of a battery, as listed in the "entities2.xml" file. Returns
-- "Unknown" if the provided battery sub-type is not valid.
-- 
-- This function only works for vanilla battery types.
-- 
-- For example, `getBatteryName(BatterySubType.MICRO)` would return "Micro Battery".
function ____exports.getBatteryName(self, batterySubType)
    return BATTERY_NAMES[batterySubType] or DEFAULT_BATTERY_NAME
end
--- Helper function to get the name of a bomb, as listed in the "entities2.xml" file. Returns
-- "Unknown" if the provided bomb sub-type is not valid.
-- 
-- This function only works for vanilla bomb types.
-- 
-- For example, `getBombName(BombSubType.DOUBLE_PACK)` would return "Double Bomb".
function ____exports.getBombName(self, bombSubType)
    return BOMB_NAMES[bombSubType] or DEFAULT_BOMB_NAME
end
--- Helper function to get the name of a chest, as listed in the "entities2.xml" file. Returns
-- "Unknown" if the pickup variant was not a chest.
-- 
-- This function only works for vanilla chest types.
-- 
-- For example, `getChestName(PickupVariant.SPIKED_CHEST)` would return "Spiked Chest".
function ____exports.getChestName(self, pickupVariant)
    local chestNames = CHEST_NAMES
    return chestNames[pickupVariant] or DEFAULT_CHEST_NAME
end
--- Helper function to get the name of a coin, as listed in the "entities2.xml" file. Returns
-- "Unknown" if the provided coin sub-type is not valid.
-- 
-- This function only works for vanilla chest types.
-- 
-- For example, `getCoinName(CoinSubType.DOUBLE_PACK)` would return "Double Penny".
function ____exports.getCoinName(self, coinSubType)
    return COIN_NAMES[coinSubType] or DEFAULT_COIN_NAME
end
--- Helper function to get the corresponding coin amount from a `CoinSubType`. Returns 1 for modded
-- sub-types.
function ____exports.getCoinValue(self, coinSubType)
    local value = COIN_SUB_TYPE_TO_VALUE[coinSubType]
    return value or DEFAULT_COIN_VALUE
end
--- Helper function to get the name of a heart, as listed in the "entities2.xml" file. Returns
-- "Unknown" if the provided heart sub-type is not valid.
-- 
-- This function only works for vanilla heart types.
-- 
-- For example, `getHeartName(HeartSubType.ETERNAL)` would return "Heart (eternal)".
function ____exports.getHeartName(self, heartSubType)
    return HEART_NAMES[heartSubType] or DEFAULT_HEART_NAME
end
--- Helper function to get the name of a key, as listed in the "entities2.xml" file. Returns
-- "Unknown" if the provided key sub-type is not valid.
-- 
-- This function only works for vanilla key types.
-- 
-- For example, `getKeyName(KeySubType.DOUBLE_PACK)` would return "Key Ring".
function ____exports.getKeyName(self, keySubType)
    return KEY_NAMES[keySubType] or DEFAULT_KEY_NAME
end
--- Helper function to get all of the red heart pickup entities in the room.
function ____exports.getRedHearts(self)
    local hearts = getHearts(nil)
    return __TS__ArrayFilter(
        hearts,
        function(____, heart) return RED_HEART_SUB_TYPES_SET:has(heart.SubType) end
    )
end
--- Helper function to get the name of a sack, as listed in the "entities2.xml" file. Returns
-- "Unknown" if the provided sack sub-type is not valid.
-- 
-- This function only works for vanilla sack types.
-- 
-- For example, `getSackName(SackSubType.NORMAL)` would return "Grab Bag".
function ____exports.getSackName(self, sackSubType)
    return SACK_NAMES[sackSubType] or DEFAULT_SACK_NAME
end
--- Helper function to test if the provided pickup matches one of the various chest variants.
function ____exports.isChest(self, pickup)
    return ____exports.isChestVariant(nil, pickup.Variant)
end
--- Helper function to test if the provided pickup matches one of the various red heart sub-types.
function ____exports.isRedHeart(self, pickup)
    return isHeart(nil, pickup) and RED_HEART_SUB_TYPES_SET:has(pickup.SubType)
end
--- Helper function to test if the provided heart sub-type matches one of the various red heart
-- sub-types.
function ____exports.isRedHeartSubType(self, heartSubType)
    return RED_HEART_SUB_TYPES_SET:has(heartSubType)
end
--- Helper function to remove all of the red heart pickup entities in the room.
-- 
-- @param cap Optional. If specified, will only remove the given amount of hearts.
-- @returns The red hearts that were removed.
function ____exports.removeAllRedHearts(self, cap)
    local redHearts = ____exports.getRedHearts(nil)
    return removeEntities(nil, redHearts, cap)
end
return ____exports
 end,
["types.ConversionHeartSubType"] = function(...) 
local ____exports = {}
return ____exports
 end,
["classes.features.other.CharacterHealthConversion"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local convertRedHeartContainers, removeRedHearts
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local HeartSubType = ____isaac_2Dtypescript_2Ddefinitions.HeartSubType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____pickups = require("functions.pickups")
local isRedHeart = ____pickups.isRedHeart
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
function convertRedHeartContainers(self, player, heartSubType)
    local maxHearts = player:GetMaxHearts()
    if maxHearts == 0 then
        return
    end
    player:AddMaxHearts(maxHearts * -1, false)
    repeat
        local ____switch13 = heartSubType
        local ____cond13 = ____switch13 == HeartSubType.SOUL
        if ____cond13 then
            do
                player:AddSoulHearts(maxHearts)
                break
            end
        end
        ____cond13 = ____cond13 or ____switch13 == HeartSubType.BLACK
        if ____cond13 then
            do
                player:AddBlackHearts(maxHearts)
                break
            end
        end
    until true
end
function removeRedHearts(self, player)
    local hearts = player:GetHearts()
    if hearts > 0 then
        player:AddHearts(hearts * -1)
    end
end
____exports.CharacterHealthConversion = __TS__Class()
local CharacterHealthConversion = ____exports.CharacterHealthConversion
CharacterHealthConversion.name = "CharacterHealthConversion"
__TS__ClassExtends(CharacterHealthConversion, Feature)
function CharacterHealthConversion.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.characterHealthReplacementMap = __TS__New(Map)
    self.prePickupCollisionHeart = function(____, pickup, collider)
        if not isRedHeart(nil, pickup) then
            return nil
        end
        local player = collider:ToPlayer()
        if player == nil then
            return nil
        end
        local character = player:GetPlayerType()
        local conversionHeartSubType = self.characterHealthReplacementMap:get(character)
        if conversionHeartSubType == nil then
            return nil
        end
        return false
    end
    self.postPEffectUpdateReordered = function(____, player)
        local character = player:GetPlayerType()
        local conversionHeartSubType = self.characterHealthReplacementMap:get(character)
        if conversionHeartSubType == nil then
            return nil
        end
        convertRedHeartContainers(nil, player, conversionHeartSubType)
        removeRedHearts(nil, player)
    end
    self.callbacksUsed = {{ModCallback.PRE_PICKUP_COLLISION, self.prePickupCollisionHeart, {PickupVariant.HEART}}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
function CharacterHealthConversion.prototype.registerCharacterHealthConversion(self, playerType, conversionHeartSubType)
    if self.characterHealthReplacementMap:has(playerType) then
        error(("Failed to register a character of type " .. tostring(playerType)) .. " because there is already an existing registered character with that type.")
    end
    self.characterHealthReplacementMap:set(playerType, conversionHeartSubType)
end
__TS__DecorateLegacy({Exported}, CharacterHealthConversion.prototype, "registerCharacterHealthConversion", true)
return ____exports
 end,
["classes.features.other.CharacterStats"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____stats = require("functions.stats")
local addPlayerStat = ____stats.addPlayerStat
local getDefaultPlayerStat = ____stats.getDefaultPlayerStat
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
--- Easily create custom characters that have base stats different from that of Isaac.
____exports.CharacterStats = __TS__Class()
local CharacterStats = ____exports.CharacterStats
CharacterStats.name = "CharacterStats"
__TS__ClassExtends(CharacterStats, Feature)
function CharacterStats.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.charactersStatMap = __TS__New(Map)
    self.evaluateCache = function(____, player, cacheFlag)
        local character = player:GetPlayerType()
        local statMap = self.charactersStatMap:get(character)
        if statMap == nil then
            return
        end
        local stat = statMap:get(cacheFlag)
        local defaultStat = getDefaultPlayerStat(nil, cacheFlag)
        if stat == nil or defaultStat == nil then
            return
        end
        local delta = stat - defaultStat
        addPlayerStat(nil, player, cacheFlag, delta)
    end
    self.callbacksUsed = {{ModCallback.EVALUATE_CACHE, self.evaluateCache}}
end
function CharacterStats.prototype.registerCharacterStats(self, playerType, statMap)
    self.charactersStatMap:set(playerType, statMap)
end
__TS__DecorateLegacy({Exported}, CharacterStats.prototype, "registerCharacterStats", true)
return ____exports
 end,
["classes.features.other.CollectibleItemPoolType"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____entities = require("functions.entities")
local getEntityID = ____entities.getEntityID
local ____pickupVariants = require("functions.pickupVariants")
local isCollectible = ____pickupVariants.isCollectible
local ____rooms = require("functions.rooms")
local getRoomItemPoolType = ____rooms.getRoomItemPoolType
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {collectibleItemPoolTypeMap = __TS__New(Map)}}
____exports.CollectibleItemPoolType = __TS__Class()
local CollectibleItemPoolType = ____exports.CollectibleItemPoolType
CollectibleItemPoolType.name = "CollectibleItemPoolType"
__TS__ClassExtends(CollectibleItemPoolType, Feature)
function CollectibleItemPoolType.prototype.____constructor(self, pickupIndexCreation)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postPickupInitCollectible = function(____, collectible)
        local pickupIndex = self.pickupIndexCreation:getPickupIndex(collectible)
        if not v.run.collectibleItemPoolTypeMap:has(pickupIndex) then
            local itemPool = game:GetItemPool()
            local lastItemPoolType = itemPool:GetLastPool()
            v.run.collectibleItemPoolTypeMap:set(pickupIndex, lastItemPoolType)
        end
    end
    self.featuresUsed = {ISCFeature.PICKUP_INDEX_CREATION}
    self.callbacksUsed = {{ModCallback.POST_PICKUP_INIT, self.postPickupInitCollectible, {PickupVariant.COLLECTIBLE}}}
    self.pickupIndexCreation = pickupIndexCreation
end
function CollectibleItemPoolType.prototype.getCollectibleItemPoolType(self, collectible)
    if not isCollectible(nil, collectible) then
        local entityID = getEntityID(nil, collectible)
        error("The \"getCollectibleItemPoolType\" function was given a non-collectible: " .. entityID)
    end
    local pickupIndex = self.pickupIndexCreation:getPickupIndex(collectible)
    local itemPoolType = v.run.collectibleItemPoolTypeMap:get(pickupIndex)
    return itemPoolType or getRoomItemPoolType(nil)
end
__TS__DecorateLegacy({Exported}, CollectibleItemPoolType.prototype, "getCollectibleItemPoolType", true)
return ____exports
 end,
["classes.features.other.CustomHotkeys"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Keyboard = ____isaac_2Dtypescript_2Ddefinitions.Keyboard
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____input = require("functions.input")
local isKeyboardPressed = ____input.isKeyboardPressed
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
____exports.CustomHotkeys = __TS__Class()
local CustomHotkeys = ____exports.CustomHotkeys
CustomHotkeys.name = "CustomHotkeys"
__TS__ClassExtends(CustomHotkeys, Feature)
function CustomHotkeys.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.staticHotkeyFunctionMap = __TS__New(Map)
    self.dynamicHotkeyFunctionMap = __TS__New(Map)
    self.keyPressedMap = __TS__New(DefaultMap, false)
    self.postRender = function()
        for ____, ____value in __TS__Iterator(self.staticHotkeyFunctionMap) do
            local keyboard = ____value[1]
            local triggerFunc = ____value[2]
            self:checkIfTriggered(keyboard, triggerFunc)
        end
        for ____, ____value in __TS__Iterator(self.dynamicHotkeyFunctionMap) do
            local keyboardFunc = ____value[1]
            local triggerFunc = ____value[2]
            local keyboard = keyboardFunc(nil)
            if keyboard ~= nil then
                self:checkIfTriggered(keyboard, triggerFunc)
            end
        end
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
function CustomHotkeys.prototype.checkIfTriggered(self, keyboard, triggerFunc)
    local isPressed = isKeyboardPressed(nil, keyboard)
    local wasPreviouslyPressed = self.keyPressedMap:getAndSetDefault(keyboard)
    self.keyPressedMap:set(keyboard, isPressed)
    if isPressed and not wasPreviouslyPressed then
        triggerFunc(nil)
    end
end
function CustomHotkeys.prototype.setConditionalHotkey(self, getKeyFunc, triggerFunc)
    if self.dynamicHotkeyFunctionMap:has(getKeyFunc) then
        error("Failed to register a hotkey due to a custom hotkey already being defined for the submitted function.")
    end
    self.dynamicHotkeyFunctionMap:set(getKeyFunc, triggerFunc)
end
__TS__DecorateLegacy({Exported}, CustomHotkeys.prototype, "setConditionalHotkey", true)
function CustomHotkeys.prototype.setHotkey(self, keyboard, triggerFunc)
    if self.staticHotkeyFunctionMap:has(keyboard) then
        error(((("Failed to register a hotkey due to a hotkey already being defined for: Keyboard." .. Keyboard[keyboard]) .. " (") .. tostring(keyboard)) .. ")")
    end
    self.staticHotkeyFunctionMap:set(keyboard, triggerFunc)
end
__TS__DecorateLegacy({Exported}, CustomHotkeys.prototype, "setHotkey", true)
function CustomHotkeys.prototype.unsetConditionalHotkey(self, getKeyFunc)
    if not self.dynamicHotkeyFunctionMap:has(getKeyFunc) then
        error("Failed to unregister a hotkey since there is no existing hotkey defined for the submitted function.")
    end
    self.dynamicHotkeyFunctionMap:delete(getKeyFunc)
end
__TS__DecorateLegacy({Exported}, CustomHotkeys.prototype, "unsetConditionalHotkey", true)
function CustomHotkeys.prototype.unsetHotkey(self, keyboard)
    if not self.staticHotkeyFunctionMap:has(keyboard) then
        error(((("Failed to unregister a hotkey since there is no existing hotkey defined for: Keyboard." .. Keyboard[keyboard]) .. " (") .. tostring(keyboard)) .. ")")
    end
    self.staticHotkeyFunctionMap:delete(keyboard)
end
__TS__DecorateLegacy({Exported}, CustomHotkeys.prototype, "unsetHotkey", true)
return ____exports
 end,
["functions.map"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local __TS__Spread = ____lualib.__TS__Spread
local ____exports = {}
local ____array = require("functions.array")
local sumArray = ____array.sumArray
--- Helper function to set a value for a `DefaultMap` that corresponds to an entity, assuming that
-- the map uses `PtrHash` as an index.
function ____exports.mapSetHash(self, map, entity, value)
    local hash = GetPtrHash(entity)
    map:set(hash, value)
end
--- Helper function to copy a map. (You can also use a Map constructor to accomplish this task.)
function ____exports.copyMap(self, oldMap)
    local newMap = __TS__New(Map)
    for ____, ____value in __TS__Iterator(oldMap) do
        local key = ____value[1]
        local value = ____value[2]
        newMap:set(key, value)
    end
    return newMap
end
--- Helper function to get the value from a `DefaultMap` that corresponds to an entity, assuming that
-- the map uses `PtrHash` as an index.
function ____exports.defaultMapGetHash(self, map, entity, ...)
    local ptrHash = GetPtrHash(entity)
    return map:getAndSetDefault(ptrHash, ...)
end
--- Helper function to set a value for a `DefaultMap` that corresponds to an entity, assuming that
-- the map uses `PtrHash` as an index.
-- 
-- Since `Map` and `DefaultMap` set values in the same way, this function is simply an alias for the
-- `mapSetHash` helper function.
function ____exports.defaultMapSetHash(self, map, entity, value)
    ____exports.mapSetHash(nil, map, entity, value)
end
--- Helper function to get a copy of a map with the keys and the values reversed.
-- 
-- For example:
-- 
-- ```ts
-- new Map<string, number>([
--   ["foo", 1],
--   ["bar", 2],
-- ]);
-- ```
-- 
-- Would be reversed to:
-- 
-- ```ts
-- new Map<number, string>([
--   [1, "foo"],
--   [2, "bar"],
-- ]);
-- ```
function ____exports.getReversedMap(self, map)
    local reverseMap = __TS__New(Map)
    for ____, ____value in __TS__Iterator(map) do
        local key = ____value[1]
        local value = ____value[2]
        reverseMap:set(value, key)
    end
    return reverseMap
end
--- Helper function to convert an object to a map.
-- 
-- This is useful when you need to construct a type safe object with the `satisfies` operator, but
-- then later on you need to query it in a way where you expect the return value to be T or
-- undefined. In this situation, by converting the object to a map, you can avoid unsafe type
-- assertions.
-- 
-- Note that the map values will be inserted in a random order, due to how `pairs` works under the
-- hood.
-- 
-- Also see the `objectToReadonlyMap` function.
function ____exports.objectToMap(self, object)
    local map = __TS__New(Map)
    for ____, ____value in ipairs(__TS__ObjectEntries(object)) do
        local key = ____value[1]
        local value = ____value[2]
        map:set(key, value)
    end
    return map
end
--- Helper function to convert an object to a read-only map.
-- 
-- This is useful when you need to construct a type safe object with the `satisfies` operator, but
-- then later on you need to query it in a way where you expect the return value to be T or
-- undefined. In this situation, by converting the object to a map, you can avoid unsafe type
-- assertions.
-- 
-- Note that the map values will be inserted in a random order, due to how `pairs` works under the
-- hood.
-- 
-- Also see the `objectToMap` function.
function ____exports.objectToReadonlyMap(self, object)
    return ____exports.objectToMap(nil, object)
end
--- Helper function to sum every value in a map together.
function ____exports.sumMap(self, map)
    local values = {__TS__Spread(map:values())}
    return sumArray(nil, values)
end
return ____exports
 end,
["types.WeightedArray"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.weighted"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArrayEntries = ____lualib.__TS__ArrayEntries
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____array = require("functions.array")
local sumArray = ____array.sumArray
local ____random = require("functions.random")
local getRandomFloat = ____random.getRandomFloat
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Get a random index from a `WeightedArray`. (A `WeightedArray` is an array of tuples, where the
-- first element in the tuple is a value, and the second element in the tuple is a float
-- corresponding to the value's weight.)
-- 
-- If you want to get an unseeded index, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- @param weightedArray The array to pick from.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
function ____exports.getRandomIndexFromWeightedArray(self, weightedArray, seedOrRNG)
    if #weightedArray == 0 then
        error("Failed to get a random index from a weighted array since the provided array was empty.")
    end
    local weights = __TS__ArrayMap(
        weightedArray,
        function(____, tuple) return tuple[2] end
    )
    local totalWeight = sumArray(nil, weights)
    local randomWeight = getRandomFloat(nil, 0, totalWeight, seedOrRNG)
    local weightAccumulator = 0
    for ____, ____value in __TS__Iterator(__TS__ArrayEntries(weightedArray)) do
        local i = ____value[1]
        local tuple = ____value[2]
        local _element, weight = table.unpack(tuple)
        weightAccumulator = weightAccumulator + weight
        if weightAccumulator >= randomWeight then
            return i
        end
    end
    error("Failed to get a random index from a weighted array.")
end
--- Get a random value from a `WeightedArray`. (A `WeightedArray` is an array of tuples, where the
-- first element in the tuple is a value, and the second element in the tuple is a float
-- corresponding to the value's weight.)
-- 
-- If you want to get an unseeded element, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- @param weightedArray The array to pick from.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
function ____exports.getRandomFromWeightedArray(self, weightedArray, seedOrRNG)
    local randomIndex = ____exports.getRandomIndexFromWeightedArray(nil, weightedArray, seedOrRNG)
    local randomElement = weightedArray[randomIndex + 1]
    assertDefined(
        nil,
        randomElement,
        "Failed to get an element from a weighted array using a random index of: " .. tostring(randomIndex)
    )
    return randomElement[1]
end
return ____exports
 end,
["classes.features.other.CustomItemPools"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local Map = ____lualib.Map
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____array = require("functions.array")
local arrayRemoveIndexInPlace = ____array.arrayRemoveIndexInPlace
local ____map = require("functions.map")
local copyMap = ____map.copyMap
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____weighted = require("functions.weighted")
local getRandomIndexFromWeightedArray = ____weighted.getRandomIndexFromWeightedArray
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {customItemPools = __TS__New(ReadonlyMap)}}
local customItemPoolMap = __TS__New(Map)
____exports.CustomItemPools = __TS__Class()
local CustomItemPools = ____exports.CustomItemPools
CustomItemPools.name = "CustomItemPools"
__TS__ClassExtends(CustomItemPools, Feature)
function CustomItemPools.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postGameStartedReorderedFalse = function()
        v.run.customItemPools = copyMap(nil, customItemPoolMap)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_GAME_STARTED_REORDERED, self.postGameStartedReorderedFalse, {false}}}
end
function CustomItemPools.prototype.registerCustomItemPool(self, itemPoolTypeCustom, collectibles)
    if customItemPoolMap:has(itemPoolTypeCustom) then
        error(("Failed to register a custom item pool since the provided type of " .. tostring(itemPoolTypeCustom)) .. " was already registered.")
    end
    customItemPoolMap:set(itemPoolTypeCustom, collectibles)
end
__TS__DecorateLegacy({Exported}, CustomItemPools.prototype, "registerCustomItemPool", true)
function CustomItemPools.prototype.getCustomItemPoolCollectible(self, itemPoolTypeCustom, seedOrRNG, decrease, defaultItem)
    if decrease == nil then
        decrease = false
    end
    if defaultItem == nil then
        defaultItem = CollectibleType.NULL
    end
    local customItemPool = v.run.customItemPools:get(itemPoolTypeCustom)
    assertDefined(
        nil,
        customItemPool,
        "Failed to find the custom item pool of: " .. tostring(itemPoolTypeCustom)
    )
    if #customItemPool == 0 then
        return defaultItem
    end
    local randomIndex = getRandomIndexFromWeightedArray(nil, customItemPool, seedOrRNG)
    local tuple = customItemPool[randomIndex + 1]
    assertDefined(
        nil,
        tuple,
        "Failed to get an element from a custom item pool using a random index of: " .. tostring(randomIndex)
    )
    if decrease then
        arrayRemoveIndexInPlace(nil, customItemPool, randomIndex)
    end
    return tuple[1]
end
__TS__DecorateLegacy({Exported}, CustomItemPools.prototype, "getCustomItemPoolCollectible", true)
return ____exports
 end,
["enums.LadderSubTypeCustom"] = function(...) 
local ____exports = {}
--- For `EntityType.EFFECT` (1000), `EffectVariant.LADDER` (8).
-- 
-- Note that vanilla ladders only use a sub-type of 0. The `isaacscript-common` library uses ladders
-- to represent custom objects, since they are non-interacting and will not automatically despawn
-- after time passes, unlike most other effects.
-- 
-- This enum tracks the kinds of custom objects that are represented by vanilla ladders. We start
-- assigning sub-types after 100 as to not interfere with any possible modded ladder variants.
____exports.LadderSubTypeCustom = {}
____exports.LadderSubTypeCustom.LADDER = 0
____exports.LadderSubTypeCustom[____exports.LadderSubTypeCustom.LADDER] = "LADDER"
____exports.LadderSubTypeCustom.CUSTOM_BACKDROP = 101
____exports.LadderSubTypeCustom[____exports.LadderSubTypeCustom.CUSTOM_BACKDROP] = "CUSTOM_BACKDROP"
____exports.LadderSubTypeCustom.CUSTOM_SHADOW = 102
____exports.LadderSubTypeCustom[____exports.LadderSubTypeCustom.CUSTOM_SHADOW] = "CUSTOM_SHADOW"
____exports.LadderSubTypeCustom.CUSTOM_PICKUP = 103
____exports.LadderSubTypeCustom[____exports.LadderSubTypeCustom.CUSTOM_PICKUP] = "CUSTOM_PICKUP"
return ____exports
 end,
["classes.features.other.CustomPickups"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EffectVariant = ____isaac_2Dtypescript_2Ddefinitions.EffectVariant
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____LadderSubTypeCustom = require("enums.LadderSubTypeCustom")
local LadderSubTypeCustom = ____LadderSubTypeCustom.LadderSubTypeCustom
local ____entities = require("functions.entities")
local getEntityID = ____entities.getEntityID
local getEntityIDFromConstituents = ____entities.getEntityIDFromConstituents
local ____entitiesSpecific = require("functions.entitiesSpecific")
local spawnEffect = ____entitiesSpecific.spawnEffect
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
--- Normally, we would make a custom entity to represent a fading-away pickup, but we don't want to
-- interfere with the "entities2.xml" file in end-user mods. Thus, we must select a vanilla effect
-- to masquerade as a backdrop effect.
-- 
-- We arbitrarily choose a ladder for this purpose because it will not automatically despawn after
-- time passes, like most other effects.
local PICKUP_EFFECT_VARIANT = EffectVariant.LADDER
local PICKUP_EFFECT_SUB_TYPE = LadderSubTypeCustom.CUSTOM_PICKUP
____exports.CustomPickups = __TS__Class()
local CustomPickups = ____exports.CustomPickups
CustomPickups.name = "CustomPickups"
__TS__ClassExtends(CustomPickups, Feature)
function CustomPickups.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.customPickupFunctionsMap = __TS__New(Map)
    self.prePickupCollision = function(____, pickup, collider)
        local entityID = getEntityID(nil, pickup)
        local customPickupFunctions = self.customPickupFunctionsMap:get(entityID)
        if customPickupFunctions == nil then
            return nil
        end
        local player = collider:ToPlayer()
        if player == nil then
            return nil
        end
        local shouldPickup = customPickupFunctions.collisionFunc(player)
        if not shouldPickup then
            return nil
        end
        pickup:Remove()
        local pickupSprite = pickup:GetSprite()
        local fileName = pickupSprite:GetFilename()
        local effect = spawnEffect(nil, PICKUP_EFFECT_VARIANT, PICKUP_EFFECT_SUB_TYPE, pickup.Position)
        local effectSprite = effect:GetSprite()
        effectSprite:Load(fileName, true)
        effectSprite:Play("Collect", true)
        customPickupFunctions.collectFunc(player)
        return nil
    end
    self.postEffectRenderPickupEffect = function(____, effect)
        if effect.SubType ~= PICKUP_EFFECT_SUB_TYPE then
            return
        end
        local sprite = effect:GetSprite()
        if sprite:IsFinished("Collect") then
            effect:Remove()
        end
    end
    self.callbacksUsed = {{ModCallback.PRE_PICKUP_COLLISION, self.prePickupCollision}, {ModCallback.POST_EFFECT_RENDER, self.postEffectRenderPickupEffect, {PICKUP_EFFECT_VARIANT}}}
end
function CustomPickups.prototype.registerCustomPickup(self, pickupVariantCustom, subType, collectFunc, collisionFunc)
    if collisionFunc == nil then
        collisionFunc = function() return true end
    end
    local entityID = getEntityIDFromConstituents(nil, EntityType.PICKUP, pickupVariantCustom, subType)
    local customPickupFunctions = {collectFunc = collectFunc, collisionFunc = collisionFunc}
    self.customPickupFunctionsMap:set(entityID, customPickupFunctions)
end
__TS__DecorateLegacy({Exported}, CustomPickups.prototype, "registerCustomPickup", true)
return ____exports
 end,
["customStageMetadata"] = function(...) 
return {}
 end,
["enums.RockAltType"] = function(...) 
local ____exports = {}
--- This is used in the various rock alt type helper functions.
____exports.RockAltType = {}
____exports.RockAltType.URN = 0
____exports.RockAltType[____exports.RockAltType.URN] = "URN"
____exports.RockAltType.MUSHROOM = 1
____exports.RockAltType[____exports.RockAltType.MUSHROOM] = "MUSHROOM"
____exports.RockAltType.SKULL = 2
____exports.RockAltType[____exports.RockAltType.SKULL] = "SKULL"
____exports.RockAltType.POLYP = 3
____exports.RockAltType[____exports.RockAltType.POLYP] = "POLYP"
____exports.RockAltType.BUCKET_DOWNPOUR = 4
____exports.RockAltType[____exports.RockAltType.BUCKET_DOWNPOUR] = "BUCKET_DOWNPOUR"
____exports.RockAltType.BUCKET_DROSS = 5
____exports.RockAltType[____exports.RockAltType.BUCKET_DROSS] = "BUCKET_DROSS"
return ____exports
 end,
["objects.backdropTypeToRockAltType"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BackdropType = ____isaac_2Dtypescript_2Ddefinitions.BackdropType
local ____RockAltType = require("enums.RockAltType")
local RockAltType = ____RockAltType.RockAltType
--- Used by the `getRockAltType` function.
____exports.BACKDROP_TYPE_TO_ROCK_ALT_TYPE = {
    [BackdropType.BASEMENT] = RockAltType.URN,
    [BackdropType.CELLAR] = RockAltType.URN,
    [BackdropType.BURNING_BASEMENT] = RockAltType.URN,
    [BackdropType.CAVES] = RockAltType.MUSHROOM,
    [BackdropType.CATACOMBS] = RockAltType.MUSHROOM,
    [BackdropType.FLOODED_CAVES] = RockAltType.MUSHROOM,
    [BackdropType.DEPTHS] = RockAltType.SKULL,
    [BackdropType.NECROPOLIS] = RockAltType.SKULL,
    [BackdropType.DANK_DEPTHS] = RockAltType.SKULL,
    [BackdropType.WOMB] = RockAltType.POLYP,
    [BackdropType.UTERO] = RockAltType.POLYP,
    [BackdropType.SCARRED_WOMB] = RockAltType.POLYP,
    [BackdropType.BLUE_WOMB] = RockAltType.POLYP,
    [BackdropType.SHEOL] = RockAltType.SKULL,
    [BackdropType.CATHEDRAL] = RockAltType.URN,
    [BackdropType.DARK_ROOM] = RockAltType.SKULL,
    [BackdropType.CHEST] = RockAltType.URN,
    [BackdropType.MEGA_SATAN] = RockAltType.URN,
    [BackdropType.LIBRARY] = RockAltType.URN,
    [BackdropType.SHOP] = RockAltType.URN,
    [BackdropType.CLEAN_BEDROOM] = RockAltType.URN,
    [BackdropType.DIRTY_BEDROOM] = RockAltType.URN,
    [BackdropType.SECRET] = RockAltType.MUSHROOM,
    [BackdropType.DICE] = RockAltType.URN,
    [BackdropType.ARCADE] = RockAltType.URN,
    [BackdropType.ERROR_ROOM] = RockAltType.URN,
    [BackdropType.BLUE_WOMB_PASS] = RockAltType.POLYP,
    [BackdropType.GREED_SHOP] = RockAltType.URN,
    [BackdropType.DUNGEON] = RockAltType.URN,
    [BackdropType.SACRIFICE] = RockAltType.SKULL,
    [BackdropType.DOWNPOUR] = RockAltType.BUCKET_DOWNPOUR,
    [BackdropType.MINES] = RockAltType.MUSHROOM,
    [BackdropType.MAUSOLEUM] = RockAltType.SKULL,
    [BackdropType.CORPSE] = RockAltType.POLYP,
    [BackdropType.PLANETARIUM] = RockAltType.URN,
    [BackdropType.DOWNPOUR_ENTRANCE] = RockAltType.BUCKET_DOWNPOUR,
    [BackdropType.MINES_ENTRANCE] = RockAltType.MUSHROOM,
    [BackdropType.MAUSOLEUM_ENTRANCE] = RockAltType.SKULL,
    [BackdropType.CORPSE_ENTRANCE] = RockAltType.SKULL,
    [BackdropType.MAUSOLEUM_2] = RockAltType.SKULL,
    [BackdropType.MAUSOLEUM_3] = RockAltType.SKULL,
    [BackdropType.MAUSOLEUM_4] = RockAltType.SKULL,
    [BackdropType.CORPSE_2] = RockAltType.POLYP,
    [BackdropType.CORPSE_3] = RockAltType.POLYP,
    [BackdropType.DROSS] = RockAltType.BUCKET_DROSS,
    [BackdropType.ASHPIT] = RockAltType.MUSHROOM,
    [BackdropType.GEHENNA] = RockAltType.SKULL,
    [BackdropType.MORTIS] = RockAltType.POLYP,
    [BackdropType.ISAACS_BEDROOM] = RockAltType.URN,
    [BackdropType.HALLWAY] = RockAltType.URN,
    [BackdropType.MOMS_BEDROOM] = RockAltType.URN,
    [BackdropType.CLOSET] = RockAltType.URN,
    [BackdropType.CLOSET_B] = RockAltType.URN,
    [BackdropType.DOGMA] = RockAltType.URN,
    [BackdropType.DUNGEON_GIDEON] = RockAltType.URN,
    [BackdropType.DUNGEON_ROTGUT] = RockAltType.URN,
    [BackdropType.DUNGEON_BEAST] = RockAltType.URN,
    [BackdropType.MINES_SHAFT] = RockAltType.MUSHROOM,
    [BackdropType.ASHPIT_SHAFT] = RockAltType.MUSHROOM,
    [BackdropType.DARK_CLOSET] = RockAltType.SKULL
}
return ____exports
 end,
["functions.rockAlt"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____backdropTypeToRockAltType = require("objects.backdropTypeToRockAltType")
local BACKDROP_TYPE_TO_ROCK_ALT_TYPE = ____backdropTypeToRockAltType.BACKDROP_TYPE_TO_ROCK_ALT_TYPE
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getNPCs = ____entitiesSpecific.getNPCs
local ____gridEntities = require("functions.gridEntities")
local removeEntitiesSpawnedFromGridEntity = ____gridEntities.removeEntitiesSpawnedFromGridEntity
local ____pickupsSpecific = require("functions.pickupsSpecific")
local getCoins = ____pickupsSpecific.getCoins
local getCollectibles = ____pickupsSpecific.getCollectibles
local getTrinkets = ____pickupsSpecific.getTrinkets
--- Helper function to get the alternate rock type (i.e. urn, mushroom, etc.) that the current room
-- will have.
-- 
-- The rock type is based on the backdrop of the room.
-- 
-- For example, if you change the backdrop of the starting room of the run to `BackdropType.CAVES`,
-- and then spawn `GridEntityType.ROCK_ALT`, it will be a mushroom instead of an urn. Additionally,
-- if it is destroyed, it will generate mushroom-appropriate rewards.
-- 
-- On the other hand, if an urn is spawned first before the backdrop is changed to
-- `BackdropType.CAVES`, the graphic of the urn will not switch to a mushroom. However, when
-- destroyed, the urn will still generate mushroom-appropriate rewards.
function ____exports.getRockAltType(self)
    local room = game:GetRoom()
    local backdropType = room:GetBackdropType()
    return BACKDROP_TYPE_TO_ROCK_ALT_TYPE[backdropType]
end
--- Helper function to remove all coins, trinkets, and so on that spawned from breaking an urn.
-- 
-- The rewards are based on the ones from the wiki:
-- https://bindingofisaacrebirth.fandom.com/wiki/Rocks#Urns
function ____exports.removeUrnRewards(self, gridEntity)
    local coins = getCoins(nil)
    removeEntitiesSpawnedFromGridEntity(nil, coins, gridEntity)
    local quarters = getCollectibles(nil, CollectibleType.QUARTER)
    removeEntitiesSpawnedFromGridEntity(nil, quarters, gridEntity)
    local swallowedPennies = getTrinkets(nil, TrinketType.SWALLOWED_PENNY)
    removeEntitiesSpawnedFromGridEntity(nil, swallowedPennies, gridEntity)
    local spiders = getNPCs(nil, EntityType.SPIDER)
    removeEntitiesSpawnedFromGridEntity(nil, spiders, gridEntity)
end
return ____exports
 end,
["objects.stageToMusic"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local Music = ____isaac_2Dtypescript_2Ddefinitions.Music
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
local BASEMENT_TO_MUSIC = {
    [StageType.ORIGINAL] = Music.BASEMENT,
    [StageType.WRATH_OF_THE_LAMB] = Music.CELLAR,
    [StageType.AFTERBIRTH] = Music.BURNING_BASEMENT,
    [StageType.GREED_MODE] = Music.BASEMENT,
    [StageType.REPENTANCE] = Music.DOWNPOUR,
    [StageType.REPENTANCE_B] = Music.DROSS
}
local CAVES_TO_MUSIC = {
    [StageType.ORIGINAL] = Music.CAVES,
    [StageType.WRATH_OF_THE_LAMB] = Music.CATACOMBS,
    [StageType.AFTERBIRTH] = Music.FLOODED_CAVES,
    [StageType.GREED_MODE] = Music.CAVES,
    [StageType.REPENTANCE] = Music.MINES,
    [StageType.REPENTANCE_B] = Music.ASHPIT
}
local DEPTHS_TO_MUSIC = {
    [StageType.ORIGINAL] = Music.DEPTHS,
    [StageType.WRATH_OF_THE_LAMB] = Music.NECROPOLIS,
    [StageType.AFTERBIRTH] = Music.DANK_DEPTHS,
    [StageType.GREED_MODE] = Music.DEPTHS,
    [StageType.REPENTANCE] = Music.MAUSOLEUM,
    [StageType.REPENTANCE_B] = Music.GEHENNA
}
local WOMB_TO_MUSIC = {
    [StageType.ORIGINAL] = Music.WOMB,
    [StageType.WRATH_OF_THE_LAMB] = Music.UTERO,
    [StageType.AFTERBIRTH] = Music.SCARRED_WOMB,
    [StageType.GREED_MODE] = Music.WOMB,
    [StageType.REPENTANCE] = Music.CORPSE,
    [StageType.REPENTANCE_B] = Music.MORTIS
}
local BLUE_WOMB_TO_MUSIC = {
    [StageType.ORIGINAL] = Music.BLUE_WOMB,
    [StageType.WRATH_OF_THE_LAMB] = Music.BLUE_WOMB,
    [StageType.AFTERBIRTH] = Music.BLUE_WOMB,
    [StageType.GREED_MODE] = Music.BLUE_WOMB,
    [StageType.REPENTANCE] = Music.BLUE_WOMB,
    [StageType.REPENTANCE_B] = Music.BLUE_WOMB
}
local SHEOL_CATHEDRAL_TO_MUSIC = {
    [StageType.ORIGINAL] = Music.SHEOL,
    [StageType.WRATH_OF_THE_LAMB] = Music.CATHEDRAL,
    [StageType.AFTERBIRTH] = Music.SHEOL,
    [StageType.GREED_MODE] = Music.SHEOL,
    [StageType.REPENTANCE] = Music.SHEOL,
    [StageType.REPENTANCE_B] = Music.SHEOL
}
local DARK_ROOM_CHEST_TO_MUSIC = {
    [StageType.ORIGINAL] = Music.DARK_ROOM,
    [StageType.WRATH_OF_THE_LAMB] = Music.CHEST,
    [StageType.AFTERBIRTH] = Music.DARK_ROOM,
    [StageType.GREED_MODE] = Music.DARK_ROOM,
    [StageType.REPENTANCE] = Music.DARK_ROOM,
    [StageType.REPENTANCE_B] = Music.DARK_ROOM
}
local VOID_TO_MUSIC = {
    [StageType.ORIGINAL] = Music.VOID,
    [StageType.WRATH_OF_THE_LAMB] = Music.VOID,
    [StageType.AFTERBIRTH] = Music.VOID,
    [StageType.GREED_MODE] = Music.VOID,
    [StageType.REPENTANCE] = Music.VOID,
    [StageType.REPENTANCE_B] = Music.VOID
}
local HOME_TO_MUSIC = {
    [StageType.ORIGINAL] = Music.ISAACS_HOUSE,
    [StageType.WRATH_OF_THE_LAMB] = Music.ISAACS_HOUSE,
    [StageType.AFTERBIRTH] = Music.ISAACS_HOUSE,
    [StageType.GREED_MODE] = Music.ISAACS_HOUSE,
    [StageType.REPENTANCE] = Music.ISAACS_HOUSE,
    [StageType.REPENTANCE_B] = Music.ISAACS_HOUSE
}
____exports.STAGE_TO_MUSIC = {
    [LevelStage.BASEMENT_1] = BASEMENT_TO_MUSIC,
    [LevelStage.BASEMENT_2] = BASEMENT_TO_MUSIC,
    [LevelStage.CAVES_1] = CAVES_TO_MUSIC,
    [LevelStage.CAVES_2] = CAVES_TO_MUSIC,
    [LevelStage.DEPTHS_1] = DEPTHS_TO_MUSIC,
    [LevelStage.DEPTHS_2] = DEPTHS_TO_MUSIC,
    [LevelStage.WOMB_1] = WOMB_TO_MUSIC,
    [LevelStage.WOMB_2] = WOMB_TO_MUSIC,
    [LevelStage.BLUE_WOMB] = BLUE_WOMB_TO_MUSIC,
    [LevelStage.SHEOL_CATHEDRAL] = SHEOL_CATHEDRAL_TO_MUSIC,
    [LevelStage.DARK_ROOM_CHEST] = DARK_ROOM_CHEST_TO_MUSIC,
    [LevelStage.VOID] = VOID_TO_MUSIC,
    [LevelStage.HOME] = HOME_TO_MUSIC
}
return ____exports
 end,
["functions.sound"] = function(...) 
local ____exports = {}
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local SOUND_EFFECT_VALUES = ____cachedEnumValues.SOUND_EFFECT_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local sfxManager = ____cachedClasses.sfxManager
local ____stageToMusic = require("objects.stageToMusic")
local STAGE_TO_MUSIC = ____stageToMusic.STAGE_TO_MUSIC
local ____enums = require("functions.enums")
local getEnumValues = ____enums.getEnumValues
--- Helper function to get the corresponding music value for a stage and stage type combination.
-- 
-- @param stage Optional. The stage to get the music for. If not specified, the current stage will
-- be used.
-- @param stageType Optional. The stage type to get the music for. If not specified, the current
-- stage type will be used.
function ____exports.getMusicForStage(self, stage, stageType)
    local level = game:GetLevel()
    if stage == nil then
        stage = level:GetStage()
    end
    if stageType == nil then
        stageType = level:GetStageType()
    end
    local stageTypeToMusic = STAGE_TO_MUSIC[stage]
    return stageTypeToMusic[stageType]
end
--- Helper function to manually stop every vanilla sound effect. If you also want to stop custom
-- sound effects in addition to vanilla ones, then pass the `SoundEffectCustom` enum for your mod.
-- 
-- @param soundEffectCustom Optional. The enum that represents all of the custom sound effects for
-- your mod.
function ____exports.stopAllSoundEffects(self, soundEffectCustom)
    for ____, soundEffect in ipairs(SOUND_EFFECT_VALUES) do
        sfxManager:Stop(soundEffect)
    end
    if soundEffectCustom ~= nil then
        for ____, soundEffect in ipairs(getEnumValues(nil, soundEffectCustom)) do
            sfxManager:Stop(soundEffect)
        end
    end
end
return ____exports
 end,
["types.Immutable"] = function(...) 
local ____exports = {}
return ____exports
 end,
["interfaces.CustomStageTSConfig"] = function(...) 
local ____exports = {}
return ____exports
 end,
["interfaces.private.CustomStage"] = function(...) 
local ____exports = {}
return ____exports
 end,
["enums.private.GridEntityTypeCustom"] = function(...) 
local ____exports = {}
____exports.GridEntityTypeCustom = {TRAPDOOR_CUSTOM = 1000}
return ____exports
 end,
["enums.private.StageTravelState"] = function(...) 
local ____exports = {}
____exports.StageTravelState = {}
____exports.StageTravelState.NONE = 0
____exports.StageTravelState[____exports.StageTravelState.NONE] = "NONE"
____exports.StageTravelState.PLAYERS_JUMPING_DOWN = 1
____exports.StageTravelState[____exports.StageTravelState.PLAYERS_JUMPING_DOWN] = "PLAYERS_JUMPING_DOWN"
____exports.StageTravelState.PIXELATION_TO_BLACK = 2
____exports.StageTravelState[____exports.StageTravelState.PIXELATION_TO_BLACK] = "PIXELATION_TO_BLACK"
____exports.StageTravelState.WAITING_FOR_FIRST_PIXELATION_TO_END = 3
____exports.StageTravelState[____exports.StageTravelState.WAITING_FOR_FIRST_PIXELATION_TO_END] = "WAITING_FOR_FIRST_PIXELATION_TO_END"
____exports.StageTravelState.WAITING_FOR_SECOND_PIXELATION_TO_GET_HALF_WAY = 4
____exports.StageTravelState[____exports.StageTravelState.WAITING_FOR_SECOND_PIXELATION_TO_GET_HALF_WAY] = "WAITING_FOR_SECOND_PIXELATION_TO_GET_HALF_WAY"
____exports.StageTravelState.PIXELATION_TO_ROOM = 5
____exports.StageTravelState[____exports.StageTravelState.PIXELATION_TO_ROOM] = "PIXELATION_TO_ROOM"
____exports.StageTravelState.PLAYERS_LAYING_DOWN = 6
____exports.StageTravelState[____exports.StageTravelState.PLAYERS_LAYING_DOWN] = "PLAYERS_LAYING_DOWN"
return ____exports
 end,
["enums.private.TrapdoorAnimation"] = function(...) 
local ____exports = {}
____exports.TrapdoorAnimation = {}
____exports.TrapdoorAnimation.OPENED = "Opened"
____exports.TrapdoorAnimation.CLOSED = "Closed"
____exports.TrapdoorAnimation.OPEN_ANIMATION = "Open Animation"
return ____exports
 end,
["functions.easing"] = function(...) 
local ____exports = {}
--- From: https://easings.net/#easeInOutSine
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutBounce(self, time)
    local n1 = 7.5625
    local d1 = 2.75
    if time < 1 / d1 then
        return n1 * time * time
    end
    if time < 2 / d1 then
        time = time - 1.5 / d1
        return n1 * time * time + 0.75
    end
    if time < 2.5 / d1 then
        time = time - 2.25 / d1
        return n1 * time * time + 0.9375
    end
    time = time - 2.625 / d1
    return n1 * time * time + 0.984375
end
--- From: https://easings.net/#easeInSine
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInSine(self, time)
    return 1 - math.cos(time * math.pi / 2)
end
--- From: https://easings.net/#easeOutSine
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutSine(self, time)
    return math.sin(time * math.pi / 2)
end
--- From: https://easings.net/#easeInOutSine
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutSine(self, time)
    return -(math.cos(math.pi * time) - 1) / 2
end
--- From: https://easings.net/#easeInCubic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInCubic(self, time)
    return time * time * time
end
--- From: https://easings.net/#easeOutCubic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutCubic(self, time)
    return 1 - (1 - time) ^ 3
end
--- From: https://easings.net/#easeInOutCubic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutCubic(self, time)
    return time < 0.5 and 4 * time * time * time or 1 - (-2 * time + 2) ^ 3 / 2
end
--- From: https://easings.net/#easeInQuint
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInQuint(self, time)
    return time * time * time * time * time
end
--- From: https://easings.net/#easeOutQuint
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutQuint(self, time)
    return 1 - (1 - time) ^ 5
end
--- From: https://easings.net/#easeInOutQuint
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutQuint(self, time)
    return time < 0.5 and 16 * time * time * time * time * time or 1 - (-2 * time + 2) ^ 5 / 2
end
--- From: https://easings.net/#easeInCirc
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInCirc(self, time)
    return 1 - math.sqrt(1 - time ^ 2)
end
--- From: https://easings.net/#easeOutCirc
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutCirc(self, time)
    return math.sqrt(1 - (time - 1) ^ 2)
end
--- From: https://easings.net/#easeInOutCirc
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutCirc(self, time)
    return time < 0.5 and (1 - math.sqrt(1 - (2 * time) ^ 2)) / 2 or (math.sqrt(1 - (-2 * time + 2) ^ 2) + 1) / 2
end
--- From: https://easings.net/#easeInElastic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInElastic(self, time)
    local c4 = 2 * math.pi / 3
    return time == 0 and 0 or (time == 1 and 1 or -2 ^ (10 * time - 10) * math.sin((time * 10 - 10.75) * c4))
end
--- From: https://easings.net/#easeOutElastic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutElastic(self, time)
    local c4 = 2 * math.pi / 3
    return time == 0 and 0 or (time == 1 and 1 or 2 ^ (-10 * time) * math.sin((time * 10 - 0.75) * c4) + 1)
end
--- From: https://easings.net/#easeInOutElastic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutElastic(self, time)
    local c5 = 2 * math.pi / 4.5
    return time == 0 and 0 or (time == 1 and 1 or (time < 0.5 and -(2 ^ (20 * time - 10) * math.sin((20 * time - 11.125) * c5)) / 2 or 2 ^ (-20 * time + 10) * math.sin((20 * time - 11.125) * c5) / 2 + 1))
end
--- From: https://easings.net/#easeInQuad
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInQuad(self, time)
    return time * time
end
--- From: https://easings.net/#easeOutQuad
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutQuad(self, time)
    return 1 - (1 - time) * (1 - time)
end
--- From: https://easings.net/#easeInOutQuad
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutQuad(self, time)
    return time < 0.5 and 2 * time * time or 1 - (-2 * time + 2) ^ 2 / 2
end
--- From: https://easings.net/#easeInQuart
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInQuart(self, time)
    return time * time * time * time
end
--- From: https://easings.net/#easeOutQuart
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutQuart(self, time)
    return 1 - (1 - time) ^ 4
end
--- From: https://easings.net/#easeInOutQuart
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutQuart(self, time)
    return time < 0.5 and 8 * time * time * time * time or 1 - (-2 * time + 2) ^ 4 / 2
end
--- From: https://easings.net/#easeInExpo
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInExpo(self, time)
    return time == 0 and 0 or 2 ^ (10 * time - 10)
end
--- From: https://easings.net/#easeOutExpo
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutExpo(self, time)
    return time == 1 and 1 or 1 - 2 ^ (-10 * time)
end
--- From: https://easings.net/#easeInOutExpo
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutExpo(self, time)
    return time == 0 and 0 or (time == 1 and 1 or (time < 0.5 and 2 ^ (20 * time - 10) / 2 or (2 - 2 ^ (-20 * time + 10)) / 2))
end
--- From: https://easings.net/#easeInBack
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInBack(self, time)
    local c1 = 1.70158
    local c3 = c1 + 1
    return c3 * time * time * time - c1 * time * time
end
--- From: https://easings.net/#easeOutBack
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutBack(self, time)
    local c1 = 1.70158
    local c3 = c1 + 1
    return 1 + c3 * (time - 1) ^ 3 + c1 * (time - 1) ^ 2
end
--- From: https://easings.net/#easeInOutBack
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutBack(self, time)
    local c1 = 1.70158
    local c2 = c1 * 1.525
    return time < 0.5 and (2 * time) ^ 2 * ((c2 + 1) * 2 * time - c2) / 2 or ((2 * time - 2) ^ 2 * ((c2 + 1) * (time * 2 - 2) + c2) + 2) / 2
end
--- From: https://easings.net/#easeInBounce
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInBounce(self, time)
    return 1 - ____exports.easeOutBounce(nil, 1 - time)
end
--- From: https://easings.net/#easeInOutBounce
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutBounce(self, time)
    return time < 0.5 and (1 - ____exports.easeOutBounce(nil, 1 - 2 * time)) / 2 or (1 + ____exports.easeOutBounce(nil, 2 * time - 1)) / 2
end
return ____exports
 end,
["sets.familiarsThatShootPlayerTearsSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local FamiliarVariant = ____isaac_2Dtypescript_2Ddefinitions.FamiliarVariant
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.FAMILIARS_THAT_SHOOT_PLAYER_TEARS_SET = __TS__New(ReadonlySet, {
    FamiliarVariant.SCISSORS,
    FamiliarVariant.INCUBUS,
    FamiliarVariant.FATES_REWARD,
    FamiliarVariant.SPRINKLER,
    FamiliarVariant.LOST_SOUL,
    FamiliarVariant.TWISTED_BABY,
    FamiliarVariant.BLOOD_BABY,
    FamiliarVariant.DECAP_ATTACK
})
return ____exports
 end,
["functions.familiars"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ____cachedClasses = require("core.cachedClasses")
local itemConfig = ____cachedClasses.itemConfig
local ____familiarsThatShootPlayerTearsSet = require("sets.familiarsThatShootPlayerTearsSet")
local FAMILIARS_THAT_SHOOT_PLAYER_TEARS_SET = ____familiarsThatShootPlayerTearsSet.FAMILIARS_THAT_SHOOT_PLAYER_TEARS_SET
local ____entities = require("functions.entities")
local getEntities = ____entities.getEntities
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getFamiliars = ____entitiesSpecific.getFamiliars
local ____rng = require("functions.rng")
local newRNG = ____rng.newRNG
--- Instead of generating a new RNG object every time we need to spawn a new familiar, we instead
-- re-use the same RNG object. This makes it less likely that the `InitSeed` of the familiar will
-- overlap, since we are "nexting" instead of doing a fresh reroll.
local familiarGenerationRNG = newRNG(nil)
--- Helper function to add and remove familiars based on a target amount that you specify.
-- 
-- This is a convenience wrapper around the `EntityPlayer.CheckFamiliar` method. Use this helper
-- function instead so that you do not have to retrieve the `ItemConfigItem` and so that you do not
-- specify an incorrect RNG object. (The vanilla method is bugged in that it does not increment the
-- RNG object; see the documentation of the method for more details.)
-- 
-- This function is meant to be called in the `EVALUATE_CACHE` callback (when the cache flag is
-- equal to `CacheFlag.FAMILIARS`).
-- 
-- Note that this function is only meant to be used in special circumstances where the familiar
-- count is completely custom and does not correspond to the amount of collectibles. For the general
-- case, use the `checkFamiliarFromCollectibles` helper function instead.
-- 
-- Note that this will spawn familiars with a completely random `InitSeed`. When calculating random
-- events for this familiar, you should use a data structure that maps familiar `InitSeed` to RNG
-- objects that are initialized based on the seed from
-- `EntityPlayer.GetCollectibleRNG(collectibleType)`.
-- 
-- @param player The player that owns the familiars.
-- @param collectibleType The collectible type of the collectible associated with this familiar.
-- @param targetCount The number of familiars that should exist. This function will add or remove
-- familiars until it matches the target count.
-- @param familiarVariant The variant of the familiar to spawn or remove.
-- @param familiarSubType Optional. The sub-type of the familiar to spawn or remove. If not
-- specified, it will search for existing familiars of all sub-types, and
-- spawn new familiars with a sub-type of 0.
function ____exports.checkFamiliar(self, player, collectibleType, targetCount, familiarVariant, familiarSubType)
    familiarGenerationRNG:Next()
    local itemConfigItem = itemConfig:GetCollectible(collectibleType)
    player:CheckFamiliar(
        familiarVariant,
        targetCount,
        familiarGenerationRNG,
        itemConfigItem,
        familiarSubType
    )
end
--- Helper function to add and remove familiars based on the amount of associated collectibles that a
-- player has.
-- 
-- Use this helper function instead of invoking the `EntityPlayer.CheckFamiliar` method directly so
-- that the target count is handled automatically.
-- 
-- This function is meant to be called in the `EVALUATE_CACHE` callback (when the cache flag is
-- equal to `CacheFlag.FAMILIARS`).
-- 
-- Use this function when the amount of familiars should be equal to the amount of associated
-- collectibles that the player has (plus any extras from having used Box of Friends or Monster
-- Manual). If you instead need to have a custom amount of familiars, use the `checkFamiliars`
-- function instead.
-- 
-- Note that this will spawn familiars with a completely random `InitSeed`. When calculating random
-- events for this familiar, you should use a data structure that maps familiar `InitSeed` to RNG
-- objects that are initialized based on the seed from
-- `EntityPlayer.GetCollectibleRNG(collectibleType)`.
-- 
-- @param player The player that owns the familiars and collectibles.
-- @param collectibleType The collectible type of the collectible associated with this familiar.
-- @param familiarVariant The variant of the familiar to spawn or remove.
-- @param familiarSubType Optional. The sub-type of the familiar to spawn or remove. If not
-- specified, it will search for existing familiars of all sub-types, and
-- spawn new familiars with a sub-type of 0.
function ____exports.checkFamiliarFromCollectibles(self, player, collectibleType, familiarVariant, familiarSubType)
    local numCollectibles = player:GetCollectibleNum(collectibleType)
    local effects = player:GetEffects()
    local numCollectibleEffects = effects:GetCollectibleEffectNum(collectibleType)
    local targetCount = numCollectibles + numCollectibleEffects
    ____exports.checkFamiliar(
        nil,
        player,
        collectibleType,
        targetCount,
        familiarVariant,
        familiarSubType
    )
end
--- Helper function to get only the familiars that belong to a specific player.
function ____exports.getPlayerFamiliars(self, player)
    local playerPtrHash = GetPtrHash(player)
    local familiars = getFamiliars(nil)
    return __TS__ArrayFilter(
        familiars,
        function(____, familiar)
            local familiarPlayerPtrHash = GetPtrHash(familiar.Player)
            return familiarPlayerPtrHash == playerPtrHash
        end
    )
end
--- Helper function to get the corresponding "Siren Helper" entity for a stolen familiar.
-- 
-- When The Siren boss "steals" your familiars, a hidden "Siren Helper" entity is spawned to control
-- each familiar stolen. (Checking for the presence of this entity seems to be the only way to
-- detect when the Siren steals a familiar.)
-- 
-- @param familiar The familiar to be checked.
-- @returns Returns the hidden "Siren Helper" entity corresponding to the given familiar, if it
-- exists. Returns undefined otherwise.
function ____exports.getSirenHelper(self, familiar)
    local familiarPtrHash = GetPtrHash(familiar)
    local sirenHelpers = getEntities(nil, EntityType.SIREN_HELPER)
    return __TS__ArrayFind(
        sirenHelpers,
        function(____, sirenHelper) return sirenHelper.Target ~= nil and GetPtrHash(sirenHelper.Target) == familiarPtrHash end
    )
end
--- Helper function to detect if the given familiar is "stolen" by The Siren boss.
-- 
-- This function is useful because some familiars may need to behave differently when under The
-- Siren's control (e.g. if they auto-target enemies).
function ____exports.isFamiliarStolenBySiren(self, familiar)
    local sirenHelper = ____exports.getSirenHelper(nil, familiar)
    return sirenHelper ~= nil
end
--- Helper function to check if a familiar is the type that shoots tears that mimic the players
-- tears, like Incubus, Fate's Reward, Sprinkler, and so on.
function ____exports.isFamiliarThatShootsPlayerTears(self, familiar)
    return FAMILIARS_THAT_SHOOT_PLAYER_TEARS_SET:has(familiar.Variant)
end
return ____exports
 end,
["functions.playerCenter"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayEntries = ____lualib.__TS__ArrayEntries
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local movePlayerAndTheirFamiliars
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local NEW_FLOOR_STARTING_POSITION_GREED_MODE = ____constants.NEW_FLOOR_STARTING_POSITION_GREED_MODE
local NEW_FLOOR_STARTING_POSITION_NORMAL_MODE = ____constants.NEW_FLOOR_STARTING_POSITION_NORMAL_MODE
local ____familiars = require("functions.familiars")
local getPlayerFamiliars = ____familiars.getPlayerFamiliars
local ____math = require("functions.math")
local getCircleDiscretizedPoints = ____math.getCircleDiscretizedPoints
local ____playerIndex = require("functions.playerIndex")
local getAllPlayers = ____playerIndex.getAllPlayers
function movePlayerAndTheirFamiliars(self, player, position)
    player.Position = position
    local familiars = getPlayerFamiliars(nil, player)
    for ____, familiar in ipairs(familiars) do
        familiar.Position = position
    end
end
--- Helper function to move all of the players to where they would normally go when arriving at a new
-- floor. (In normal mode, this is the center of the room. In Greed Mode, this is below the top
-- door.)
-- 
-- If there is more than one player, they will be distributed around the center in a circle.
-- 
-- This function emulates what happens in the vanilla game when you travel to a new floor.
-- 
-- @param radius Optional. The radius of the circle. Default is 10.
function ____exports.movePlayersToCenter(self, radius)
    if radius == nil then
        radius = 10
    end
    local isGreedMode = game:IsGreedMode()
    local startingPosition = isGreedMode and NEW_FLOOR_STARTING_POSITION_GREED_MODE or NEW_FLOOR_STARTING_POSITION_NORMAL_MODE
    local players = getAllPlayers(nil)
    local firstPlayer = players[1]
    if firstPlayer == nil then
        return
    end
    if #players == 1 then
        movePlayerAndTheirFamiliars(nil, firstPlayer, startingPosition)
        return
    end
    local circlePoints = getCircleDiscretizedPoints(
        nil,
        startingPosition,
        radius,
        #players,
        1,
        1,
        Direction.LEFT
    )
    for ____, ____value in __TS__Iterator(__TS__ArrayEntries(players)) do
        local i = ____value[1]
        local player = ____value[2]
        local circlePosition = circlePoints[i + 1]
        if circlePosition ~= nil then
            player.Position = circlePosition
        end
    end
end
return ____exports
 end,
["interfaces.private.CustomTrapdoorDescription"] = function(...) 
local ____exports = {}
return ____exports
 end,
["classes.features.other.DisableInputs"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local InputHook = ____isaac_2Dtypescript_2Ddefinitions.InputHook
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____input = require("functions.input")
local MOVEMENT_BUTTON_ACTIONS_SET = ____input.MOVEMENT_BUTTON_ACTIONS_SET
local SHOOTING_BUTTON_ACTIONS_SET = ____input.SHOOTING_BUTTON_ACTIONS_SET
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {
    __ignoreGlowingHourGlass = true,
    disableInputs = __TS__New(Map),
    enableAllInputsWithBlacklistMap = __TS__New(Map),
    disableAllInputsWithWhitelistMap = __TS__New(Map)
}}
____exports.DisableInputs = __TS__Class()
local DisableInputs = ____exports.DisableInputs
DisableInputs.name = "DisableInputs"
__TS__ClassExtends(DisableInputs, Feature)
function DisableInputs.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.isActionPressed = function(____, _entity, _inputHook, buttonAction) return self:getReturnValue(buttonAction, true) end
    self.isActionTriggered = function(____, _entity, _inputHook, buttonAction) return self:getReturnValue(buttonAction, true) end
    self.getActionValue = function(____, _entity, _inputHook, buttonAction) return self:getReturnValue(buttonAction, false) end
    self.callbacksUsed = {{ModCallback.INPUT_ACTION, self.isActionPressed, {InputHook.IS_ACTION_PRESSED}}, {ModCallback.INPUT_ACTION, self.isActionTriggered, {InputHook.IS_ACTION_TRIGGERED}}, {ModCallback.INPUT_ACTION, self.getActionValue, {InputHook.GET_ACTION_VALUE}}}
end
function DisableInputs.prototype.getReturnValue(self, buttonAction, booleanCallback)
    local ____booleanCallback_0
    if booleanCallback then
        ____booleanCallback_0 = false
    else
        ____booleanCallback_0 = 0
    end
    local disableValue = ____booleanCallback_0
    for ____, blacklist in __TS__Iterator(v.run.disableInputs:values()) do
        if blacklist:has(buttonAction) then
            return disableValue
        end
    end
    for ____, whitelist in __TS__Iterator(v.run.disableAllInputsWithWhitelistMap:values()) do
        if not whitelist:has(buttonAction) then
            return disableValue
        end
    end
    for ____, blacklist in __TS__Iterator(v.run.enableAllInputsWithBlacklistMap:values()) do
        if blacklist:has(buttonAction) then
            return disableValue
        end
    end
    return nil
end
function DisableInputs.prototype.areInputsEnabled(self)
    return v.run.disableInputs.size == 0 and v.run.enableAllInputsWithBlacklistMap.size == 0 and v.run.disableAllInputsWithWhitelistMap.size == 0
end
__TS__DecorateLegacy({Exported}, DisableInputs.prototype, "areInputsEnabled", true)
function DisableInputs.prototype.enableAllInputs(self, key)
    v.run.disableAllInputsWithWhitelistMap:delete(key)
    v.run.enableAllInputsWithBlacklistMap:delete(key)
end
__TS__DecorateLegacy({Exported}, DisableInputs.prototype, "enableAllInputs", true)
function DisableInputs.prototype.disableInputs(self, key, ...)
    local buttonActions = {...}
    local buttonActionsSet = __TS__New(ReadonlySet, buttonActions)
    v.run.disableInputs:set(key, buttonActionsSet)
end
__TS__DecorateLegacy({Exported}, DisableInputs.prototype, "disableInputs", true)
function DisableInputs.prototype.disableAllInputs(self, key)
    v.run.disableAllInputsWithWhitelistMap:set(
        key,
        __TS__New(ReadonlySet)
    )
    v.run.enableAllInputsWithBlacklistMap:delete(key)
end
__TS__DecorateLegacy({Exported}, DisableInputs.prototype, "disableAllInputs", true)
function DisableInputs.prototype.enableAllInputsExceptFor(self, key, blacklist)
    v.run.disableAllInputsWithWhitelistMap:delete(key)
    v.run.enableAllInputsWithBlacklistMap:set(key, blacklist)
end
__TS__DecorateLegacy({Exported}, DisableInputs.prototype, "enableAllInputsExceptFor", true)
function DisableInputs.prototype.disableAllInputsExceptFor(self, key, whitelist)
    v.run.disableAllInputsWithWhitelistMap:set(key, whitelist)
    v.run.enableAllInputsWithBlacklistMap:delete(key)
end
__TS__DecorateLegacy({Exported}, DisableInputs.prototype, "disableAllInputsExceptFor", true)
function DisableInputs.prototype.disableMovementInputs(self, key)
    self:enableAllInputsExceptFor(key, MOVEMENT_BUTTON_ACTIONS_SET)
end
__TS__DecorateLegacy({Exported}, DisableInputs.prototype, "disableMovementInputs", true)
function DisableInputs.prototype.disableShootingInputs(self, key)
    self:enableAllInputsExceptFor(key, SHOOTING_BUTTON_ACTIONS_SET)
end
__TS__DecorateLegacy({Exported}, DisableInputs.prototype, "disableShootingInputs", true)
return ____exports
 end,
["classes.features.other.PonyDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local EntityFlag = ____isaac_2Dtypescript_2Ddefinitions.EntityFlag
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____playerDataStructures = require("functions.playerDataStructures")
local setAddPlayer = ____playerDataStructures.setAddPlayer
local setDeletePlayer = ____playerDataStructures.setDeletePlayer
local setHasPlayer = ____playerDataStructures.setHasPlayer
local ____playerIndex = require("functions.playerIndex")
local getPlayers = ____playerIndex.getPlayers
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local FLAGS_WHEN_PONY_IS_ACTIVE = {EntityFlag.NO_KNOCKBACK, EntityFlag.NO_PHYSICS_KNOCKBACK, EntityFlag.NO_DAMAGE_BLINK}
local v = {run = {playersIsPonyActive = __TS__New(Set)}}
____exports.PonyDetection = __TS__Class()
local PonyDetection = ____exports.PonyDetection
PonyDetection.name = "PonyDetection"
__TS__ClassExtends(PonyDetection, Feature)
function PonyDetection.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postPEffectUpdateReordered = function(____, player)
        local effects = player:GetEffects()
        local entityFlags = player:GetEntityFlags()
        local hasPonyCollectibleEffect = effects:HasCollectibleEffect(CollectibleType.PONY) or effects:HasCollectibleEffect(CollectibleType.WHITE_PONY)
        local isPonyActiveOnPreviousFrame = setHasPlayer(nil, v.run.playersIsPonyActive, player)
        local hasPonyFlags = hasFlag(
            nil,
            entityFlags,
            table.unpack(FLAGS_WHEN_PONY_IS_ACTIVE)
        )
        local isPonyActiveNow = hasPonyCollectibleEffect or isPonyActiveOnPreviousFrame and hasPonyFlags
        if isPonyActiveNow then
            setAddPlayer(nil, v.run.playersIsPonyActive, player)
        else
            setDeletePlayer(nil, v.run.playersIsPonyActive, player)
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
end
function PonyDetection.prototype.isPlayerUsingPony(self, player)
    return setHasPlayer(nil, v.run.playersIsPonyActive, player)
end
__TS__DecorateLegacy({Exported}, PonyDetection.prototype, "isPlayerUsingPony", true)
function PonyDetection.prototype.anyPlayerUsingPony(self)
    local players = getPlayers(nil)
    return __TS__ArraySome(
        players,
        function(____, player) return self:isPlayerUsingPony(player) end
    )
end
__TS__DecorateLegacy({Exported}, PonyDetection.prototype, "anyPlayerUsingPony", true)
return ____exports
 end,
["classes.features.other.RoomClearFrame"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {room = {roomClearGameFrame = nil, roomClearRenderFrame = nil, roomClearRoomFrame = nil}}
____exports.RoomClearFrame = __TS__Class()
local RoomClearFrame = ____exports.RoomClearFrame
RoomClearFrame.name = "RoomClearFrame"
__TS__ClassExtends(RoomClearFrame, Feature)
function RoomClearFrame.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postRoomClearChangedTrue = function()
        local gameFrameCount = game:GetFrameCount()
        local room = game:GetRoom()
        local roomFrameCount = room:GetFrameCount()
        local renderFrameCount = Isaac.GetFrameCount()
        v.room.roomClearGameFrame = gameFrameCount
        v.room.roomClearRenderFrame = renderFrameCount
        v.room.roomClearRoomFrame = roomFrameCount
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_ROOM_CLEAR_CHANGED, self.postRoomClearChangedTrue}}
end
function RoomClearFrame.prototype.getRoomClearGameFrame(self)
    return v.room.roomClearGameFrame
end
__TS__DecorateLegacy({Exported}, RoomClearFrame.prototype, "getRoomClearGameFrame", true)
function RoomClearFrame.prototype.getRoomClearRenderFrame(self)
    return v.room.roomClearRenderFrame
end
__TS__DecorateLegacy({Exported}, RoomClearFrame.prototype, "getRoomClearRenderFrame", true)
function RoomClearFrame.prototype.getRoomClearRoomFrame(self)
    return v.room.roomClearRoomFrame
end
__TS__DecorateLegacy({Exported}, RoomClearFrame.prototype, "getRoomClearRoomFrame", true)
return ____exports
 end,
["classes.features.other.RunNextRoom"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____array = require("functions.array")
local emptyArray = ____array.emptyArray
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {queuedFunctions = {}}}
____exports.RunNextRoom = __TS__Class()
local RunNextRoom = ____exports.RunNextRoom
RunNextRoom.name = "RunNextRoom"
__TS__ClassExtends(RunNextRoom, Feature)
function RunNextRoom.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.vConditionalFunc = function() return false end
    self.postNewRoomReordered = function()
        for ____, func in ipairs(v.run.queuedFunctions) do
            func(nil)
        end
        emptyArray(nil, v.run.queuedFunctions)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}}
end
function RunNextRoom.prototype.runNextRoom(self, func)
    local ____v_run_queuedFunctions_0 = v.run.queuedFunctions
    ____v_run_queuedFunctions_0[#____v_run_queuedFunctions_0 + 1] = func
end
__TS__DecorateLegacy({Exported}, RunNextRoom.prototype, "runNextRoom", true)
return ____exports
 end,
["functions.curses"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
--- Helper function to get the actual bit flag for modded curses.
-- 
-- Will throw a run-time error if the provided curse does not exist.
-- 
-- Use this over the `Isaac.GetCurseIdByName` method because that will return an integer instead of
-- a bit flag.
function ____exports.getCurseIDByName(self, name)
    local curseID = Isaac.GetCurseIdByName(name)
    if curseID == -1 then
        error(("Failed to get the curse ID corresponding to the curse name of \"" .. tostring(curseID)) .. "\". Does this name match what you put in the \"content/curses.xml\" file?")
    end
    return 1 << curseID - 1
end
--- Helper function to check if the current floor has a particular curse.
-- 
-- This function is variadic, meaning that you can specify as many curses as you want. The function
-- will return true if the level has one or more of the curses.
-- 
-- Under the hood, this function uses the `Level.GetCurses` method.
function ____exports.hasCurse(self, ...)
    local curses = {...}
    local level = game:GetLevel()
    local levelCurses = level:GetCurses()
    return __TS__ArraySome(
        curses,
        function(____, curse) return hasFlag(nil, levelCurses, curse) end
    )
end
return ____exports
 end,
["functions.nextStage"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GameStateFlag = ____isaac_2Dtypescript_2Ddefinitions.GameStateFlag
local GridRoom = ____isaac_2Dtypescript_2Ddefinitions.GridRoom
local LevelCurse = ____isaac_2Dtypescript_2Ddefinitions.LevelCurse
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____curses = require("functions.curses")
local hasCurse = ____curses.hasCurse
local ____roomData = require("functions.roomData")
local getRoomGridIndex = ____roomData.getRoomGridIndex
local ____stage = require("functions.stage")
local calculateStageType = ____stage.calculateStageType
local calculateStageTypeRepentance = ____stage.calculateStageTypeRepentance
local onRepentanceStage = ____stage.onRepentanceStage
--- Helper function to get the stage that a trapdoor or heaven door would take the player to, based
-- on the current stage, room, and game state flags.
-- 
-- If you want to account for the player having visited Repentance floors in The Ascent, use the
-- `getNextStageUsingHistory` helper function instead (from the stage history feature). Handling
-- this requires stateful tracking as the player progresses through the run.
function ____exports.getNextStage(self)
    local level = game:GetLevel()
    local backwardsPath = game:GetStateFlag(GameStateFlag.BACKWARDS_PATH)
    local mausoleumHeartKilled = game:GetStateFlag(GameStateFlag.MAUSOLEUM_HEART_KILLED)
    local stage = level:GetStage()
    local repentanceStage = onRepentanceStage(nil)
    local roomGridIndex = getRoomGridIndex(nil)
    if backwardsPath then
        local nextStage = stage - 1
        return nextStage == 0 and LevelStage.HOME or nextStage
    end
    repeat
        local ____switch4 = roomGridIndex
        local ____cond4 = ____switch4 == GridRoom.BLUE_WOMB
        if ____cond4 then
            do
                return LevelStage.BLUE_WOMB
            end
        end
        ____cond4 = ____cond4 or ____switch4 == GridRoom.VOID
        if ____cond4 then
            do
                return LevelStage.VOID
            end
        end
        ____cond4 = ____cond4 or ____switch4 == GridRoom.SECRET_EXIT
        if ____cond4 then
            do
                if repentanceStage then
                    return stage + 1
                end
                if stage == LevelStage.DEPTHS_2 or stage == LevelStage.DEPTHS_1 and hasCurse(nil, LevelCurse.LABYRINTH) then
                    return LevelStage.DEPTHS_2
                end
                return stage
            end
        end
    until true
    if repentanceStage and stage == LevelStage.BASEMENT_2 then
        return LevelStage.CAVES_2
    end
    if repentanceStage and stage == LevelStage.CAVES_2 then
        return LevelStage.DEPTHS_2
    end
    if repentanceStage and stage == LevelStage.DEPTHS_2 then
        if mausoleumHeartKilled then
            return LevelStage.WOMB_1
        end
        return LevelStage.WOMB_2
    end
    if stage == LevelStage.WOMB_2 then
        return LevelStage.SHEOL_CATHEDRAL
    end
    if stage == LevelStage.DARK_ROOM_CHEST then
        return LevelStage.DARK_ROOM_CHEST
    end
    if stage == LevelStage.VOID then
        return LevelStage.VOID
    end
    return stage + 1
end
--- Helper function to get the stage type that a trapdoor or heaven door would take the player to,
-- based on the current stage, room, and game state flags.
-- 
-- If you want to account for previous floors visited on The Ascent, use the
-- `getNextStageTypeUsingHistory` helper function instead (from the stage history feature). Handling
-- this requires stateful tracking as the player progresses through the run.
-- 
-- @param upwards Whether the player should go up to Cathedral in the case of being on Womb 2.
-- Default is false.
function ____exports.getNextStageType(self, upwards)
    if upwards == nil then
        upwards = false
    end
    local backwardsPath = game:GetStateFlag(GameStateFlag.BACKWARDS_PATH)
    local mausoleumHeartKilled = game:GetStateFlag(GameStateFlag.MAUSOLEUM_HEART_KILLED)
    local level = game:GetLevel()
    local stage = level:GetStage()
    local stageType = level:GetStageType()
    local repentanceStage = onRepentanceStage(nil)
    local roomGridIndex = getRoomGridIndex(nil)
    local nextStage = ____exports.getNextStage(nil)
    if backwardsPath then
        return calculateStageType(nil, nextStage)
    end
    if roomGridIndex == GridRoom.SECRET_EXIT then
        return calculateStageTypeRepentance(nil, nextStage)
    end
    if repentanceStage and (stage == LevelStage.BASEMENT_1 or stage == LevelStage.CAVES_1 or stage == LevelStage.DEPTHS_1 or stage == LevelStage.WOMB_1) then
        return calculateStageTypeRepentance(nil, nextStage)
    end
    if repentanceStage and stage == LevelStage.DEPTHS_2 and mausoleumHeartKilled then
        return calculateStageTypeRepentance(nil, nextStage)
    end
    if nextStage == LevelStage.BLUE_WOMB then
        return StageType.ORIGINAL
    end
    if nextStage == LevelStage.SHEOL_CATHEDRAL then
        if upwards then
            return StageType.WRATH_OF_THE_LAMB
        end
        return StageType.ORIGINAL
    end
    if nextStage == LevelStage.DARK_ROOM_CHEST then
        if stageType == StageType.ORIGINAL then
            return StageType.ORIGINAL
        end
        return StageType.WRATH_OF_THE_LAMB
    end
    if nextStage == LevelStage.VOID then
        return StageType.ORIGINAL
    end
    if nextStage == LevelStage.HOME then
        return StageType.ORIGINAL
    end
    return calculateStageType(nil, nextStage)
end
return ____exports
 end,
["interfaces.StageHistoryEntry"] = function(...) 
local ____exports = {}
return ____exports
 end,
["classes.features.other.StageHistory"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GameStateFlag = ____isaac_2Dtypescript_2Ddefinitions.GameStateFlag
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____nextStage = require("functions.nextStage")
local getNextStage = ____nextStage.getNextStage
local getNextStageType = ____nextStage.getNextStageType
local ____stage = require("functions.stage")
local calculateStageType = ____stage.calculateStageType
local onRepentanceStage = ____stage.onRepentanceStage
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {stageHistory = {}}}
____exports.StageHistory = __TS__Class()
local StageHistory = ____exports.StageHistory
StageHistory.name = "StageHistory"
__TS__ClassExtends(StageHistory, Feature)
function StageHistory.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postNewLevelReordered = function()
        local level = game:GetLevel()
        local stage = level:GetStage()
        local stageType = level:GetStageType()
        local ____v_run_stageHistory_0 = v.run.stageHistory
        ____v_run_stageHistory_0[#____v_run_stageHistory_0 + 1] = {stage = stage, stageType = stageType}
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_LEVEL_REORDERED, self.postNewLevelReordered}}
end
function StageHistory.prototype.getNextStageTypeWithHistory(self, upwards)
    if upwards == nil then
        upwards = false
    end
    local backwardsPath = game:GetStateFlag(GameStateFlag.BACKWARDS_PATH)
    if not backwardsPath then
        return getNextStageType(nil, upwards)
    end
    local level = game:GetLevel()
    local stage = level:GetStage()
    local repentanceStage = onRepentanceStage(nil)
    local visitedDownpour1 = self:hasVisitedStage(LevelStage.BASEMENT_1, StageType.REPENTANCE)
    local visitedDross1 = self:hasVisitedStage(LevelStage.BASEMENT_1, StageType.REPENTANCE_B)
    local visitedDownpour2 = self:hasVisitedStage(LevelStage.BASEMENT_2, StageType.REPENTANCE)
    local visitedDross2 = self:hasVisitedStage(LevelStage.BASEMENT_2, StageType.REPENTANCE_B)
    local visitedMines1 = self:hasVisitedStage(LevelStage.CAVES_1, StageType.REPENTANCE)
    local visitedAshpit1 = self:hasVisitedStage(LevelStage.CAVES_1, StageType.REPENTANCE_B)
    local visitedMines2 = self:hasVisitedStage(LevelStage.DEPTHS_2, StageType.REPENTANCE)
    local visitedAshpit2 = self:hasVisitedStage(LevelStage.DEPTHS_2, StageType.REPENTANCE_B)
    if stage == LevelStage.BASEMENT_2 and repentanceStage then
        if visitedDownpour1 then
            return StageType.REPENTANCE
        end
        if visitedDross1 then
            return StageType.REPENTANCE_B
        end
    end
    if stage == LevelStage.CAVES_1 and repentanceStage then
        if visitedDownpour2 then
            return StageType.REPENTANCE
        end
        if visitedDross2 then
            return StageType.REPENTANCE_B
        end
    end
    if stage == LevelStage.CAVES_2 and not repentanceStage then
        if visitedDownpour2 then
            return StageType.REPENTANCE
        end
        if visitedDross2 then
            return StageType.REPENTANCE_B
        end
    end
    if stage == LevelStage.CAVES_2 and repentanceStage then
        if visitedMines1 then
            return StageType.REPENTANCE
        end
        if visitedAshpit1 then
            return StageType.REPENTANCE_B
        end
    end
    if stage == LevelStage.DEPTHS_2 and not repentanceStage then
        if visitedAshpit2 then
            return StageType.REPENTANCE_B
        end
        if visitedMines2 then
            return StageType.REPENTANCE
        end
    end
    local nextStage = self:getNextStageWithHistory()
    return calculateStageType(nil, nextStage)
end
__TS__DecorateLegacy({Exported}, StageHistory.prototype, "getNextStageTypeWithHistory", true)
function StageHistory.prototype.getNextStageWithHistory(self)
    local backwardsPath = game:GetStateFlag(GameStateFlag.BACKWARDS_PATH)
    if not backwardsPath then
        return getNextStage(nil)
    end
    local level = game:GetLevel()
    local stage = level:GetStage()
    local repentanceStage = onRepentanceStage(nil)
    local visitedDownpour1 = self:hasVisitedStage(LevelStage.BASEMENT_1, StageType.REPENTANCE)
    local visitedDross1 = self:hasVisitedStage(LevelStage.BASEMENT_1, StageType.REPENTANCE_B)
    local visitedDownpour2 = self:hasVisitedStage(LevelStage.BASEMENT_2, StageType.REPENTANCE)
    local visitedDross2 = self:hasVisitedStage(LevelStage.BASEMENT_2, StageType.REPENTANCE_B)
    local visitedMines1 = self:hasVisitedStage(LevelStage.CAVES_1, StageType.REPENTANCE)
    local visitedAshpit1 = self:hasVisitedStage(LevelStage.CAVES_1, StageType.REPENTANCE_B)
    local visitedMines2 = self:hasVisitedStage(LevelStage.DEPTHS_2, StageType.REPENTANCE)
    local visitedAshpit2 = self:hasVisitedStage(LevelStage.DEPTHS_2, StageType.REPENTANCE_B)
    if stage == LevelStage.BASEMENT_1 then
        if repentanceStage then
            return LevelStage.BASEMENT_1
        end
        return LevelStage.HOME
    end
    if stage == LevelStage.BASEMENT_2 then
        if repentanceStage then
            if visitedDownpour1 or visitedDross1 then
                return LevelStage.BASEMENT_1
            end
            return LevelStage.BASEMENT_2
        end
        return LevelStage.BASEMENT_1
    end
    if stage == LevelStage.CAVES_1 then
        if repentanceStage then
            if visitedDownpour2 or visitedDross2 then
                return LevelStage.BASEMENT_2
            end
            return LevelStage.CAVES_1
        end
        return LevelStage.BASEMENT_2
    end
    if stage == LevelStage.CAVES_2 then
        if repentanceStage then
            if visitedMines1 or visitedAshpit1 then
                return LevelStage.CAVES_1
            end
            return LevelStage.CAVES_2
        end
        return LevelStage.CAVES_1
    end
    if stage == LevelStage.DEPTHS_1 then
        if repentanceStage then
            if visitedMines2 or visitedAshpit2 then
                return LevelStage.CAVES_2
            end
            return LevelStage.DEPTHS_1
        end
        return LevelStage.CAVES_2
    end
    if stage == LevelStage.DEPTHS_2 then
        if repentanceStage then
            return LevelStage.DEPTHS_2
        end
        return LevelStage.DEPTHS_1
    end
    return stage - 1
end
__TS__DecorateLegacy({Exported}, StageHistory.prototype, "getNextStageWithHistory", true)
function StageHistory.prototype.getStageHistory(self)
    return v.run.stageHistory
end
__TS__DecorateLegacy({Exported}, StageHistory.prototype, "getStageHistory", true)
function StageHistory.prototype.hasVisitedStage(self, stage, stageType)
    if stageType == nil then
        return __TS__ArraySome(
            v.run.stageHistory,
            function(____, stageHistoryEntry) return stageHistoryEntry.stage == stage end
        )
    end
    return __TS__ArraySome(
        v.run.stageHistory,
        function(____, stageHistoryEntry) return stageHistoryEntry.stage == stage and stageHistoryEntry.stageType == stageType end
    )
end
__TS__DecorateLegacy({Exported}, StageHistory.prototype, "hasVisitedStage", true)
return ____exports
 end,
["classes.features.other.customStages.constants"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
____exports.CUSTOM_STAGE_FEATURE_NAME = "CustomStage"
____exports.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = "gfx/isaacscript-custom-stage"
____exports.DEFAULT_BASE_STAGE = LevelStage.BASEMENT_2
____exports.DEFAULT_BASE_STAGE_TYPE = StageType.ORIGINAL
--- Equal to -1. Setting the stage to an invalid stage value is useful in that it prevents backdrops
-- and shadows from loading.
____exports.CUSTOM_FLOOR_STAGE = -1
--- We must use `StageType.WRATH_OF_THE_LAMB` instead of `StageType.ORIGINAL` or else the walls will
-- not render properly. DeadInfinity suspects that this might be because it is trying to use the
-- Dark Room's backdrop (instead of The Chest).
____exports.CUSTOM_FLOOR_STAGE_TYPE = StageType.WRATH_OF_THE_LAMB
return ____exports
 end,
["classes.features.other.CustomTrapdoors"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local Map = ____lualib.Map
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayEntries = ____lualib.__TS__ArrayEntries
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local anyPlayerPlayingExtraAnimation, shouldBeClosedFromStartingInRoomWithEnemies, openCustomTrapdoor, canPlayerInteractWithTrapdoor, setPlayerAttributes, dropTaintedForgotten, goToVanillaStage, ANIMATIONS_THAT_PREVENT_STAGE_TRAVEL
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ButtonAction = ____isaac_2Dtypescript_2Ddefinitions.ButtonAction
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
local EntityCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.EntityCollisionClass
local EntityGridCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.EntityGridCollisionClass
local EntityPartition = ____isaac_2Dtypescript_2Ddefinitions.EntityPartition
local GridCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.GridCollisionClass
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local RoomTransitionAnim = ____isaac_2Dtypescript_2Ddefinitions.RoomTransitionAnim
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____GridEntityTypeCustom = require("enums.private.GridEntityTypeCustom")
local GridEntityTypeCustom = ____GridEntityTypeCustom.GridEntityTypeCustom
local ____StageTravelState = require("enums.private.StageTravelState")
local StageTravelState = ____StageTravelState.StageTravelState
local ____TrapdoorAnimation = require("enums.private.TrapdoorAnimation")
local TrapdoorAnimation = ____TrapdoorAnimation.TrapdoorAnimation
local ____easing = require("functions.easing")
local easeOutSine = ____easing.easeOutSine
local ____frames = require("functions.frames")
local isAfterRoomFrame = ____frames.isAfterRoomFrame
local isBeforeRenderFrame = ____frames.isBeforeRenderFrame
local onOrAfterRenderFrame = ____frames.onOrAfterRenderFrame
local ____log = require("functions.log")
local log = ____log.log
local ____playerCenter = require("functions.playerCenter")
local movePlayersToCenter = ____playerCenter.movePlayersToCenter
local ____playerIndex = require("functions.playerIndex")
local getAllPlayers = ____playerIndex.getAllPlayers
local getOtherPlayers = ____playerIndex.getOtherPlayers
local isChildPlayer = ____playerIndex.isChildPlayer
local ____players = require("functions.players")
local isCharacter = ____players.isCharacter
local ____positionVelocity = require("functions.positionVelocity")
local anyPlayerCloserThan = ____positionVelocity.anyPlayerCloserThan
local ____roomData = require("functions.roomData")
local getRoomGridIndex = ____roomData.getRoomGridIndex
local getRoomListIndex = ____roomData.getRoomListIndex
local ____roomTransition = require("functions.roomTransition")
local teleport = ____roomTransition.teleport
local ____stage = require("functions.stage")
local setStage = ____stage.setStage
local ____tstlClass = require("functions.tstlClass")
local getTSTLClassName = ____tstlClass.getTSTLClassName
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____vector = require("functions.vector")
local isVector = ____vector.isVector
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____constants = require("classes.features.other.customStages.constants")
local CUSTOM_FLOOR_STAGE = ____constants.CUSTOM_FLOOR_STAGE
function anyPlayerPlayingExtraAnimation(self)
    local players = getAllPlayers(nil)
    return __TS__ArraySome(
        players,
        function(____, player) return not player:IsExtraAnimationFinished() end
    )
end
function shouldBeClosedFromStartingInRoomWithEnemies(self, firstSpawn, roomClear)
    return firstSpawn and not roomClear
end
function openCustomTrapdoor(self, gridEntity, trapdoorDescription)
    trapdoorDescription.open = true
    local sprite = gridEntity:GetSprite()
    sprite:Play(TrapdoorAnimation.OPEN_ANIMATION, true)
end
function canPlayerInteractWithTrapdoor(self, player)
    local sprite = player:GetSprite()
    local animation = sprite:GetAnimation()
    return not player:IsHoldingItem() and not ANIMATIONS_THAT_PREVENT_STAGE_TRAVEL:has(animation)
end
function setPlayerAttributes(self, trapdoorPlayer, position)
    trapdoorPlayer.Position = position
    for ____, player in ipairs(getAllPlayers(nil)) do
        player.ControlsEnabled = false
        player.Velocity = VectorZero
        player.EntityCollisionClass = EntityCollisionClass.NONE
        player.GridCollisionClass = EntityGridCollisionClass.NONE
        player:StopExtraAnimation()
    end
end
function dropTaintedForgotten(self, player)
    if isCharacter(nil, player, PlayerType.FORGOTTEN_B) then
        local taintedSoul = player:GetOtherTwin()
        if taintedSoul ~= nil then
            taintedSoul:ThrowHeldEntity(VectorZero)
        end
    end
end
function goToVanillaStage(self, _destinationName, destinationStage, destinationStageType)
    setStage(nil, destinationStage, destinationStageType)
end
local DEBUG = false
--- This also applies to crawl spaces. The value was determined through trial and error.
local TRAPDOOR_OPEN_DISTANCE = 60
local TRAPDOOR_OPEN_DISTANCE_AFTER_BOSS = TRAPDOOR_OPEN_DISTANCE * 2.5
local TRAPDOOR_BOSS_REACTION_FRAMES = 30
local TRAPDOOR_TOUCH_DISTANCE = 16.5
ANIMATIONS_THAT_PREVENT_STAGE_TRAVEL = __TS__New(ReadonlySet, {"Death", "Happy", "Sad", "Jump"})
local PIXELATION_TO_BLACK_FRAMES = 60
local OTHER_PLAYER_TRAPDOOR_JUMP_DELAY_GAME_FRAMES = 6
local OTHER_PLAYER_TRAPDOOR_JUMP_DURATION_GAME_FRAMES = 5
local v = {
    run = {state = StageTravelState.NONE, stateRenderFrame = nil, customTrapdoorActivated = nil},
    level = {trapdoors = __TS__New(
        DefaultMap,
        function() return __TS__New(Map) end
    )}
}
____exports.CustomTrapdoors = __TS__Class()
local CustomTrapdoors = ____exports.CustomTrapdoors
CustomTrapdoors.name = "CustomTrapdoors"
__TS__ClassExtends(CustomTrapdoors, Feature)
function CustomTrapdoors.prototype.____constructor(self, customGridEntities, disableInputs, ponyDetection, roomClearFrame, runInNFrames, runNextRoom, stageHistory)
    Feature.prototype.____constructor(self)
    self.destinationFuncMap = __TS__New(Map)
    self.v = v
    self.blackSprite = Sprite()
    self.postRender = function()
        self:checkAllPlayersJumpComplete()
        self:checkPixelationToBlackComplete()
        self:checkSecondPixelationHalfWay()
        self:checkAllPlayersLayingDownComplete()
        self:drawBlackSprite()
    end
    self.postGridEntityCustomUpdateTrapdoor = function(____, gridEntity)
        local roomListIndex = getRoomListIndex(nil)
        local gridIndex = gridEntity:GetGridIndex()
        local roomTrapdoorMap = v.level.trapdoors:getAndSetDefault(roomListIndex)
        local trapdoorDescription = roomTrapdoorMap:get(gridIndex)
        if trapdoorDescription == nil then
            return
        end
        self:checkCustomTrapdoorOpenClose(gridEntity, trapdoorDescription)
        self:checkCustomTrapdoorPlayerTouched(gridEntity, trapdoorDescription)
    end
    self.postPEffectUpdateReordered = function(____, player)
        self:checkJumpComplete(player)
    end
    self.featuresUsed = {
        ISCFeature.CUSTOM_GRID_ENTITIES,
        ISCFeature.DISABLE_INPUTS,
        ISCFeature.PONY_DETECTION,
        ISCFeature.ROOM_CLEAR_FRAME,
        ISCFeature.RUN_IN_N_FRAMES,
        ISCFeature.RUN_NEXT_ROOM,
        ISCFeature.STAGE_HISTORY
    }
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_UPDATE, self.postGridEntityCustomUpdateTrapdoor, {GridEntityTypeCustom.TRAPDOOR_CUSTOM}}, {ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED, self.postPEffectUpdateReordered}}
    self.customGridEntities = customGridEntities
    self.disableInputs = disableInputs
    self.ponyDetection = ponyDetection
    self.roomClearFrame = roomClearFrame
    self.runInNFrames = runInNFrames
    self.runNextRoom = runNextRoom
    self.stageHistory = stageHistory
end
function CustomTrapdoors.prototype.checkAllPlayersJumpComplete(self)
    if v.run.state ~= StageTravelState.PLAYERS_JUMPING_DOWN then
        return
    end
    if anyPlayerPlayingExtraAnimation(nil) then
        return
    end
    local renderFrameCount = Isaac.GetFrameCount()
    local roomGridIndex = getRoomGridIndex(nil)
    v.run.state = StageTravelState.PIXELATION_TO_BLACK
    v.run.stateRenderFrame = renderFrameCount
    self:logStateChanged()
    teleport(nil, roomGridIndex, Direction.NO_DIRECTION, RoomTransitionAnim.PIXELATION)
end
function CustomTrapdoors.prototype.checkPixelationToBlackComplete(self)
    if v.run.state ~= StageTravelState.PIXELATION_TO_BLACK or v.run.stateRenderFrame == nil then
        return
    end
    local renderFrameScreenBlack = v.run.stateRenderFrame + PIXELATION_TO_BLACK_FRAMES
    if isBeforeRenderFrame(nil, renderFrameScreenBlack) then
        return
    end
    v.run.state = StageTravelState.WAITING_FOR_FIRST_PIXELATION_TO_END
    self:logStateChanged()
    local hud = game:GetHUD()
    hud:SetVisible(false)
    self.runInNFrames:runNextGameFrame(function()
        local level = game:GetLevel()
        local startingRoomIndex = level:GetStartingRoomIndex()
        local futureRenderFrameCount = Isaac.GetFrameCount()
        v.run.state = StageTravelState.WAITING_FOR_SECOND_PIXELATION_TO_GET_HALF_WAY
        v.run.stateRenderFrame = futureRenderFrameCount
        self:goToCustomTrapdoorDestination()
        teleport(nil, startingRoomIndex, Direction.NO_DIRECTION, RoomTransitionAnim.PIXELATION)
    end)
end
function CustomTrapdoors.prototype.goToCustomTrapdoorDestination(self)
    if v.run.customTrapdoorActivated == nil then
        v.run.customTrapdoorActivated = {
            destinationName = nil,
            destinationStage = LevelStage.BASEMENT_1,
            destinationStageType = StageType.ORIGINAL,
            open = true,
            firstSpawn = true
        }
    end
    local destinationFunc = self:getDestinationFunc(v.run.customTrapdoorActivated)
    destinationFunc(nil, v.run.customTrapdoorActivated.destinationName, v.run.customTrapdoorActivated.destinationStage, v.run.customTrapdoorActivated.destinationStageType)
end
function CustomTrapdoors.prototype.getDestinationFunc(self, customTrapdoorDescription)
    if customTrapdoorDescription.destinationName == nil then
        return goToVanillaStage
    end
    local destinationFunc = self.destinationFuncMap:get(customTrapdoorDescription.destinationName)
    if destinationFunc == nil then
        return goToVanillaStage
    end
    return destinationFunc
end
function CustomTrapdoors.prototype.checkSecondPixelationHalfWay(self)
    if v.run.state ~= StageTravelState.WAITING_FOR_SECOND_PIXELATION_TO_GET_HALF_WAY or v.run.stateRenderFrame == nil then
        return
    end
    local renderFrameScreenBlack = v.run.stateRenderFrame + PIXELATION_TO_BLACK_FRAMES
    if isBeforeRenderFrame(nil, renderFrameScreenBlack) then
        return
    end
    v.run.state = StageTravelState.PIXELATION_TO_ROOM
    self:logStateChanged()
    local hud = game:GetHUD()
    hud:SetVisible(true)
    self.runNextRoom:runNextRoom(function()
        v.run.state = StageTravelState.PLAYERS_LAYING_DOWN
        self:logStateChanged()
        movePlayersToCenter(nil)
        for ____, player in ipairs(getAllPlayers(nil)) do
            player:AnimateAppear()
            player.EntityCollisionClass = EntityCollisionClass.ALL
            player.GridCollisionClass = EntityGridCollisionClass.GROUND
        end
        local level = game:GetLevel()
        local stage = level:GetStage()
        if stage ~= CUSTOM_FLOOR_STAGE then
            level:ShowName(false)
        end
    end)
end
function CustomTrapdoors.prototype.checkAllPlayersLayingDownComplete(self)
    if v.run.state ~= StageTravelState.PLAYERS_LAYING_DOWN then
        return
    end
    if anyPlayerPlayingExtraAnimation(nil) then
        return
    end
    v.run.state = StageTravelState.NONE
    self:logStateChanged()
    local tstlClassName = getTSTLClassName(nil, self)
    assertDefined(nil, tstlClassName, "Failed to find get the class name for the custom trapdoor feature.")
    self.disableInputs:enableAllInputs(tstlClassName)
end
function CustomTrapdoors.prototype.drawBlackSprite(self)
    if v.run.state ~= StageTravelState.WAITING_FOR_FIRST_PIXELATION_TO_END and v.run.state ~= StageTravelState.WAITING_FOR_SECOND_PIXELATION_TO_GET_HALF_WAY then
        return
    end
    if not self.blackSprite:IsLoaded() then
        self.blackSprite:Load("gfx/ui/boss/versusscreen.anm2", true)
        self.blackSprite:SetFrame("Scene", 0)
        self.blackSprite.Scale = Vector(100, 100)
    end
    self.blackSprite:RenderLayer(0, VectorZero)
end
function CustomTrapdoors.prototype.checkCustomTrapdoorOpenClose(self, gridEntity, trapdoorDescription)
    if trapdoorDescription.open then
        return
    end
    if self:shouldTrapdoorOpen(gridEntity, trapdoorDescription.firstSpawn) then
        openCustomTrapdoor(nil, gridEntity, trapdoorDescription)
    end
end
function CustomTrapdoors.prototype.shouldTrapdoorOpen(self, gridEntity, firstSpawn)
    local room = game:GetRoom()
    local roomClear = room:IsClear()
    return not anyPlayerCloserThan(nil, gridEntity.Position, TRAPDOOR_OPEN_DISTANCE) and not self:isPlayerCloseAfterBoss(gridEntity.Position) and not shouldBeClosedFromStartingInRoomWithEnemies(nil, firstSpawn, roomClear)
end
function CustomTrapdoors.prototype.isPlayerCloseAfterBoss(self, position)
    local room = game:GetRoom()
    local roomType = room:GetType()
    local roomClearGameFrame = self.roomClearFrame:getRoomClearGameFrame()
    if roomType ~= RoomType.BOSS or roomClearGameFrame == nil or onOrAfterRenderFrame(nil, roomClearGameFrame + TRAPDOOR_BOSS_REACTION_FRAMES) then
        return false
    end
    return anyPlayerCloserThan(nil, position, TRAPDOOR_OPEN_DISTANCE_AFTER_BOSS)
end
function CustomTrapdoors.prototype.checkCustomTrapdoorPlayerTouched(self, gridEntity, trapdoorDescription)
    if v.run.state ~= StageTravelState.NONE then
        return
    end
    if not trapdoorDescription.open then
        return
    end
    local playersTouching = Isaac.FindInRadius(gridEntity.Position, TRAPDOOR_TOUCH_DISTANCE, EntityPartition.PLAYER)
    for ____, playerEntity in ipairs(playersTouching) do
        do
            local player = playerEntity:ToPlayer()
            if player == nil then
                goto __continue42
            end
            if not self.ponyDetection:isPlayerUsingPony(player) and not isChildPlayer(nil, player) and canPlayerInteractWithTrapdoor(nil, player) then
                self:playerTouchedCustomTrapdoor(gridEntity, trapdoorDescription, player)
                return
            end
        end
        ::__continue42::
    end
end
function CustomTrapdoors.prototype.playerTouchedCustomTrapdoor(self, gridEntity, trapdoorDescription, player)
    v.run.state = StageTravelState.PLAYERS_JUMPING_DOWN
    v.run.customTrapdoorActivated = trapdoorDescription
    self:logStateChanged()
    local tstlClassName = getTSTLClassName(nil, self)
    assertDefined(nil, tstlClassName, "Failed to find get the class name for the custom trapdoor feature.")
    local whitelist = __TS__New(ReadonlySet, {ButtonAction.CONSOLE})
    self.disableInputs:disableAllInputsExceptFor(tstlClassName, whitelist)
    setPlayerAttributes(nil, player, gridEntity.Position)
    dropTaintedForgotten(nil, player)
    player:PlayExtraAnimation("Trapdoor")
    local otherPlayers = getOtherPlayers(nil, player)
    for ____, ____value in __TS__Iterator(__TS__ArrayEntries(otherPlayers)) do
        local i = ____value[1]
        local otherPlayer = ____value[2]
        local gameFramesToWaitBeforeJumping = OTHER_PLAYER_TRAPDOOR_JUMP_DELAY_GAME_FRAMES * (i + 1)
        local otherPlayerPtr = EntityPtr(otherPlayer)
        self.runInNFrames:runInNGameFrames(
            function()
                self:startDelayedJump(otherPlayerPtr, gridEntity.Position)
            end,
            gameFramesToWaitBeforeJumping
        )
    end
end
function CustomTrapdoors.prototype.startDelayedJump(self, entityPtr, trapdoorPosition)
    local entity = entityPtr.Ref
    if entity == nil then
        return
    end
    local player = entity:ToPlayer()
    if player == nil then
        return
    end
    player:PlayExtraAnimation("Trapdoor")
    self:adjustPlayerPositionToTrapdoor(entityPtr, player.Position, trapdoorPosition)
end
function CustomTrapdoors.prototype.adjustPlayerPositionToTrapdoor(self, entityPtr, startPos, endPos)
    if v.run.state ~= StageTravelState.PLAYERS_JUMPING_DOWN then
        return
    end
    local entity = entityPtr.Ref
    if entity == nil then
        return
    end
    local player = entity:ToPlayer()
    if player == nil then
        return
    end
    self.runInNFrames:runNextRenderFrame(function()
        self:adjustPlayerPositionToTrapdoor(entityPtr, startPos, endPos)
    end)
    local sprite = player:GetSprite()
    if sprite:IsFinished("Trapdoor") then
        player.Position = endPos
        player.Velocity = VectorZero
        return
    end
    local frame = sprite:GetFrame()
    if frame >= OTHER_PLAYER_TRAPDOOR_JUMP_DURATION_GAME_FRAMES then
        player.Position = endPos
        player.Velocity = VectorZero
        return
    end
    local totalDifference = endPos - startPos
    local progress = frame / OTHER_PLAYER_TRAPDOOR_JUMP_DURATION_GAME_FRAMES
    local easeProgress = easeOutSine(nil, progress)
    local differenceForThisFrame = totalDifference * easeProgress
    local targetPosition = startPos + differenceForThisFrame
    player.Position = targetPosition
    player.Velocity = VectorZero
end
function CustomTrapdoors.prototype.checkJumpComplete(self, player)
    if v.run.state ~= StageTravelState.PLAYERS_JUMPING_DOWN then
        return
    end
    local sprite = player:GetSprite()
    if sprite:IsFinished("Trapdoor") then
        player.Visible = false
    end
end
function CustomTrapdoors.prototype.shouldTrapdoorSpawnOpen(self, gridEntity, firstSpawn)
    local room = game:GetRoom()
    local roomClear = room:IsClear()
    if isAfterRoomFrame(nil, 0) then
        return false
    end
    if not roomClear then
        return false
    end
    return self:shouldTrapdoorOpen(gridEntity, firstSpawn)
end
function CustomTrapdoors.prototype.logStateChanged(self)
    if DEBUG then
        log(((("Custom trapdoors state changed: " .. StageTravelState[v.run.state]) .. " (") .. tostring(v.run.state)) .. ")")
    end
end
function CustomTrapdoors.prototype.registerCustomTrapdoorDestination(self, destinationName, destinationFunc)
    if self.destinationFuncMap:has(destinationName) then
        error(("Failed to register a custom trapdoor type of " .. destinationName) .. " since this custom trapdoor type has already been registered.")
    end
    self.destinationFuncMap:set(destinationName, destinationFunc)
end
__TS__DecorateLegacy({Exported}, CustomTrapdoors.prototype, "registerCustomTrapdoorDestination", true)
function CustomTrapdoors.prototype.spawnCustomTrapdoor(self, gridIndexOrPosition, destinationName, destinationStage, destinationStageType, anm2Path, spawnOpen)
    if anm2Path == nil then
        anm2Path = "gfx/grid/door_11_trapdoor.anm2"
    end
    if destinationName ~= nil and not self.destinationFuncMap:has(destinationName) then
        error(("Failed to spawn a custom trapdoor with a destination of \"" .. destinationName) .. "\" since a destination with that name has not been registered with the \"registerCustomTrapdoorDestination\" function. (If you are trying to go to a custom stage, the custom stage library should automatically do this for you when your mod first boots.)")
    end
    if destinationStage == nil then
        destinationStage = self.stageHistory:getNextStageWithHistory()
    end
    if destinationStageType == nil then
        destinationStageType = self.stageHistory:getNextStageTypeWithHistory()
    end
    local room = game:GetRoom()
    local roomListIndex = getRoomListIndex(nil)
    local gridIndex = isVector(nil, gridIndexOrPosition) and room:GetGridIndex(gridIndexOrPosition) or gridIndexOrPosition
    local gridEntity = self.customGridEntities:spawnCustomGridEntity(
        GridEntityTypeCustom.TRAPDOOR_CUSTOM,
        gridIndexOrPosition,
        GridCollisionClass.NONE,
        anm2Path,
        TrapdoorAnimation.OPENED
    )
    local firstSpawn = isAfterRoomFrame(nil, 0)
    local ____spawnOpen_0 = spawnOpen
    if ____spawnOpen_0 == nil then
        ____spawnOpen_0 = self:shouldTrapdoorSpawnOpen(gridEntity, firstSpawn)
    end
    local open = ____spawnOpen_0
    local roomTrapdoorMap = v.level.trapdoors:getAndSetDefault(roomListIndex)
    local customTrapdoorDescription = {
        destinationName = destinationName,
        destinationStage = destinationStage,
        destinationStageType = destinationStageType,
        open = open,
        firstSpawn = firstSpawn
    }
    roomTrapdoorMap:set(gridIndex, customTrapdoorDescription)
    local sprite = gridEntity:GetSprite()
    local animation = open and TrapdoorAnimation.OPENED or TrapdoorAnimation.CLOSED
    sprite:Play(animation, true)
    return gridEntity
end
__TS__DecorateLegacy({Exported}, CustomTrapdoors.prototype, "spawnCustomTrapdoor", true)
return ____exports
 end,
["classes.features.other.DisableAllSound"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local musicManager = ____cachedClasses.musicManager
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____sound = require("functions.sound")
local stopAllSoundEffects = ____sound.stopAllSoundEffects
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {disableSoundSet = __TS__New(Set)}}
____exports.DisableAllSound = __TS__Class()
local DisableAllSound = ____exports.DisableAllSound
DisableAllSound.name = "DisableAllSound"
__TS__ClassExtends(DisableAllSound, Feature)
function DisableAllSound.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.musicWasEnabled = false
    self.postRender = function()
        if v.run.disableSoundSet.size == 0 then
            return
        end
        stopAllSoundEffects(nil)
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
function DisableAllSound.prototype.enableAllSound(self, key)
    if not v.run.disableSoundSet:has(key) then
        return
    end
    v.run.disableSoundSet:delete(key)
    if v.run.disableSoundSet.size == 0 and self.musicWasEnabled then
        musicManager:Enable()
    end
    stopAllSoundEffects(nil)
end
__TS__DecorateLegacy({Exported}, DisableAllSound.prototype, "enableAllSound", true)
function DisableAllSound.prototype.disableAllSound(self, key)
    if v.run.disableSoundSet.size == 0 then
        self.musicWasEnabled = musicManager:IsEnabled()
    end
    v.run.disableSoundSet:add(key)
    stopAllSoundEffects(nil)
end
__TS__DecorateLegacy({Exported}, DisableAllSound.prototype, "disableAllSound", true)
return ____exports
 end,
["classes.features.other.Pause"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ButtonAction = ____isaac_2Dtypescript_2Ddefinitions.ButtonAction
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local InputHook = ____isaac_2Dtypescript_2Ddefinitions.InputHook
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getProjectiles = ____entitiesSpecific.getProjectiles
local getTears = ____entitiesSpecific.getTears
local removeAllProjectiles = ____entitiesSpecific.removeAllProjectiles
local removeAllTears = ____entitiesSpecific.removeAllTears
local ____isaacAPIClass = require("functions.isaacAPIClass")
local isTear = ____isaacAPIClass.isTear
local ____log = require("functions.log")
local logError = ____log.logError
local ____playerCollectibles = require("functions.playerCollectibles")
local useActiveItemTemp = ____playerCollectibles.useActiveItemTemp
local ____playerIndex = require("functions.playerIndex")
local getAllPlayers = ____playerIndex.getAllPlayers
local ____tstlClass = require("functions.tstlClass")
local getTSTLClassName = ____tstlClass.getTSTLClassName
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {
    isPseudoPaused = false,
    shouldUnpause = false,
    initialDescriptions = __TS__New(Map)
}}
____exports.Pause = __TS__Class()
local Pause = ____exports.Pause
Pause.name = "Pause"
__TS__ClassExtends(Pause, Feature)
function Pause.prototype.____constructor(self, disableInputs)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postUpdate = function()
        if not v.run.isPseudoPaused then
            return
        end
        local firstPlayer = Isaac.GetPlayer()
        useActiveItemTemp(nil, firstPlayer, CollectibleType.PAUSE)
        self:stopTearsAndProjectilesFromMoving()
    end
    self.inputActionGetActionValue = function(____, _entity, _inputHook, buttonAction)
        if buttonAction ~= ButtonAction.SHOOT_RIGHT then
            return nil
        end
        if not v.run.shouldUnpause then
            return nil
        end
        v.run.shouldUnpause = false
        return 1
    end
    self.callbacksUsed = {{ModCallback.POST_UPDATE, self.postUpdate}, {ModCallback.INPUT_ACTION, self.inputActionGetActionValue, {InputHook.GET_ACTION_VALUE}}}
    self.disableInputs = disableInputs
end
function Pause.prototype.stopTearsAndProjectilesFromMoving(self)
    local ____array_0 = __TS__SparseArrayNew(table.unpack(getTears(nil)))
    __TS__SparseArrayPush(
        ____array_0,
        table.unpack(getProjectiles(nil))
    )
    local tearsAndProjectiles = {__TS__SparseArraySpread(____array_0)}
    for ____, tearOrProjectile in ipairs(tearsAndProjectiles) do
        do
            local ptrHash = GetPtrHash(tearOrProjectile)
            local initialDescription = v.run.initialDescriptions:get(ptrHash)
            if initialDescription == nil then
                goto __continue9
            end
            tearOrProjectile.Position = initialDescription.position
            tearOrProjectile.PositionOffset = initialDescription.positionOffset
            tearOrProjectile.Velocity = VectorZero
            tearOrProjectile.Height = initialDescription.height
            tearOrProjectile.FallingSpeed = 0
            if isTear(nil, tearOrProjectile) then
                tearOrProjectile.FallingAcceleration = initialDescription.fallingAcceleration
            else
                tearOrProjectile.FallingAccel = initialDescription.fallingAcceleration
            end
        end
        ::__continue9::
    end
end
function Pause.prototype.isPaused(self)
    return v.run.isPseudoPaused
end
__TS__DecorateLegacy({Exported}, Pause.prototype, "isPaused", true)
function Pause.prototype.pause(self)
    if v.run.isPseudoPaused then
        logError("Failed to pseudo-pause the game, since it was already pseudo-paused.")
        return
    end
    v.run.isPseudoPaused = true
    v.run.initialDescriptions:clear()
    local ____array_1 = __TS__SparseArrayNew(table.unpack(getTears(nil)))
    __TS__SparseArrayPush(
        ____array_1,
        table.unpack(getProjectiles(nil))
    )
    local tearsAndProjectiles = {__TS__SparseArraySpread(____array_1)}
    for ____, tearOrProjectile in ipairs(tearsAndProjectiles) do
        local ptrHash = GetPtrHash(tearOrProjectile)
        local initialDescription = {
            position = tearOrProjectile.Position,
            positionOffset = tearOrProjectile.PositionOffset,
            velocity = tearOrProjectile.Velocity,
            height = tearOrProjectile.Height,
            fallingSpeed = tearOrProjectile.FallingSpeed,
            fallingAcceleration = isTear(nil, tearOrProjectile) and tearOrProjectile.FallingAcceleration or tearOrProjectile.FallingAccel
        }
        v.run.initialDescriptions:set(ptrHash, initialDescription)
    end
    local firstPlayer = Isaac.GetPlayer()
    useActiveItemTemp(nil, firstPlayer, CollectibleType.PAUSE)
    local tstlClassName = getTSTLClassName(nil, self)
    assertDefined(nil, tstlClassName, "Failed to get the class name for the pause feature.")
    local whitelist = __TS__New(ReadonlySet, {ButtonAction.MENU_CONFIRM, ButtonAction.CONSOLE})
    self.disableInputs:disableAllInputsExceptFor(tstlClassName, whitelist)
    for ____, player in ipairs(getAllPlayers(nil)) do
        player.ControlsEnabled = false
        player.Velocity = VectorZero
    end
    self:stopTearsAndProjectilesFromMoving()
end
__TS__DecorateLegacy({Exported}, Pause.prototype, "pause", true)
function Pause.prototype.unpause(self)
    if not v.run.isPseudoPaused then
        logError("Failed to pseudo-unpause the game, since it was not already pseudo-paused.")
        return
    end
    v.run.isPseudoPaused = false
    v.run.shouldUnpause = true
    local tstlClassName = getTSTLClassName(nil, self)
    assertDefined(nil, tstlClassName, "Failed to find get the class name for the pause feature.")
    self.disableInputs:enableAllInputs(tstlClassName)
    for ____, player in ipairs(getAllPlayers(nil)) do
        player.ControlsEnabled = true
    end
    removeAllTears(nil)
    removeAllProjectiles(nil)
end
__TS__DecorateLegacy({Exported}, Pause.prototype, "unpause", true)
return ____exports
 end,
["classes.features.other.customStages.backdrop"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local getBackdropPNGPath, spawnWallEntity, spawnSecondWallEntity, spawnFloorEntity, getNumFloorLayers, BackdropKind, DEFAULT_BACKDROP, ROOM_SHAPE_WALL_ANM2_LAYERS, ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS, WALL_OFFSET, L_FLOOR_ANM2_LAYERS, N_FLOOR_ANM2_LAYERS, BACKDROP_EFFECT_VARIANT, BACKDROP_EFFECT_SUB_TYPE
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EffectVariant = ____isaac_2Dtypescript_2Ddefinitions.EffectVariant
local EntityFlag = ____isaac_2Dtypescript_2Ddefinitions.EntityFlag
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____LadderSubTypeCustom = require("enums.LadderSubTypeCustom")
local LadderSubTypeCustom = ____LadderSubTypeCustom.LadderSubTypeCustom
local ____array = require("functions.array")
local getRandomArrayElement = ____array.getRandomArrayElement
local ____entitiesSpecific = require("functions.entitiesSpecific")
local spawnEffectWithSeed = ____entitiesSpecific.spawnEffectWithSeed
local ____rng = require("functions.rng")
local newRNG = ____rng.newRNG
local ____roomShape = require("functions.roomShape")
local isLRoomShape = ____roomShape.isLRoomShape
local isNarrowRoom = ____roomShape.isNarrowRoom
local ____string = require("functions.string")
local removeCharactersBefore = ____string.removeCharactersBefore
local trimPrefix = ____string.trimPrefix
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local eRange = ____utils.eRange
local iRange = ____utils.iRange
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____constants = require("classes.features.other.customStages.constants")
local ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = ____constants.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH
function getBackdropPNGPath(self, customStage, backdropKind, rng)
    local backdrop = customStage.backdropPNGPaths or DEFAULT_BACKDROP
    local pathArray = backdrop[backdropKind]
    local randomPath = getRandomArrayElement(nil, pathArray, rng)
    return removeCharactersBefore(nil, randomPath, "gfx/")
end
function spawnWallEntity(self, customStage, rng, isExtraWall)
    local room = game:GetRoom()
    local roomShape = room:GetRoomShape()
    local seed = 1
    local wallEffect = spawnEffectWithSeed(
        nil,
        BACKDROP_EFFECT_VARIANT,
        BACKDROP_EFFECT_SUB_TYPE,
        VectorZero,
        seed
    )
    wallEffect:AddEntityFlags(EntityFlag.RENDER_WALL)
    local sprite = wallEffect:GetSprite()
    sprite:Load(ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/wall-backdrop.anm2", false)
    local wallLayersArray = isExtraWall and ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS or ROOM_SHAPE_WALL_ANM2_LAYERS
    local numWallLayers = wallLayersArray[roomShape]
    assertDefined(nil, numWallLayers, "Failed to get the layers when creating the backdrop for custom stage: " .. customStage.name)
    if isLRoomShape(nil, roomShape) then
        local cornerPNGPath = getBackdropPNGPath(nil, customStage, BackdropKind.CORNER, rng)
        sprite:ReplaceSpritesheet(0, cornerPNGPath)
    end
    for ____, layerID in ipairs(iRange(nil, 1, numWallLayers)) do
        local wallPNGPath = getBackdropPNGPath(nil, customStage, BackdropKind.WALL, rng)
        sprite:ReplaceSpritesheet(layerID, wallPNGPath)
    end
    local topLeftPos = room:GetTopLeftPos()
    local renderPos = topLeftPos + WALL_OFFSET
    local modifiedOffset = renderPos / 40 * 26
    wallEffect.SpriteOffset = modifiedOffset
    sprite:LoadGraphics()
    local roomShapeName = RoomShape[roomShape]
    local animation = trimPrefix(nil, roomShapeName, "SHAPE_")
    local modifiedAnimation = isExtraWall and animation .. "X" or animation
    sprite:Play(modifiedAnimation, true)
end
function spawnSecondWallEntity(self, customStage, rng)
    local room = game:GetRoom()
    local roomShape = room:GetRoomShape()
    local extraLayers = ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS[roomShape]
    local roomShapeHasExtraLayers = extraLayers ~= nil
    if roomShapeHasExtraLayers then
        spawnWallEntity(nil, customStage, rng, true)
    end
end
function spawnFloorEntity(self, customStage, rng)
    local room = game:GetRoom()
    local roomShape = room:GetRoomShape()
    local seed = 1
    local floorEffect = spawnEffectWithSeed(
        nil,
        BACKDROP_EFFECT_VARIANT,
        0,
        VectorZero,
        seed
    )
    floorEffect:AddEntityFlags(EntityFlag.RENDER_FLOOR)
    local sprite = floorEffect:GetSprite()
    sprite:Load(ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/floor-backdrop.anm2", false)
    local numFloorLayers = getNumFloorLayers(nil, roomShape)
    if numFloorLayers ~= nil then
        for ____, layerID in ipairs(eRange(nil, numFloorLayers)) do
            local wallPNGPath = getBackdropPNGPath(nil, customStage, BackdropKind.WALL, rng)
            sprite:ReplaceSpritesheet(layerID, wallPNGPath)
        end
    elseif isLRoomShape(nil, roomShape) then
        for ____, layerID in ipairs(L_FLOOR_ANM2_LAYERS) do
            local LFloorPNGPath = getBackdropPNGPath(nil, customStage, BackdropKind.L_FLOOR, rng)
            sprite:ReplaceSpritesheet(layerID, LFloorPNGPath)
        end
    elseif isNarrowRoom(nil, roomShape) then
        for ____, layerID in ipairs(N_FLOOR_ANM2_LAYERS) do
            local NFloorPNGPath = getBackdropPNGPath(nil, customStage, BackdropKind.N_FLOOR, rng)
            sprite:ReplaceSpritesheet(layerID, NFloorPNGPath)
        end
    end
    local topLeftPos = room:GetTopLeftPos()
    local renderPos = topLeftPos
    local modifiedOffset = renderPos / 40 * 26
    floorEffect.SpriteOffset = modifiedOffset
    sprite:LoadGraphics()
    local roomShapeName = RoomShape[roomShape]
    local animation = trimPrefix(nil, roomShapeName, "SHAPE_")
    sprite:Play(animation, true)
end
function getNumFloorLayers(self, roomShape)
    repeat
        local ____switch22 = roomShape
        local ____cond22 = ____switch22 == RoomShape.SHAPE_1x1
        if ____cond22 then
            do
                return 4
            end
        end
        ____cond22 = ____cond22 or (____switch22 == RoomShape.SHAPE_1x2 or ____switch22 == RoomShape.SHAPE_2x1)
        if ____cond22 then
            do
                return 8
            end
        end
        ____cond22 = ____cond22 or ____switch22 == RoomShape.SHAPE_2x2
        if ____cond22 then
            do
                return 16
            end
        end
        do
            do
                return nil
            end
        end
    until true
end
BackdropKind = {}
BackdropKind.N_FLOOR = "nFloors"
BackdropKind.L_FLOOR = "lFloors"
BackdropKind.WALL = "walls"
BackdropKind.CORNER = "corners"
DEFAULT_BACKDROP = {nFloors = {ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/backdrop/nfloor.png"}, lFloors = {ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/backdrop/lfloor.png"}, walls = {ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/backdrop/wall.png"}, corners = {ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/backdrop/corner.png"}}
ROOM_SHAPE_WALL_ANM2_LAYERS = {
    [RoomShape.SHAPE_1x1] = 44,
    [RoomShape.IH] = 36,
    [RoomShape.IV] = 28,
    [RoomShape.SHAPE_1x2] = 58,
    [RoomShape.IIV] = 42,
    [RoomShape.SHAPE_2x1] = 63,
    [RoomShape.IIH] = 62,
    [RoomShape.SHAPE_2x2] = 63,
    [RoomShape.LTL] = 63,
    [RoomShape.LTR] = 63,
    [RoomShape.LBL] = 63,
    [RoomShape.LBR] = 63
}
ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS = {
    [RoomShape.SHAPE_2x1] = 7,
    [RoomShape.SHAPE_2x2] = 21,
    [RoomShape.LTL] = 19,
    [RoomShape.LTR] = 19,
    [RoomShape.LBL] = 19,
    [RoomShape.LBR] = 19
}
WALL_OFFSET = Vector(-80, -80)
L_FLOOR_ANM2_LAYERS = {16, 17}
N_FLOOR_ANM2_LAYERS = {18, 19}
BACKDROP_EFFECT_VARIANT = EffectVariant.LADDER
BACKDROP_EFFECT_SUB_TYPE = LadderSubTypeCustom.CUSTOM_BACKDROP
local BACKDROP_ROOM_TYPE_SET = __TS__New(ReadonlySet, {RoomType.DEFAULT, RoomType.BOSS, RoomType.MINI_BOSS})
function ____exports.setCustomStageBackdrop(self, customStage)
    local room = game:GetRoom()
    local roomType = room:GetType()
    local decorationSeed = room:GetDecorationSeed()
    local rng = newRNG(nil, decorationSeed)
    if not BACKDROP_ROOM_TYPE_SET:has(roomType) then
        return
    end
    spawnWallEntity(nil, customStage, rng, false)
    spawnSecondWallEntity(nil, customStage, rng)
    spawnFloorEntity(nil, customStage, rng)
end
return ____exports
 end,
["classes.features.other.customStages.gridEntities"] = function(...) 
local ____exports = {}
local getNewDoorPNGPath
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local ____gridEntities = require("functions.gridEntities")
local removeGridEntity = ____gridEntities.removeGridEntity
local ____stage = require("functions.stage")
local calculateStageType = ____stage.calculateStageType
local ____string = require("functions.string")
local removeCharactersBefore = ____string.removeCharactersBefore
local ____constants = require("classes.features.other.customStages.constants")
local DEFAULT_BASE_STAGE = ____constants.DEFAULT_BASE_STAGE
function getNewDoorPNGPath(self, customStage, fileName)
    repeat
        local ____switch26 = fileName
        local ____cond26 = ____switch26 == "gfx/grid/door_01_normaldoor.anm2"
        if ____cond26 then
            do
                local ____opt_0 = customStage.doorPNGPaths
                return ____opt_0 and ____opt_0.normal
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_02_treasureroomdoor.anm2"
        if ____cond26 then
            do
                local ____opt_2 = customStage.doorPNGPaths
                return ____opt_2 and ____opt_2.treasureRoom
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_03_ambushroomdoor.anm2"
        if ____cond26 then
            do
                local ____opt_4 = customStage.doorPNGPaths
                return ____opt_4 and ____opt_4.normalChallengeRoom
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_04_selfsacrificeroomdoor.anm2"
        if ____cond26 then
            do
                local ____opt_6 = customStage.doorPNGPaths
                return ____opt_6 and ____opt_6.curseRoom
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_05_arcaderoomdoor.anm2"
        if ____cond26 then
            do
                local ____opt_8 = customStage.doorPNGPaths
                return ____opt_8 and ____opt_8.arcade
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_07_devilroomdoor.anm2"
        if ____cond26 then
            do
                local ____opt_10 = customStage.doorPNGPaths
                return ____opt_10 and ____opt_10.devilRoom
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_07_holyroomdoor.anm2"
        if ____cond26 then
            do
                local ____opt_12 = customStage.doorPNGPaths
                return ____opt_12 and ____opt_12.angelRoom
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_08_holeinwall.anm2"
        if ____cond26 then
            do
                local ____opt_14 = customStage.doorPNGPaths
                return ____opt_14 and ____opt_14.secretRoom
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_09_bossambushroomdoor.anm2"
        if ____cond26 then
            do
                local ____opt_16 = customStage.doorPNGPaths
                return ____opt_16 and ____opt_16.bossChallengeRoom
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_10_bossroomdoor.anm2"
        if ____cond26 then
            do
                local ____opt_18 = customStage.doorPNGPaths
                return ____opt_18 and ____opt_18.bossRoom
            end
        end
        ____cond26 = ____cond26 or ____switch26 == "gfx/grid/door_15_bossrushdoor.anm2"
        if ____cond26 then
            do
                local ____opt_20 = customStage.doorPNGPaths
                return ____opt_20 and ____opt_20.bossRush
            end
        end
    until true
    return nil
end
--- For `GridEntityType.DECORATION` (1).
function ____exports.setCustomDecorationGraphics(self, customStage, gridEntity)
    if customStage.decorationsPNGPath == nil and customStage.decorationsANM2Path == nil then
        return
    end
    local gridEntityType = gridEntity:GetType()
    if gridEntityType ~= GridEntityType.DECORATION then
        return
    end
    local sprite = gridEntity:GetSprite()
    local fileName = sprite:GetFilename()
    if string.lower(fileName) ~= "gfx/grid/props_01_basement.anm2" then
        return
    end
    if customStage.decorationsANM2Path ~= nil then
        local anm2Path = removeCharactersBefore(nil, customStage.decorationsANM2Path, "gfx/")
        sprite:Load(anm2Path, true)
    elseif customStage.decorationsPNGPath ~= nil then
        local pngPath = removeCharactersBefore(nil, customStage.decorationsPNGPath, "gfx/")
        sprite:ReplaceSpritesheet(0, pngPath)
        sprite:LoadGraphics()
    end
end
--- For `GridEntityType.ROCK` (2).
function ____exports.setCustomRockGraphics(self, customStage, gridEntity)
    if customStage.rocksPNGPath == nil and customStage.rocksANM2Path == nil then
        return
    end
    local gridEntityRock = gridEntity:ToRock()
    if gridEntityRock == nil then
        return
    end
    local sprite = gridEntity:GetSprite()
    local fileName = sprite:GetFilename()
    repeat
        local ____switch11 = fileName
        local ____cond11 = ____switch11 == "gfx/grid/grid_rock.anm2"
        if ____cond11 then
            do
                if customStage.rocksANM2Path ~= nil then
                    local anm2Path = removeCharactersBefore(nil, customStage.rocksANM2Path, "gfx/")
                    sprite:Load(anm2Path, true)
                elseif customStage.rocksPNGPath ~= nil then
                    local pngPath = removeCharactersBefore(nil, customStage.rocksPNGPath, "gfx/")
                    sprite:ReplaceSpritesheet(0, pngPath)
                    sprite:LoadGraphics()
                end
                break
            end
        end
        ____cond11 = ____cond11 or ____switch11 == "gfx/grid/grid_pit.anm2"
        if ____cond11 then
            do
                if customStage.rocksPNGPath ~= nil then
                    local pngPath = removeCharactersBefore(nil, customStage.rocksPNGPath, "gfx/")
                    sprite:ReplaceSpritesheet(1, pngPath)
                    sprite:LoadGraphics()
                end
                break
            end
        end
    until true
end
--- For `GridEntityType.PIT` (7).
function ____exports.setCustomPitGraphics(self, customStage, gridEntity)
    if customStage.pitsPNGPath == nil then
        return
    end
    local pngPath = removeCharactersBefore(nil, customStage.pitsPNGPath, "gfx/")
    local gridEntityPit = gridEntity:ToPit()
    if gridEntityPit == nil then
        return
    end
    local sprite = gridEntity:GetSprite()
    local fileName = sprite:GetFilename()
    if fileName == "gfx/grid/grid_pit.anm2" then
        sprite:ReplaceSpritesheet(0, pngPath)
        sprite:LoadGraphics()
    end
end
--- For `GridEntityType.DOOR` (16).
function ____exports.setCustomDoorGraphics(self, customStage, gridEntity)
    if customStage.doorPNGPaths == nil then
        return
    end
    local gridEntityDoor = gridEntity:ToDoor()
    if gridEntityDoor == nil then
        return
    end
    local sprite = gridEntity:GetSprite()
    local fileName = sprite:GetFilename()
    local doorPNGPath = getNewDoorPNGPath(nil, customStage, fileName)
    if doorPNGPath ~= nil then
        local fixedPath = removeCharactersBefore(nil, doorPNGPath, "gfx/")
        sprite:ReplaceSpritesheet(0, fixedPath)
        sprite:LoadGraphics()
    end
end
function ____exports.convertVanillaTrapdoors(self, customStage, gridEntity, isFirstFloor, customTrapdoors)
    local gridEntityType = gridEntity:GetType()
    if gridEntityType ~= GridEntityType.TRAPDOOR then
        return
    end
    removeGridEntity(nil, gridEntity, true)
    if isFirstFloor then
        customTrapdoors:spawnCustomTrapdoor(gridEntity.Position, customStage.name, LevelStage.BASEMENT_2)
    else
        local baseStage = customStage.baseStage or DEFAULT_BASE_STAGE
        local destinationStage = baseStage + 2
        local destinationStageType = calculateStageType(nil, destinationStage)
        customTrapdoors:spawnCustomTrapdoor(gridEntity.Position, nil, destinationStage, destinationStageType)
    end
end
return ____exports
 end,
["classes.features.other.customStages.shadows"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EffectVariant = ____isaac_2Dtypescript_2Ddefinitions.EffectVariant
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____LadderSubTypeCustom = require("enums.LadderSubTypeCustom")
local LadderSubTypeCustom = ____LadderSubTypeCustom.LadderSubTypeCustom
local ____array = require("functions.array")
local getRandomArrayElement = ____array.getRandomArrayElement
local ____entitiesSpecific = require("functions.entitiesSpecific")
local spawnEffectWithSeed = ____entitiesSpecific.spawnEffectWithSeed
local ____string = require("functions.string")
local removeCharactersBefore = ____string.removeCharactersBefore
local ____constants = require("classes.features.other.customStages.constants")
local ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = ____constants.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH
--- Normally, we would make a custom entity to represent a shadow effect, but we don't want to
-- interfere with the "entities2.xml" file in end-user mods. Thus, we must select a vanilla effect
-- to masquerade as a backdrop effect.
-- 
-- We arbitrarily choose a ladder for this purpose because it will not automatically despawn after
-- time passes, like most other effects.
local SHADOW_EFFECT_VARIANT = EffectVariant.LADDER
local SHADOW_EFFECT_SUB_TYPE = LadderSubTypeCustom.CUSTOM_SHADOW
--- The animation comes from StageAPI.
local ROOM_SHAPE_TO_SHADOW_ANIMATION = {
    [RoomShape.SHAPE_1x1] = "1x1",
    [RoomShape.IH] = "1x1",
    [RoomShape.IV] = "1x1",
    [RoomShape.SHAPE_1x2] = "1x2",
    [RoomShape.IIV] = "1x2",
    [RoomShape.SHAPE_2x1] = "2x1",
    [RoomShape.IIH] = "2x1",
    [RoomShape.SHAPE_2x2] = "2x2",
    [RoomShape.LTL] = "2x2",
    [RoomShape.LTR] = "2x2",
    [RoomShape.LBL] = "2x2",
    [RoomShape.LBR] = "2x2"
}
local FADED_BLACK = Color(0, 0, 0, 0.25)
function ____exports.setShadows(self, customStage)
    if customStage.shadows == nil then
        return
    end
    local room = game:GetRoom()
    local roomShape = room:GetRoomShape()
    local centerPos = room:GetCenterPos()
    local animation = ROOM_SHAPE_TO_SHADOW_ANIMATION[roomShape]
    local shadows = customStage.shadows[animation]
    if shadows == nil then
        return
    end
    local seed = 1
    local shadowEffect = spawnEffectWithSeed(
        nil,
        SHADOW_EFFECT_VARIANT,
        SHADOW_EFFECT_SUB_TYPE,
        centerPos,
        seed
    )
    local sprite = shadowEffect:GetSprite()
    sprite:Load(ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/stage-shadow.anm2", false)
    local decorationSeed = room:GetDecorationSeed()
    local shadow = getRandomArrayElement(nil, shadows, decorationSeed)
    local pngPath = removeCharactersBefore(nil, shadow.pngPath, "gfx/")
    sprite:ReplaceSpritesheet(0, pngPath)
    sprite:LoadGraphics()
    sprite:SetFrame(animation, 0)
    sprite.Color = shadow.color == nil and FADED_BLACK or Color(shadow.color.r, shadow.color.g, shadow.color.b, shadow.color.a)
end
return ____exports
 end,
["enums.private.UIStreakAnimation"] = function(...) 
local ____exports = {}
--- Corresponds to "resources/gfx/ui/ui_streak.anm2".
____exports.UIStreakAnimation = {}
____exports.UIStreakAnimation.NONE = 0
____exports.UIStreakAnimation[____exports.UIStreakAnimation.NONE] = "NONE"
____exports.UIStreakAnimation.TEXT = 1
____exports.UIStreakAnimation[____exports.UIStreakAnimation.TEXT] = "TEXT"
____exports.UIStreakAnimation.TEXT_STAY = 2
____exports.UIStreakAnimation[____exports.UIStreakAnimation.TEXT_STAY] = "TEXT_STAY"
return ____exports
 end,
["functions.ui"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local LevelCurse = ____isaac_2Dtypescript_2Ddefinitions.LevelCurse
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local UI_HEART_WIDTH = ____constants.UI_HEART_WIDTH
local VectorZero = ____constants.VectorZero
local ____vector = require("functions.vector")
local copyVector = ____vector.copyVector
function ____exports.getScreenBottomRightPos(self)
    local screenWidth = Isaac.GetScreenWidth()
    local screenHeight = Isaac.GetScreenHeight()
    return Vector(screenWidth, screenHeight)
end
--- In the options menu, players have the ability to set a HUD offset (which gets written to the
-- `HudOffset` attribute in the "options.ini" file). This function uses the current HUD offset to
-- generate a vector that should be added to the corresponding position that you want to draw a UI
-- element at.
-- 
-- For example:
-- - If the user does not have a HUD offset configured, this function will return `Vector(0, 0)`.
-- - If the user has a HUD offset of 1.0 configured, this function will return `Vector(20, 12)`.
function ____exports.getHUDOffsetVector(self)
    local hudOffset = math.floor(Options.HUDOffset * 10)
    if hudOffset < 1 or hudOffset > 10 then
        return copyVector(nil, VectorZero)
    end
    local x = hudOffset * 2
    local y = hudOffset
    if y >= 4 then
        y = y + 1
    end
    if y >= 9 then
        y = y + 1
    end
    return Vector(x, y)
end
--- Returns how many hearts are in the heart UI row. If the player has more than 6 hearts, this
-- function will return 6.
function ____exports.getHeartRowLength(self, player)
    local maxHearts = player:GetMaxHearts()
    local soulHearts = player:GetSoulHearts()
    local boneHearts = player:GetBoneHearts()
    local brokenHearts = player:GetBrokenHearts()
    local combinedHearts = maxHearts + soulHearts + boneHearts * 2 + brokenHearts * 2
    local heartRowLength = combinedHearts / 2
    return math.min(heartRowLength, 6)
end
--- Helper function to get the width of the first player's hearts on the UI. This is useful for
-- drawing UI elements to the right of where the player's hearts are. Make sure to use this in
-- combination with the `getHUDOffsetVector` helper function.
function ____exports.getHeartsUIWidth(self)
    local level = game:GetLevel()
    local curses = level:GetCurses()
    local player = Isaac.GetPlayer()
    local extraLives = player:GetExtraLives()
    local effects = player:GetEffects()
    local hasHolyMantleEffect = effects:HasCollectibleEffect(CollectibleType.HOLY_MANTLE)
    local heartRowLength = ____exports.getHeartRowLength(nil, player)
    if hasHolyMantleEffect then
        heartRowLength = heartRowLength + 1
    end
    if curses == LevelCurse.UNKNOWN then
        heartRowLength = 1
    end
    local width = heartRowLength * UI_HEART_WIDTH
    if extraLives > 9 then
        width = width + 20
        if player:HasCollectible(CollectibleType.GUPPYS_COLLAR) then
            width = width + 6
        end
    elseif extraLives > 0 then
        width = width + 16
        if player:HasCollectible(CollectibleType.GUPPYS_COLLAR) then
            width = width + 4
        end
    end
    return width
end
function ____exports.getScreenBottomCenterPos(self)
    local bottomRightPos = ____exports.getScreenBottomRightPos(nil)
    return Vector(bottomRightPos.X / 2, bottomRightPos.Y)
end
function ____exports.getScreenBottomLeftPos(self)
    local bottomRightPos = ____exports.getScreenBottomRightPos(nil)
    return Vector(0, bottomRightPos.Y)
end
function ____exports.getScreenBottomY(self)
    local bottomRightPos = ____exports.getScreenBottomRightPos(nil)
    return bottomRightPos.Y
end
function ____exports.getScreenCenterPos(self)
    local bottomRightPos = ____exports.getScreenBottomRightPos(nil)
    return bottomRightPos / 2
end
function ____exports.getScreenRightX(self)
    local bottomRightPos = ____exports.getScreenBottomRightPos(nil)
    return bottomRightPos.X
end
function ____exports.getScreenTopCenterPos(self)
    local bottomRightPos = ____exports.getScreenBottomRightPos(nil)
    return Vector(bottomRightPos.X / 2, 0)
end
function ____exports.getScreenTopLeftPos(self)
    return copyVector(nil, VectorZero)
end
function ____exports.getScreenTopRightPos(self)
    local bottomRightPos = ____exports.getScreenBottomRightPos(nil)
    return Vector(bottomRightPos.X, 0)
end
--- Get how many hearts are currently being shown on the hearts UI.
-- 
-- This function is originally from piber20 Helper.
function ____exports.getVisibleHearts(self, player)
    local effectiveMaxHearts = player:GetEffectiveMaxHearts()
    local soulHearts = player:GetSoulHearts()
    local boneHearts = player:GetBoneHearts()
    local maxHearts = math.max(effectiveMaxHearts, boneHearts * 2)
    local visibleHearts = math.ceil((maxHearts + soulHearts) / 2)
    if visibleHearts < 1 then
        visibleHearts = 1
    end
    return visibleHearts
end
return ____exports
 end,
["classes.features.other.customStages.v"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____UIStreakAnimation = require("enums.private.UIStreakAnimation")
local UIStreakAnimation = ____UIStreakAnimation.UIStreakAnimation
____exports.v = {run = {
    currentCustomStage = nil,
    firstFloor = true,
    showingBossVersusScreen = false,
    controllerIndexPushingMapRenderFrame = __TS__New(Map),
    topStreakTextStartedRenderFrame = nil,
    topStreakText = {animation = UIStreakAnimation.NONE, frame = 0, pauseFrame = false},
    bottomStreakText = {animation = UIStreakAnimation.NONE, frame = 0, pauseFrame = false}
}}
return ____exports
 end,
["classes.features.other.customStages.streakText"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Spread = ____lualib.__TS__Spread
local ____exports = {}
local checkEndTopStreakText, trackMapInputPressed, checkStartBottomStreakText, checkEndBottomStreakText, renderStreakText, UI_STREAK_ANIMATION_END_FRAMES, TEXT_STAY_FRAME, TEXT_OUT_FRAME, STREAK_TEXT_BOTTOM_Y_OFFSET, NUM_RENDER_FRAMES_MAP_HELD_BEFORE_STREAK_TEXT, TEXT_IN_ADJUSTMENTS, TEXT_OUT_ADJUSTMENTS, TEXT_IN_SCALES, TEXT_OUT_SCALES
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ButtonAction = ____isaac_2Dtypescript_2Ddefinitions.ButtonAction
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local CONTROLLER_INDEX_VALUES = ____cachedEnumValues.CONTROLLER_INDEX_VALUES
local ____cachedClasses = require("core.cachedClasses")
local fonts = ____cachedClasses.fonts
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local KColorDefault = ____constants.KColorDefault
local VectorOne = ____constants.VectorOne
local ____UIStreakAnimation = require("enums.private.UIStreakAnimation")
local UIStreakAnimation = ____UIStreakAnimation.UIStreakAnimation
local ____frames = require("functions.frames")
local getElapsedGameFramesSince = ____frames.getElapsedGameFramesSince
local getElapsedRenderFramesSince = ____frames.getElapsedRenderFramesSince
local ____ui = require("functions.ui")
local getScreenBottomCenterPos = ____ui.getScreenBottomCenterPos
local getScreenTopCenterPos = ____ui.getScreenTopCenterPos
local ____v = require("classes.features.other.customStages.v")
local v = ____v.v
function checkEndTopStreakText(self)
    if v.run.topStreakTextStartedRenderFrame == nil or v.run.topStreakText.animation ~= UIStreakAnimation.TEXT_STAY then
        return
    end
    local elapsedFrames = getElapsedRenderFramesSince(nil, v.run.topStreakTextStartedRenderFrame)
    if elapsedFrames >= 115 then
        v.run.topStreakText.animation = UIStreakAnimation.TEXT
        v.run.topStreakText.frame = TEXT_OUT_FRAME - 2
    end
end
function trackMapInputPressed(self)
    local gameFrameCount = game:GetFrameCount()
    for ____, controllerIndex in ipairs(CONTROLLER_INDEX_VALUES) do
        local oldPushedMapFrame = v.run.controllerIndexPushingMapRenderFrame:get(controllerIndex)
        local isPushingMap = Input.IsActionPressed(ButtonAction.MAP, controllerIndex)
        if isPushingMap then
            if oldPushedMapFrame == nil then
                v.run.controllerIndexPushingMapRenderFrame:set(controllerIndex, gameFrameCount)
            end
        else
            v.run.controllerIndexPushingMapRenderFrame:delete(controllerIndex)
        end
    end
end
function checkStartBottomStreakText(self)
    if v.run.bottomStreakText.animation ~= UIStreakAnimation.NONE then
        return
    end
    local pushedMapFrames = {__TS__Spread(v.run.controllerIndexPushingMapRenderFrame:values())}
    if #pushedMapFrames == 0 then
        return
    end
    local earliestFrame = math.min(table.unpack(pushedMapFrames))
    local elapsedFrames = getElapsedGameFramesSince(nil, earliestFrame)
    if elapsedFrames >= NUM_RENDER_FRAMES_MAP_HELD_BEFORE_STREAK_TEXT then
        v.run.bottomStreakText.animation = UIStreakAnimation.TEXT
        v.run.bottomStreakText.frame = 0
    end
end
function checkEndBottomStreakText(self)
    if v.run.bottomStreakText.animation ~= UIStreakAnimation.TEXT_STAY then
        return
    end
    local pushedMapFrames = {__TS__Spread(v.run.controllerIndexPushingMapRenderFrame:values())}
    if #pushedMapFrames == 0 then
        v.run.bottomStreakText.animation = UIStreakAnimation.TEXT
        v.run.bottomStreakText.frame = TEXT_OUT_FRAME - 2
    end
end
function renderStreakText(self, customStage, streakText, position)
    if streakText.animation == UIStreakAnimation.NONE then
        return
    end
    if streakText.animation ~= UIStreakAnimation.TEXT_STAY then
        local ____streakText_0 = streakText
        local pauseFrame = ____streakText_0.pauseFrame
        streakText.pauseFrame = not streakText.pauseFrame
        if not pauseFrame then
            streakText.frame = streakText.frame + 1
        end
    end
    local endFrame = UI_STREAK_ANIMATION_END_FRAMES[streakText.animation]
    if streakText.frame > endFrame then
        streakText.animation = UIStreakAnimation.NONE
        streakText.frame = 0
        return
    end
    if streakText.animation == UIStreakAnimation.TEXT and streakText.frame == TEXT_STAY_FRAME then
        streakText.animation = UIStreakAnimation.TEXT_STAY
        streakText.frame = 0
    end
    local isPaused = game:IsPaused()
    if isPaused then
        return
    end
    local font = fonts.upheaval
    local ____customStage_1 = customStage
    local name = ____customStage_1.name
    local numberSuffix = v.run.firstFloor and "I" or "II"
    local nameWithNumberSuffix = (name .. " ") .. numberSuffix
    local length = font:GetStringWidthUTF8(nameWithNumberSuffix)
    local centeredX = position.X - length / 2
    local adjustment = 0
    local scale = VectorOne
    if streakText.animation == UIStreakAnimation.TEXT then
        if streakText.frame < TEXT_STAY_FRAME then
            adjustment = TEXT_IN_ADJUSTMENTS[streakText.frame + 1] or 0
            scale = TEXT_IN_SCALES[streakText.frame + 1] or VectorOne
        else
            local adjustedFrame = streakText.frame - TEXT_OUT_FRAME
            adjustment = TEXT_OUT_ADJUSTMENTS[adjustedFrame + 1] or 0
            scale = TEXT_OUT_SCALES[adjustedFrame + 1] or VectorOne
        end
    end
    local adjustedX = centeredX + adjustment
    local adjustedY = position.Y + STREAK_TEXT_BOTTOM_Y_OFFSET
    font:DrawStringScaled(
        nameWithNumberSuffix,
        adjustedX,
        adjustedY,
        scale.X,
        scale.Y,
        KColorDefault
    )
end
UI_STREAK_ANIMATION_END_FRAMES = {[UIStreakAnimation.NONE] = 0, [UIStreakAnimation.TEXT] = 69, [UIStreakAnimation.TEXT_STAY] = 1}
--- This must match the name of the shader in "shaders.xml".
local EMPTY_SHADER_NAME = "IsaacScript-RenderAboveHUD"
TEXT_STAY_FRAME = 8
TEXT_OUT_FRAME = 60
--- This matches the offset that the vanilla game uses; determined via trial and error.
local STREAK_SPRITE_TOP_OFFSET = Vector(0, 47)
--- This matches the offset that the vanilla game uses; determined via trial and error.
local STREAK_SPRITE_BOTTOM_OFFSET = Vector(0, -48.25)
STREAK_TEXT_BOTTOM_Y_OFFSET = -9
NUM_RENDER_FRAMES_MAP_HELD_BEFORE_STREAK_TEXT = 11
TEXT_IN_ADJUSTMENTS = {
    -800,
    -639,
    -450,
    -250,
    -70,
    10,
    6,
    3
}
TEXT_OUT_ADJUSTMENTS = {
    0,
    -5,
    -10,
    -15,
    -20,
    144,
    308,
    472,
    636,
    800
}
TEXT_IN_SCALES = {
    Vector(3, 0.2),
    Vector(2.6, 0.36),
    Vector(2.2, 0.52),
    Vector(1.8, 0.68),
    Vector(1.4, 0.84),
    Vector(0.95, 1.05),
    Vector(0.97, 1.03),
    Vector(0.98, 1.02)
}
TEXT_OUT_SCALES = {
    Vector(1, 1),
    Vector(0.99, 1.03),
    Vector(0.98, 1.05),
    Vector(0.96, 1.08),
    Vector(0.95, 1.1),
    Vector(1.36, 0.92),
    Vector(1.77, 0.74),
    Vector(2.18, 0.56),
    Vector(2.59, 0.38),
    Vector(3, 0.2)
}
function ____exports.streakTextPostRender(self)
    checkEndTopStreakText(nil)
    trackMapInputPressed(nil)
    checkStartBottomStreakText(nil)
    checkEndBottomStreakText(nil)
end
function ____exports.streakTextGetShaderParams(self, customStage, shaderName)
    if shaderName ~= EMPTY_SHADER_NAME then
        return
    end
    local topCenterPos = getScreenTopCenterPos(nil)
    local topStreakPosition = topCenterPos + STREAK_SPRITE_TOP_OFFSET
    renderStreakText(nil, customStage, v.run.topStreakText, topStreakPosition)
    local bottomCenterPos = getScreenBottomCenterPos(nil)
    local bottomStreakPosition = bottomCenterPos + STREAK_SPRITE_BOTTOM_OFFSET
    renderStreakText(nil, customStage, v.run.bottomStreakText, bottomStreakPosition)
end
function ____exports.topStreakTextStart(self)
    local level = game:GetLevel()
    local renderFrameCount = Isaac.GetFrameCount()
    level:ShowName(false)
    v.run.topStreakText.animation = UIStreakAnimation.TEXT
    v.run.topStreakText.frame = 0
    v.run.topStreakTextStartedRenderFrame = renderFrameCount
end
return ____exports
 end,
["classes.features.other.customStages.utils"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local ____exports = {}
local getTotalWeightOfCustomStageRooms, getCustomStageRoomWithChosenWeight, getTotalWeightOfBossPool, getBossEntryWithChosenWeight
local ____array = require("functions.array")
local sumArray = ____array.sumArray
local ____log = require("functions.log")
local log = ____log.log
local ____random = require("functions.random")
local getRandomFloat = ____random.getRandomFloat
function getTotalWeightOfCustomStageRooms(self, roomsMetadata)
    local weights = __TS__ArrayMap(
        roomsMetadata,
        function(____, roomMetadata) return roomMetadata.weight end
    )
    return sumArray(nil, weights)
end
function getCustomStageRoomWithChosenWeight(self, roomsMetadata, chosenWeight)
    for ____, roomMetadata in ipairs(roomsMetadata) do
        if chosenWeight < roomMetadata.weight then
            return roomMetadata
        end
        chosenWeight = chosenWeight - roomMetadata.weight
    end
    error("Failed to get a custom stage room with chosen weight: " .. tostring(chosenWeight))
end
function getTotalWeightOfBossPool(self, bossPool)
    local weights = __TS__ArrayMap(
        bossPool,
        function(____, bossEntry) return bossEntry.weight end
    )
    return sumArray(nil, weights)
end
function getBossEntryWithChosenWeight(self, bossPool, chosenWeight)
    for ____, bossEntry in ipairs(bossPool) do
        if chosenWeight < bossEntry.weight then
            return bossEntry
        end
        chosenWeight = chosenWeight - bossEntry.weight
    end
    error("Failed to get a custom stage boss entry with chosen weight: " .. tostring(chosenWeight))
end
--- Helper function to get a random custom stage room from an array of custom stage rooms.
-- 
-- Note that this function does not simply choose a random element in the provided array; it will
-- properly account for each room weight using the algorithm from:
-- https://stackoverflow.com/questions/1761626/weighted-random-numbers
function ____exports.getRandomCustomStageRoom(self, roomsMetadata, seedOrRNG, verbose)
    if verbose == nil then
        verbose = false
    end
    local totalWeight = getTotalWeightOfCustomStageRooms(nil, roomsMetadata)
    if verbose then
        log("Total weight of the custom stage rooms provided: " .. tostring(totalWeight))
    end
    local chosenWeight = getRandomFloat(nil, 0, totalWeight, seedOrRNG)
    if verbose then
        log("Randomly chose weight for custom stage room: " .. tostring(chosenWeight))
    end
    return getCustomStageRoomWithChosenWeight(nil, roomsMetadata, chosenWeight)
end
function ____exports.getRandomBossRoomFromPool(self, roomsMetadata, bossPool, seedOrRNG, verbose)
    if verbose == nil then
        verbose = false
    end
    local totalWeight = getTotalWeightOfBossPool(nil, bossPool)
    if verbose then
        log("Total weight of the custom stage boss pool provided: " .. tostring(totalWeight))
    end
    local chosenWeight = getRandomFloat(nil, 0, totalWeight, seedOrRNG)
    if verbose then
        log("Randomly chose weight for custom stage boss pool: " .. tostring(chosenWeight))
    end
    local bossEntry = getBossEntryWithChosenWeight(nil, bossPool, chosenWeight)
    local roomsMetadataForBoss = __TS__ArrayFilter(
        roomsMetadata,
        function(____, roomMetadata) return roomMetadata.subType == bossEntry.subType end
    )
    return ____exports.getRandomCustomStageRoom(nil, roomsMetadataForBoss, seedOrRNG, verbose)
end
return ____exports
 end,
["objects.bossIDToEntityTypeVariant"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BeastVariant = ____isaac_2Dtypescript_2Ddefinitions.BeastVariant
local BigHornVariant = ____isaac_2Dtypescript_2Ddefinitions.BigHornVariant
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local ChubVariant = ____isaac_2Dtypescript_2Ddefinitions.ChubVariant
local DaddyLongLegsVariant = ____isaac_2Dtypescript_2Ddefinitions.DaddyLongLegsVariant
local DingleVariant = ____isaac_2Dtypescript_2Ddefinitions.DingleVariant
local DogmaVariant = ____isaac_2Dtypescript_2Ddefinitions.DogmaVariant
local DukeOfFliesVariant = ____isaac_2Dtypescript_2Ddefinitions.DukeOfFliesVariant
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local FallenVariant = ____isaac_2Dtypescript_2Ddefinitions.FallenVariant
local FistulaVariant = ____isaac_2Dtypescript_2Ddefinitions.FistulaVariant
local GeminiVariant = ____isaac_2Dtypescript_2Ddefinitions.GeminiVariant
local GurglingVariant = ____isaac_2Dtypescript_2Ddefinitions.GurglingVariant
local HauntVariant = ____isaac_2Dtypescript_2Ddefinitions.HauntVariant
local IsaacVariant = ____isaac_2Dtypescript_2Ddefinitions.IsaacVariant
local LambVariant = ____isaac_2Dtypescript_2Ddefinitions.LambVariant
local LarryJrVariant = ____isaac_2Dtypescript_2Ddefinitions.LarryJrVariant
local LittleHornVariant = ____isaac_2Dtypescript_2Ddefinitions.LittleHornVariant
local LokiVariant = ____isaac_2Dtypescript_2Ddefinitions.LokiVariant
local MamaGurdyVariant = ____isaac_2Dtypescript_2Ddefinitions.MamaGurdyVariant
local MegaSatanVariant = ____isaac_2Dtypescript_2Ddefinitions.MegaSatanVariant
local MomVariant = ____isaac_2Dtypescript_2Ddefinitions.MomVariant
local MomsHeartVariant = ____isaac_2Dtypescript_2Ddefinitions.MomsHeartVariant
local Monstro2Variant = ____isaac_2Dtypescript_2Ddefinitions.Monstro2Variant
local MotherVariant = ____isaac_2Dtypescript_2Ddefinitions.MotherVariant
local PeepVariant = ____isaac_2Dtypescript_2Ddefinitions.PeepVariant
local PinVariant = ____isaac_2Dtypescript_2Ddefinitions.PinVariant
local PolycephalusVariant = ____isaac_2Dtypescript_2Ddefinitions.PolycephalusVariant
local RagManVariant = ____isaac_2Dtypescript_2Ddefinitions.RagManVariant
local RagMegaVariant = ____isaac_2Dtypescript_2Ddefinitions.RagMegaVariant
local RaglichVariant = ____isaac_2Dtypescript_2Ddefinitions.RaglichVariant
local SatanVariant = ____isaac_2Dtypescript_2Ddefinitions.SatanVariant
local UltraGreedVariant = ____isaac_2Dtypescript_2Ddefinitions.UltraGreedVariant
local WarVariant = ____isaac_2Dtypescript_2Ddefinitions.WarVariant
local WidowVariant = ____isaac_2Dtypescript_2Ddefinitions.WidowVariant
____exports.BOSS_ID_TO_ENTITY_TYPE_VARIANT = {
    [BossID.MONSTRO] = {EntityType.MONSTRO, 0},
    [BossID.LARRY_JR] = {EntityType.LARRY_JR, LarryJrVariant.LARRY_JR},
    [BossID.CHUB] = {EntityType.CHUB, ChubVariant.CHUB},
    [BossID.GURDY] = {EntityType.GURDY, 0},
    [BossID.MONSTRO_2] = {EntityType.MONSTRO_2, Monstro2Variant.MONSTRO_2},
    [BossID.MOM] = {EntityType.MOM, MomVariant.MOM},
    [BossID.SCOLEX] = {EntityType.PIN, PinVariant.SCOLEX},
    [BossID.MOMS_HEART] = {EntityType.MOMS_HEART, MomsHeartVariant.MOMS_HEART},
    [BossID.FAMINE] = {EntityType.FAMINE, 0},
    [BossID.PESTILENCE] = {EntityType.PESTILENCE, 0},
    [BossID.WAR] = {EntityType.WAR, WarVariant.WAR},
    [BossID.DEATH] = {EntityType.DEATH, 0},
    [BossID.DUKE_OF_FLIES] = {EntityType.DUKE_OF_FLIES, DukeOfFliesVariant.DUKE_OF_FLIES},
    [BossID.PEEP] = {EntityType.PEEP, PeepVariant.PEEP},
    [BossID.LOKI] = {EntityType.LOKI, LokiVariant.LOKI},
    [BossID.BLASTOCYST] = {EntityType.BLASTOCYST_BIG, 0},
    [BossID.GEMINI] = {EntityType.GEMINI, GeminiVariant.GEMINI},
    [BossID.FISTULA] = {EntityType.FISTULA_BIG, FistulaVariant.FISTULA},
    [BossID.GISH] = {EntityType.MONSTRO_2, Monstro2Variant.GISH},
    [BossID.STEVEN] = {EntityType.GEMINI, GeminiVariant.STEVEN},
    [BossID.CHAD] = {EntityType.CHUB, ChubVariant.CHAD},
    [BossID.HEADLESS_HORSEMAN] = {EntityType.HEADLESS_HORSEMAN, 0},
    [BossID.FALLEN] = {EntityType.FALLEN, FallenVariant.FALLEN},
    [BossID.SATAN] = {EntityType.SATAN, SatanVariant.SATAN},
    [BossID.IT_LIVES] = {EntityType.MOMS_HEART, MomsHeartVariant.IT_LIVES},
    [BossID.HOLLOW] = {EntityType.LARRY_JR, LarryJrVariant.HOLLOW},
    [BossID.CARRION_QUEEN] = {EntityType.CHUB, ChubVariant.CARRION_QUEEN},
    [BossID.GURDY_JR] = {EntityType.GURDY_JR, 0},
    [BossID.HUSK] = {EntityType.DUKE_OF_FLIES, DukeOfFliesVariant.HUSK},
    [BossID.BLOAT] = {EntityType.PEEP, PeepVariant.BLOAT},
    [BossID.LOKII] = {EntityType.LOKI, LokiVariant.LOKII},
    [BossID.BLIGHTED_OVUM] = {EntityType.GEMINI, GeminiVariant.BLIGHTED_OVUM},
    [BossID.TERATOMA] = {EntityType.FISTULA_BIG, FistulaVariant.TERATOMA},
    [BossID.WIDOW] = {EntityType.WIDOW, WidowVariant.WIDOW},
    [BossID.MASK_OF_INFAMY] = {EntityType.MASK_OF_INFAMY, 0},
    [BossID.WRETCHED] = {EntityType.WIDOW, WidowVariant.WRETCHED},
    [BossID.PIN] = {EntityType.PIN, PinVariant.PIN},
    [BossID.CONQUEST] = {EntityType.WAR, WarVariant.CONQUEST},
    [BossID.ISAAC] = {EntityType.ISAAC, IsaacVariant.ISAAC},
    [BossID.BLUE_BABY] = {EntityType.ISAAC, IsaacVariant.BLUE_BABY},
    [BossID.DADDY_LONG_LEGS] = {EntityType.DADDY_LONG_LEGS, DaddyLongLegsVariant.DADDY_LONG_LEGS},
    [BossID.TRIACHNID] = {EntityType.DADDY_LONG_LEGS, DaddyLongLegsVariant.TRIACHNID},
    [BossID.HAUNT] = {EntityType.HAUNT, HauntVariant.HAUNT},
    [BossID.DINGLE] = {EntityType.DINGLE, DingleVariant.DINGLE},
    [BossID.MEGA_MAW] = {EntityType.MEGA_MAW, 0},
    [BossID.GATE] = {EntityType.GATE, 0},
    [BossID.MEGA_FATTY] = {EntityType.MEGA_FATTY, 0},
    [BossID.CAGE] = {EntityType.CAGE, 0},
    [BossID.MAMA_GURDY] = {EntityType.MAMA_GURDY, MamaGurdyVariant.MAMA_GURDY},
    [BossID.DARK_ONE] = {EntityType.DARK_ONE, 0},
    [BossID.ADVERSARY] = {EntityType.ADVERSARY, 0},
    [BossID.POLYCEPHALUS] = {EntityType.POLYCEPHALUS, PolycephalusVariant.POLYCEPHALUS},
    [BossID.MR_FRED] = {EntityType.MR_FRED, 0},
    [BossID.LAMB] = {EntityType.LAMB, LambVariant.LAMB},
    [BossID.MEGA_SATAN] = {EntityType.MEGA_SATAN, MegaSatanVariant.MEGA_SATAN},
    [BossID.GURGLING] = {EntityType.GURGLING, GurglingVariant.GURGLING_BOSS},
    [BossID.STAIN] = {EntityType.STAIN, 0},
    [BossID.BROWNIE] = {EntityType.BROWNIE, 0},
    [BossID.FORSAKEN] = {EntityType.FORSAKEN, 0},
    [BossID.LITTLE_HORN] = {EntityType.LITTLE_HORN, LittleHornVariant.LITTLE_HORN},
    [BossID.RAG_MAN] = {EntityType.RAG_MAN, RagManVariant.RAG_MAN},
    [BossID.ULTRA_GREED] = {EntityType.ULTRA_GREED, UltraGreedVariant.ULTRA_GREED},
    [BossID.HUSH] = {EntityType.HUSH, 0},
    [BossID.DANGLE] = {EntityType.DINGLE, DingleVariant.DANGLE},
    [BossID.TURDLING] = {EntityType.GURGLING, GurglingVariant.TURDLING},
    [BossID.FRAIL] = {EntityType.PIN, PinVariant.FRAIL},
    [BossID.RAG_MEGA] = {EntityType.RAG_MEGA, RagMegaVariant.RAG_MEGA},
    [BossID.SISTERS_VIS] = {EntityType.SISTERS_VIS, 0},
    [BossID.BIG_HORN] = {EntityType.BIG_HORN, BigHornVariant.BIG_HORN},
    [BossID.DELIRIUM] = {EntityType.DELIRIUM, 0},
    [BossID.ULTRA_GREEDIER] = {EntityType.ULTRA_GREED, UltraGreedVariant.ULTRA_GREEDIER},
    [BossID.MATRIARCH] = {EntityType.MATRIARCH, 0},
    [BossID.PILE] = {EntityType.POLYCEPHALUS, PolycephalusVariant.PILE},
    [BossID.REAP_CREEP] = {EntityType.REAP_CREEP, 0},
    [BossID.LIL_BLUB] = {EntityType.LIL_BLUB, 0},
    [BossID.WORMWOOD] = {EntityType.PIN, PinVariant.WORMWOOD},
    [BossID.RAINMAKER] = {EntityType.RAINMAKER, 0},
    [BossID.VISAGE] = {EntityType.VISAGE, 0},
    [BossID.SIREN] = {EntityType.SIREN, 0},
    [BossID.TUFF_TWINS] = {EntityType.LARRY_JR, LarryJrVariant.TUFF_TWIN},
    [BossID.HERETIC] = {EntityType.HERETIC, 0},
    [BossID.HORNFEL] = {EntityType.HORNFEL, 0},
    [BossID.GREAT_GIDEON] = {EntityType.GREAT_GIDEON, 0},
    [BossID.BABY_PLUM] = {EntityType.BABY_PLUM, 0},
    [BossID.SCOURGE] = {EntityType.SCOURGE, 0},
    [BossID.CHIMERA] = {EntityType.CHIMERA, 0},
    [BossID.ROTGUT] = {EntityType.ROTGUT, 0},
    [BossID.MOTHER] = {EntityType.MOTHER, MotherVariant.MOTHER_1},
    [BossID.MAUSOLEUM_MOM] = {EntityType.MOM, MomVariant.MOM},
    [BossID.MAUSOLEUM_MOMS_HEART] = {EntityType.MOMS_HEART, MomsHeartVariant.MOMS_HEART},
    [BossID.MIN_MIN] = {EntityType.MIN_MIN, 0},
    [BossID.CLOG] = {EntityType.CLOG, 0},
    [BossID.SINGE] = {EntityType.SINGE, 0},
    [BossID.BUMBINO] = {EntityType.BUMBINO, 0},
    [BossID.COLOSTOMIA] = {EntityType.COLOSTOMIA, 0},
    [BossID.SHELL] = {EntityType.LARRY_JR, LarryJrVariant.SHELL},
    [BossID.TURDLET] = {EntityType.TURDLET, 0},
    [BossID.RAGLICH] = {EntityType.RAGLICH, RaglichVariant.RAGLICH},
    [BossID.DOGMA] = {EntityType.DOGMA, DogmaVariant.DOGMA_PHASE_1},
    [BossID.BEAST] = {EntityType.BEAST, BeastVariant.BEAST},
    [BossID.HORNY_BOYS] = {EntityType.HORNY_BOYS, 0},
    [BossID.CLUTCH] = {EntityType.CLUTCH, 0}
}
return ____exports
 end,
["maps.entityTypeVariantToBossIDMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____bossIDToEntityTypeVariant = require("objects.bossIDToEntityTypeVariant")
local BOSS_ID_TO_ENTITY_TYPE_VARIANT = ____bossIDToEntityTypeVariant.BOSS_ID_TO_ENTITY_TYPE_VARIANT
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
____exports.ENTITY_TYPE_VARIANT_TO_BOSS_ID_MAP = __TS__New(
    ReadonlyMap,
    __TS__ArrayMap(
        {table.unpack(__TS__ObjectEntries(BOSS_ID_TO_ENTITY_TYPE_VARIANT))},
        function(____, ____bindingPattern0)
            local entityTypeVariant
            local bossIDRaw
            bossIDRaw = ____bindingPattern0[1]
            entityTypeVariant = ____bindingPattern0[2]
            local bossID = bossIDRaw
            local entityType, variant = table.unpack(entityTypeVariant)
            local entityTypeVariantString = (tostring(entityType) .. ".") .. tostring(variant)
            return {entityTypeVariantString, bossID}
        end
    )
)
return ____exports
 end,
["objects.bossNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
____exports.DEFAULT_BOSS_NAME = "Unknown"
--- From "bossportraits.xml".
-- 
-- Note that Blue Baby returns "Blue Baby" instead of "???".
____exports.BOSS_NAMES = {
    [BossID.MONSTRO] = "Monstro",
    [BossID.LARRY_JR] = "Larry Jr.",
    [BossID.CHUB] = "Chub",
    [BossID.GURDY] = "Gurdy",
    [BossID.MONSTRO_2] = "Monstro II",
    [BossID.MOM] = "Mom",
    [BossID.SCOLEX] = "Scolex",
    [BossID.MOMS_HEART] = "Mom's Heart",
    [BossID.FAMINE] = "Famine",
    [BossID.PESTILENCE] = "Pestilence",
    [BossID.WAR] = "War",
    [BossID.DEATH] = "Death",
    [BossID.DUKE_OF_FLIES] = "Duke of Flies",
    [BossID.PEEP] = "Peep",
    [BossID.LOKI] = "Loki",
    [BossID.BLASTOCYST] = "Blastocyst",
    [BossID.GEMINI] = "Gemini",
    [BossID.FISTULA] = "Fistula",
    [BossID.GISH] = "Gish",
    [BossID.STEVEN] = "Steven",
    [BossID.CHAD] = "C.H.A.D.",
    [BossID.HEADLESS_HORSEMAN] = "Headless Horseman",
    [BossID.FALLEN] = "The Fallen",
    [BossID.SATAN] = "Satan",
    [BossID.IT_LIVES] = "It Lives!",
    [BossID.HOLLOW] = "The Hollow",
    [BossID.CARRION_QUEEN] = "The Carrion Queen",
    [BossID.GURDY_JR] = "Gurdy Jr.",
    [BossID.HUSK] = "The Husk",
    [BossID.BLOAT] = "The Bloat",
    [BossID.LOKII] = "Lokii",
    [BossID.BLIGHTED_OVUM] = "The Blighted Ovum",
    [BossID.TERATOMA] = "Teratoma",
    [BossID.WIDOW] = "The Widow",
    [BossID.MASK_OF_INFAMY] = "Mask of Infamy",
    [BossID.WRETCHED] = "The Wretched",
    [BossID.PIN] = "Pin",
    [BossID.CONQUEST] = "Conquest",
    [BossID.ISAAC] = "Isaac",
    [BossID.BLUE_BABY] = "Blue Baby",
    [BossID.DADDY_LONG_LEGS] = "Daddy Long Legs",
    [BossID.TRIACHNID] = "Triachnid",
    [BossID.HAUNT] = "The Haunt",
    [BossID.DINGLE] = "Dingle",
    [BossID.MEGA_MAW] = "Mega Maw",
    [BossID.GATE] = "The Gate",
    [BossID.MEGA_FATTY] = "Mega Fatty",
    [BossID.CAGE] = "The Cage",
    [BossID.MAMA_GURDY] = "Mega Gurdy",
    [BossID.DARK_ONE] = "Dark One",
    [BossID.ADVERSARY] = "The Adversary",
    [BossID.POLYCEPHALUS] = "Polycephalus",
    [BossID.MR_FRED] = "Mr. Fred",
    [BossID.LAMB] = "The Lamb",
    [BossID.MEGA_SATAN] = "Mega Satan",
    [BossID.GURGLING] = "Gurglings",
    [BossID.STAIN] = "The Stain",
    [BossID.BROWNIE] = "Brownie",
    [BossID.FORSAKEN] = "The Forsaken",
    [BossID.LITTLE_HORN] = "Little Horn",
    [BossID.RAG_MAN] = "Rag Man",
    [BossID.ULTRA_GREED] = "Ultra Greed",
    [BossID.HUSH] = "Hush",
    [BossID.DANGLE] = "Dangle",
    [BossID.TURDLING] = "Turdling",
    [BossID.FRAIL] = "The Frail",
    [BossID.RAG_MEGA] = "Rag Mega",
    [BossID.SISTERS_VIS] = "Sisters Vis",
    [BossID.BIG_HORN] = "Big Horn",
    [BossID.DELIRIUM] = "Delirium",
    [BossID.ULTRA_GREEDIER] = "Ultra Greedier",
    [BossID.MATRIARCH] = "The Matriarch",
    [BossID.PILE] = "The Pile",
    [BossID.REAP_CREEP] = "Reap Creep",
    [BossID.LIL_BLUB] = "Lil Blub",
    [BossID.WORMWOOD] = "Wormwood",
    [BossID.RAINMAKER] = "The Rainmaker",
    [BossID.VISAGE] = "The Visage",
    [BossID.SIREN] = "The Siren",
    [BossID.TUFF_TWINS] = "Tuff Twins",
    [BossID.HERETIC] = "The Heretic",
    [BossID.HORNFEL] = "Hornfel",
    [BossID.GREAT_GIDEON] = "Great Gideon",
    [BossID.BABY_PLUM] = "Baby Plum",
    [BossID.SCOURGE] = "The Scourge",
    [BossID.CHIMERA] = "Chimera",
    [BossID.ROTGUT] = "Rotgut",
    [BossID.MOTHER] = "Mother",
    [BossID.MAUSOLEUM_MOM] = "Mom (Mausoleum)",
    [BossID.MAUSOLEUM_MOMS_HEART] = "Mom's Heart (Mausoleum)",
    [BossID.MIN_MIN] = "Min-Min",
    [BossID.CLOG] = "Clog",
    [BossID.SINGE] = "Singe",
    [BossID.BUMBINO] = "Bumbino",
    [BossID.COLOSTOMIA] = "Colostomia",
    [BossID.SHELL] = "The Shell",
    [BossID.TURDLET] = "Turdlet",
    [BossID.RAGLICH] = "Raglich",
    [BossID.DOGMA] = "Dogma",
    [BossID.BEAST] = "The Beast",
    [BossID.HORNY_BOYS] = "Horny Boys",
    [BossID.CLUTCH] = "Clutch"
}
return ____exports
 end,
["functions.storyBosses"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local STORY_BOSS_IDS = {
    BossID.MOM,
    BossID.MOMS_HEART,
    BossID.SATAN,
    BossID.IT_LIVES,
    BossID.ISAAC,
    BossID.BLUE_BABY,
    BossID.LAMB,
    BossID.MEGA_SATAN,
    BossID.ULTRA_GREED,
    BossID.HUSH,
    BossID.DELIRIUM,
    BossID.ULTRA_GREEDIER,
    BossID.MOTHER,
    BossID.MAUSOLEUM_MOM,
    BossID.MAUSOLEUM_MOMS_HEART,
    BossID.DOGMA,
    BossID.BEAST
}
local STORY_BOSS_ENTITY_TYPES_SET = __TS__New(ReadonlySet, {
    EntityType.MOM,
    EntityType.MOMS_HEART,
    EntityType.SATAN,
    EntityType.ISAAC,
    EntityType.LAMB,
    EntityType.MEGA_SATAN,
    EntityType.MEGA_SATAN_2,
    EntityType.ULTRA_GREED,
    EntityType.HUSH,
    EntityType.DELIRIUM,
    EntityType.MOTHER,
    EntityType.DOGMA,
    EntityType.BEAST
})
local STORY_BOSS_IDS_SET = __TS__New(ReadonlySet, STORY_BOSS_IDS)
--- Helper function to determine if the specified entity type is an end-game story boss, like Isaac,
-- Blue Baby, Mega Satan, The Beast, and so on. This is useful because certain effects should only
-- apply to non-story bosses, like Vanishing Twin.
function ____exports.isStoryBoss(self, entityType)
    return STORY_BOSS_ENTITY_TYPES_SET:has(entityType)
end
--- Helper function to determine if the specified boss ID is an end-game story boss, like Isaac, Blue
-- Baby, Mega Satan, The Beast, and so on. This is useful because certain effects should only apply
-- to non-story bosses, like Vanishing Twin.
function ____exports.isStoryBossID(self, bossID)
    return STORY_BOSS_IDS_SET:has(bossID)
end
return ____exports
 end,
["sets.bossSets"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__Spread = ____lualib.__TS__Spread
local Set = ____lualib.Set
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local BOSS_ID_VALUES = ____cachedEnumValues.BOSS_ID_VALUES
local ____set = require("functions.set")
local combineSets = ____set.combineSets
local ____storyBosses = require("functions.storyBosses")
local isStoryBossID = ____storyBosses.isStoryBossID
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
--- For `StageID.BASEMENT` (1).
local BASEMENT_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.MONSTRO,
    BossID.LARRY_JR,
    BossID.FAMINE,
    BossID.DUKE_OF_FLIES,
    BossID.GEMINI,
    BossID.STEVEN,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.DINGLE,
    BossID.GURGLING,
    BossID.LITTLE_HORN,
    BossID.DANGLE,
    BossID.TURDLING,
    BossID.BABY_PLUM
})
--- For `StageID.CELLAR` (2).
local CELLAR_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.FAMINE,
    BossID.DUKE_OF_FLIES,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.BLIGHTED_OVUM,
    BossID.WIDOW,
    BossID.PIN,
    BossID.HAUNT,
    BossID.LITTLE_HORN,
    BossID.RAG_MAN,
    BossID.BABY_PLUM
})
--- For `StageID.BURNING_BASEMENT` (3).
local BURNING_BASEMENT_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.MONSTRO,
    BossID.LARRY_JR,
    BossID.FAMINE,
    BossID.DUKE_OF_FLIES,
    BossID.GEMINI,
    BossID.STEVEN,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.DINGLE,
    BossID.GURGLING,
    BossID.LITTLE_HORN,
    BossID.RAG_MAN,
    BossID.DANGLE,
    BossID.TURDLING,
    BossID.BABY_PLUM
})
--- For `StageID.DOWNPOUR` (27).
local DOWNPOUR_BOSSES_SET = __TS__New(ReadonlySet, {BossID.LIL_BLUB, BossID.WORMWOOD, BossID.RAINMAKER, BossID.MIN_MIN})
--- For `StageID.DROSS` (28).
local DROSS_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.LIL_BLUB,
    BossID.WORMWOOD,
    BossID.CLOG,
    BossID.COLOSTOMIA,
    BossID.TURDLET
})
--- The set of unique bosses for Basement, Cellar, Burning Basement, Downpour, and Dross.
local ALL_BASEMENT_BOSSES_SET = combineSets(
    nil,
    BASEMENT_BOSSES_SET,
    CELLAR_BOSSES_SET,
    BURNING_BASEMENT_BOSSES_SET,
    DOWNPOUR_BOSSES_SET,
    DROSS_BOSSES_SET
)
--- For `StageID.CAVES` (4).
local CAVES_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.CHUB,
    BossID.GURDY,
    BossID.PESTILENCE,
    BossID.PEEP,
    BossID.FISTULA,
    BossID.CHAD,
    BossID.HEADLESS_HORSEMAN,
    BossID.GURDY_JR,
    BossID.MEGA_FATTY,
    BossID.MEGA_MAW,
    BossID.FALLEN,
    BossID.STAIN,
    BossID.RAG_MEGA,
    BossID.BIG_HORN,
    BossID.BUMBINO
})
--- For `StageID.CATACOMBS` (5).
local CATACOMBS_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.PESTILENCE,
    BossID.PEEP,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.HOLLOW,
    BossID.CARRION_QUEEN,
    BossID.GURDY_JR,
    BossID.HUSK,
    BossID.WRETCHED,
    BossID.DARK_ONE,
    BossID.POLYCEPHALUS,
    BossID.FORSAKEN,
    BossID.FRAIL,
    BossID.RAG_MEGA,
    BossID.BIG_HORN,
    BossID.BUMBINO
})
--- For `StageID.FLOODED_CAVES` (6).
local FLOODED_CAVES_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.CHUB,
    BossID.GURDY,
    BossID.PESTILENCE,
    BossID.PEEP,
    BossID.FISTULA,
    BossID.CHAD,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.GURDY_JR,
    BossID.MEGA_MAW,
    BossID.MEGA_FATTY,
    BossID.STAIN,
    BossID.FORSAKEN,
    BossID.FRAIL,
    BossID.RAG_MEGA,
    BossID.BIG_HORN,
    BossID.BUMBINO
})
--- For `StageID.MINES` (29).
local MINES_BOSSES_SET = __TS__New(ReadonlySet, {BossID.REAP_CREEP, BossID.TUFF_TWINS, BossID.HORNFEL, BossID.GREAT_GIDEON})
--- For `StageID.ASHPIT` (30).
local ASHPIT_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.PILE,
    BossID.GREAT_GIDEON,
    BossID.SINGE,
    BossID.SHELL,
    BossID.CLUTCH
})
--- The set of unique bosses for Caves, Catacombs, Flooded Caves, Mines, and Ashpit.
local ALL_CAVES_BOSSES_SET = combineSets(
    nil,
    CAVES_BOSSES_SET,
    CATACOMBS_BOSSES_SET,
    FLOODED_CAVES_BOSSES_SET,
    MINES_BOSSES_SET,
    ASHPIT_BOSSES_SET
)
--- For `StageID.DEPTHS` (7).
-- 
-- Note that this set includes Mom, even though they are not technically in the boss pool.
local DEPTHS_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.MONSTRO_2,
    BossID.MOM,
    BossID.WAR,
    BossID.LOKI,
    BossID.GISH,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.GATE,
    BossID.CAGE,
    BossID.BROWNIE,
    BossID.SISTERS_VIS,
    BossID.REAP_CREEP
})
--- For `StageID.NECROPOLIS` (8).
-- 
-- Note that this set includes Mom, even though they are not technically in the boss pool.
local NECROPOLIS_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.MOM,
    BossID.WAR,
    BossID.LOKI,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.BLOAT,
    BossID.MASK_OF_INFAMY,
    BossID.ADVERSARY,
    BossID.BROWNIE,
    BossID.SISTERS_VIS,
    BossID.PILE
})
--- For `StageID.DANK_DEPTHS` (9).
-- 
-- Note that this set includes Mom, even though they are not technically in the boss pool.
local DANK_DEPTHS_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.MONSTRO_2,
    BossID.MOM,
    BossID.WAR,
    BossID.LOKI,
    BossID.GISH,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.GATE,
    BossID.CAGE,
    BossID.BROWNIE,
    BossID.SISTERS_VIS,
    BossID.REAP_CREEP
})
--- For `StageID.MAUSOLEUM` (31).
-- 
-- Note that this set includes Mausoleum Mom, even though they are not technically in the boss pool.
local MAUSOLEUM_BOSSES_SET = __TS__New(ReadonlySet, {BossID.SIREN, BossID.HERETIC, BossID.MAUSOLEUM_MOM})
--- For `StageID.GEHENNA` (32).
-- 
-- Note that this set includes Mausoleum Mom, even though they are not technically in the boss pool.
local GEHENNA_BOSSES_SET = __TS__New(ReadonlySet, {BossID.VISAGE, BossID.MAUSOLEUM_MOM, BossID.HORNY_BOYS})
--- The set of unique bosses for Depths, Necropolis, Dank Depths, Mausoleum, and Gehenna.
local ALL_DEPTHS_BOSSES_SET = combineSets(
    nil,
    DEPTHS_BOSSES_SET,
    NECROPOLIS_BOSSES_SET,
    DANK_DEPTHS_BOSSES_SET,
    MAUSOLEUM_BOSSES_SET,
    GEHENNA_BOSSES_SET
)
--- For `StageID.WOMB` (10).
-- 
-- Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
-- boss pool.
local WOMB_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.SCOLEX,
    BossID.MOMS_HEART,
    BossID.DEATH,
    BossID.BLASTOCYST,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.IT_LIVES,
    BossID.LOKII,
    BossID.CONQUEST,
    BossID.MAMA_GURDY,
    BossID.MR_FRED,
    BossID.MATRIARCH
})
--- For `StageID.UTERO` (11).
-- 
-- Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
-- boss pool.
local UTERO_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.MOMS_HEART,
    BossID.DEATH,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.IT_LIVES,
    BossID.BLOAT,
    BossID.LOKII,
    BossID.TERATOMA,
    BossID.CONQUEST,
    BossID.DADDY_LONG_LEGS,
    BossID.TRIACHNID
})
--- 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.
local SCARRED_WOMB_BOSSES_SET = __TS__New(ReadonlySet, {
    BossID.SCOLEX,
    BossID.MOMS_HEART,
    BossID.DEATH,
    BossID.BLASTOCYST,
    BossID.HEADLESS_HORSEMAN,
    BossID.FALLEN,
    BossID.IT_LIVES,
    BossID.LOKII,
    BossID.CONQUEST,
    BossID.TRIACHNID,
    BossID.MAMA_GURDY,
    BossID.MR_FRED,
    BossID.MATRIARCH
})
--- For `StageID.CORPSE` (33).
-- 
-- Note that this set includes Mother, even though she is not technically in the boss pool.
local CORPSE_BOSSES_SET = __TS__New(ReadonlySet, {BossID.SCOURGE, BossID.CHIMERA, BossID.ROTGUT, BossID.MOTHER})
--- The set of unique bosses for Womb, Utero, Scarred Womb, and Corpse.
local ALL_WOMB_BOSSES_SET = combineSets(
    nil,
    WOMB_BOSSES_SET,
    UTERO_BOSSES_SET,
    SCARRED_WOMB_BOSSES_SET,
    CORPSE_BOSSES_SET
)
local BLUE_WOMB_BOSSES_SET = __TS__New(ReadonlySet, {BossID.HUSH})
local SHEOL_BOSSES_SET = __TS__New(ReadonlySet, {BossID.SATAN})
local CATHEDRAL_BOSSES_SET = __TS__New(ReadonlySet, {BossID.ISAAC})
local ALL_STAGE_10_BOSSES_SET = combineSets(nil, SHEOL_BOSSES_SET, CATHEDRAL_BOSSES_SET)
--- Note that this set includes Mega Satan, even though they are not technically in the boss pool.
local DARK_ROOM_BOSSES_SET = __TS__New(ReadonlySet, {BossID.LAMB, BossID.MEGA_SATAN})
--- Note that this set includes Mega Satan, even though they are not technically in the boss pool.
local CHEST_BOSSES_SET = __TS__New(ReadonlySet, {BossID.BLUE_BABY, BossID.MEGA_SATAN})
local ALL_STAGE_11_BOSSES_SET = combineSets(nil, DARK_ROOM_BOSSES_SET, CHEST_BOSSES_SET)
local VOID_BOSSES_SET = __TS__New(ReadonlySet, {BossID.DELIRIUM})
--- Includes Dogma and The Beast. Does not include Ultra Famine, Ultra Pestilence, Ultra War, and
-- Ultra Death (since they do not have boss IDs).
local HOME_BOSSES_SET = __TS__New(ReadonlySet, {BossID.DOGMA, BossID.BEAST})
____exports.STAGE_ID_TO_BOSS_SET_MAP = __TS__New(ReadonlyMap, {
    {StageID.BASEMENT, BASEMENT_BOSSES_SET},
    {StageID.CELLAR, CELLAR_BOSSES_SET},
    {StageID.BURNING_BASEMENT, BURNING_BASEMENT_BOSSES_SET},
    {StageID.DOWNPOUR, DOWNPOUR_BOSSES_SET},
    {StageID.DROSS, DROSS_BOSSES_SET},
    {StageID.CAVES, CAVES_BOSSES_SET},
    {StageID.CATACOMBS, CATACOMBS_BOSSES_SET},
    {StageID.FLOODED_CAVES, FLOODED_CAVES_BOSSES_SET},
    {StageID.MINES, MINES_BOSSES_SET},
    {StageID.ASHPIT, ASHPIT_BOSSES_SET},
    {StageID.DEPTHS, DEPTHS_BOSSES_SET},
    {StageID.NECROPOLIS, NECROPOLIS_BOSSES_SET},
    {StageID.DANK_DEPTHS, DANK_DEPTHS_BOSSES_SET},
    {StageID.MAUSOLEUM, MAUSOLEUM_BOSSES_SET},
    {StageID.GEHENNA, GEHENNA_BOSSES_SET},
    {StageID.WOMB, WOMB_BOSSES_SET},
    {StageID.UTERO, UTERO_BOSSES_SET},
    {StageID.SCARRED_WOMB, SCARRED_WOMB_BOSSES_SET},
    {StageID.CORPSE, CORPSE_BOSSES_SET},
    {StageID.BLUE_WOMB, BLUE_WOMB_BOSSES_SET},
    {StageID.SHEOL, SHEOL_BOSSES_SET},
    {StageID.CATHEDRAL, CATHEDRAL_BOSSES_SET},
    {StageID.DARK_ROOM, DARK_ROOM_BOSSES_SET},
    {StageID.CHEST, CHEST_BOSSES_SET},
    {StageID.VOID, VOID_BOSSES_SET},
    {StageID.HOME, HOME_BOSSES_SET}
})
____exports.STAGE_TO_COMBINED_BOSS_SET_MAP = __TS__New(ReadonlyMap, {
    {LevelStage.BASEMENT_1, ALL_BASEMENT_BOSSES_SET},
    {LevelStage.BASEMENT_2, ALL_BASEMENT_BOSSES_SET},
    {LevelStage.CAVES_1, ALL_CAVES_BOSSES_SET},
    {LevelStage.CAVES_2, ALL_CAVES_BOSSES_SET},
    {LevelStage.DEPTHS_1, ALL_DEPTHS_BOSSES_SET},
    {LevelStage.DEPTHS_2, ALL_DEPTHS_BOSSES_SET},
    {LevelStage.WOMB_1, ALL_WOMB_BOSSES_SET},
    {LevelStage.WOMB_2, ALL_WOMB_BOSSES_SET},
    {LevelStage.BLUE_WOMB, BLUE_WOMB_BOSSES_SET},
    {LevelStage.SHEOL_CATHEDRAL, ALL_STAGE_10_BOSSES_SET},
    {LevelStage.DARK_ROOM_CHEST, ALL_STAGE_11_BOSSES_SET},
    {LevelStage.VOID, VOID_BOSSES_SET},
    {LevelStage.HOME, HOME_BOSSES_SET}
})
____exports.ALL_BOSSES_SET = __TS__New(
    ReadonlySet,
    __TS__ArrayFilter(
        BOSS_ID_VALUES,
        function(____, bossID) return bossID ~= BossID.RAGLICH end
    )
)
____exports.ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET = __TS__New(
    ReadonlySet,
    __TS__ArrayFilter(
        {__TS__Spread(____exports.ALL_BOSSES_SET)},
        function(____, bossID) return not isStoryBossID(nil, bossID) end
    )
)
____exports.BOSS_ID_TO_STAGE_IDS = (function()
    local partialBossIDsToStageIDs = {}
    for ____, bossID in ipairs(BOSS_ID_VALUES) do
        local stageIDs = __TS__New(Set)
        for ____, ____value in __TS__Iterator(____exports.STAGE_ID_TO_BOSS_SET_MAP) do
            local stageID = ____value[1]
            local bossSet = ____value[2]
            if bossSet:has(bossID) then
                stageIDs:add(stageID)
            end
        end
        partialBossIDsToStageIDs[bossID] = stageIDs
    end
    local bossIDsToStageIDs = partialBossIDsToStageIDs
    bossIDsToStageIDs[BossID.ULTRA_GREED]:add(StageID.ULTRA_GREED_GREED_MODE)
    bossIDsToStageIDs[BossID.ULTRA_GREEDIER]:add(StageID.ULTRA_GREED_GREED_MODE)
    bossIDsToStageIDs[BossID.MAUSOLEUM_MOMS_HEART]:add(StageID.MAUSOLEUM)
    bossIDsToStageIDs[BossID.MAUSOLEUM_MOMS_HEART]:add(StageID.GEHENNA)
    return bossIDsToStageIDs
end)(nil)
return ____exports
 end,
["sets.repentanceBossIDsSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.REPENTANCE_ONLY_BOSS_IDS_SET = __TS__New(ReadonlySet, {
    BossID.LIL_BLUB,
    BossID.WORMWOOD,
    BossID.RAINMAKER,
    BossID.VISAGE,
    BossID.SIREN,
    BossID.TUFF_TWINS,
    BossID.HERETIC,
    BossID.HORNFEL,
    BossID.GREAT_GIDEON,
    BossID.SCOURGE,
    BossID.CHIMERA,
    BossID.ROTGUT,
    BossID.MOTHER,
    BossID.MAUSOLEUM_MOM,
    BossID.MAUSOLEUM_MOMS_HEART,
    BossID.MIN_MIN,
    BossID.CLOG,
    BossID.SINGE,
    BossID.COLOSTOMIA,
    BossID.SHELL,
    BossID.TURDLET,
    BossID.HORNY_BOYS,
    BossID.CLUTCH
})
return ____exports
 end,
["sets.sinEntityTypesSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
____exports.SIN_ENTITY_TYPES_SET = __TS__New(ReadonlySet, {
    EntityType.SLOTH,
    EntityType.LUST,
    EntityType.WRATH,
    EntityType.GLUTTONY,
    EntityType.GREED,
    EntityType.ENVY,
    EntityType.PRIDE
})
return ____exports
 end,
["functions.npcs"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local ____exports = {}
local NON_ALIVE_NPCS_TYPE_VARIANT, NON_ALIVE_NPCS_TYPE_VARIANT_SUB_TYPE
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BegottenVariant = ____isaac_2Dtypescript_2Ddefinitions.BegottenVariant
local BigHornVariant = ____isaac_2Dtypescript_2Ddefinitions.BigHornVariant
local ChargerSubType = ____isaac_2Dtypescript_2Ddefinitions.ChargerSubType
local ChargerVariant = ____isaac_2Dtypescript_2Ddefinitions.ChargerVariant
local DarkEsauVariant = ____isaac_2Dtypescript_2Ddefinitions.DarkEsauVariant
local DeathVariant = ____isaac_2Dtypescript_2Ddefinitions.DeathVariant
local DumpVariant = ____isaac_2Dtypescript_2Ddefinitions.DumpVariant
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local HopperVariant = ____isaac_2Dtypescript_2Ddefinitions.HopperVariant
local MamaGurdyVariant = ____isaac_2Dtypescript_2Ddefinitions.MamaGurdyVariant
local MotherSubType = ____isaac_2Dtypescript_2Ddefinitions.MotherSubType
local MotherVariant = ____isaac_2Dtypescript_2Ddefinitions.MotherVariant
local NPCState = ____isaac_2Dtypescript_2Ddefinitions.NPCState
local PeepVariant = ____isaac_2Dtypescript_2Ddefinitions.PeepVariant
local RaglingVariant = ____isaac_2Dtypescript_2Ddefinitions.RaglingVariant
local VisVariant = ____isaac_2Dtypescript_2Ddefinitions.VisVariant
local ____constants = require("core.constants")
local EGGY_STATE_FRAME_OF_FINAL_SPIDER = ____constants.EGGY_STATE_FRAME_OF_FINAL_SPIDER
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getNPCs = ____entitiesSpecific.getNPCs
--- Checks for specific NPCs that have "CanShutDoors" set to true naturally by the game, but should
-- not actually keep the doors closed (like Death's scythes).
function ____exports.isAliveExceptionNPC(self, npc)
    local entityTypeVariant = (tostring(npc.Type) .. ".") .. tostring(npc.Variant)
    if NON_ALIVE_NPCS_TYPE_VARIANT:has(entityTypeVariant) then
        return true
    end
    local entityTypeVariantSubType = (((tostring(npc.Type) .. ".") .. tostring(npc.Variant)) .. ".") .. tostring(npc.SubType)
    if NON_ALIVE_NPCS_TYPE_VARIANT_SUB_TYPE:has(entityTypeVariantSubType) then
        return true
    end
    if ____exports.isDyingEggyWithNoSpidersLeft(nil, npc) then
        return true
    end
    if ____exports.isDaddyLongLegsChildStompEntity(nil, npc) then
        return true
    end
    if ____exports.isRaglingDeathPatch(nil, npc) then
        return true
    end
    if ____exports.isDyingDump(nil, npc) then
        return true
    end
    return false
end
--- Helper function to distinguish between a normal Daddy Long Legs / Triachnid and the child entity
-- that is spawned when the boss does the multi-stomp attack.
-- 
-- When this attack occurs, four extra copies of Daddy Long Legs will be spawned with the same
-- entity type, variant, and sub-type. The `Entity.Parent` field will be undefined in this case, so
-- the way to tell them apart is to check for a non-undefined `Entity.SpawnerEntity` field.
function ____exports.isDaddyLongLegsChildStompEntity(self, npc)
    return npc.Type == EntityType.DADDY_LONG_LEGS and npc.SpawnerEntity ~= nil
end
--- Helper function to detect the custom death state of a Dump. When Dumps die, they go to
-- `NPCState.SPECIAL`, spit out their head, and then slowly fade away while shooting a burst of
-- tears.
function ____exports.isDyingDump(self, npc)
    return npc.Type == EntityType.DUMP and npc.Variant == DumpVariant.DUMP and npc.State == NPCState.SPECIAL
end
--- Helper function to detect the custom death state of an Eggy. Eggies are never actually marked
-- dead by the game. Instead, when Eggies take fatal damage, they go into NPCState.STATE_SUICIDE and
-- spawn 14 Swarm Spiders while their StateFrame ticks upwards.
function ____exports.isDyingEggyWithNoSpidersLeft(self, npc)
    return npc.Type == EntityType.HOPPER and npc.Variant == HopperVariant.EGGY and npc.State == NPCState.SUICIDE and npc.StateFrame >= EGGY_STATE_FRAME_OF_FINAL_SPIDER
end
--- Helper function to detect the custom death state of a Rag Man Ragling. When Rag Man Raglings die,
-- they turn into a patch on the ground and can be revived by Rag Man at a later time. This causes
-- them to show up as an "alive" enemy, so they should usually be filtered out of lists of alive
-- enemies.
function ____exports.isRaglingDeathPatch(self, npc)
    return npc.Type == EntityType.RAGLING and npc.Variant == RaglingVariant.RAG_MANS_RAGLING and npc.State == NPCState.SPECIAL
end
NON_ALIVE_NPCS_TYPE_VARIANT = __TS__New(
    ReadonlySet,
    {
        (tostring(EntityType.VIS) .. ".") .. tostring(VisVariant.CHUBBER_PROJECTILE),
        (tostring(EntityType.DEATH) .. ".") .. tostring(DeathVariant.DEATH_SCYTHE),
        (tostring(EntityType.PEEP) .. ".") .. tostring(PeepVariant.PEEP_EYE),
        (tostring(EntityType.PEEP) .. ".") .. tostring(PeepVariant.BLOAT_EYE),
        (tostring(EntityType.BEGOTTEN) .. ".") .. tostring(BegottenVariant.BEGOTTEN_CHAIN),
        (tostring(EntityType.MAMA_GURDY) .. ".") .. tostring(MamaGurdyVariant.LEFT_HAND),
        (tostring(EntityType.MAMA_GURDY) .. ".") .. tostring(MamaGurdyVariant.RIGHT_HAND),
        (tostring(EntityType.BIG_HORN) .. ".") .. tostring(BigHornVariant.SMALL_HOLE),
        (tostring(EntityType.BIG_HORN) .. ".") .. tostring(BigHornVariant.BIG_HOLE),
        (tostring(EntityType.DARK_ESAU) .. ".") .. tostring(DarkEsauVariant.DARK_ESAU),
        (tostring(EntityType.DARK_ESAU) .. ".") .. tostring(DarkEsauVariant.PIT)
    }
)
NON_ALIVE_NPCS_TYPE_VARIANT_SUB_TYPE = __TS__New(
    ReadonlySet,
    {
        (((tostring(EntityType.CHARGER) .. ".") .. tostring(ChargerVariant.CHARGER)) .. ".") .. tostring(ChargerSubType.MY_SHADOW),
        (((tostring(EntityType.MOTHER) .. ".") .. tostring(MotherVariant.MOTHER_1)) .. ".") .. tostring(MotherSubType.PHASE_2)
    }
)
--- Helper function to get all of the non-dead NPCs in the room.
-- 
-- This function will not include NPCs on an internal blacklist, such as Death's scythes or Big Horn
-- holes.
-- 
-- @param entityType Optional. If specified, will only get the NPCs that match the type. Default is
-- -1, which matches every type.
-- @param variant Optional. If specified, will only get the NPCs that match the variant. Default is
-- -1, which matches every variant.
-- @param subType Optional. If specified, will only get the NPCs that match the sub-type. Default is
-- -1, which matches every sub-type.
-- @param ignoreFriendly Optional. Default is false.
function ____exports.getAliveNPCs(self, entityType, variant, subType, ignoreFriendly)
    if entityType == nil then
        entityType = -1
    end
    if variant == nil then
        variant = -1
    end
    if subType == nil then
        subType = -1
    end
    if ignoreFriendly == nil then
        ignoreFriendly = false
    end
    local npcs = getNPCs(
        nil,
        entityType,
        variant,
        subType,
        ignoreFriendly
    )
    return __TS__ArrayFilter(
        npcs,
        function(____, npc) return not npc:IsDead() and not ____exports.isAliveExceptionNPC(nil, npc) end
    )
end
return ____exports
 end,
["functions.bosses"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local LokiVariant = ____isaac_2Dtypescript_2Ddefinitions.LokiVariant
local UltraGreedVariant = ____isaac_2Dtypescript_2Ddefinitions.UltraGreedVariant
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____entityTypeVariantToBossIDMap = require("maps.entityTypeVariantToBossIDMap")
local ENTITY_TYPE_VARIANT_TO_BOSS_ID_MAP = ____entityTypeVariantToBossIDMap.ENTITY_TYPE_VARIANT_TO_BOSS_ID_MAP
local ____bossIDToEntityTypeVariant = require("objects.bossIDToEntityTypeVariant")
local BOSS_ID_TO_ENTITY_TYPE_VARIANT = ____bossIDToEntityTypeVariant.BOSS_ID_TO_ENTITY_TYPE_VARIANT
local ____bossNames = require("objects.bossNames")
local BOSS_NAMES = ____bossNames.BOSS_NAMES
local DEFAULT_BOSS_NAME = ____bossNames.DEFAULT_BOSS_NAME
local ____bossSets = require("sets.bossSets")
local ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET = ____bossSets.ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET
local ALL_BOSSES_SET = ____bossSets.ALL_BOSSES_SET
local BOSS_ID_TO_STAGE_IDS = ____bossSets.BOSS_ID_TO_STAGE_IDS
local STAGE_ID_TO_BOSS_SET_MAP = ____bossSets.STAGE_ID_TO_BOSS_SET_MAP
local STAGE_TO_COMBINED_BOSS_SET_MAP = ____bossSets.STAGE_TO_COMBINED_BOSS_SET_MAP
local ____repentanceBossIDsSet = require("sets.repentanceBossIDsSet")
local REPENTANCE_ONLY_BOSS_IDS_SET = ____repentanceBossIDsSet.REPENTANCE_ONLY_BOSS_IDS_SET
local ____sinEntityTypesSet = require("sets.sinEntityTypesSet")
local SIN_ENTITY_TYPES_SET = ____sinEntityTypesSet.SIN_ENTITY_TYPES_SET
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____entities = require("functions.entities")
local doesEntityExist = ____entities.doesEntityExist
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getNPCs = ____entitiesSpecific.getNPCs
local spawnNPC = ____entitiesSpecific.spawnNPC
local ____npcs = require("functions.npcs")
local getAliveNPCs = ____npcs.getAliveNPCs
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local ____rooms = require("functions.rooms")
local inBeastRoom = ____rooms.inBeastRoom
local inDogmaRoom = ____rooms.inDogmaRoom
local ____utils = require("functions.utils")
local ____repeat = ____utils["repeat"]
local BOSSES_THAT_REQUIRE_MULTIPLE_SPAWNS = __TS__New(ReadonlySet, {
    EntityType.LARRY_JR,
    EntityType.CHUB,
    EntityType.LOKI,
    EntityType.GURGLING,
    EntityType.TURDLET
})
local DEFAULT_BOSS_MULTI_SEGMENTS = 4
--- Helper function to get all of the non-dead bosses in the room.
-- 
-- This function will not include bosses on an internal blacklist, such as Death's scythes or Big
-- Horn holes.
-- 
-- @param entityType Optional. If specified, will only get the bosses that match the type. Default
-- is -1, which matches every type.
-- @param variant Optional. If specified, will only get the bosses that match the variant. Default
-- is -1, which matches every variant.
-- @param subType Optional. If specified, will only get the bosses that match the sub-type. Default
-- is -1, which matches every sub-type.
-- @param ignoreFriendly Optional. Default is false.
function ____exports.getAliveBosses(self, entityType, variant, subType, ignoreFriendly)
    if entityType == nil then
        entityType = -1
    end
    if variant == nil then
        variant = -1
    end
    if subType == nil then
        subType = -1
    end
    if ignoreFriendly == nil then
        ignoreFriendly = false
    end
    local aliveNPCs = getAliveNPCs(
        nil,
        entityType,
        variant,
        subType,
        ignoreFriendly
    )
    return __TS__ArrayFilter(
        aliveNPCs,
        function(____, aliveNPC) return aliveNPC:IsBoss() end
    )
end
--- Helper function to get the set of every boss in the game (which is derived from the `BossID`
-- enum).
-- 
-- This includes:
-- - Ultra Greed
-- - Ultra Greedier
-- 
-- This does not include:
-- - mini-bosses (e.g. Ultra Pride, Krampus)
-- - bosses that do not appear in Boss Rooms (e.g. Uriel, Gabriel)
-- - the second phase of multi-phase bosses (e.g. Mega Satan 2)
-- - sub-bosses of The Beast fight (e.g. Ultra Famine, Ultra Pestilence, Ultra War, Ultra Death)
-- - bosses that do not have any Boss Rooms defined due to being unfinished (e.g. Raglich)
-- 
-- Also see the `getBossSet` and `getCombinedBossSet` functions.
-- 
-- @param includeStoryBosses Optional. Whether to include "story" bosses like Mom and It Lives.
-- Default is true.
function ____exports.getAllBossesSet(self, includeStoryBosses)
    if includeStoryBosses == nil then
        includeStoryBosses = true
    end
    return includeStoryBosses and ALL_BOSSES_SET or ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET
end
--- Helper function to get the boss ID corresponding to the current room. Returns undefined if the
-- current room is not a Boss Room.
-- 
-- Use this instead of the vanilla `Room.GetBossID` method since it has a saner return type and it
-- correctly handles Dogma, The Beast, and Ultra Greedier.
function ____exports.getBossID(self)
    if inDogmaRoom(nil) then
        return BossID.DOGMA
    end
    if inBeastRoom(nil) then
        return BossID.BEAST
    end
    local room = game:GetRoom()
    local bossID = room:GetBossID()
    if bossID == 0 then
        return nil
    end
    if bossID == BossID.ULTRA_GREED and doesEntityExist(nil, EntityType.ULTRA_GREED, UltraGreedVariant.ULTRA_GREEDIER) then
        return BossID.ULTRA_GREEDIER
    end
    return bossID
end
function ____exports.getBossIDFromEntityTypeVariant(self, entityType, variant)
    local entityTypeVariant = (tostring(entityType) .. ".") .. tostring(variant)
    return ENTITY_TYPE_VARIANT_TO_BOSS_ID_MAP:get(entityTypeVariant)
end
--- Helper function to get the proper English name for a boss. For example, the name for
-- `BossID.WRETCHED` (36) is "The Wretched".
function ____exports.getBossName(self, bossID)
    return BOSS_NAMES[bossID] or DEFAULT_BOSS_NAME
end
--- Helper function to get the set of vanilla bosses for a particular stage and stage type
-- combination.
-- 
-- Also see the `getAllBossesSet` and `getCombinedBossSet` functions.
function ____exports.getBossSet(self, stageID)
    return STAGE_ID_TO_BOSS_SET_MAP:get(stageID)
end
--- Helper function to get the set of stage IDs that a particular boss naturally appears in.
function ____exports.getBossStageIDs(self, bossID)
    return BOSS_ID_TO_STAGE_IDS[bossID]
end
--- Helper function to get all of the bosses in the room.
-- 
-- @param entityType Optional. If specified, will only get the bosses that match the type. Default
-- is -1, which matches every type.
-- @param variant Optional. If specified, will only get the bosses that match the variant. Default
-- is -1, which matches every variant.
-- @param subType Optional. If specified, will only get the bosses that match the sub-type. Default
-- is -1, which matches every sub-type.
-- @param ignoreFriendly Optional. Default is false.
function ____exports.getBosses(self, entityType, variant, subType, ignoreFriendly)
    if ignoreFriendly == nil then
        ignoreFriendly = false
    end
    local npcs = getNPCs(
        nil,
        entityType,
        variant,
        subType,
        ignoreFriendly
    )
    return __TS__ArrayFilter(
        npcs,
        function(____, npc) return npc:IsBoss() end
    )
end
--- Helper function to get the set of vanilla bosses for a particular stage across all of the stage
-- types. For example, specifying `LevelStage.BASEMENT_2` will return a set with all of the bosses
-- for Basement, Cellar, Burning Basement, Downpour, and Dross.
-- 
-- Also see the `getAllBossesSet` and `getBossSet` functions.
function ____exports.getCombinedBossSet(self, stage)
    return STAGE_TO_COMBINED_BOSS_SET_MAP:get(stage)
end
function ____exports.getEntityTypeVariantFromBossID(self, bossID)
    return BOSS_ID_TO_ENTITY_TYPE_VARIANT[bossID]
end
--- Helper function to check if a boss is only found on a Repentance floor such as Dross, Mines, and
-- so on.
-- 
-- For example, The Pile is a boss that was added in Repentance, but since it can appear in
-- Necropolis, it is not considered a Repentance boss for the purposes of this function.
function ____exports.isRepentanceBoss(self, bossID)
    return REPENTANCE_ONLY_BOSS_IDS_SET:has(bossID)
end
--- Helper function to check if the provided NPC is a Sin miniboss, such as Sloth or Lust.
function ____exports.isSin(self, npc)
    return SIN_ENTITY_TYPES_SET:has(npc.Type)
end
local function getNumBossSegments(self, entityType, variant, numSegments)
    if numSegments ~= nil then
        return numSegments
    end
    repeat
        local ____switch22 = entityType
        local ____cond22 = ____switch22 == EntityType.CHUB
        if ____cond22 then
            do
                return 3
            end
        end
        ____cond22 = ____cond22 or ____switch22 == EntityType.LOKI
        if ____cond22 then
            do
                return variant == LokiVariant.LOKII and 2 or 1
            end
        end
        ____cond22 = ____cond22 or ____switch22 == EntityType.GURGLING
        if ____cond22 then
            do
                return 2
            end
        end
        do
            do
                return DEFAULT_BOSS_MULTI_SEGMENTS
            end
        end
    until true
end
--- Helper function to spawn a boss.
-- 
-- Use this function instead of `spawnNPC` since it handles automatically spawning multiple segments
-- for multi-segment bosses.
-- 
-- By default, this will spawn Chub (and his variants) with 3 segments, Lokii with 2 copies,
-- Gurglings/Turdlings with 2 copies, and other multi-segment bosses with 4 segments. You can
-- customize this via the "numSegments" argument.
function ____exports.spawnBoss(self, entityType, variant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG, numSegments)
    if velocity == nil then
        velocity = VectorZero
    end
    local seed = isRNG(nil, seedOrRNG) and seedOrRNG:Next() or seedOrRNG
    local npc = spawnNPC(
        nil,
        entityType,
        variant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seed
    )
    if BOSSES_THAT_REQUIRE_MULTIPLE_SPAWNS:has(entityType) then
        local numBossSegments = getNumBossSegments(nil, entityType, variant, numSegments)
        local remainingSegmentsToSpawn = numBossSegments - 1
        ____repeat(
            nil,
            remainingSegmentsToSpawn,
            function()
                spawnNPC(
                    nil,
                    entityType,
                    variant,
                    subType,
                    positionOrGridIndex,
                    velocity,
                    spawner,
                    seed
                )
            end
        )
    end
    return npc
end
--- Helper function to spawn a boss with a specific seed.
-- 
-- For more information, see the documentation for the `spawnBoss` function.
function ____exports.spawnBossWithSeed(self, entityType, variant, subType, positionOrGridIndex, seedOrRNG, velocity, spawner, numSegments)
    if velocity == nil then
        velocity = VectorZero
    end
    local seed = isRNG(nil, seedOrRNG) and seedOrRNG:Next() or seedOrRNG
    return ____exports.spawnBoss(
        nil,
        entityType,
        variant,
        subType,
        positionOrGridIndex,
        velocity,
        spawner,
        seed,
        numSegments
    )
end
return ____exports
 end,
["objects.bossNamePNGFileNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
--- From the "nameimage" attribute in the "bossportraits.xml" file. Used when rendering the
-- "versusscreen.anm2" sprite.
____exports.BOSS_NAME_PNG_FILE_NAMES = {
    [BossID.MONSTRO] = "BossName_20.0_Monstro.png",
    [BossID.LARRY_JR] = "BossName_19.0_LarryJr.png",
    [BossID.CHUB] = "BossName_28.0_Chub.png",
    [BossID.GURDY] = "BossName_36.0_Gurdy.png",
    [BossID.MONSTRO_2] = "BossName_43.0_Monstro2.png",
    [BossID.MOM] = "BossName_45.0_Mom.png",
    [BossID.SCOLEX] = "BossName_62.1_Scolex.png",
    [BossID.MOMS_HEART] = "BossName_78.0_MomsHeart.png",
    [BossID.FAMINE] = "BossName_63.0_Famine.png",
    [BossID.PESTILENCE] = "BossName_64.0_Pestilence.png",
    [BossID.WAR] = "BossName_65.0_War.png",
    [BossID.DEATH] = "BossName_66.0_Death.png",
    [BossID.DUKE_OF_FLIES] = "BossName_67.0_DukeOfFlies.png",
    [BossID.PEEP] = "BossName_68.0_Peep.png",
    [BossID.LOKI] = "BossName_69.0_Loki.png",
    [BossID.BLASTOCYST] = "BossName_74.0_Blastocyst.png",
    [BossID.GEMINI] = "BossName_79.0_Gemini.png",
    [BossID.FISTULA] = "BossName_71.0_Fistula.png",
    [BossID.GISH] = "BossName_43.1_Gish.png",
    [BossID.STEVEN] = "BossName_79.1_Steven.png",
    [BossID.CHAD] = "BossName_28.1_CHAD.png",
    [BossID.HEADLESS_HORSEMAN] = "BossName_82.0_HeadlessHorseman.png",
    [BossID.FALLEN] = "BossName_81.0_TheFallen.png",
    [BossID.SATAN] = "BossName_84.0_Satan.png",
    [BossID.IT_LIVES] = "BossName_78.1_ItLives.png",
    [BossID.HOLLOW] = "BossName_19.1_TheHollow.png",
    [BossID.CARRION_QUEEN] = "BossName_28.2_CarrionQueen.png",
    [BossID.GURDY_JR] = "BossName_99.0_GurdyJr.png",
    [BossID.HUSK] = "BossName_67.1_TheHusk.png",
    [BossID.BLOAT] = "BossName_68.1_Bloat.png",
    [BossID.LOKII] = "BossName_69.1_Lokii.png",
    [BossID.BLIGHTED_OVUM] = "BossName_79.2_BlightedOvum.png",
    [BossID.TERATOMA] = "BossName_71.1_Teratoma.png",
    [BossID.WIDOW] = "BossName_100.0_Widow.png",
    [BossID.MASK_OF_INFAMY] = "BossName_97.0_MaskOfInfamy.png",
    [BossID.WRETCHED] = "BossName_100.1_TheWretched.png",
    [BossID.PIN] = "BossName_62.0_Pin.png",
    [BossID.CONQUEST] = "BossName_65.1_Conquest.png",
    [BossID.ISAAC] = "PlayerName_01_Isaac.png",
    [BossID.BLUE_BABY] = "BossName_102.1_BlueBaby.png",
    [BossID.DADDY_LONG_LEGS] = "BossName_101.0_DaddyLongLegs.png",
    [BossID.TRIACHNID] = "BossName_101.1_Triachnid.png",
    [BossID.HAUNT] = "BossName_260.0_TheHaunt.png",
    [BossID.DINGLE] = "BossName_261.0_Dingle.png",
    [BossID.MEGA_MAW] = "Portrait_262.0_MegaMaw.png",
    [BossID.GATE] = "BossName_263.0_MegaMaw2.png",
    [BossID.MEGA_FATTY] = "BossName_264.0_MegaFatty.png",
    [BossID.CAGE] = "BossName_265.0_Fatty2.png",
    [BossID.MAMA_GURDY] = "BossName_266.0_MamaGurdy.png",
    [BossID.DARK_ONE] = "BossName_267.0_DarkOne.png",
    [BossID.ADVERSARY] = "BossName_268.0_DarkOne2.png",
    [BossID.POLYCEPHALUS] = "BossName_269.0_Polycephalus.png",
    [BossID.MR_FRED] = "BossName_270.0_MegaFred.png",
    [BossID.LAMB] = "BossName_273.0_TheLamb.png",
    [BossID.MEGA_SATAN] = "BossName_274.0_MegaSatan.png",
    [BossID.GURGLING] = "BossName_276.0_Gurglings.png",
    [BossID.STAIN] = "BossName_401.0_TheStain.png",
    [BossID.BROWNIE] = "BossName_402.0_Brownie.png",
    [BossID.FORSAKEN] = "BossName_403.0_TheForsaken.png",
    [BossID.LITTLE_HORN] = "BossName_404.0_LittleHorn.png",
    [BossID.RAG_MAN] = "BossName_405.0_RagMan.png",
    [BossID.ULTRA_GREED] = "BossName_406.0_UltraGreed.png",
    [BossID.HUSH] = "BossName_407.0_Hush.png",
    [BossID.DANGLE] = "BossName_Dangle.png",
    [BossID.TURDLING] = "BossName_Turdlings.png",
    [BossID.FRAIL] = "BossName_TheFrail.png",
    [BossID.RAG_MEGA] = "BossName_RagMega.png",
    [BossID.SISTERS_VIS] = "BossName_SisterssVis.png",
    [BossID.BIG_HORN] = "BossName_BigHorn.png",
    [BossID.DELIRIUM] = "BossName_Delirium.png",
    [BossID.ULTRA_GREEDIER] = "BossName_406.0_UltraGreed.png",
    [BossID.MATRIARCH] = "BossName_Matriarch.png",
    [BossID.PILE] = "BossName_Polycephalus2.png",
    [BossID.REAP_CREEP] = "BossName_ReapCreep.png",
    [BossID.LIL_BLUB] = "BossName_Beelzeblub.png",
    [BossID.WORMWOOD] = "BossName_Wormwood.png",
    [BossID.RAINMAKER] = "BossName_Rainmaker.png",
    [BossID.VISAGE] = "BossName_Visage.png",
    [BossID.SIREN] = "BossName_Siren.png",
    [BossID.TUFF_TWINS] = "BossName_TuffTwins.png",
    [BossID.HERETIC] = "BossName_Heretic.png",
    [BossID.HORNFEL] = "BossName_Hornfel.png",
    [BossID.GREAT_GIDEON] = "BossName_Gideon.png",
    [BossID.BABY_PLUM] = "BossName_BabyPlum.png",
    [BossID.SCOURGE] = "BossName_Scourge.png",
    [BossID.CHIMERA] = "BossName_Chimera.png",
    [BossID.ROTGUT] = "BossName_Rotgut.png",
    [BossID.MOTHER] = "BossName_Mother.png",
    [BossID.MAUSOLEUM_MOM] = "BossName_45.0_Mom.png",
    [BossID.MAUSOLEUM_MOMS_HEART] = "BossName_78.0_MomsHeart.png",
    [BossID.MIN_MIN] = "BossName_MinMin.png",
    [BossID.CLOG] = "BossName_Clog.png",
    [BossID.SINGE] = "BossName_Singe.png",
    [BossID.BUMBINO] = "BossName_Bumbino.png",
    [BossID.COLOSTOMIA] = "BossName_Colostomia.png",
    [BossID.SHELL] = "BossName_Shell.png",
    [BossID.TURDLET] = "BossName_Turdlet.png",
    [BossID.RAGLICH] = "BossName_Raglich.png",
    [BossID.DOGMA] = "BossName_Dogma.png",
    [BossID.BEAST] = "BossName_TheBeast.png",
    [BossID.HORNY_BOYS] = "BossName_HornyBoys.png",
    [BossID.CLUTCH] = "BossName_Clutch.png"
}
return ____exports
 end,
["objects.bossPortraitPNGFileNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
--- From the "portrait" attribute in the "bossportraits.xml" file. Used when rendering the
-- "versusscreen.anm2" sprite.
____exports.BOSS_PORTRAIT_PNG_FILE_NAMES = {
    [BossID.MONSTRO] = "Portrait_20.0_Monstro.png",
    [BossID.LARRY_JR] = "Portrait_19.0_LarryJr.png",
    [BossID.CHUB] = "Portrait_28.0_Chub.png",
    [BossID.GURDY] = "Portrait_36.0_Gurdy.png",
    [BossID.MONSTRO_2] = "Portrait_43.0_Monstro2.png",
    [BossID.MOM] = "Portrait_45.0_Mom.png",
    [BossID.SCOLEX] = "Portrait_62.1_Scolex.png",
    [BossID.MOMS_HEART] = "Portrait_78.0_MomsHeart.png",
    [BossID.FAMINE] = "Portrait_63.0_Famine.png",
    [BossID.PESTILENCE] = "Portrait_64.0_Pestilence.png",
    [BossID.WAR] = "Portrait_65.0_War.png",
    [BossID.DEATH] = "Portrait_66.0_Death.png",
    [BossID.DUKE_OF_FLIES] = "Portrait_67.0_DukeOfFlies.png",
    [BossID.PEEP] = "Portrait_68.0_Peep.png",
    [BossID.LOKI] = "Portrait_69.0_Loki.png",
    [BossID.BLASTOCYST] = "Portrait_74.0_Blastocyst.png",
    [BossID.GEMINI] = "Portrait_79.0_Gemini.png",
    [BossID.FISTULA] = "Portrait_71.0_Fistula.png",
    [BossID.GISH] = "Portrait_43.1_Gish.png",
    [BossID.STEVEN] = "Portrait_79.1_Steven.png",
    [BossID.CHAD] = "Portrait_28.1_CHAD.png",
    [BossID.HEADLESS_HORSEMAN] = "Portrait_82.0_HeadlessHorseman.png",
    [BossID.FALLEN] = "Portrait_81.0_TheFallen.png",
    [BossID.SATAN] = "Portrait_84.0_Satan.png",
    [BossID.IT_LIVES] = "Portrait_78.1_ItLives.png",
    [BossID.HOLLOW] = "Portrait_19.1_TheHollow.png",
    [BossID.CARRION_QUEEN] = "Portrait_28.2_CarrionQueen.png",
    [BossID.GURDY_JR] = "Portrait_99.0_GurdyJr.png",
    [BossID.HUSK] = "Portrait_67.1_TheHusk.png",
    [BossID.BLOAT] = "Portrait_68.1_Bloat.png",
    [BossID.LOKII] = "Portrait_69.1_Lokii.png",
    [BossID.BLIGHTED_OVUM] = "Portrait_79.2_BlightedOvum.png",
    [BossID.TERATOMA] = "Portrait_71.1_Teratoma.png",
    [BossID.WIDOW] = "Portrait_100.0_Widow.png",
    [BossID.MASK_OF_INFAMY] = "Portrait_97.0_MaskOfInfamy.png",
    [BossID.WRETCHED] = "Portrait_100.1_TheWretched.png",
    [BossID.PIN] = "Portrait_62.0_Pin.png",
    [BossID.CONQUEST] = "Portrait_65.1_Conquest.png",
    [BossID.ISAAC] = "Portrait_102.0_Isaac.png",
    [BossID.BLUE_BABY] = "Portrait_102.1_BlueBaby.png",
    [BossID.DADDY_LONG_LEGS] = "Portrait_101.0_DaddyLongLegs.png",
    [BossID.TRIACHNID] = "Portrait_101.1_Triachnid.png",
    [BossID.HAUNT] = "Portrait_260.0_TheHaunt.png",
    [BossID.DINGLE] = "Portrait_261.0_Dingle.png",
    [BossID.MEGA_MAW] = "Portrait_262.0_MegaMaw.png",
    [BossID.GATE] = "Portrait_263.0_MegaMaw2.png",
    [BossID.MEGA_FATTY] = "Portrait_264.0_MegaFatty.png",
    [BossID.CAGE] = "Portrait_265.0_Fatty2.png",
    [BossID.MAMA_GURDY] = "Portrait_266.0_MamaGurdy.png",
    [BossID.DARK_ONE] = "Portrait_267.0_DarkOne.png",
    [BossID.ADVERSARY] = "Portrait_268.0_DarkOne2.png",
    [BossID.POLYCEPHALUS] = "Portrait_269.0_Polycephalus.png",
    [BossID.MR_FRED] = "Portrait_270.0_MegaFred.png",
    [BossID.LAMB] = "Portrait_273.0_TheLamb.png",
    [BossID.MEGA_SATAN] = "Portrait_274.0_MegaSatan.png",
    [BossID.GURGLING] = "Portrait_276.0_Gurglings.png",
    [BossID.STAIN] = "Portrait_401.0_TheStain.png",
    [BossID.BROWNIE] = "Portrait_402.0_Brownie.png",
    [BossID.FORSAKEN] = "Portrait_403.0_TheForsaken.png",
    [BossID.LITTLE_HORN] = "Portrait_404.0_LittleHorn.png",
    [BossID.RAG_MAN] = "Portrait_405.0_Ragman.png",
    [BossID.ULTRA_GREED] = "Portrait_406.0_UltraGreed.png",
    [BossID.HUSH] = "Portrait_407.0_Hush.png",
    [BossID.DANGLE] = "Portrait_Dangle.png",
    [BossID.TURDLING] = "Portrait_Turdlings.png",
    [BossID.FRAIL] = "Portrait_TheFrail.png",
    [BossID.RAG_MEGA] = "Portrait_RagMega.png",
    [BossID.SISTERS_VIS] = "Portrait_SistersVis.png",
    [BossID.BIG_HORN] = "Portrait_BigHorn.png",
    [BossID.DELIRIUM] = "Portrait_Delirium.png",
    [BossID.ULTRA_GREEDIER] = "Portrait_406.0_UltraGreed.png",
    [BossID.MATRIARCH] = "Portrait_Matriarch.png",
    [BossID.PILE] = "Portrait_269.1_Polycephalus2.png",
    [BossID.REAP_CREEP] = "Portrait_900.0_ReapCreep.png",
    [BossID.LIL_BLUB] = "Portrait_901.0_Beelzeblub.png",
    [BossID.WORMWOOD] = "Portrait_902.0_Wormwood.png",
    [BossID.RAINMAKER] = "Portrait_902.0_Rainmaker.png",
    [BossID.VISAGE] = "Portrait_903.0_Visage.png",
    [BossID.SIREN] = "Portrait_904.0_Siren.png",
    [BossID.TUFF_TWINS] = "Portrait_19.100_TuffTwins.png",
    [BossID.HERETIC] = "Portrait_905.0_Heretic.png",
    [BossID.HORNFEL] = "Portrait_906.0_Hornfel.png",
    [BossID.GREAT_GIDEON] = "Portrait_907.0_Gideon.png",
    [BossID.BABY_PLUM] = "Portrait_908.0_BabyPlum.png",
    [BossID.SCOURGE] = "Portrait_909.0_Scourge.png",
    [BossID.CHIMERA] = "Portrait_910.0_Chimera.png",
    [BossID.ROTGUT] = "Portrait_911.0_Rotgut.png",
    [BossID.MOTHER] = "Portrait_Mother.png",
    [BossID.MAUSOLEUM_MOM] = "Portrait_45.0_Mom.png",
    [BossID.MAUSOLEUM_MOMS_HEART] = "Portrait_78.0_MomsHeart.png",
    [BossID.MIN_MIN] = "Portrait_MinMin.png",
    [BossID.CLOG] = "Portrait_Clog.png",
    [BossID.SINGE] = "Portrait_Singe.png",
    [BossID.BUMBINO] = "Portrait_Bumbino.png",
    [BossID.COLOSTOMIA] = "Portrait_Colostomia.png",
    [BossID.SHELL] = "Portrait_Shell.png",
    [BossID.TURDLET] = "Portrait_Turdlet.png",
    [BossID.RAGLICH] = "Portrait_Raglich.png",
    [BossID.DOGMA] = "Portrait_Dogma.png",
    [BossID.BEAST] = "Portrait_The Beast.png",
    [BossID.HORNY_BOYS] = "Portrait_HornyBoys.png",
    [BossID.CLUTCH] = "Portrait_Clutch.png"
}
return ____exports
 end,
["objects.playerNamePNGFileNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
--- Used when rendering the "versusscreen.anm2" sprite.
____exports.PLAYER_NAME_PNG_FILE_NAMES = {
    [PlayerType.POSSESSOR] = nil,
    [PlayerType.ISAAC] = "playername_01_isaac.png",
    [PlayerType.MAGDALENE] = "playername_02_magdalene.png",
    [PlayerType.CAIN] = "playername_03_cain.png",
    [PlayerType.JUDAS] = "playername_04_judas.png",
    [PlayerType.BLUE_BABY] = "playername_06_bluebaby.png",
    [PlayerType.EVE] = "playername_05_eve.png",
    [PlayerType.SAMSON] = "playername_07_samson.png",
    [PlayerType.AZAZEL] = "playername_08_azazel.png",
    [PlayerType.LAZARUS] = "playername_10_lazarus.png",
    [PlayerType.EDEN] = "playername_09_eden.png",
    [PlayerType.LOST] = "playername_12_thelost.png",
    [PlayerType.LAZARUS_2] = "playername_10_lazarus.png",
    [PlayerType.DARK_JUDAS] = "playername_04_judas.png",
    [PlayerType.LILITH] = "playername_13_lilith.png",
    [PlayerType.KEEPER] = "playername_14_thekeeper.png",
    [PlayerType.APOLLYON] = "playername_15_apollyon.png",
    [PlayerType.FORGOTTEN] = "playername_16_theforgotten.png",
    [PlayerType.SOUL] = "playername_16_theforgotten.png",
    [PlayerType.BETHANY] = "playername_01x_bethany.png",
    [PlayerType.JACOB] = "playername_02x_jacob_esau.png",
    [PlayerType.ESAU] = "playername_02x_jacob_esau.png",
    [PlayerType.ISAAC_B] = "playername_01_isaac.png",
    [PlayerType.MAGDALENE_B] = "playername_02_magdalene.png",
    [PlayerType.CAIN_B] = "playername_03_cain.png",
    [PlayerType.JUDAS_B] = "playername_04_judas.png",
    [PlayerType.BLUE_BABY_B] = "playername_06_bluebaby.png",
    [PlayerType.EVE_B] = "playername_05_eve.png",
    [PlayerType.SAMSON_B] = "playername_07_samson.png",
    [PlayerType.AZAZEL_B] = "playername_08_azazel.png",
    [PlayerType.LAZARUS_B] = "playername_10_lazarus.png",
    [PlayerType.EDEN_B] = "playername_09_eden.png",
    [PlayerType.LOST_B] = "playername_12_thelost.png",
    [PlayerType.LILITH_B] = "playername_13_lilith.png",
    [PlayerType.KEEPER_B] = "playername_14_thekeeper.png",
    [PlayerType.APOLLYON_B] = "playername_15_apollyon.png",
    [PlayerType.FORGOTTEN_B] = "playername_16_theforgotten.png",
    [PlayerType.BETHANY_B] = "playername_01x_bethany.png",
    [PlayerType.JACOB_B] = "playername_02x_jacob.png",
    [PlayerType.LAZARUS_2_B] = "playername_10_lazarus.png",
    [PlayerType.JACOB_2_B] = "playername_02x_jacob.png",
    [PlayerType.SOUL_B] = "playername_16_theforgotten.png"
}
return ____exports
 end,
["objects.playerPortraitPNGFileNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
--- Used when rendering the "versusscreen.anm2" sprite.
____exports.PLAYER_PORTRAIT_PNG_FILE_NAMES = {
    [PlayerType.POSSESSOR] = nil,
    [PlayerType.ISAAC] = "playerportrait_isaac.png",
    [PlayerType.MAGDALENE] = "playerportrait_magdalene.png",
    [PlayerType.CAIN] = "playerportrait_cain.png",
    [PlayerType.JUDAS] = "playerportrait_judas.png",
    [PlayerType.BLUE_BABY] = "playerportrait_bluebaby.png",
    [PlayerType.EVE] = "playerportrait_eve.png",
    [PlayerType.SAMSON] = "playerportrait_samson.png",
    [PlayerType.AZAZEL] = "playerportrait_azazel.png",
    [PlayerType.LAZARUS] = "playerportrait_lazarus.png",
    [PlayerType.EDEN] = "playerportrait_eden.png",
    [PlayerType.LOST] = "playerportrait_thelost.png",
    [PlayerType.LAZARUS_2] = "playerportrait_lazarus2.png",
    [PlayerType.DARK_JUDAS] = "playerportrait_darkjudas.png",
    [PlayerType.LILITH] = "playerportrait_lilith.png",
    [PlayerType.KEEPER] = "playerportrait_keeper.png",
    [PlayerType.APOLLYON] = "playerportrait_apollyon.png",
    [PlayerType.FORGOTTEN] = "playerportrait_theforgotten.png",
    [PlayerType.SOUL] = "playerportrait_theforgotten.png",
    [PlayerType.BETHANY] = "playerportrait_bethany.png",
    [PlayerType.JACOB] = "playerportrait_jacob.png",
    [PlayerType.ESAU] = "playerportrait_jacob.png",
    [PlayerType.ISAAC_B] = "playerportrait_isaac_b.png",
    [PlayerType.MAGDALENE_B] = "playerportrait_magdalene_b.png",
    [PlayerType.CAIN_B] = "playerportrait_cain_b.png",
    [PlayerType.JUDAS_B] = "playerportrait_judas_b.png",
    [PlayerType.BLUE_BABY_B] = "playerportrait_bluebaby_b.png",
    [PlayerType.EVE_B] = "playerportrait_eve_b.png",
    [PlayerType.SAMSON_B] = "playerportrait_samson_b.png",
    [PlayerType.AZAZEL_B] = "playerportrait_azazel_b.png",
    [PlayerType.LAZARUS_B] = "playerportrait_lazarus_b.png",
    [PlayerType.EDEN_B] = "playerportrait_eden_b.png",
    [PlayerType.LOST_B] = "playerportrait_thelost_b.png",
    [PlayerType.LILITH_B] = "playerportrait_lilith_b.png",
    [PlayerType.KEEPER_B] = "playerportrait_keeper_b.png",
    [PlayerType.APOLLYON_B] = "playerportrait_apollyon_b.png",
    [PlayerType.FORGOTTEN_B] = "playerportrait_theforgotten_b.png",
    [PlayerType.BETHANY_B] = "playerportrait_bethany_b.png",
    [PlayerType.JACOB_B] = "playerportrait_jacob_b.png",
    [PlayerType.LAZARUS_2_B] = "playerportrait_lazarus_b_dead.png",
    [PlayerType.JACOB_2_B] = "playerportrait_jacob_b.png",
    [PlayerType.SOUL_B] = "playerportrait_theforgotten_b.png"
}
return ____exports
 end,
["functions.versusScreen"] = function(...) 
local ____exports = {}
local ____bossNamePNGFileNames = require("objects.bossNamePNGFileNames")
local BOSS_NAME_PNG_FILE_NAMES = ____bossNamePNGFileNames.BOSS_NAME_PNG_FILE_NAMES
local ____bossPortraitPNGFileNames = require("objects.bossPortraitPNGFileNames")
local BOSS_PORTRAIT_PNG_FILE_NAMES = ____bossPortraitPNGFileNames.BOSS_PORTRAIT_PNG_FILE_NAMES
local ____playerNamePNGFileNames = require("objects.playerNamePNGFileNames")
local PLAYER_NAME_PNG_FILE_NAMES = ____playerNamePNGFileNames.PLAYER_NAME_PNG_FILE_NAMES
local ____playerPortraitPNGFileNames = require("objects.playerPortraitPNGFileNames")
local PLAYER_PORTRAIT_PNG_FILE_NAMES = ____playerPortraitPNGFileNames.PLAYER_PORTRAIT_PNG_FILE_NAMES
--- Most of the PNG files related to the versus screen are located in this directory.
local PNG_PATH_PREFIX = "gfx/ui/boss"
--- Player portraits are not located in the same directory as everything else, since they are re-used
-- from the animation where the player travels to a new stage.
local PLAYER_PORTRAIT_PNG_PATH_PREFIX = "gfx/ui/stage"
--- Helper function to get the path to the name file that corresponds to the graphic shown on the
-- versus screen for the particular boss.
-- 
-- For example, the file path for `BossID.MONSTRO` is "gfx/ui/boss/bossname_20.0_monstro.png".
function ____exports.getBossNamePNGFilePath(self, bossID)
    local fileName = BOSS_NAME_PNG_FILE_NAMES[bossID]
    return (PNG_PATH_PREFIX .. "/") .. fileName
end
--- Helper function to get the path to the portrait file that corresponds to the graphic shown on the
-- versus screen for the particular boss.
-- 
-- For example, the file path for `BossID.MONSTRO` is "gfx/ui/boss/portrait_20.0_monstro.png".
function ____exports.getBossPortraitPNGFilePath(self, bossID)
    local fileName = BOSS_PORTRAIT_PNG_FILE_NAMES[bossID]
    return (PNG_PATH_PREFIX .. "/") .. fileName
end
--- Helper function to get the path to the name file that corresponds to the graphic shown on the
-- versus screen for the particular character.
-- 
-- For example, the file path for `PlayerType.ISAAC` is "gfx/ui/boss/playername_01_isaac.png".
function ____exports.getCharacterNamePNGFilePath(self, character)
    local fileName = PLAYER_NAME_PNG_FILE_NAMES[character]
    return (PNG_PATH_PREFIX .. "/") .. tostring(fileName)
end
--- Helper function to get the path to the portrait file that corresponds to the graphic shown on the
-- versus screen for the particular character.
-- 
-- For example, the file path for `PlayerType.ISAAC` is "gfx/ui/boss/playerportrait_isaac.png".
function ____exports.getCharacterPortraitPNGFilePath(self, character)
    local fileName = PLAYER_PORTRAIT_PNG_FILE_NAMES[character]
    return (PLAYER_PORTRAIT_PNG_PATH_PREFIX .. "/") .. tostring(fileName)
end
return ____exports
 end,
["objects.versusScreenBackgroundColors"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
local ____readOnly = require("functions.readOnly")
local newReadonlyColor = ____readOnly.newReadonlyColor
local BASEMENT_COLOR = newReadonlyColor(nil, 26 / 255, 14 / 255, 12 / 255)
local CAVES_COLOR = newReadonlyColor(nil, 18 / 255, 13 / 255, 8 / 255)
local DEPTHS_COLOR = newReadonlyColor(nil, 8 / 255, 8 / 255, 8 / 255)
local WOMB_COLOR = newReadonlyColor(nil, 27 / 255, 3 / 255, 3 / 255)
local SHEOL_COLOR = newReadonlyColor(nil, 6 / 255, 6 / 255, 6 / 255)
--- We arbitrarily specify a default color equal to that of Basement.
local DEFAULT_COLOR = BASEMENT_COLOR
--- These values are taken from StageAPI.
____exports.VERSUS_SCREEN_BACKGROUND_COLORS = {
    [StageID.SPECIAL_ROOMS] = DEFAULT_COLOR,
    [StageID.BASEMENT] = BASEMENT_COLOR,
    [StageID.CELLAR] = newReadonlyColor(nil, 26 / 255, 17 / 255, 13 / 255),
    [StageID.BURNING_BASEMENT] = newReadonlyColor(nil, 28 / 255, 12 / 255, 10 / 255),
    [StageID.CAVES] = CAVES_COLOR,
    [StageID.CATACOMBS] = newReadonlyColor(nil, 15 / 255, 10 / 255, 8 / 255),
    [StageID.FLOODED_CAVES] = newReadonlyColor(nil, 21 / 255, 28 / 255, 35 / 255),
    [StageID.DEPTHS] = DEPTHS_COLOR,
    [StageID.NECROPOLIS] = newReadonlyColor(nil, 10 / 255, 6 / 255, 6 / 255),
    [StageID.DANK_DEPTHS] = DEPTHS_COLOR,
    [StageID.WOMB] = WOMB_COLOR,
    [StageID.UTERO] = newReadonlyColor(nil, 22 / 255, 6 / 255, 5 / 255),
    [StageID.SCARRED_WOMB] = newReadonlyColor(nil, 42 / 255, 19 / 255, 10 / 255),
    [StageID.BLUE_WOMB] = newReadonlyColor(nil, 26 / 255, 32 / 255, 40 / 255),
    [StageID.SHEOL] = SHEOL_COLOR,
    [StageID.CATHEDRAL] = newReadonlyColor(nil, 6 / 255, 13 / 255, 17 / 255),
    [StageID.DARK_ROOM] = newReadonlyColor(nil, 9 / 255, 4 / 255, 3 / 255),
    [StageID.CHEST] = newReadonlyColor(nil, 15 / 255, 9 / 255, 6 / 255),
    [StageID.SPECIAL_ROOMS_GREED_MODE] = DEFAULT_COLOR,
    [StageID.BASEMENT_GREED_MODE] = BASEMENT_COLOR,
    [StageID.CAVES_GREED_MODE] = CAVES_COLOR,
    [StageID.DEPTHS_GREED_MODE] = DEPTHS_COLOR,
    [StageID.WOMB_GREED_MODE] = WOMB_COLOR,
    [StageID.SHEOL_GREED_MODE] = SHEOL_COLOR,
    [StageID.SHOP_GREED_MODE] = DEFAULT_COLOR,
    [StageID.ULTRA_GREED_GREED_MODE] = DEFAULT_COLOR,
    [StageID.VOID] = newReadonlyColor(nil, 0, 0, 0),
    [StageID.DOWNPOUR] = newReadonlyColor(nil, 29 / 255, 30 / 255, 32 / 255),
    [StageID.DROSS] = newReadonlyColor(nil, 35 / 255, 35 / 255, 29 / 255),
    [StageID.MINES] = newReadonlyColor(nil, 17 / 255, 15 / 255, 12 / 255),
    [StageID.ASHPIT] = newReadonlyColor(nil, 12 / 255, 10 / 255, 10 / 255),
    [StageID.MAUSOLEUM] = newReadonlyColor(nil, 14 / 255, 10 / 255, 14 / 255),
    [StageID.GEHENNA] = newReadonlyColor(nil, 15 / 255, 4 / 255, 4 / 255),
    [StageID.CORPSE] = newReadonlyColor(nil, 13 / 255, 14 / 255, 12 / 255),
    [StageID.MORTIS] = newReadonlyColor(nil, 13 / 255, 14 / 255, 12 / 255),
    [StageID.HOME] = DEFAULT_COLOR,
    [StageID.BACKWARDS] = DEFAULT_COLOR
}
return ____exports
 end,
["objects.versusScreenDirtSpotColors"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
local ____readOnly = require("functions.readOnly")
local newReadonlyColor = ____readOnly.newReadonlyColor
local BASEMENT_COLOR = newReadonlyColor(nil, 201 / 255, 114 / 255, 96 / 255)
local CAVES_COLOR = newReadonlyColor(nil, 167 / 255, 111 / 255, 75 / 255)
local DEPTHS_COLOR = newReadonlyColor(nil, 70 / 255, 70 / 255, 72 / 255)
local WOMB_COLOR = newReadonlyColor(nil, 241 / 255, 28 / 255, 28 / 255)
local SHEOL_COLOR = newReadonlyColor(nil, 60 / 255, 54 / 255, 54 / 255)
--- We arbitrarily specify a default color equal to that of Basement.
local DEFAULT_COLOR = BASEMENT_COLOR
--- These values are taken from StageAPI.
____exports.VERSUS_SCREEN_DIRT_SPOT_COLORS = {
    [StageID.SPECIAL_ROOMS] = DEFAULT_COLOR,
    [StageID.BASEMENT] = BASEMENT_COLOR,
    [StageID.CELLAR] = newReadonlyColor(nil, 229 / 255, 157 / 255, 111 / 255),
    [StageID.BURNING_BASEMENT] = newReadonlyColor(nil, 252 / 255, 108 / 255, 90 / 255),
    [StageID.CAVES] = CAVES_COLOR,
    [StageID.CATACOMBS] = newReadonlyColor(nil, 135 / 255, 90 / 255, 80 / 255),
    [StageID.FLOODED_CAVES] = newReadonlyColor(nil, 111 / 255, 147 / 255, 180 / 255),
    [StageID.DEPTHS] = DEPTHS_COLOR,
    [StageID.NECROPOLIS] = newReadonlyColor(nil, 88 / 255, 67 / 255, 54 / 255),
    [StageID.DANK_DEPTHS] = DEPTHS_COLOR,
    [StageID.WOMB] = WOMB_COLOR,
    [StageID.UTERO] = newReadonlyColor(nil, 199 / 255, 60 / 255, 48 / 255),
    [StageID.SCARRED_WOMB] = newReadonlyColor(nil, 247 / 255, 152 / 255, 88 / 255),
    [StageID.BLUE_WOMB] = newReadonlyColor(nil, 157 / 255, 209 / 255, 255 / 255),
    [StageID.SHEOL] = SHEOL_COLOR,
    [StageID.CATHEDRAL] = newReadonlyColor(nil, 44 / 255, 100 / 255, 111 / 255),
    [StageID.DARK_ROOM] = newReadonlyColor(nil, 80 / 255, 38 / 255, 20 / 255),
    [StageID.CHEST] = newReadonlyColor(nil, 175 / 255, 108 / 255, 72 / 255),
    [StageID.SPECIAL_ROOMS_GREED_MODE] = DEFAULT_COLOR,
    [StageID.BASEMENT_GREED_MODE] = BASEMENT_COLOR,
    [StageID.CAVES_GREED_MODE] = CAVES_COLOR,
    [StageID.DEPTHS_GREED_MODE] = DEPTHS_COLOR,
    [StageID.WOMB_GREED_MODE] = WOMB_COLOR,
    [StageID.SHEOL_GREED_MODE] = SHEOL_COLOR,
    [StageID.SHOP_GREED_MODE] = DEFAULT_COLOR,
    [StageID.ULTRA_GREED_GREED_MODE] = DEFAULT_COLOR,
    [StageID.VOID] = newReadonlyColor(nil, 70 / 255, 5 / 255, 5 / 255),
    [StageID.DOWNPOUR] = newReadonlyColor(nil, 149 / 255, 157 / 255, 167 / 255),
    [StageID.DROSS] = newReadonlyColor(nil, 179 / 255, 179 / 255, 143 / 255),
    [StageID.MINES] = newReadonlyColor(nil, 93 / 255, 85 / 255, 72 / 255),
    [StageID.ASHPIT] = newReadonlyColor(nil, 106 / 255, 102 / 255, 94 / 255),
    [StageID.MAUSOLEUM] = newReadonlyColor(nil, 70 / 255, 59 / 255, 72 / 255),
    [StageID.GEHENNA] = newReadonlyColor(nil, 59 / 255, 41 / 255, 41 / 255),
    [StageID.CORPSE] = newReadonlyColor(nil, 124 / 255, 134 / 255, 111 / 255),
    [StageID.MORTIS] = newReadonlyColor(nil, 124 / 255, 134 / 255, 111 / 255),
    [StageID.HOME] = DEFAULT_COLOR,
    [StageID.BACKWARDS] = DEFAULT_COLOR
}
return ____exports
 end,
["classes.features.other.customStages.versusScreen"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySome = ____lualib.__TS__ArraySome
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local ____exports = {}
local willVanillaVersusScreenPlay, getPlayerPNGPaths, getBossPNGPaths, getBossPNGPathsCustom
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local SoundEffect = ____isaac_2Dtypescript_2Ddefinitions.SoundEffect
local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local sfxManager = ____cachedClasses.sfxManager
local ____array = require("functions.array")
local arrayRemove = ____array.arrayRemove
local ____bosses = require("functions.bosses")
local getBosses = ____bosses.getBosses
local ____roomData = require("functions.roomData")
local getRoomSubType = ____roomData.getRoomSubType
local ____string = require("functions.string")
local removeCharactersBefore = ____string.removeCharactersBefore
local ____ui = require("functions.ui")
local getScreenCenterPos = ____ui.getScreenCenterPos
local ____utils = require("functions.utils")
local eRange = ____utils.eRange
local ____versusScreen = require("functions.versusScreen")
local getBossNamePNGFilePath = ____versusScreen.getBossNamePNGFilePath
local getBossPortraitPNGFilePath = ____versusScreen.getBossPortraitPNGFilePath
local getCharacterNamePNGFilePath = ____versusScreen.getCharacterNamePNGFilePath
local getCharacterPortraitPNGFilePath = ____versusScreen.getCharacterPortraitPNGFilePath
local ____versusScreenBackgroundColors = require("objects.versusScreenBackgroundColors")
local VERSUS_SCREEN_BACKGROUND_COLORS = ____versusScreenBackgroundColors.VERSUS_SCREEN_BACKGROUND_COLORS
local ____versusScreenDirtSpotColors = require("objects.versusScreenDirtSpotColors")
local VERSUS_SCREEN_DIRT_SPOT_COLORS = ____versusScreenDirtSpotColors.VERSUS_SCREEN_DIRT_SPOT_COLORS
local ____constants = require("classes.features.other.customStages.constants")
local CUSTOM_FLOOR_STAGE = ____constants.CUSTOM_FLOOR_STAGE
local CUSTOM_FLOOR_STAGE_TYPE = ____constants.CUSTOM_FLOOR_STAGE_TYPE
local CUSTOM_STAGE_FEATURE_NAME = ____constants.CUSTOM_STAGE_FEATURE_NAME
local DEFAULT_BASE_STAGE = ____constants.DEFAULT_BASE_STAGE
local DEFAULT_BASE_STAGE_TYPE = ____constants.DEFAULT_BASE_STAGE_TYPE
local ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = ____constants.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH
local ____v = require("classes.features.other.customStages.v")
local v = ____v.v
function willVanillaVersusScreenPlay(self)
    local bosses = getBosses(nil)
    return __TS__ArraySome(
        bosses,
        function(____, boss) return boss:GetBossID() ~= 0 end
    )
end
function getPlayerPNGPaths(self)
    local player = Isaac.GetPlayer()
    local character = player:GetPlayerType()
    if character == PlayerType.POSSESSOR then
        error("Failed to get the player PNG paths since they are a possessor.")
    end
    local namePNGPath = getCharacterNamePNGFilePath(nil, character)
    local portraitPNGPath = getCharacterPortraitPNGFilePath(nil, character)
    return {namePNGPath = namePNGPath, portraitPNGPath = portraitPNGPath}
end
function getBossPNGPaths(self, customStage)
    local paths = getBossPNGPathsCustom(nil, customStage)
    if paths ~= nil then
        return paths
    end
    local bosses = getBosses(nil)
    local firstBoss = bosses[1]
    local bossID = firstBoss == nil and 0 or firstBoss:GetBossID()
    if bossID == 0 then
        local questionMarkPath = getBossNamePNGFilePath(nil, BossID.BLUE_BABY)
        local namePNGPath = questionMarkPath
        local portraitPNGPath = questionMarkPath
        return {namePNGPath = namePNGPath, portraitPNGPath = portraitPNGPath}
    end
    local namePNGPath = getBossNamePNGFilePath(nil, bossID)
    local portraitPNGPath = getBossPortraitPNGFilePath(nil, bossID)
    return {namePNGPath = namePNGPath, portraitPNGPath = portraitPNGPath}
end
function getBossPNGPathsCustom(self, customStage)
    if customStage.bossPool == nil then
        return nil
    end
    local roomSubType = getRoomSubType(nil)
    local matchingBossEntry = __TS__ArrayFind(
        customStage.bossPool,
        function(____, bossEntry) return bossEntry.subType == roomSubType end
    )
    if matchingBossEntry == nil then
        return nil
    end
    return matchingBossEntry.versusScreen
end
local DEFAULT_STAGE_ID = StageID.BASEMENT
local VERSUS_SCREEN_ANIMATION_NAME = "Scene"
--- The layers range from 0 to 13.
local NUM_VERSUS_SCREEN_ANM2_LAYERS = 14
--- Corresponds to "resources/gfx/ui/boss/versusscreen.anm2".
local VersusScreenLayer = {}
VersusScreenLayer.BACKGROUND = 0
VersusScreenLayer[VersusScreenLayer.BACKGROUND] = "BACKGROUND"
VersusScreenLayer.FRAME = 1
VersusScreenLayer[VersusScreenLayer.FRAME] = "FRAME"
VersusScreenLayer.BOSS_SPOT = 2
VersusScreenLayer[VersusScreenLayer.BOSS_SPOT] = "BOSS_SPOT"
VersusScreenLayer.PLAYER_SPOT = 3
VersusScreenLayer[VersusScreenLayer.PLAYER_SPOT] = "PLAYER_SPOT"
VersusScreenLayer.BOSS_PORTRAIT = 4
VersusScreenLayer[VersusScreenLayer.BOSS_PORTRAIT] = "BOSS_PORTRAIT"
VersusScreenLayer.PLAYER_PORTRAIT = 5
VersusScreenLayer[VersusScreenLayer.PLAYER_PORTRAIT] = "PLAYER_PORTRAIT"
VersusScreenLayer.PLAYER_NAME = 6
VersusScreenLayer[VersusScreenLayer.PLAYER_NAME] = "PLAYER_NAME"
VersusScreenLayer.BOSS_NAME = 7
VersusScreenLayer[VersusScreenLayer.BOSS_NAME] = "BOSS_NAME"
VersusScreenLayer.VS_TEXT = 8
VersusScreenLayer[VersusScreenLayer.VS_TEXT] = "VS_TEXT"
VersusScreenLayer.BOSS_DOUBLE = 9
VersusScreenLayer[VersusScreenLayer.BOSS_DOUBLE] = "BOSS_DOUBLE"
VersusScreenLayer.DT_TEXT = 10
VersusScreenLayer[VersusScreenLayer.DT_TEXT] = "DT_TEXT"
VersusScreenLayer.OVERLAY = 11
VersusScreenLayer[VersusScreenLayer.OVERLAY] = "OVERLAY"
VersusScreenLayer.PLAYER_PORTRAIT_ALT = 12
VersusScreenLayer[VersusScreenLayer.PLAYER_PORTRAIT_ALT] = "PLAYER_PORTRAIT_ALT"
VersusScreenLayer.BOSS_PORTRAIT_GROUND = 13
VersusScreenLayer[VersusScreenLayer.BOSS_PORTRAIT_GROUND] = "BOSS_PORTRAIT_GROUND"
VersusScreenLayer.BOSS_PORTRAIT_2_GROUND = 14
VersusScreenLayer[VersusScreenLayer.BOSS_PORTRAIT_2_GROUND] = "BOSS_PORTRAIT_2_GROUND"
--- These are the non-special layers that we will render last.
local OTHER_ANM2_LAYERS = arrayRemove(
    nil,
    eRange(nil, NUM_VERSUS_SCREEN_ANM2_LAYERS),
    VersusScreenLayer.BACKGROUND,
    VersusScreenLayer.BOSS_SPOT,
    VersusScreenLayer.PLAYER_SPOT,
    VersusScreenLayer.OVERLAY,
    VersusScreenLayer.PLAYER_PORTRAIT_ALT
)
local VANILLA_VERSUS_PLAYBACK_SPEED = 0.5
--- We lazy load the sprite when first needed.
local versusScreenSprite = Sprite()
--- We lazy load the sprite when first needed.
-- 
-- Unfortunately, we must split the background layer into an entirely different sprite so that we
-- can color it with the `Color` field.
local versusScreenBackgroundSprite = Sprite()
--- We lazy load the sprite when first needed.
-- 
-- Unfortunately, we must split the dirt layer into an entirely different sprite so that we can
-- color it with the `Color` field.
local versusScreenDirtSpotSprite = Sprite()
function ____exports.playVersusScreenAnimation(self, customStage, disableAllSound, pause, runInNFrames)
    local room = game:GetRoom()
    local roomType = room:GetType()
    local roomCleared = room:IsClear()
    local hud = game:GetHUD()
    if roomType ~= RoomType.BOSS then
        return
    end
    if roomCleared then
        return
    end
    if willVanillaVersusScreenPlay(nil) then
        local level = game:GetLevel()
        level:SetStage(DEFAULT_BASE_STAGE, DEFAULT_BASE_STAGE_TYPE)
        runInNFrames:runNextGameFrame(function()
            local futureLevel = game:GetLevel()
            futureLevel:SetStage(CUSTOM_FLOOR_STAGE, CUSTOM_FLOOR_STAGE_TYPE)
        end)
        return
    end
    v.run.showingBossVersusScreen = true
    pause:pause()
    hud:SetVisible(false)
    disableAllSound:disableAllSound(CUSTOM_STAGE_FEATURE_NAME)
    if not versusScreenSprite:IsLoaded() then
        versusScreenSprite:Load("gfx/ui/boss/versusscreen.anm2", false)
        versusScreenSprite:ReplaceSpritesheet(VersusScreenLayer.OVERLAY, ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/overlay.png")
    end
    do
        local ____getPlayerPNGPaths_result_0 = getPlayerPNGPaths(nil)
        local namePNGPath = ____getPlayerPNGPaths_result_0.namePNGPath
        local portraitPNGPath = ____getPlayerPNGPaths_result_0.portraitPNGPath
        versusScreenSprite:ReplaceSpritesheet(VersusScreenLayer.PLAYER_NAME, namePNGPath)
        versusScreenSprite:ReplaceSpritesheet(VersusScreenLayer.PLAYER_PORTRAIT, portraitPNGPath)
    end
    do
        local ____getBossPNGPaths_result_1 = getBossPNGPaths(nil, customStage)
        local namePNGPath = ____getBossPNGPaths_result_1.namePNGPath
        local portraitPNGPath = ____getBossPNGPaths_result_1.portraitPNGPath
        local trimmedNamePNGPath = removeCharactersBefore(nil, namePNGPath, "gfx/")
        versusScreenSprite:ReplaceSpritesheet(VersusScreenLayer.BOSS_NAME, trimmedNamePNGPath)
        local trimmedPortraitPNGPath = removeCharactersBefore(nil, portraitPNGPath, "gfx/")
        versusScreenSprite:ReplaceSpritesheet(VersusScreenLayer.BOSS_PORTRAIT, trimmedPortraitPNGPath)
    end
    versusScreenSprite:LoadGraphics()
    if not versusScreenBackgroundSprite:IsLoaded() then
        versusScreenBackgroundSprite:Load("gfx/ui/boss/versusscreen.anm2", true)
    end
    local backgroundColor = VERSUS_SCREEN_BACKGROUND_COLORS[DEFAULT_STAGE_ID]
    local ____opt_2 = customStage.versusScreen
    if (____opt_2 and ____opt_2.backgroundColor) ~= nil then
        local ____customStage_versusScreen_backgroundColor_4 = customStage.versusScreen.backgroundColor
        local r = ____customStage_versusScreen_backgroundColor_4.r
        local g = ____customStage_versusScreen_backgroundColor_4.g
        local b = ____customStage_versusScreen_backgroundColor_4.b
        local a = ____customStage_versusScreen_backgroundColor_4.a
        backgroundColor = Color(r, g, b, a)
    end
    versusScreenBackgroundSprite.Color = backgroundColor
    if not versusScreenDirtSpotSprite:IsLoaded() then
        versusScreenDirtSpotSprite:Load("gfx/ui/boss/versusscreen.anm2", true)
    end
    local dirtSpotColor = VERSUS_SCREEN_DIRT_SPOT_COLORS[DEFAULT_STAGE_ID]
    local ____opt_5 = customStage.versusScreen
    if (____opt_5 and ____opt_5.dirtSpotColor) ~= nil then
        local ____customStage_versusScreen_dirtSpotColor_7 = customStage.versusScreen.dirtSpotColor
        local r = ____customStage_versusScreen_dirtSpotColor_7.r
        local g = ____customStage_versusScreen_dirtSpotColor_7.g
        local b = ____customStage_versusScreen_dirtSpotColor_7.b
        dirtSpotColor = Color(r, g, b)
    end
    versusScreenDirtSpotSprite.Color = dirtSpotColor
    for ____, sprite in ipairs({versusScreenBackgroundSprite, versusScreenDirtSpotSprite, versusScreenSprite}) do
        sprite:Play(VERSUS_SCREEN_ANIMATION_NAME, true)
        sprite.PlaybackSpeed = VANILLA_VERSUS_PLAYBACK_SPEED
    end
end
local function finishVersusScreenAnimation(self, pause, disableAllSound)
    local hud = game:GetHUD()
    v.run.showingBossVersusScreen = false
    pause:unpause()
    hud:SetVisible(true)
    disableAllSound:enableAllSound(CUSTOM_STAGE_FEATURE_NAME)
    sfxManager:Play(SoundEffect.CASTLE_PORTCULLIS)
end
function ____exports.versusScreenPostRender(self, pause, disableAllSound)
    if not v.run.showingBossVersusScreen then
        return
    end
    if versusScreenSprite:IsFinished(VERSUS_SCREEN_ANIMATION_NAME) then
        finishVersusScreenAnimation(nil, pause, disableAllSound)
        return
    end
    local position = getScreenCenterPos(nil)
    versusScreenBackgroundSprite:RenderLayer(VersusScreenLayer.BACKGROUND, position)
    versusScreenBackgroundSprite:Update()
    versusScreenSprite:RenderLayer(VersusScreenLayer.OVERLAY, position)
    versusScreenDirtSpotSprite:RenderLayer(VersusScreenLayer.BOSS_SPOT, position)
    versusScreenDirtSpotSprite:RenderLayer(VersusScreenLayer.PLAYER_SPOT, position)
    versusScreenDirtSpotSprite:Update()
    for ____, layerID in ipairs(OTHER_ANM2_LAYERS) do
        versusScreenSprite:RenderLayer(layerID, position)
    end
    versusScreenSprite:Update()
end
return ____exports
 end,
["classes.features.other.CustomStages"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local getRoomTypeMap
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local LevelCurse = ____isaac_2Dtypescript_2Ddefinitions.LevelCurse
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local musicManager = ____cachedClasses.musicManager
local metadataJSON = require("customStageMetadata")
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____array = require("functions.array")
local isArray = ____array.isArray
local ____doors = require("functions.doors")
local doorSlotsToDoorSlotFlags = ____doors.doorSlotsToDoorSlotFlags
local getDoorSlotsForRoomShape = ____doors.getDoorSlotsForRoomShape
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local removeFlag = ____flag.removeFlag
local ____log = require("functions.log")
local logError = ____log.logError
local ____rng = require("functions.rng")
local newRNG = ____rng.newRNG
local ____rockAlt = require("functions.rockAlt")
local removeUrnRewards = ____rockAlt.removeUrnRewards
local ____rooms = require("functions.rooms")
local getRoomDataForTypeVariant = ____rooms.getRoomDataForTypeVariant
local getRoomsInsideGrid = ____rooms.getRoomsInsideGrid
local inRoomType = ____rooms.inRoomType
local ____sound = require("functions.sound")
local getMusicForStage = ____sound.getMusicForStage
local ____stage = require("functions.stage")
local setStage = ____stage.setStage
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____backdrop = require("classes.features.other.customStages.backdrop")
local setCustomStageBackdrop = ____backdrop.setCustomStageBackdrop
local ____constants = require("classes.features.other.customStages.constants")
local CUSTOM_FLOOR_STAGE = ____constants.CUSTOM_FLOOR_STAGE
local CUSTOM_FLOOR_STAGE_TYPE = ____constants.CUSTOM_FLOOR_STAGE_TYPE
local DEFAULT_BASE_STAGE = ____constants.DEFAULT_BASE_STAGE
local DEFAULT_BASE_STAGE_TYPE = ____constants.DEFAULT_BASE_STAGE_TYPE
local ____gridEntities = require("classes.features.other.customStages.gridEntities")
local convertVanillaTrapdoors = ____gridEntities.convertVanillaTrapdoors
local setCustomDecorationGraphics = ____gridEntities.setCustomDecorationGraphics
local setCustomDoorGraphics = ____gridEntities.setCustomDoorGraphics
local setCustomPitGraphics = ____gridEntities.setCustomPitGraphics
local setCustomRockGraphics = ____gridEntities.setCustomRockGraphics
local ____shadows = require("classes.features.other.customStages.shadows")
local setShadows = ____shadows.setShadows
local ____streakText = require("classes.features.other.customStages.streakText")
local streakTextGetShaderParams = ____streakText.streakTextGetShaderParams
local streakTextPostRender = ____streakText.streakTextPostRender
local topStreakTextStart = ____streakText.topStreakTextStart
local ____utils = require("classes.features.other.customStages.utils")
local getRandomBossRoomFromPool = ____utils.getRandomBossRoomFromPool
local getRandomCustomStageRoom = ____utils.getRandomCustomStageRoom
local ____v = require("classes.features.other.customStages.v")
local v = ____v.v
local ____versusScreen = require("classes.features.other.customStages.versusScreen")
local playVersusScreenAnimation = ____versusScreen.playVersusScreenAnimation
local versusScreenPostRender = ____versusScreen.versusScreenPostRender
function getRoomTypeMap(self, customStageLua)
    local roomTypeMap = __TS__New(Map)
    for ____, roomMetadata in ipairs(customStageLua.roomsMetadata) do
        local roomType = roomMetadata.type
        local roomShapeMap = roomTypeMap:get(roomType)
        if roomShapeMap == nil then
            roomShapeMap = __TS__New(Map)
            roomTypeMap:set(roomType, roomShapeMap)
        end
        local roomShape = roomMetadata.shape
        local roomDoorSlotFlagMap = roomShapeMap:get(roomShape)
        if roomDoorSlotFlagMap == nil then
            roomDoorSlotFlagMap = __TS__New(Map)
            roomShapeMap:set(roomShape, roomDoorSlotFlagMap)
        end
        local doorSlotFlags = roomMetadata.doorSlotFlags
        local rooms = roomDoorSlotFlagMap:get(doorSlotFlags)
        if rooms == nil then
            rooms = {}
            roomDoorSlotFlagMap:set(doorSlotFlags, rooms)
        end
        rooms[#rooms + 1] = roomMetadata
    end
    return roomTypeMap
end
--- 60 does not work correctly (the music kicking in from stage -1 will mute it), so we use 70 to be
-- safe.
local MUSIC_DELAY_RENDER_FRAMES = 70
____exports.CustomStages = __TS__Class()
local CustomStages = ____exports.CustomStages
CustomStages.name = "CustomStages"
__TS__ClassExtends(CustomStages, Feature)
function CustomStages.prototype.____constructor(self, customGridEntities, customTrapdoors, disableAllSound, gameReorderedCallbacks, pause, runInNFrames)
    Feature.prototype.____constructor(self)
    self.v = v
    self.customStagesMap = __TS__New(Map)
    self.customStageCachedRoomData = __TS__New(Map)
    self.usingRedKey = false
    self.goToCustomStage = function(____, destinationName, destinationStage, _destinationStageType)
        assertDefined(nil, destinationName, "Failed to go to a custom stage since the custom trapdoors feature did not pass a destination name to the logic function.")
        local firstFloor = destinationStage == LevelStage.BASEMENT_1
        self:setCustomStage(destinationName, firstFloor)
    end
    self.postRender = function()
        local customStage = v.run.currentCustomStage
        if customStage == nil then
            return
        end
        streakTextPostRender(nil)
        versusScreenPostRender(nil, self.pause, self.disableAllSound)
        if customStage.music ~= nil then
            local currentMusic = musicManager:GetCurrentMusicID()
            local music = Isaac.GetMusicIdByName(customStage.music)
            if currentMusic == music then
                musicManager:Resume()
                musicManager:UpdateVolume()
            end
        end
    end
    self.postUseItemRedKey = function()
        local customStage = v.run.currentCustomStage
        if customStage == nil then
            return nil
        end
        if not self.usingRedKey then
            return nil
        end
        self.usingRedKey = false
        local level = game:GetLevel()
        level:SetStage(CUSTOM_FLOOR_STAGE, CUSTOM_FLOOR_STAGE_TYPE)
        return nil
    end
    self.postCurseEval = function(____, curses)
        local customStage = v.run.currentCustomStage
        if customStage == nil then
            return nil
        end
        if hasFlag(nil, curses, LevelCurse.LABYRINTH) then
            return removeFlag(nil, curses, LevelCurse.LABYRINTH)
        end
        return nil
    end
    self.getShaderParams = function(____, shaderName)
        local customStage = v.run.currentCustomStage
        if customStage == nil then
            return nil
        end
        streakTextGetShaderParams(nil, customStage, shaderName)
        return nil
    end
    self.preUseItemRedKey = function()
        local customStage = v.run.currentCustomStage
        if customStage == nil then
            return nil
        end
        self.usingRedKey = true
        local level = game:GetLevel()
        local stage = customStage.baseStage or DEFAULT_BASE_STAGE
        local stageType = customStage.baseStageType or DEFAULT_BASE_STAGE_TYPE
        level:SetStage(stage, stageType)
        return nil
    end
    self.postGridEntityBrokenRockAlt = function(____, gridEntity)
        local customStage = v.run.currentCustomStage
        if customStage == nil then
            return
        end
        if customStage.rocksPNGPath == nil then
            return
        end
        removeUrnRewards(nil, gridEntity)
    end
    self.postGridEntityInit = function(____, gridEntity)
        local customStage = v.run.currentCustomStage
        if customStage == nil then
            return
        end
        if self.customGridEntities:isCustomGridEntity(gridEntity) then
            return
        end
        setCustomDecorationGraphics(nil, customStage, gridEntity)
        setCustomRockGraphics(nil, customStage, gridEntity)
        setCustomPitGraphics(nil, customStage, gridEntity)
        setCustomDoorGraphics(nil, customStage, gridEntity)
        convertVanillaTrapdoors(
            nil,
            customStage,
            gridEntity,
            v.run.firstFloor,
            self.customTrapdoors
        )
    end
    self.postNewRoomReordered = function()
        local customStage = v.run.currentCustomStage
        if customStage == nil then
            return
        end
        setCustomStageBackdrop(nil, customStage)
        setShadows(nil, customStage)
        playVersusScreenAnimation(
            nil,
            customStage,
            self.disableAllSound,
            self.pause,
            self.runInNFrames
        )
        if customStage.music ~= nil and inRoomType(nil, RoomType.DEFAULT) then
            local music = Isaac.GetMusicIdByName(customStage.music)
            local currentMusic = musicManager:GetCurrentMusicID()
            if currentMusic ~= music then
                musicManager:Fadein(music)
            end
        end
    end
    self.featuresUsed = {
        ISCFeature.CUSTOM_GRID_ENTITIES,
        ISCFeature.CUSTOM_TRAPDOORS,
        ISCFeature.DISABLE_ALL_SOUND,
        ISCFeature.GAME_REORDERED_CALLBACKS,
        ISCFeature.PAUSE,
        ISCFeature.RUN_IN_N_FRAMES
    }
    self.callbacksUsed = {
        {ModCallback.POST_RENDER, self.postRender},
        {ModCallback.POST_USE_ITEM, self.postUseItemRedKey, {CollectibleType.RED_KEY}},
        {ModCallback.POST_CURSE_EVAL, self.postCurseEval},
        {ModCallback.GET_SHADER_PARAMS, self.getShaderParams},
        {ModCallback.PRE_USE_ITEM, self.preUseItemRedKey, {CollectibleType.RED_KEY}}
    }
    self.customCallbacksUsed = {{ModCallbackCustom.POST_GRID_ENTITY_BROKEN, self.postGridEntityBrokenRockAlt, {GridEntityType.ROCK_ALT}}, {ModCallbackCustom.POST_GRID_ENTITY_INIT, self.postGridEntityInit}, {ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}}
    self.customGridEntities = customGridEntities
    self.customTrapdoors = customTrapdoors
    self.disableAllSound = disableAllSound
    self.gameReorderedCallbacks = gameReorderedCallbacks
    self.pause = pause
    self.runInNFrames = runInNFrames
    self:initCustomStageMetadata()
end
function CustomStages.prototype.initCustomStageMetadata(self)
    if not isArray(nil, metadataJSON) then
        error("The IsaacScript standard library attempted to read the custom stage metadata from the \"customStageMetadata.lua\" file, but it was not an array.")
    end
    local customStagesLua = metadataJSON
    for ____, customStageLua in ipairs(customStagesLua) do
        self:initRoomTypeMap(customStageLua)
        self:initCustomTrapdoorDestination(customStageLua)
    end
end
function CustomStages.prototype.initRoomTypeMap(self, customStageLua)
    local roomTypeMap = getRoomTypeMap(nil, customStageLua)
    local customStage = __TS__ObjectAssign({}, customStageLua, {roomTypeMap = roomTypeMap})
    self.customStagesMap:set(customStage.name, customStage)
end
function CustomStages.prototype.initCustomTrapdoorDestination(self, customStageLua)
    self.customTrapdoors:registerCustomTrapdoorDestination(customStageLua.name, self.goToCustomStage)
end
function CustomStages.prototype.setStageRoomsData(self, customStage, rng, verbose)
    local level = game:GetLevel()
    local startingRoomGridIndex = level:GetStartingRoomIndex()
    for ____, room in ipairs(getRoomsInsideGrid(nil)) do
        do
            if room.SafeGridIndex == startingRoomGridIndex then
                goto __continue35
            end
            if room.Data == nil then
                goto __continue35
            end
            local roomType = room.Data.Type
            local roomShapeMap = customStage.roomTypeMap:get(roomType)
            if roomShapeMap == nil then
                if roomType == RoomType.DEFAULT then
                    logError((((("Failed to find any custom rooms for RoomType." .. RoomType[roomType]) .. " (") .. tostring(roomType)) .. ") for custom stage: ") .. customStage.name)
                end
                goto __continue35
            end
            local roomShape = room.Data.Shape
            local roomDoorSlotFlagMap = roomShapeMap:get(roomShape)
            if roomDoorSlotFlagMap == nil then
                logError((((((((("Failed to find any custom rooms for RoomType." .. RoomType[roomType]) .. " (") .. tostring(roomType)) .. ") + RoomShape.") .. RoomShape[roomShape]) .. " (") .. tostring(roomShape)) .. ") for custom stage: ") .. customStage.name)
                goto __continue35
            end
            local doorSlotFlags = room.Data.Doors
            local roomsMetadata = roomDoorSlotFlagMap:get(doorSlotFlags)
            if roomsMetadata == nil then
                local allDoorSlots = getDoorSlotsForRoomShape(nil, roomShape)
                local allDoorSlotFlags = doorSlotsToDoorSlotFlags(nil, allDoorSlots)
                roomsMetadata = roomDoorSlotFlagMap:get(allDoorSlotFlags)
                if roomsMetadata == nil then
                    logError((((((((("Failed to find any custom rooms for RoomType." .. RoomType[roomType]) .. " (") .. tostring(roomType)) .. ") + RoomShape.") .. RoomShape[roomShape]) .. " (") .. tostring(roomShape)) .. ") + all doors enabled for custom stage: ") .. customStage.name)
                    goto __continue35
                end
            end
            local randomRoom
            if roomType == RoomType.BOSS then
                if customStage.bossPool == nil then
                    goto __continue35
                end
                randomRoom = getRandomBossRoomFromPool(
                    nil,
                    roomsMetadata,
                    customStage.bossPool,
                    rng,
                    verbose
                )
            else
                randomRoom = getRandomCustomStageRoom(nil, roomsMetadata, rng, verbose)
            end
            local newRoomData = self.customStageCachedRoomData:get(randomRoom.variant)
            if newRoomData == nil then
                newRoomData = getRoomDataForTypeVariant(
                    nil,
                    roomType,
                    randomRoom.variant,
                    false,
                    true
                )
                if newRoomData == nil then
                    logError((("Failed to get the room data for room variant " .. tostring(randomRoom.variant)) .. " for custom stage: ") .. customStage.name)
                    goto __continue35
                end
                self.customStageCachedRoomData:set(randomRoom.variant, newRoomData)
            end
            room.Data = newRoomData
        end
        ::__continue35::
    end
end
function CustomStages.prototype.setCustomStage(self, name, firstFloor, streakText, verbose)
    if firstFloor == nil then
        firstFloor = true
    end
    if streakText == nil then
        streakText = true
    end
    if verbose == nil then
        verbose = false
    end
    local customStage = self.customStagesMap:get(name)
    assertDefined(nil, customStage, ("Failed to set the custom stage of \"" .. name) .. "\" because it was not found in the custom stages map. (Try restarting IsaacScript / recompiling the mod / restarting the game, and try again. If that does not work, you probably forgot to define it in your \"tsconfig.json\" file.) See the website for more details on how to set up custom stages.")
    local level = game:GetLevel()
    local stage = level:GetStage()
    local seeds = game:GetSeeds()
    local startSeed = seeds:GetStartSeed()
    local rng = newRNG(nil, startSeed)
    v.run.currentCustomStage = customStage
    v.run.firstFloor = firstFloor
    if stage == CUSTOM_FLOOR_STAGE then
        level:SetStage(LevelStage.BASEMENT_1, StageType.ORIGINAL)
    end
    local baseStage = customStage.baseStage == nil and DEFAULT_BASE_STAGE or customStage.baseStage
    if not firstFloor then
        baseStage = baseStage + 1
    end
    local baseStageType = customStage.baseStageType == nil and DEFAULT_BASE_STAGE_TYPE or customStage.baseStageType
    local reseed = stage >= baseStage
    setStage(nil, baseStage, baseStageType, reseed)
    musicManager:Disable()
    self:setStageRoomsData(customStage, rng, verbose)
    local targetStage = CUSTOM_FLOOR_STAGE
    local targetStageType = CUSTOM_FLOOR_STAGE_TYPE
    level:SetStage(targetStage, targetStageType)
    self.gameReorderedCallbacks:reorderedCallbacksSetStage(targetStage, targetStageType)
    if streakText then
        self.runInNFrames:runNextGameFrame(function()
            topStreakTextStart(nil)
        end)
    end
    local customStageMusic
    if customStage.music ~= nil then
        customStageMusic = Isaac.GetMusicIdByName(customStage.music)
        if customStageMusic == -1 then
            logError("Failed to get the music ID associated with the name of: " .. customStage.music)
        end
    end
    local music = (customStageMusic == nil or customStageMusic == -1) and getMusicForStage(nil, baseStage, baseStageType) or customStageMusic
    self.runInNFrames:runInNRenderFrames(
        function()
            musicManager:Enable()
            musicManager:Play(music)
            musicManager:UpdateVolume()
        end,
        MUSIC_DELAY_RENDER_FRAMES
    )
end
__TS__DecorateLegacy({Exported}, CustomStages.prototype, "setCustomStage", true)
function CustomStages.prototype.disableCustomStage(self)
    v.run.currentCustomStage = nil
end
__TS__DecorateLegacy({Exported}, CustomStages.prototype, "disableCustomStage", true)
return ____exports
 end,
["sets.consoleCommandsSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
--- The set of vanilla console commands, as documented here:
-- https://bindingofisaacrebirth.fandom.com/wiki/Debug_Console
____exports.CONSOLE_COMMANDS_SET = __TS__New(ReadonlySet, {
    "achievement",
    "challenge",
    "clear",
    "clearcache",
    "clearseeds",
    "combo",
    "copy",
    "costumetest",
    "curse",
    "cutscene",
    "debug",
    "delirious",
    "eggs",
    "giveitem",
    "g",
    "goto",
    "gridspawn",
    "listcollectibles",
    "lua",
    "l",
    "luamem",
    "luamod",
    "luarun",
    "macro",
    "m",
    "metro",
    "playsfx",
    "prof",
    "profstop",
    "remove",
    "r",
    "reloadfx",
    "reloadshaders",
    "repeat",
    "reseed",
    "restart",
    "seed",
    "spawn",
    "stage",
    "time",
    "addplayer",
    "forceroom",
    "giveitem2",
    "g2",
    "netdelay",
    "netstart",
    "remove2",
    "r2",
    "reloadwisps",
    "restock",
    "rewind",
    "testbosspool"
})
return ____exports
 end,
["functions.console"] = function(...) 
local ____exports = {}
local ____consoleCommandsSet = require("sets.consoleCommandsSet")
local CONSOLE_COMMANDS_SET = ____consoleCommandsSet.CONSOLE_COMMANDS_SET
--- Helper function to see if a particular command is a vanilla console command. This is useful
-- because the `EXECUTE_CMD` callback will not fire for any vanilla commands.
function ____exports.isVanillaConsoleCommand(self, commandName)
    return CONSOLE_COMMANDS_SET:has(commandName)
end
--- Helper function to print whether something was enabled or disabled to the in-game console.
function ____exports.printEnabled(self, enabled, description)
    local enabledText = enabled and "Enabled" or "Disabled"
    print(((enabledText .. " ") .. description) .. ".")
end
return ____exports
 end,
["interfaces.private.ModUpgradedInterface"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.render"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RenderMode = ____isaac_2Dtypescript_2Ddefinitions.RenderMode
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
--- Helper function to see if the current render callback is rendering a water reflection.
-- 
-- When the player is in a room with water, things will be rendered twice: once for the normal
-- rendering, and once for the reflecting rendering. Thus, any mod code in a render callback will
-- run twice per frame in these situations, which may be unexpected or cause bugs.
-- 
-- This function is typically used to early return from a render function if it returns true.
function ____exports.isReflectionRender(self)
    local room = game:GetRoom()
    local renderMode = room:GetRenderMode()
    return renderMode == RenderMode.WATER_REFLECT
end
function ____exports.renderScaledTextOnEntity(self, entity, text, scaleX, scaleY)
    if ____exports.isReflectionRender(nil) then
        return
    end
    local position = Isaac.WorldToScreen(entity.Position)
    Isaac.RenderScaledText(
        text,
        position.X,
        position.Y,
        scaleX,
        scaleY,
        1,
        1,
        1,
        1
    )
end
function ____exports.renderTextOnEntity(self, entity, text)
    if ____exports.isReflectionRender(nil) then
        return
    end
    local position = Isaac.WorldToScreen(entity.Position)
    Isaac.RenderText(
        text,
        position.X,
        position.Y,
        1,
        1,
        1,
        1
    )
end
return ____exports
 end,
["classes.features.other.debugDisplay.utils"] = function(...) 
local ____exports = {}
local ____entities = require("functions.entities")
local getEntityID = ____entities.getEntityID
local ____gridEntities = require("functions.gridEntities")
local getGridEntityID = ____gridEntities.getGridEntityID
function ____exports.defaultEntityDisplayCallback(self, entity)
    return getEntityID(nil, entity)
end
function ____exports.defaultGridEntityDisplayCallback(self, gridEntity)
    return getGridEntityID(nil, gridEntity)
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayBomb"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayBomb = __TS__Class()
local DebugDisplayBomb = ____exports.DebugDisplayBomb
DebugDisplayBomb.name = "DebugDisplayBomb"
__TS__ClassExtends(DebugDisplayBomb, Feature)
function DebugDisplayBomb.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postBombRender = function(____, bomb)
        local text = self:textCallback(bomb)
        renderTextOnEntity(nil, bomb, text)
    end
    self.callbacksUsed = {{ModCallback.POST_BOMB_RENDER, self.postBombRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayDoor"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultGridEntityDisplayCallback = ____utils.defaultGridEntityDisplayCallback
____exports.DebugDisplayDoor = __TS__Class()
local DebugDisplayDoor = ____exports.DebugDisplayDoor
DebugDisplayDoor.name = "DebugDisplayDoor"
__TS__ClassExtends(DebugDisplayDoor, Feature)
function DebugDisplayDoor.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultGridEntityDisplayCallback
    self.postDoorRender = function(____, door)
        local text = self:textCallback(door)
        renderTextOnEntity(nil, door, text)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_DOOR_RENDER, self.postDoorRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayEffect"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayEffect = __TS__Class()
local DebugDisplayEffect = ____exports.DebugDisplayEffect
DebugDisplayEffect.name = "DebugDisplayEffect"
__TS__ClassExtends(DebugDisplayEffect, Feature)
function DebugDisplayEffect.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postEffectRender = function(____, effect)
        local text = self:textCallback(effect)
        renderTextOnEntity(nil, effect, text)
    end
    self.callbacksUsed = {{ModCallback.POST_EFFECT_RENDER, self.postEffectRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayFamiliar"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayFamiliar = __TS__Class()
local DebugDisplayFamiliar = ____exports.DebugDisplayFamiliar
DebugDisplayFamiliar.name = "DebugDisplayFamiliar"
__TS__ClassExtends(DebugDisplayFamiliar, Feature)
function DebugDisplayFamiliar.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postFamiliarRender = function(____, familiar)
        local text = self:textCallback(familiar)
        renderTextOnEntity(nil, familiar, text)
    end
    self.callbacksUsed = {{ModCallback.POST_FAMILIAR_RENDER, self.postFamiliarRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayKnife"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayKnife = __TS__Class()
local DebugDisplayKnife = ____exports.DebugDisplayKnife
DebugDisplayKnife.name = "DebugDisplayKnife"
__TS__ClassExtends(DebugDisplayKnife, Feature)
function DebugDisplayKnife.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postKnifeRender = function(____, knife)
        local text = self:textCallback(knife)
        renderTextOnEntity(nil, knife, text)
    end
    self.callbacksUsed = {{ModCallback.POST_KNIFE_RENDER, self.postKnifeRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayLaser"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayLaser = __TS__Class()
local DebugDisplayLaser = ____exports.DebugDisplayLaser
DebugDisplayLaser.name = "DebugDisplayLaser"
__TS__ClassExtends(DebugDisplayLaser, Feature)
function DebugDisplayLaser.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postLaserRender = function(____, laser)
        local text = self:textCallback(laser)
        renderTextOnEntity(nil, laser, text)
    end
    self.callbacksUsed = {{ModCallback.POST_LASER_RENDER, self.postLaserRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayNPC"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayNPC = __TS__Class()
local DebugDisplayNPC = ____exports.DebugDisplayNPC
DebugDisplayNPC.name = "DebugDisplayNPC"
__TS__ClassExtends(DebugDisplayNPC, Feature)
function DebugDisplayNPC.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postNPCRender = function(____, npc)
        local text = self:textCallback(npc)
        renderTextOnEntity(nil, npc, text)
    end
    self.callbacksUsed = {{ModCallback.POST_NPC_RENDER, self.postNPCRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayPickup"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayPickup = __TS__Class()
local DebugDisplayPickup = ____exports.DebugDisplayPickup
DebugDisplayPickup.name = "DebugDisplayPickup"
__TS__ClassExtends(DebugDisplayPickup, Feature)
function DebugDisplayPickup.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postPickupRender = function(____, pickup)
        local text = self:textCallback(pickup)
        renderTextOnEntity(nil, pickup, text)
    end
    self.callbacksUsed = {{ModCallback.POST_PICKUP_RENDER, self.postPickupRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayPit"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultGridEntityDisplayCallback = ____utils.defaultGridEntityDisplayCallback
____exports.DebugDisplayPit = __TS__Class()
local DebugDisplayPit = ____exports.DebugDisplayPit
DebugDisplayPit.name = "DebugDisplayPit"
__TS__ClassExtends(DebugDisplayPit, Feature)
function DebugDisplayPit.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultGridEntityDisplayCallback
    self.postPitRender = function(____, pit)
        local text = self:textCallback(pit)
        renderTextOnEntity(nil, pit, text)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PIT_RENDER, self.postPitRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayPlayer"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayPlayer = __TS__Class()
local DebugDisplayPlayer = ____exports.DebugDisplayPlayer
DebugDisplayPlayer.name = "DebugDisplayPlayer"
__TS__ClassExtends(DebugDisplayPlayer, Feature)
function DebugDisplayPlayer.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postPlayerRenderReordered = function(____, player)
        local text = self:textCallback(player)
        renderTextOnEntity(nil, player, text)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PLAYER_RENDER_REORDERED, self.postPlayerRenderReordered}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayPoop"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultGridEntityDisplayCallback = ____utils.defaultGridEntityDisplayCallback
____exports.DebugDisplayPoop = __TS__Class()
local DebugDisplayPoop = ____exports.DebugDisplayPoop
DebugDisplayPoop.name = "DebugDisplayPoop"
__TS__ClassExtends(DebugDisplayPoop, Feature)
function DebugDisplayPoop.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultGridEntityDisplayCallback
    self.postPoopRender = function(____, poop)
        local text = self:textCallback(poop)
        renderTextOnEntity(nil, poop, text)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_POOP_RENDER, self.postPoopRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayPressurePlate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultGridEntityDisplayCallback = ____utils.defaultGridEntityDisplayCallback
____exports.DebugDisplayPressurePlate = __TS__Class()
local DebugDisplayPressurePlate = ____exports.DebugDisplayPressurePlate
DebugDisplayPressurePlate.name = "DebugDisplayPressurePlate"
__TS__ClassExtends(DebugDisplayPressurePlate, Feature)
function DebugDisplayPressurePlate.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultGridEntityDisplayCallback
    self.postPressurePlateRender = function(____, pressurePlate)
        local text = self:textCallback(pressurePlate)
        renderTextOnEntity(nil, pressurePlate, text)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PRESSURE_PLATE_RENDER, self.postPressurePlateRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayProjectile"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayProjectile = __TS__Class()
local DebugDisplayProjectile = ____exports.DebugDisplayProjectile
DebugDisplayProjectile.name = "DebugDisplayProjectile"
__TS__ClassExtends(DebugDisplayProjectile, Feature)
function DebugDisplayProjectile.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postProjectileRender = function(____, projectile)
        local text = self:textCallback(projectile)
        renderTextOnEntity(nil, projectile, text)
    end
    self.callbacksUsed = {{ModCallback.POST_PROJECTILE_RENDER, self.postProjectileRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayRock"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultGridEntityDisplayCallback = ____utils.defaultGridEntityDisplayCallback
____exports.DebugDisplayRock = __TS__Class()
local DebugDisplayRock = ____exports.DebugDisplayRock
DebugDisplayRock.name = "DebugDisplayRock"
__TS__ClassExtends(DebugDisplayRock, Feature)
function DebugDisplayRock.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultGridEntityDisplayCallback
    self.postRockRender = function(____, rock)
        local text = self:textCallback(rock)
        renderTextOnEntity(nil, rock, text)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_ROCK_RENDER, self.postRockRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplaySlot"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplaySlot = __TS__Class()
local DebugDisplaySlot = ____exports.DebugDisplaySlot
DebugDisplaySlot.name = "DebugDisplaySlot"
__TS__ClassExtends(DebugDisplaySlot, Feature)
function DebugDisplaySlot.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postSlotRender = function(____, slot)
        local text = self:textCallback(slot)
        renderTextOnEntity(nil, slot, text)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_SLOT_RENDER, self.postSlotRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplaySpikes"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultGridEntityDisplayCallback = ____utils.defaultGridEntityDisplayCallback
____exports.DebugDisplaySpikes = __TS__Class()
local DebugDisplaySpikes = ____exports.DebugDisplaySpikes
DebugDisplaySpikes.name = "DebugDisplaySpikes"
__TS__ClassExtends(DebugDisplaySpikes, Feature)
function DebugDisplaySpikes.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultGridEntityDisplayCallback
    self.postSpikesRender = function(____, spikes)
        local text = self:textCallback(spikes)
        renderTextOnEntity(nil, spikes, text)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_SPIKES_RENDER, self.postSpikesRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayTear"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultEntityDisplayCallback = ____utils.defaultEntityDisplayCallback
____exports.DebugDisplayTear = __TS__Class()
local DebugDisplayTear = ____exports.DebugDisplayTear
DebugDisplayTear.name = "DebugDisplayTear"
__TS__ClassExtends(DebugDisplayTear, Feature)
function DebugDisplayTear.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultEntityDisplayCallback
    self.postTearRender = function(____, tear)
        local text = self:textCallback(tear)
        renderTextOnEntity(nil, tear, text)
    end
    self.callbacksUsed = {{ModCallback.POST_TEAR_RENDER, self.postTearRender}}
end
return ____exports
 end,
["classes.features.other.debugDisplay.DebugDisplayTNT"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____render = require("functions.render")
local renderTextOnEntity = ____render.renderTextOnEntity
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____utils = require("classes.features.other.debugDisplay.utils")
local defaultGridEntityDisplayCallback = ____utils.defaultGridEntityDisplayCallback
____exports.DebugDisplayTNT = __TS__Class()
local DebugDisplayTNT = ____exports.DebugDisplayTNT
DebugDisplayTNT.name = "DebugDisplayTNT"
__TS__ClassExtends(DebugDisplayTNT, Feature)
function DebugDisplayTNT.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.textCallback = defaultGridEntityDisplayCallback
    self.postTNTRender = function(____, tnt)
        local text = self:textCallback(tnt)
        renderTextOnEntity(nil, tnt, text)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_TNT_RENDER, self.postTNTRender}}
end
return ____exports
 end,
["classes.features.other.DebugDisplay"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____console = require("functions.console")
local printEnabled = ____console.printEnabled
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ____DebugDisplayBomb = require("classes.features.other.debugDisplay.DebugDisplayBomb")
local DebugDisplayBomb = ____DebugDisplayBomb.DebugDisplayBomb
local ____DebugDisplayDoor = require("classes.features.other.debugDisplay.DebugDisplayDoor")
local DebugDisplayDoor = ____DebugDisplayDoor.DebugDisplayDoor
local ____DebugDisplayEffect = require("classes.features.other.debugDisplay.DebugDisplayEffect")
local DebugDisplayEffect = ____DebugDisplayEffect.DebugDisplayEffect
local ____DebugDisplayFamiliar = require("classes.features.other.debugDisplay.DebugDisplayFamiliar")
local DebugDisplayFamiliar = ____DebugDisplayFamiliar.DebugDisplayFamiliar
local ____DebugDisplayKnife = require("classes.features.other.debugDisplay.DebugDisplayKnife")
local DebugDisplayKnife = ____DebugDisplayKnife.DebugDisplayKnife
local ____DebugDisplayLaser = require("classes.features.other.debugDisplay.DebugDisplayLaser")
local DebugDisplayLaser = ____DebugDisplayLaser.DebugDisplayLaser
local ____DebugDisplayNPC = require("classes.features.other.debugDisplay.DebugDisplayNPC")
local DebugDisplayNPC = ____DebugDisplayNPC.DebugDisplayNPC
local ____DebugDisplayPickup = require("classes.features.other.debugDisplay.DebugDisplayPickup")
local DebugDisplayPickup = ____DebugDisplayPickup.DebugDisplayPickup
local ____DebugDisplayPit = require("classes.features.other.debugDisplay.DebugDisplayPit")
local DebugDisplayPit = ____DebugDisplayPit.DebugDisplayPit
local ____DebugDisplayPlayer = require("classes.features.other.debugDisplay.DebugDisplayPlayer")
local DebugDisplayPlayer = ____DebugDisplayPlayer.DebugDisplayPlayer
local ____DebugDisplayPoop = require("classes.features.other.debugDisplay.DebugDisplayPoop")
local DebugDisplayPoop = ____DebugDisplayPoop.DebugDisplayPoop
local ____DebugDisplayPressurePlate = require("classes.features.other.debugDisplay.DebugDisplayPressurePlate")
local DebugDisplayPressurePlate = ____DebugDisplayPressurePlate.DebugDisplayPressurePlate
local ____DebugDisplayProjectile = require("classes.features.other.debugDisplay.DebugDisplayProjectile")
local DebugDisplayProjectile = ____DebugDisplayProjectile.DebugDisplayProjectile
local ____DebugDisplayRock = require("classes.features.other.debugDisplay.DebugDisplayRock")
local DebugDisplayRock = ____DebugDisplayRock.DebugDisplayRock
local ____DebugDisplaySlot = require("classes.features.other.debugDisplay.DebugDisplaySlot")
local DebugDisplaySlot = ____DebugDisplaySlot.DebugDisplaySlot
local ____DebugDisplaySpikes = require("classes.features.other.debugDisplay.DebugDisplaySpikes")
local DebugDisplaySpikes = ____DebugDisplaySpikes.DebugDisplaySpikes
local ____DebugDisplayTear = require("classes.features.other.debugDisplay.DebugDisplayTear")
local DebugDisplayTear = ____DebugDisplayTear.DebugDisplayTear
local ____DebugDisplayTNT = require("classes.features.other.debugDisplay.DebugDisplayTNT")
local DebugDisplayTNT = ____DebugDisplayTNT.DebugDisplayTNT
____exports.DebugDisplay = __TS__Class()
local DebugDisplay = ____exports.DebugDisplay
DebugDisplay.name = "DebugDisplay"
__TS__ClassExtends(DebugDisplay, Feature)
function DebugDisplay.prototype.____constructor(self, mod)
    Feature.prototype.____constructor(self)
    self.player = __TS__New(DebugDisplayPlayer)
    self.tear = __TS__New(DebugDisplayTear)
    self.familiar = __TS__New(DebugDisplayFamiliar)
    self.bomb = __TS__New(DebugDisplayBomb)
    self.pickup = __TS__New(DebugDisplayPickup)
    self.slot = __TS__New(DebugDisplaySlot)
    self.laser = __TS__New(DebugDisplayLaser)
    self.knife = __TS__New(DebugDisplayKnife)
    self.projectile = __TS__New(DebugDisplayProjectile)
    self.effect = __TS__New(DebugDisplayEffect)
    self.npc = __TS__New(DebugDisplayNPC)
    self.rock = __TS__New(DebugDisplayRock)
    self.pit = __TS__New(DebugDisplayPit)
    self.spikes = __TS__New(DebugDisplaySpikes)
    self.tnt = __TS__New(DebugDisplayTNT)
    self.poop = __TS__New(DebugDisplayPoop)
    self.door = __TS__New(DebugDisplayDoor)
    self.pressurePlate = __TS__New(DebugDisplayPressurePlate)
    self.mod = mod
end
function DebugDisplay.prototype.setPlayerDisplay(self, textCallback)
    self.player.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setPlayerDisplay", true)
function DebugDisplay.prototype.setTearDisplay(self, textCallback)
    self.tear.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setTearDisplay", true)
function DebugDisplay.prototype.setFamiliarDisplay(self, textCallback)
    self.familiar.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setFamiliarDisplay", true)
function DebugDisplay.prototype.setBombDisplay(self, textCallback)
    self.bomb.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setBombDisplay", true)
function DebugDisplay.prototype.setPickupDisplay(self, textCallback)
    self.pickup.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setPickupDisplay", true)
function DebugDisplay.prototype.setSlotDisplay(self, textCallback)
    self.slot.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setSlotDisplay", true)
function DebugDisplay.prototype.setLaserDisplay(self, textCallback)
    self.laser.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setLaserDisplay", true)
function DebugDisplay.prototype.setKnifeDisplay(self, textCallback)
    self.knife.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setKnifeDisplay", true)
function DebugDisplay.prototype.setProjectileDisplay(self, textCallback)
    self.projectile.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setProjectileDisplay", true)
function DebugDisplay.prototype.setEffectDisplay(self, textCallback)
    self.effect.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setEffectDisplay", true)
function DebugDisplay.prototype.setNPCDisplay(self, textCallback)
    self.npc.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setNPCDisplay", true)
function DebugDisplay.prototype.setRockDisplay(self, textCallback)
    self.rock.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setRockDisplay", true)
function DebugDisplay.prototype.setPitDisplay(self, textCallback)
    self.pit.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setPitDisplay", true)
function DebugDisplay.prototype.setSpikesDisplay(self, textCallback)
    self.spikes.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setSpikesDisplay", true)
function DebugDisplay.prototype.setTNTDisplay(self, textCallback)
    self.tnt.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setTNTDisplay", true)
function DebugDisplay.prototype.setPoopDisplay(self, textCallback)
    self.poop.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setPoopDisplay", true)
function DebugDisplay.prototype.setDoorDisplay(self, textCallback)
    self.door.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setDoorDisplay", true)
function DebugDisplay.prototype.setPressurePlateDisplay(self, textCallback)
    self.pressurePlate.textCallback = textCallback
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "setPressurePlateDisplay", true)
function DebugDisplay.prototype.toggleFeature(self, feature, featureName, force)
    local shouldInit = not feature.initialized
    if force ~= nil then
        shouldInit = force
    end
    if shouldInit then
        self.mod:initFeature(feature)
    else
        self.mod:uninitFeature(feature)
    end
    printEnabled(nil, feature.initialized, featureName .. " display")
end
function DebugDisplay.prototype.togglePlayerDisplay(self, force)
    self:toggleFeature(self.player, "player", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "togglePlayerDisplay", true)
function DebugDisplay.prototype.toggleTearDisplay(self, force)
    self:toggleFeature(self.tear, "tear", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleTearDisplay", true)
function DebugDisplay.prototype.toggleFamiliarDisplay(self, force)
    self:toggleFeature(self.familiar, "familiar", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleFamiliarDisplay", true)
function DebugDisplay.prototype.toggleBombDisplay(self, force)
    self:toggleFeature(self.bomb, "bomb", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleBombDisplay", true)
function DebugDisplay.prototype.togglePickupDisplay(self, force)
    self:toggleFeature(self.pickup, "pickup", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "togglePickupDisplay", true)
function DebugDisplay.prototype.toggleSlotDisplay(self, force)
    self:toggleFeature(self.slot, "slot", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleSlotDisplay", true)
function DebugDisplay.prototype.toggleLaserDisplay(self, force)
    self:toggleFeature(self.laser, "laser", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleLaserDisplay", true)
function DebugDisplay.prototype.toggleKnifeDisplay(self, force)
    self:toggleFeature(self.knife, "knife", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleKnifeDisplay", true)
function DebugDisplay.prototype.toggleProjectileDisplay(self, force)
    self:toggleFeature(self.projectile, "projectile", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleProjectileDisplay", true)
function DebugDisplay.prototype.toggleEffectDisplay(self, force)
    self:toggleFeature(self.effect, "effect", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleEffectDisplay", true)
function DebugDisplay.prototype.toggleNPCDisplay(self, force)
    self:toggleFeature(self.npc, "NPC", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleNPCDisplay", true)
function DebugDisplay.prototype.toggleRockDisplay(self, force)
    self:toggleFeature(self.rock, "rock", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleRockDisplay", true)
function DebugDisplay.prototype.togglePitDisplay(self, force)
    self:toggleFeature(self.pit, "pit", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "togglePitDisplay", true)
function DebugDisplay.prototype.toggleSpikesDisplay(self, force)
    self:toggleFeature(self.spikes, "spikes", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleSpikesDisplay", true)
function DebugDisplay.prototype.toggleTNTDisplay(self, force)
    self:toggleFeature(self.tnt, "tnt", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleTNTDisplay", true)
function DebugDisplay.prototype.togglePoopDisplay(self, force)
    self:toggleFeature(self.poop, "poop", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "togglePoopDisplay", true)
function DebugDisplay.prototype.toggleDoorDisplay(self, force)
    self:toggleFeature(self.door, "door", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "toggleDoorDisplay", true)
function DebugDisplay.prototype.togglePressurePlateDisplay(self, force)
    self:toggleFeature(self.pressurePlate, "pressure plate", force)
end
__TS__DecorateLegacy({Exported}, DebugDisplay.prototype, "togglePressurePlateDisplay", true)
return ____exports
 end,
["functions.gridIndex"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____roomShape = require("functions.roomShape")
local getRoomShapeWidth = ____roomShape.getRoomShapeWidth
local ____utils = require("functions.utils")
local iRange = ____utils.iRange
--- Helper function to get all of the grid indexes between two grid indexes on either a horizontal or
-- vertical line, inclusive on both ends.
-- 
-- This function will throw a run-time error if the two provided grid indexes are not on the same
-- horizontal or vertical line.
function ____exports.getGridIndexesBetween(self, gridIndex1, gridIndex2, roomShape)
    if gridIndex1 > gridIndex2 then
        local oldGridIndex1 = gridIndex1
        local oldGridIndex2 = gridIndex2
        gridIndex1 = oldGridIndex2
        gridIndex2 = oldGridIndex1
    end
    local delta = gridIndex2 - gridIndex1
    local gridWidth = getRoomShapeWidth(nil, roomShape)
    local isOnHorizontalLine = delta <= gridWidth
    if isOnHorizontalLine then
        return iRange(nil, gridIndex1, gridIndex2)
    end
    local isOnVerticalLine = delta % gridWidth == 0
    if isOnVerticalLine then
        return iRange(nil, gridIndex1, gridIndex2, gridWidth)
    end
    error(((((((("Failed to get the grid indexes between " .. tostring(gridIndex1)) .. " and ") .. tostring(gridIndex2)) .. " for RoomShape.") .. RoomShape[roomShape]) .. " (") .. tostring(roomShape)) .. ") since they are not on the same horizontal or vertical line.")
end
return ____exports
 end,
["functions.roomShapeWalls"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__New = ____lualib.__TS__New
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
local ____exports = {}
local getVanillaWallGridIndexSetForRectangleRoomShape
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local ROOM_SHAPE_VALUES = ____cachedEnumValues.ROOM_SHAPE_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____CornerType = require("enums.CornerType")
local CornerType = ____CornerType.CornerType
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____gridIndex = require("functions.gridIndex")
local getGridIndexesBetween = ____gridIndex.getGridIndexesBetween
local ____roomShape = require("functions.roomShape")
local getRoomShapeCorners = ____roomShape.getRoomShapeCorners
local isLRoomShape = ____roomShape.isLRoomShape
local ____rooms = require("functions.rooms")
local inBossRoomOf = ____rooms.inBossRoomOf
local inHomeCloset = ____rooms.inHomeCloset
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to get the set of grid indexes that represent where the walls are supposed to be
-- in a given room shape.
-- 
-- This function only works reliably in vanilla rooms because in a modded room, it is possible to
-- place walls in a non-standard location.
function ____exports.getVanillaWallGridIndexSetForRoomShape(self, roomShape)
    local corners = getRoomShapeCorners(nil, roomShape)
    local lRoom = isLRoomShape(nil, roomShape)
    if lRoom and #corners ~= 6 then
        error(((("Failed to get the correct amount of corners for: RoomShape." .. RoomShape[roomShape]) .. " (") .. tostring(roomShape)) .. ")")
    end
    repeat
        local ____switch5 = roomShape
        local ____cond5 = ____switch5 == RoomShape.LTL
        if ____cond5 then
            do
                local topMiddle, topRight, middleLeft, middle, bottomLeft, bottomRight = table.unpack(corners)
                local ____ReadonlySet_1 = ReadonlySet
                local ____array_0 = __TS__SparseArrayNew(table.unpack(getGridIndexesBetween(nil, topMiddle.gridIndex, topRight.gridIndex, roomShape)))
                __TS__SparseArrayPush(
                    ____array_0,
                    table.unpack(getGridIndexesBetween(nil, middleLeft.gridIndex, middle.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_0,
                    table.unpack(getGridIndexesBetween(nil, bottomLeft.gridIndex, bottomRight.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_0,
                    table.unpack(getGridIndexesBetween(nil, middleLeft.gridIndex, bottomLeft.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_0,
                    table.unpack(getGridIndexesBetween(nil, topMiddle.gridIndex, middle.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_0,
                    table.unpack(getGridIndexesBetween(nil, topRight.gridIndex, bottomRight.gridIndex, roomShape))
                )
                return __TS__New(
                    ____ReadonlySet_1,
                    {__TS__SparseArraySpread(____array_0)}
                )
            end
        end
        ____cond5 = ____cond5 or ____switch5 == RoomShape.LTR
        if ____cond5 then
            do
                local topLeft, topMiddle, middle, middleRight, bottomLeft, bottomRight = table.unpack(corners)
                local ____ReadonlySet_3 = ReadonlySet
                local ____array_2 = __TS__SparseArrayNew(table.unpack(getGridIndexesBetween(nil, topLeft.gridIndex, topMiddle.gridIndex, roomShape)))
                __TS__SparseArrayPush(
                    ____array_2,
                    table.unpack(getGridIndexesBetween(nil, middle.gridIndex, middleRight.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_2,
                    table.unpack(getGridIndexesBetween(nil, bottomLeft.gridIndex, bottomRight.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_2,
                    table.unpack(getGridIndexesBetween(nil, topLeft.gridIndex, bottomLeft.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_2,
                    table.unpack(getGridIndexesBetween(nil, topMiddle.gridIndex, middle.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_2,
                    table.unpack(getGridIndexesBetween(nil, middleRight.gridIndex, bottomRight.gridIndex, roomShape))
                )
                return __TS__New(
                    ____ReadonlySet_3,
                    {__TS__SparseArraySpread(____array_2)}
                )
            end
        end
        ____cond5 = ____cond5 or ____switch5 == RoomShape.LBL
        if ____cond5 then
            do
                local topLeft, topRight, middleLeft, middle, bottomMiddle, bottomRight = table.unpack(corners)
                local ____ReadonlySet_5 = ReadonlySet
                local ____array_4 = __TS__SparseArrayNew(table.unpack(getGridIndexesBetween(nil, topLeft.gridIndex, topRight.gridIndex, roomShape)))
                __TS__SparseArrayPush(
                    ____array_4,
                    table.unpack(getGridIndexesBetween(nil, middleLeft.gridIndex, middle.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_4,
                    table.unpack(getGridIndexesBetween(nil, bottomMiddle.gridIndex, bottomRight.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_4,
                    table.unpack(getGridIndexesBetween(nil, topLeft.gridIndex, middleLeft.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_4,
                    table.unpack(getGridIndexesBetween(nil, middle.gridIndex, bottomMiddle.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_4,
                    table.unpack(getGridIndexesBetween(nil, topRight.gridIndex, bottomRight.gridIndex, roomShape))
                )
                return __TS__New(
                    ____ReadonlySet_5,
                    {__TS__SparseArraySpread(____array_4)}
                )
            end
        end
        ____cond5 = ____cond5 or ____switch5 == RoomShape.LBR
        if ____cond5 then
            do
                local topLeft, topRight, middle, middleRight, bottomLeft, bottomMiddle = table.unpack(corners)
                local ____ReadonlySet_7 = ReadonlySet
                local ____array_6 = __TS__SparseArrayNew(table.unpack(getGridIndexesBetween(nil, topLeft.gridIndex, topRight.gridIndex, roomShape)))
                __TS__SparseArrayPush(
                    ____array_6,
                    table.unpack(getGridIndexesBetween(nil, middle.gridIndex, middleRight.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_6,
                    table.unpack(getGridIndexesBetween(nil, bottomLeft.gridIndex, bottomMiddle.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_6,
                    table.unpack(getGridIndexesBetween(nil, topLeft.gridIndex, bottomLeft.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_6,
                    table.unpack(getGridIndexesBetween(nil, middle.gridIndex, bottomMiddle.gridIndex, roomShape))
                )
                __TS__SparseArrayPush(
                    ____array_6,
                    table.unpack(getGridIndexesBetween(nil, topRight.gridIndex, middleRight.gridIndex, roomShape))
                )
                return __TS__New(
                    ____ReadonlySet_7,
                    {__TS__SparseArraySpread(____array_6)}
                )
            end
        end
        do
            do
                return getVanillaWallGridIndexSetForRectangleRoomShape(nil, roomShape, corners)
            end
        end
    until true
end
function getVanillaWallGridIndexSetForRectangleRoomShape(self, roomShape, corners)
    if #corners ~= 4 then
        error("Failed to get the correct amount of corners for rectangular room shape.")
    end
    local topLeft, topRight, bottomLeft, bottomRight = table.unpack(corners)
    local ____ReadonlySet_9 = ReadonlySet
    local ____array_8 = __TS__SparseArrayNew(table.unpack(getGridIndexesBetween(nil, topLeft.gridIndex, topRight.gridIndex, roomShape)))
    __TS__SparseArrayPush(
        ____array_8,
        table.unpack(getGridIndexesBetween(nil, bottomLeft.gridIndex, bottomRight.gridIndex, roomShape))
    )
    __TS__SparseArrayPush(
        ____array_8,
        table.unpack(getGridIndexesBetween(nil, topLeft.gridIndex, bottomLeft.gridIndex, roomShape))
    )
    __TS__SparseArrayPush(
        ____array_8,
        table.unpack(getGridIndexesBetween(nil, topRight.gridIndex, bottomRight.gridIndex, roomShape))
    )
    return __TS__New(
        ____ReadonlySet_9,
        {__TS__SparseArraySpread(____array_8)}
    )
end
local ROOM_SHAPE_TO_WALL_GRID_INDEX_MAP = __TS__New(
    ReadonlyMap,
    __TS__ArrayMap(
        ROOM_SHAPE_VALUES,
        function(____, roomShape) return {
            roomShape,
            ____exports.getVanillaWallGridIndexSetForRoomShape(nil, roomShape)
        } end
    )
)
--- The Home closet is is 9x3, which is different from `RoomShape.IH` (which is 13x3).
local HOME_CLOSET_CORNERS = {
    {
        type = CornerType.TOP_LEFT,
        gridIndex = 30,
        position = Vector(60, 220)
    },
    {
        type = CornerType.TOP_RIGHT,
        gridIndex = 38,
        position = Vector(340, 220)
    },
    {
        type = CornerType.BOTTOM_LEFT,
        gridIndex = 90,
        position = Vector(60, 340)
    },
    {
        type = CornerType.BOTTOM_RIGHT,
        gridIndex = 98,
        position = Vector(340, 340)
    }
}
local HOME_CLOSET_CORNERS_SET = getVanillaWallGridIndexSetForRectangleRoomShape(nil, RoomShape.IH, HOME_CLOSET_CORNERS)
--- The Mother Boss Room is 15x11, which is different from `RoomShape.SHAPE_1x2` (which is 15x16).
local MOTHER_ROOM_CORNERS = {
    {
        type = CornerType.TOP_LEFT,
        gridIndex = 0,
        position = Vector(60, 140)
    },
    {
        type = CornerType.TOP_RIGHT,
        gridIndex = 14,
        position = Vector(580, 140)
    },
    {
        type = CornerType.BOTTOM_LEFT,
        gridIndex = 150,
        position = Vector(60, 500)
    },
    {
        type = CornerType.BOTTOM_RIGHT,
        gridIndex = 164,
        position = Vector(580, 500)
    }
}
local MOTHER_ROOM_CORNERS_SET = getVanillaWallGridIndexSetForRectangleRoomShape(nil, RoomShape.SHAPE_1x2, MOTHER_ROOM_CORNERS)
--- Helper function to determine if a given grid index should have a wall generated by the vanilla
-- game. This is useful as a mechanism to distinguish between real walls and custom walls spawned by
-- mods.
-- 
-- This function properly handles the special cases of the Mother boss room and the Home closet
-- rooms, which are both non-standard room shapes.
function ____exports.isVanillaWallGridIndex(self, gridIndex)
    local room = game:GetRoom()
    local roomShape = room:GetRoomShape()
    local wallGridIndexSet
    if inHomeCloset(nil) then
        wallGridIndexSet = HOME_CLOSET_CORNERS_SET
    elseif inBossRoomOf(nil, BossID.MOTHER) then
        wallGridIndexSet = MOTHER_ROOM_CORNERS_SET
    else
        wallGridIndexSet = ROOM_SHAPE_TO_WALL_GRID_INDEX_MAP:get(roomShape)
        assertDefined(
            nil,
            wallGridIndexSet,
            ((("Failed to find the wall grid index set for: RoomShape." .. RoomShape[roomShape]) .. " (") .. tostring(roomShape)) .. ")"
        )
    end
    return wallGridIndexSet:has(gridIndex)
end
return ____exports
 end,
["functions.emptyRoom"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local emptyRoomEntities, EMPTY_ROOM_BLACKLIST_ENTITY_SET
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityFlag = ____isaac_2Dtypescript_2Ddefinitions.EntityFlag
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____entities = require("functions.entities")
local getEntities = ____entities.getEntities
local ____gridEntities = require("functions.gridEntities")
local getGridEntities = ____gridEntities.getGridEntities
local removeGridEntity = ____gridEntities.removeGridEntity
local ____roomShapeWalls = require("functions.roomShapeWalls")
local isVanillaWallGridIndex = ____roomShapeWalls.isVanillaWallGridIndex
local ____rooms = require("functions.rooms")
local roomUpdateSafe = ____rooms.roomUpdateSafe
function emptyRoomEntities(self)
    local room = game:GetRoom()
    for ____, entity in ipairs(getEntities(nil)) do
        do
            if EMPTY_ROOM_BLACKLIST_ENTITY_SET:has(entity.Type) then
                goto __continue4
            end
            if entity:HasEntityFlags(EntityFlag.CHARM) or entity:HasEntityFlags(EntityFlag.FRIENDLY) or entity:HasEntityFlags(EntityFlag.PERSISTENT) then
                goto __continue4
            end
            entity:ClearEntityFlags(EntityFlag.APPEAR)
            entity:Remove()
            if entity.Type == EntityType.FIREPLACE then
                local gridIndex = room:GetGridIndex(entity.Position)
                room:SetGridPath(gridIndex, 0)
            end
        end
        ::__continue4::
    end
end
--- Helper function to remove all grid entities from a room except for doors and walls.
function ____exports.emptyRoomGridEntities(self)
    local removedOneOrMoreGridEntities = false
    for ____, gridEntity in ipairs(getGridEntities(nil)) do
        do
            local gridEntityType = gridEntity:GetType()
            local gridIndex = gridEntity:GetGridIndex()
            if gridEntityType == GridEntityType.WALL and isVanillaWallGridIndex(nil, gridIndex) then
                goto __continue10
            end
            if gridEntityType == GridEntityType.DOOR then
                goto __continue10
            end
            removeGridEntity(nil, gridEntity, false)
            removedOneOrMoreGridEntities = true
        end
        ::__continue10::
    end
    if removedOneOrMoreGridEntities then
        roomUpdateSafe(nil)
    end
end
EMPTY_ROOM_BLACKLIST_ENTITY_SET = __TS__New(ReadonlySet, {
    EntityType.PLAYER,
    EntityType.TEAR,
    EntityType.FAMILIAR,
    EntityType.LASER,
    EntityType.KNIFE,
    EntityType.PROJECTILE,
    EntityType.DARK_ESAU
})
--- Helper function to remove all naturally spawning entities and grid entities from a room. Notably,
-- this will not remove players (1), tears (2), familiars (3), lasers (7), knives (8), projectiles
-- (9), blacklisted NPCs such as Dark Esau, charmed NPCs, friendly NPCs, persistent NPCs, most
-- effects (1000), doors, and walls.
function ____exports.emptyRoom(self)
    emptyRoomEntities(nil)
    ____exports.emptyRoomGridEntities(nil)
end
return ____exports
 end,
["interfaces.JSONRoomsFile"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.jsonRoom"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local ____exports = {}
local getTotalWeightOfJSONObject, getJSONObjectWithChosenWeight
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DoorSlotFlagZero = ____isaac_2Dtypescript_2Ddefinitions.DoorSlotFlagZero
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____array = require("functions.array")
local sumArray = ____array.sumArray
local ____doors = require("functions.doors")
local doorSlotToDoorSlotFlag = ____doors.doorSlotToDoorSlotFlag
local getRoomShapeDoorSlot = ____doors.getRoomShapeDoorSlot
local ____enums = require("functions.enums")
local isEnumValue = ____enums.isEnumValue
local ____flag = require("functions.flag")
local addFlag = ____flag.addFlag
local ____log = require("functions.log")
local log = ____log.log
local ____random = require("functions.random")
local getRandomFloat = ____random.getRandomFloat
local ____types = require("functions.types")
local parseIntSafe = ____types.parseIntSafe
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
function getTotalWeightOfJSONObject(self, jsonOjectArray)
    local weights = __TS__ArrayMap(
        jsonOjectArray,
        function(____, jsonObject)
            local weightString = jsonObject["$"].weight
            local weight = tonumber(weightString)
            assertDefined(
                nil,
                weight,
                ("Failed to parse the weight of a JSON object: " .. tostring(weightString)) .. "."
            )
            return weight
        end
    )
    return sumArray(nil, weights)
end
function getJSONObjectWithChosenWeight(self, jsonOjectArray, chosenWeight)
    local weightAccumulator = 0
    for ____, jsonObject in ipairs(jsonOjectArray) do
        local weightString = jsonObject["$"].weight
        local weight = tonumber(weightString)
        assertDefined(
            nil,
            weight,
            "Failed to parse the weight of a JSON object: " .. tostring(weightString)
        )
        weightAccumulator = weightAccumulator + weight
        if weightAccumulator >= chosenWeight then
            return jsonObject
        end
    end
    return nil
end
--- Helper function to calculate what the resulting `BitFlags<DoorSlotFlag>` value would be for a
-- given JSON room.
-- 
-- (A JSON room is an XML file converted to JSON so that it can be directly imported into your mod.)
function ____exports.getJSONRoomDoorSlotFlags(self, jsonRoom)
    local roomShapeString = jsonRoom["$"].shape
    local roomShape = parseIntSafe(nil, roomShapeString)
    assertDefined(nil, roomShape, "Failed to parse the \"shape\" field of a JSON room: " .. roomShapeString)
    if not isEnumValue(nil, roomShape, RoomShape) then
        error("Failed to parse the \"shape\" field of a JSON room since it was an invalid number: " .. tostring(roomShape))
    end
    local doorSlotFlags = DoorSlotFlagZero
    for ____, door in ipairs(jsonRoom.door) do
        do
            local existsString = door["$"].exists
            if existsString ~= "True" and existsString ~= "False" then
                error("Failed to parse the \"exists\" field of a JSON room door: " .. existsString)
            end
            if existsString == "False" then
                goto __continue4
            end
            local xString = door["$"].x
            local x = parseIntSafe(nil, xString)
            assertDefined(nil, x, "Failed to parse the \"x\" field of a JSON room door: " .. xString)
            local yString = door["$"].y
            local y = parseIntSafe(nil, yString)
            assertDefined(nil, y, "Failed to parse the \"y\" field of a JSON room door: " .. yString)
            local doorSlot = getRoomShapeDoorSlot(nil, roomShape, x, y)
            assertDefined(
                nil,
                doorSlot,
                ((("Failed to retrieve the door slot for a JSON room door at coordinates: [" .. tostring(x)) .. ", ") .. tostring(y)) .. "]"
            )
            local doorSlotFlag = doorSlotToDoorSlotFlag(nil, doorSlot)
            doorSlotFlags = addFlag(nil, doorSlotFlags, doorSlotFlag)
        end
        ::__continue4::
    end
    return doorSlotFlags
end
--- Helper function to find a specific room from an array of JSON rooms.
-- 
-- (A JSON room is an XML file converted to JSON so that it can be directly imported into your mod.)
-- 
-- @param jsonRooms The array of rooms to search through.
-- @param variant The room variant to select. (The room variant can be thought of as the ID of the
-- room.)
function ____exports.getJSONRoomOfVariant(self, jsonRooms, variant)
    local jsonRoomsOfVariant = __TS__ArrayFilter(
        jsonRooms,
        function(____, jsonRoom)
            local roomVariantString = jsonRoom["$"].variant
            local roomVariant = parseIntSafe(nil, roomVariantString)
            if roomVariant == nil then
                error("Failed to convert a JSON room variant to an integer: " .. roomVariantString)
            end
            return roomVariant == variant
        end
    )
    if #jsonRoomsOfVariant == 0 then
        return nil
    end
    if #jsonRoomsOfVariant == 1 then
        return jsonRoomsOfVariant[1]
    end
    error(((("Found " .. tostring(#jsonRoomsOfVariant)) .. " JSON rooms with a variant of ") .. tostring(variant)) .. ", when there should only be 1.")
end
--- Helper function to find all of the JSON rooms that match the sub-type provided.
-- 
-- (A JSON room is an XML file converted to JSON so that it can be directly imported into your mod.)
-- 
-- @param jsonRooms The array of rooms to search through.
-- @param subType The sub-type to match.
function ____exports.getJSONRoomsOfSubType(self, jsonRooms, subType)
    return __TS__ArrayFilter(
        jsonRooms,
        function(____, jsonRoom)
            local roomSubTypeString = jsonRoom["$"].subtype
            local roomSubType = parseIntSafe(nil, roomSubTypeString)
            if roomSubType == nil then
                error("Failed to convert a JSON room sub-type to an integer: " .. roomSubTypeString)
            end
            return roomSubType == subType
        end
    )
end
--- Helper function to get a random JSON entity from an array of JSON entities.
-- 
-- (A JSON entity is an entity inside of a JSON room. A JSON room is an XML file converted to JSON
-- so that it can be directly imported into your mod.)
-- 
-- Note that this function does not simply choose a random element in the provided array; it will
-- properly account for each room weight using the algorithm from:
-- https://stackoverflow.com/questions/1761626/weighted-random-numbers
-- 
-- If you want an unseeded entity, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- @param jsonEntities The array of entities to randomly choose between.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param verbose Optional. If specified, will write entries to the "log.txt" file that describe
-- what the function is doing. Default is false.
function ____exports.getRandomJSONEntity(self, jsonEntities, seedOrRNG, verbose)
    if verbose == nil then
        verbose = false
    end
    local totalWeight = getTotalWeightOfJSONObject(nil, jsonEntities)
    if verbose then
        log("Total weight of the JSON entities provided: " .. tostring(totalWeight))
    end
    local chosenWeight = getRandomFloat(nil, 0, totalWeight, seedOrRNG)
    if verbose then
        log("Randomly chose weight for JSON entity: " .. tostring(chosenWeight))
    end
    local randomJSONEntity = getJSONObjectWithChosenWeight(nil, jsonEntities, chosenWeight)
    assertDefined(
        nil,
        randomJSONEntity,
        "Failed to get a JSON entity with chosen weight: " .. tostring(chosenWeight)
    )
    return randomJSONEntity
end
--- Helper function to get a random JSON room from an array of JSON rooms.
-- 
-- (A JSON room is an XML file converted to JSON so that it can be directly imported into your mod.)
-- 
-- Note that this function does not simply choose a random element in the provided array; it will
-- properly account for each room weight using the algorithm from:
-- https://stackoverflow.com/questions/1761626/weighted-random-numbers
-- 
-- If you want an unseeded room, you must explicitly pass `undefined` to the `seedOrRNG` parameter.
-- 
-- @param jsonRooms The array of rooms to randomly choose between.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param verbose Optional. If specified, will write entries to the "log.txt" file that describe
-- what the function is doing. Default is false.
function ____exports.getRandomJSONRoom(self, jsonRooms, seedOrRNG, verbose)
    if verbose == nil then
        verbose = false
    end
    local totalWeight = getTotalWeightOfJSONObject(nil, jsonRooms)
    if verbose then
        log("Total weight of the JSON rooms provided: " .. tostring(totalWeight))
    end
    local chosenWeight = getRandomFloat(nil, 0, totalWeight, seedOrRNG)
    if verbose then
        log("Randomly chose weight for JSON room: " .. tostring(chosenWeight))
    end
    local randomJSONRoom = getJSONObjectWithChosenWeight(nil, jsonRooms, chosenWeight)
    assertDefined(
        nil,
        randomJSONRoom,
        "Failed to get a JSON room with chosen weight: " .. tostring(chosenWeight)
    )
    return randomJSONRoom
end
return ____exports
 end,
["objects.LRoomShapeToRectangles"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____readOnly = require("functions.readOnly")
local newReadonlyVector = ____readOnly.newReadonlyVector
local TWO_BY_TWO_BOTTOM_RIGHT = newReadonlyVector(nil, 25, 13)
--- "Vector(0, 0)" corresponds to the top left tile of a room, not including the walls. (The top-left
-- wall would be at "Vector(-1, -1)".)
____exports.L_ROOM_SHAPE_TO_RECTANGLES = {
    [RoomShape.LTL] = {
        verticalTopLeft = newReadonlyVector(nil, 13, 0),
        verticalBottomRight = newReadonlyVector(nil, 25, 13),
        horizontalTopLeft = newReadonlyVector(nil, 0, 7),
        horizontalBottomRight = TWO_BY_TWO_BOTTOM_RIGHT
    },
    [RoomShape.LTR] = {
        verticalTopLeft = VectorZero,
        verticalBottomRight = newReadonlyVector(nil, 12, 13),
        horizontalTopLeft = newReadonlyVector(nil, 0, 7),
        horizontalBottomRight = TWO_BY_TWO_BOTTOM_RIGHT
    },
    [RoomShape.LBL] = {
        verticalTopLeft = VectorZero,
        verticalBottomRight = newReadonlyVector(nil, 25, 6),
        horizontalTopLeft = newReadonlyVector(nil, 13, 0),
        horizontalBottomRight = TWO_BY_TWO_BOTTOM_RIGHT
    },
    [RoomShape.LBR] = {
        verticalTopLeft = VectorZero,
        verticalBottomRight = newReadonlyVector(nil, 25, 6),
        horizontalTopLeft = VectorZero,
        horizontalBottomRight = newReadonlyVector(nil, 12, 13)
    }
}
return ____exports
 end,
["functions.roomGrid"] = function(...) 
local ____exports = {}
local isValidGridPositionNormal, isValidGridPositionLRoom
local ____LRoomShapeToRectangles = require("objects.LRoomShapeToRectangles")
local L_ROOM_SHAPE_TO_RECTANGLES = ____LRoomShapeToRectangles.L_ROOM_SHAPE_TO_RECTANGLES
local ____math = require("functions.math")
local inRectangle = ____math.inRectangle
local ____roomShape = require("functions.roomShape")
local getRoomShapeBottomRightPosition = ____roomShape.getRoomShapeBottomRightPosition
local getRoomShapeTopLeftPosition = ____roomShape.getRoomShapeTopLeftPosition
local getRoomShapeWidth = ____roomShape.getRoomShapeWidth
local isLRoomShape = ____roomShape.isLRoomShape
--- Helper function to convert a grid position `Vector` to a world position `Vector`.
-- 
-- For example, the coordinates of (0, 0) are equal to `Vector(80, 160)`.
function ____exports.gridPositionToWorldPosition(self, gridPosition)
    local x = (gridPosition.X + 2) * 40
    local y = (gridPosition.Y + 4) * 40
    return Vector(x, y)
end
function isValidGridPositionNormal(self, gridPosition, roomShape)
    local topLeft = getRoomShapeTopLeftPosition(nil, roomShape)
    local bottomRight = getRoomShapeBottomRightPosition(nil, roomShape)
    return inRectangle(nil, gridPosition, topLeft, bottomRight)
end
function isValidGridPositionLRoom(self, gridPosition, roomShape)
    local rectangles = L_ROOM_SHAPE_TO_RECTANGLES[roomShape]
    if rectangles == nil then
        return false
    end
    local verticalTopLeft = rectangles.verticalTopLeft
    local verticalBottomRight = rectangles.verticalBottomRight
    local horizontalTopLeft = rectangles.horizontalTopLeft
    local horizontalBottomRight = rectangles.horizontalBottomRight
    return inRectangle(nil, gridPosition, verticalTopLeft, verticalBottomRight) or inRectangle(nil, gridPosition, horizontalTopLeft, horizontalBottomRight)
end
--- Helper function to convert grid coordinates to a world position `Vector`.
-- 
-- For example, the coordinates of (0, 0) are equal to `Vector(80, 160)`.
function ____exports.gridCoordinatesToWorldPosition(self, x, y)
    local gridPosition = Vector(x, y)
    return ____exports.gridPositionToWorldPosition(nil, gridPosition)
end
--- Helper function to convert a grid index to a grid position.
-- 
-- For example, in a 1x1 room, grid index 0 is equal to "Vector(-1, -1) and grid index 16 is equal
-- to "Vector(0, 0)".
function ____exports.gridIndexToGridPosition(self, gridIndex, roomShape)
    local gridWidth = getRoomShapeWidth(nil, roomShape)
    local x = gridIndex % gridWidth - 1
    local y = math.floor(gridIndex / gridWidth) - 1
    return Vector(x, y)
end
--- Test if a grid position is actually in the given `RoomShape`.
-- 
-- In this context, the grid position of the top-left wall is "Vector(-1, -1)".
function ____exports.isValidGridPosition(self, gridPosition, roomShape)
    local ____isLRoomShape_result_0
    if isLRoomShape(nil, roomShape) then
        ____isLRoomShape_result_0 = isValidGridPositionLRoom(nil, gridPosition, roomShape)
    else
        ____isLRoomShape_result_0 = isValidGridPositionNormal(nil, gridPosition, roomShape)
    end
    return ____isLRoomShape_result_0
end
--- Helper function to convert a world position `Vector` to a grid position `Vector`.
-- 
-- In this context, the grid position of the top-left wall is "Vector(-1, -1)".
function ____exports.worldPositionToGridPosition(self, worldPos)
    local x = math.floor(worldPos.X / 40 - 2 + 0.5)
    local y = math.floor(worldPos.Y / 40 - 4 + 0.5)
    return Vector(x, y)
end
--- Helper function to convert a world position `Vector` to a grid position `Vector`.
-- 
-- In this context, the grid position of the top-left wall is "Vector(-1, -1)".
-- 
-- This is similar to the `worldPositionToGridPosition` function, but the values are not rounded.
function ____exports.worldPositionToGridPositionFast(self, worldPos)
    local x = worldPos.X / 40 - 2
    local y = worldPos.Y / 40 - 4
    return Vector(x, y)
end
return ____exports
 end,
["functions.spawnCollectible"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____collectibleTag = require("functions.collectibleTag")
local isQuestCollectible = ____collectibleTag.isQuestCollectible
local ____collectibles = require("functions.collectibles")
local preventCollectibleRotation = ____collectibles.preventCollectibleRotation
local setCollectibleEmpty = ____collectibles.setCollectibleEmpty
local ____entitiesSpecific = require("functions.entitiesSpecific")
local spawnPickupWithSeed = ____entitiesSpecific.spawnPickupWithSeed
local ____players = require("functions.players")
local anyPlayerIs = ____players.anyPlayerIs
local ____rng = require("functions.rng")
local getRandomSeed = ____rng.getRandomSeed
local isRNG = ____rng.isRNG
--- Helper function to spawn a collectible.
-- 
-- Use this instead of the `Game.Spawn` method because it handles the cases of Tainted Keeper
-- collectibles costing coins and prevents quest items from being rotated by Tainted Isaac's
-- rotation mechanic.
-- 
-- If you want to spawn an unseeded collectible, you must explicitly pass `undefined` to the
-- `seedOrRNG` parameter.
-- 
-- @param collectibleType The collectible type to spawn.
-- @param positionOrGridIndex The position or grid index to spawn the collectible at.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param options Optional. Set to true to make the collectible a "There's Options" style
-- collectible. Default is false.
-- @param forceFreeItem Optional. Set to true to disable the logic that gives the item a price for
-- Tainted Keeper. Default is false.
-- @param spawner Optional.
function ____exports.spawnCollectible(self, collectibleType, positionOrGridIndex, seedOrRNG, options, forceFreeItem, spawner)
    if options == nil then
        options = false
    end
    if forceFreeItem == nil then
        forceFreeItem = false
    end
    if seedOrRNG == nil then
        seedOrRNG = getRandomSeed(nil)
    end
    local seed = isRNG(nil, seedOrRNG) and seedOrRNG:Next() or seedOrRNG
    local collectible = spawnPickupWithSeed(
        nil,
        PickupVariant.COLLECTIBLE,
        collectibleType,
        positionOrGridIndex,
        seed,
        VectorZero,
        spawner
    )
    if isQuestCollectible(nil, collectible) then
        preventCollectibleRotation(nil, collectible)
    end
    if options then
        collectible.OptionsPickupIndex = 1
    end
    if anyPlayerIs(nil, PlayerType.KEEPER_B) and not isQuestCollectible(nil, collectibleType) and not forceFreeItem then
        collectible.ShopItemId = -1
        collectible.Price = 15
    end
    return collectible
end
--- Helper function to spawn a collectible from a specific item pool.
-- 
-- Use this instead of the `Game.Spawn` method because it handles the cases of Tainted Keeper
-- collectibles costing coins and prevents quest items from being rotated by Tainted Isaac's
-- rotation mechanic.
-- 
-- If you want to spawn an unseeded collectible, you must explicitly pass `undefined` to the
-- `seedOrRNG` parameter.
-- 
-- In order to use this function, you must upgrade your mod with `ISCFeature.SPAWN_COLLECTIBLE`.
-- 
-- @param itemPoolType The item pool to draw the collectible type from.
-- @param positionOrGridIndex The position or grid index to spawn the collectible at.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param options Optional. Set to true to make the collectible a "There's Options" style
-- collectible. Default is false.
-- @param forceFreeItem Optional. Set to true to disable the logic that gives the item a price for
-- Tainted Keeper. Default is false.
-- @param spawner Optional.
function ____exports.spawnCollectibleFromPool(self, itemPoolType, positionOrGridIndex, seedOrRNG, options, forceFreeItem, spawner)
    if options == nil then
        options = false
    end
    if forceFreeItem == nil then
        forceFreeItem = false
    end
    local itemPool = game:GetItemPool()
    local collectibleType = itemPool:GetCollectible(itemPoolType)
    return ____exports.spawnCollectible(
        nil,
        collectibleType,
        positionOrGridIndex,
        seedOrRNG,
        options,
        forceFreeItem,
        spawner
    )
end
--- Helper function to spawn an empty collectible. Doing this is tricky since spawning a collectible
-- with `CollectibleType.NULL` will result in spawning a collectible with a random type from the
-- current room's item pool.
-- 
-- Instead, this function arbitrarily spawns a collectible with `CollectibleType.BROKEN_SHOVEL_1`,
-- and then converts it to an empty pedestal afterward. (Broken Shovel is used instead of e.g. Sad
-- Onion because it is a quest collectible and quest collectibles will prevent Damocles from
-- duplicating the pedestal.)
-- 
-- If you want to spawn an unseeded collectible, you must explicitly pass `undefined` to the
-- `seedOrRNG` parameter.
-- 
-- @param positionOrGridIndex The position or grid index to spawn the empty collectible at.
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
function ____exports.spawnEmptyCollectible(self, positionOrGridIndex, seedOrRNG)
    local collectible = ____exports.spawnCollectible(
        nil,
        CollectibleType.BROKEN_SHOVEL_1,
        positionOrGridIndex,
        seedOrRNG,
        false,
        true
    )
    setCollectibleEmpty(nil, collectible)
    return collectible
end
return ____exports
 end,
["classes.features.other.PreventGridEntityRespawn"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____array = require("functions.array")
local emptyArray = ____array.emptyArray
local ____gridEntities = require("functions.gridEntities")
local getAllGridIndexes = ____gridEntities.getAllGridIndexes
local getGridEntities = ____gridEntities.getGridEntities
local removeGridEntity = ____gridEntities.removeGridEntity
local setGridEntityInvisible = ____gridEntities.setGridEntityInvisible
local spawnGridEntity = ____gridEntities.spawnGridEntity
local ____players = require("functions.players")
local getPlayerFromPtr = ____players.getPlayerFromPtr
local ____roomData = require("functions.roomData")
local getRoomListIndex = ____roomData.getRoomListIndex
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {
    level = {roomListIndexToDecorationGridIndexes = __TS__New(
        DefaultMap,
        function() return {} end
    )},
    room = {manuallyUsingShovel = false}
}
____exports.PreventGridEntityRespawn = __TS__Class()
local PreventGridEntityRespawn = ____exports.PreventGridEntityRespawn
PreventGridEntityRespawn.name = "PreventGridEntityRespawn"
__TS__ClassExtends(PreventGridEntityRespawn, Feature)
function PreventGridEntityRespawn.prototype.____constructor(self, runInNFrames)
    Feature.prototype.____constructor(self)
    self.v = v
    self.preUseItemWeNeedToGoDeeper = function(____, _collectibleType, _rng, player, _useFlags, _activeSlot, _customVarData)
        if v.room.manuallyUsingShovel then
            return nil
        end
        local roomListIndex = getRoomListIndex(nil)
        if not v.level.roomListIndexToDecorationGridIndexes:has(roomListIndex) then
            return nil
        end
        local decorations = getGridEntities(nil, GridEntityType.DECORATION)
        for ____, decoration in ipairs(decorations) do
            removeGridEntity(nil, decoration, false)
        end
        local entityPtr = EntityPtr(player)
        self.runInNFrames:runNextGameFrame(function()
            local futurePlayer = getPlayerFromPtr(nil, entityPtr)
            if futurePlayer == nil then
                return
            end
            local futureRoomListIndex = getRoomListIndex(nil)
            if futureRoomListIndex ~= roomListIndex then
                return
            end
            v.room.manuallyUsingShovel = true
            futurePlayer:UseActiveItem(CollectibleType.WE_NEED_TO_GO_DEEPER)
            v.room.manuallyUsingShovel = false
            local decorationGridIndexes = v.level.roomListIndexToDecorationGridIndexes:getAndSetDefault(roomListIndex)
            emptyArray(nil, decorationGridIndexes)
            self:preventGridEntityRespawn()
        end)
        return true
    end
    self.postNewRoomReordered = function()
        self:setDecorationsInvisible()
    end
    self.featuresUsed = {ISCFeature.RUN_IN_N_FRAMES}
    self.callbacksUsed = {{ModCallback.PRE_USE_ITEM, self.preUseItemWeNeedToGoDeeper, {CollectibleType.WE_NEED_TO_GO_DEEPER}}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}}
    self.runInNFrames = runInNFrames
end
function PreventGridEntityRespawn.prototype.setDecorationsInvisible(self)
    local room = game:GetRoom()
    local roomListIndex = getRoomListIndex(nil)
    local decorationGridIndexes = v.level.roomListIndexToDecorationGridIndexes:get(roomListIndex)
    if decorationGridIndexes == nil then
        return
    end
    for ____, gridIndex in ipairs(decorationGridIndexes) do
        local gridEntity = room:GetGridEntity(gridIndex)
        if gridEntity ~= nil then
            local gridEntityType = gridEntity:GetType()
            if gridEntityType == GridEntityType.DECORATION then
                setGridEntityInvisible(nil, gridEntity)
            end
        end
    end
end
function PreventGridEntityRespawn.prototype.preventGridEntityRespawn(self)
    local room = game:GetRoom()
    local roomListIndex = getRoomListIndex(nil)
    local decorationGridIndexes = v.level.roomListIndexToDecorationGridIndexes:getAndSetDefault(roomListIndex)
    for ____, gridIndex in ipairs(getAllGridIndexes(nil)) do
        do
            local existingGridEntity = room:GetGridEntity(gridIndex)
            if existingGridEntity ~= nil then
                goto __continue20
            end
            local decoration = spawnGridEntity(nil, GridEntityType.DECORATION, gridIndex)
            if decoration ~= nil then
                setGridEntityInvisible(nil, decoration)
            end
            decorationGridIndexes[#decorationGridIndexes + 1] = gridIndex
        end
        ::__continue20::
    end
end
__TS__DecorateLegacy({Exported}, PreventGridEntityRespawn.prototype, "preventGridEntityRespawn", true)
return ____exports
 end,
["classes.features.other.DeployJSONRoom"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__Iterator = ____lualib.__TS__Iterator
local Map = ____lualib.Map
local ____exports = {}
local spawnGridEntityForJSONRoom, fixPitGraphics, getPitMap, getPitFrame
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.EntityCollisionClass
local EntityGridCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.EntityGridCollisionClass
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local PitfallVariant = ____isaac_2Dtypescript_2Ddefinitions.PitfallVariant
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local GRID_ENTITY_XML_TYPE_VALUES = ____cachedEnumValues.GRID_ENTITY_XML_TYPE_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____emptyRoom = require("functions.emptyRoom")
local emptyRoom = ____emptyRoom.emptyRoom
local ____entities = require("functions.entities")
local getEntityIDFromConstituents = ____entities.getEntityIDFromConstituents
local spawnWithSeed = ____entities.spawnWithSeed
local ____gridEntities = require("functions.gridEntities")
local convertXMLGridEntityType = ____gridEntities.convertXMLGridEntityType
local getGridEntities = ____gridEntities.getGridEntities
local spawnGridEntityWithVariant = ____gridEntities.spawnGridEntityWithVariant
local ____jsonRoom = require("functions.jsonRoom")
local getRandomJSONEntity = ____jsonRoom.getRandomJSONEntity
local ____log = require("functions.log")
local log = ____log.log
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
local ____roomGrid = require("functions.roomGrid")
local gridCoordinatesToWorldPosition = ____roomGrid.gridCoordinatesToWorldPosition
local ____rooms = require("functions.rooms")
local setRoomCleared = ____rooms.setRoomCleared
local setRoomUncleared = ____rooms.setRoomUncleared
local ____spawnCollectible = require("functions.spawnCollectible")
local spawnCollectible = ____spawnCollectible.spawnCollectible
local ____types = require("functions.types")
local asCollectibleType = ____types.asCollectibleType
local parseIntSafe = ____types.parseIntSafe
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
function spawnGridEntityForJSONRoom(self, gridEntityXMLType, gridEntityXMLVariant, x, y)
    local room = game:GetRoom()
    local gridEntityTuple = convertXMLGridEntityType(nil, gridEntityXMLType, gridEntityXMLVariant)
    if gridEntityTuple == nil then
        return nil
    end
    local gridEntityType, variant = table.unpack(gridEntityTuple)
    local position = gridCoordinatesToWorldPosition(nil, x, y)
    local gridIndex = room:GetGridIndex(position)
    local gridEntity = spawnGridEntityWithVariant(nil, gridEntityType, variant, gridIndex)
    if gridEntity == nil then
        return gridEntity
    end
    if gridEntityType == GridEntityType.POOP then
        local sprite = gridEntity:GetSprite()
        sprite:Play("State1", true)
        sprite:SetLastFrame()
    end
    return gridEntity
end
function fixPitGraphics(self)
    local room = game:GetRoom()
    local gridWidth = room:GetGridWidth()
    local pitMap = getPitMap(nil)
    for ____, ____value in __TS__Iterator(pitMap) do
        local gridIndex = ____value[1]
        local gridEntity = ____value[2]
        local gridIndexLeft = gridIndex - 1
        local L = pitMap:has(gridIndexLeft)
        local gridIndexRight = gridIndex + 1
        local R = pitMap:has(gridIndexRight)
        local gridIndexUp = gridIndex - gridWidth
        local U = pitMap:has(gridIndexUp)
        local gridIndexDown = gridIndex + gridWidth
        local D = pitMap:has(gridIndexDown)
        local gridIndexUpLeft = gridIndex - gridWidth - 1
        local UL = pitMap:has(gridIndexUpLeft)
        local gridIndexUpRight = gridIndex - gridWidth + 1
        local UR = pitMap:has(gridIndexUpRight)
        local gridIndexDownLeft = gridIndex + gridWidth - 1
        local DL = pitMap:has(gridIndexDownLeft)
        local gridIndexDownRight = gridIndex + gridWidth + 1
        local DR = pitMap:has(gridIndexDownRight)
        local pitFrame = getPitFrame(
            nil,
            L,
            R,
            U,
            D,
            UL,
            UR,
            DL,
            DR
        )
        local sprite = gridEntity:GetSprite()
        sprite:SetFrame(pitFrame)
    end
end
function getPitMap(self)
    local pitMap = __TS__New(Map)
    for ____, gridEntity in ipairs(getGridEntities(nil, GridEntityType.PIT)) do
        local gridIndex = gridEntity:GetGridIndex()
        pitMap:set(gridIndex, gridEntity)
    end
    return pitMap
end
function getPitFrame(self, L, R, U, D, UL, UR, DL, DR)
    local F = 0
    if L then
        F = F | 1
    end
    if U then
        F = F | 2
    end
    if R then
        F = F | 4
    end
    if D then
        F = F | 8
    end
    if U and L and not UL and not R and not D then
        F = 17
    end
    if U and R and not UR and not L and not D then
        F = 18
    end
    if L and D and not DL and not U and not R then
        F = 19
    end
    if R and D and not DR and not L and not U then
        F = 20
    end
    if L and U and R and D and not UL then
        F = 21
    end
    if L and U and R and D and not UR then
        F = 22
    end
    if U and R and D and not L and not UR then
        F = 25
    end
    if L and U and D and not R and not UL then
        F = 26
    end
    if L and U and R and D and not DL and not DR then
        F = 24
    end
    if L and U and R and D and not UR and not UL then
        F = 23
    end
    if L and U and R and UL and not UR and not D then
        F = 27
    end
    if L and U and R and UR and not UL and not D then
        F = 28
    end
    if L and U and R and not D and not UR and not UL then
        F = 29
    end
    if L and R and D and DL and not U and not DR then
        F = 30
    end
    if L and R and D and DR and not U and not DL then
        F = 31
    end
    if L and R and D and not U and not DL and not DR then
        F = 32
    end
    return F
end
local GRID_ENTITY_XML_TYPE_SET = __TS__New(ReadonlySet, GRID_ENTITY_XML_TYPE_VALUES)
____exports.DeployJSONRoom = __TS__Class()
local DeployJSONRoom = ____exports.DeployJSONRoom
DeployJSONRoom.name = "DeployJSONRoom"
__TS__ClassExtends(DeployJSONRoom, Feature)
function DeployJSONRoom.prototype.____constructor(self, preventGridEntityRespawn)
    Feature.prototype.____constructor(self)
    self.featuresUsed = {ISCFeature.PREVENT_GRID_ENTITY_RESPAWN}
    self.preventGridEntityRespawn = preventGridEntityRespawn
end
function DeployJSONRoom.prototype.spawnAllEntities(self, jsonRoom, rng, verbose)
    if verbose == nil then
        verbose = false
    end
    local shouldUnclearRoom = false
    for ____, jsonSpawn in ipairs(jsonRoom.spawn) do
        local xString = jsonSpawn["$"].x
        local x = parseIntSafe(nil, xString)
        assertDefined(nil, x, "Failed to convert the following x coordinate to an integer (for a spawn): " .. xString)
        local yString = jsonSpawn["$"].y
        local y = parseIntSafe(nil, yString)
        assertDefined(nil, y, "Failed to convert the following y coordinate to an integer (for a spawn): " .. yString)
        local jsonEntity = getRandomJSONEntity(nil, jsonSpawn.entity, rng)
        local entityTypeString = jsonEntity["$"].type
        local entityTypeNumber = parseIntSafe(nil, entityTypeString)
        assertDefined(nil, entityTypeNumber, "Failed to convert the entity type to an integer: " .. entityTypeString)
        local variantString = jsonEntity["$"].variant
        local variant = parseIntSafe(nil, variantString)
        assertDefined(
            nil,
            variant,
            "Failed to convert the entity variant to an integer: " .. tostring(variant)
        )
        local subTypeString = jsonEntity["$"].subtype
        local subType = parseIntSafe(nil, subTypeString)
        assertDefined(
            nil,
            subType,
            "Failed to convert the entity sub-type to an integer: " .. tostring(subType)
        )
        local isGridEntity = GRID_ENTITY_XML_TYPE_SET:has(entityTypeNumber)
        if isGridEntity then
            local gridEntityXMLType = entityTypeNumber
            if verbose then
                log(((((((("Spawning grid entity " .. tostring(gridEntityXMLType)) .. ".") .. tostring(variant)) .. " at: (") .. tostring(x)) .. ", ") .. tostring(y)) .. ")")
            end
            spawnGridEntityForJSONRoom(
                nil,
                gridEntityXMLType,
                variant,
                x,
                y
            )
        else
            local entityType = entityTypeNumber
            if verbose then
                local entityID = getEntityIDFromConstituents(nil, entityType, variant, subType)
                log(((((("Spawning normal entity " .. entityID) .. " at: (") .. tostring(x)) .. ", ") .. tostring(y)) .. ")")
            end
            local entity = self:spawnNormalEntityForJSONRoom(
                entityType,
                variant,
                subType,
                x,
                y,
                rng
            )
            local npc = entity:ToNPC()
            if npc ~= nil and npc.CanShutDoors then
                shouldUnclearRoom = true
            end
        end
    end
    if shouldUnclearRoom then
        if verbose then
            log("Setting the room to be uncleared since there were one or more battle NPCs spawned.")
        end
        setRoomUncleared(nil)
    elseif verbose then
        log("Leaving the room cleared since there were no battle NPCs spawned.")
    end
end
function DeployJSONRoom.prototype.spawnNormalEntityForJSONRoom(self, entityType, variant, subType, x, y, rng)
    local room = game:GetRoom()
    local roomType = room:GetType()
    local position = gridCoordinatesToWorldPosition(nil, x, y)
    local seed = rng:Next()
    local entity
    if entityType == EntityType.PICKUP and variant == PickupVariant.COLLECTIBLE then
        local collectibleType = asCollectibleType(nil, subType)
        local options = roomType == RoomType.ANGEL
        entity = spawnCollectible(
            nil,
            collectibleType,
            position,
            seed,
            options
        )
    else
        entity = spawnWithSeed(
            nil,
            entityType,
            variant,
            subType,
            position,
            seed
        )
    end
    if entityType == EntityType.PITFALL and variant == PitfallVariant.PITFALL then
        entity.EntityCollisionClass = EntityCollisionClass.ENEMIES
        entity.GridCollisionClass = EntityGridCollisionClass.WALLS
    end
    return entity
end
function DeployJSONRoom.prototype.deployJSONRoom(self, jsonRoom, seedOrRNG, verbose)
    if verbose == nil then
        verbose = false
    end
    local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
    if verbose then
        log("Starting to empty the room of entities and grid entities.")
    end
    emptyRoom(nil)
    if verbose then
        log("Finished emptying the room of entities and grid entities.")
    end
    setRoomCleared(nil)
    if verbose then
        log("Starting to spawn all of the new entities and grid entities.")
    end
    self:spawnAllEntities(jsonRoom, rng, verbose)
    if verbose then
        log("Finished spawning all of the new entities and grid entities.")
    end
    fixPitGraphics(nil)
    self.preventGridEntityRespawn:preventGridEntityRespawn()
end
__TS__DecorateLegacy({Exported}, DeployJSONRoom.prototype, "deployJSONRoom", true)
return ____exports
 end,
["classes.features.other.EdenStartingStatsHealth"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____playerDataStructures = require("functions.playerDataStructures")
local mapGetPlayer = ____playerDataStructures.mapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____playerHealth = require("functions.playerHealth")
local getPlayerHealth = ____playerHealth.getPlayerHealth
local ____players = require("functions.players")
local isEden = ____players.isEden
local ____stats = require("functions.stats")
local getPlayerStats = ____stats.getPlayerStats
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {
    edenPlayerStats = __TS__New(Map),
    edenPlayerHealth = __TS__New(Map)
}}
____exports.EdenStartingStatsHealth = __TS__Class()
local EdenStartingStatsHealth = ____exports.EdenStartingStatsHealth
EdenStartingStatsHealth.name = "EdenStartingStatsHealth"
__TS__ClassExtends(EdenStartingStatsHealth, Feature)
function EdenStartingStatsHealth.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postPlayerInit = function(____, player)
        if not isEden(nil, player) then
            return
        end
        self:getEdenStats(player)
        self:getEdenHealth(player)
    end
    self.callbacksUsed = {{ModCallback.POST_PLAYER_INIT, self.postPlayerInit}}
end
function EdenStartingStatsHealth.prototype.getEdenStats(self, player)
    local existingStatMap = mapGetPlayer(nil, v.run.edenPlayerStats, player)
    if existingStatMap ~= nil then
        return
    end
    local playerStats = getPlayerStats(nil, player)
    mapSetPlayer(nil, v.run.edenPlayerStats, player, playerStats)
end
function EdenStartingStatsHealth.prototype.getEdenHealth(self, player)
    local existingHealthMap = mapGetPlayer(nil, v.run.edenPlayerHealth, player)
    if existingHealthMap ~= nil then
        return
    end
    local playerHealth = getPlayerHealth(nil, player)
    mapSetPlayer(nil, v.run.edenPlayerHealth, player, playerHealth)
end
function EdenStartingStatsHealth.prototype.getEdenStartingHealth(self, player)
    return mapGetPlayer(nil, v.run.edenPlayerHealth, player)
end
__TS__DecorateLegacy({Exported}, EdenStartingStatsHealth.prototype, "getEdenStartingHealth", true)
function EdenStartingStatsHealth.prototype.getEdenStartingStat(self, player, playerStat)
    local playerStats = mapGetPlayer(nil, v.run.edenPlayerStats, player)
    if playerStats == nil then
        return nil
    end
    return playerStats[playerStat]
end
__TS__DecorateLegacy({Exported}, EdenStartingStatsHealth.prototype, "getEdenStartingStat", true)
function EdenStartingStatsHealth.prototype.getEdenStartingStats(self, player)
    return mapGetPlayer(nil, v.run.edenPlayerStats, player)
end
__TS__DecorateLegacy({Exported}, EdenStartingStatsHealth.prototype, "getEdenStartingStats", true)
return ____exports
 end,
["functions.deepCopyTests"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__TypeOf = ____lualib.__TS__TypeOf
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local Set = ____lualib.Set
local ____exports = {}
local copiedObjectIsTable, copiedObjectHasKeyAndValueString, copiedTableHasKeyAndValueNumber, copiedTableDoesNotCoerceTypes, copiedObjectHasNoReferencesForPrimitivesForward, copiedObjectHasNoReferencesForPrimitivesBackward, copiedObjectHasNoReferencesForArray, copiedObjectHasChildObject, copiedMapIsMap, copiedMapHasValue, copiedSetIsSet, copiedSetHasValue, copiedMapHasChildMap, copiedDefaultMapHasChildDefaultMap, copiedDefaultMapHasBrand, copiedSerializedMapHasStringKey, copiedSerializedMapHasNumberKey, copiedSerializedDefaultMapHasStringKey, copiedSerializedDefaultMapHasNumberKey
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____SerializationBrand = require("enums.private.SerializationBrand")
local SerializationBrand = ____SerializationBrand.SerializationBrand
local ____SerializationType = require("enums.SerializationType")
local SerializationType = ____SerializationType.SerializationType
local ____array = require("functions.array")
local arrayEquals = ____array.arrayEquals
local ____deepCopy = require("functions.deepCopy")
local deepCopy = ____deepCopy.deepCopy
local ____log = require("functions.log")
local log = ____log.log
local ____tstlClass = require("functions.tstlClass")
local isDefaultMap = ____tstlClass.isDefaultMap
local isTSTLMap = ____tstlClass.isTSTLMap
local isTSTLSet = ____tstlClass.isTSTLSet
local ____types = require("functions.types")
local isNumber = ____types.isNumber
local isString = ____types.isString
local isTable = ____types.isTable
function copiedObjectIsTable(self)
    local oldObject = {abc = "def"}
    local newObject = deepCopy(nil, oldObject, SerializationType.NONE, "copiedObjectIsTable")
    if not isTable(nil, newObject) then
        error("The copied object had a type of: " .. __TS__TypeOf(newObject))
    end
end
function copiedObjectHasKeyAndValueString(self)
    local keyToLookFor = "abc"
    local valueToLookFor = "def"
    local oldObject = {abc = valueToLookFor}
    local newObject = deepCopy(nil, oldObject, SerializationType.NONE, "copiedObjectHasKeyAndValueString")
    local value = newObject[keyToLookFor]
    if value == nil then
        error("The copied object did not have a key of: " .. keyToLookFor)
    end
    if not isString(nil, value) then
        error("The copied object had a value type of: " .. __TS__TypeOf(value))
    end
    if value ~= valueToLookFor then
        error("The copied object had a value of: " .. value)
    end
end
function copiedTableHasKeyAndValueNumber(self)
    local keyToLookFor = 123
    local valueToLookFor = 456
    local oldTable = {}
    oldTable[keyToLookFor] = valueToLookFor
    local newTable = deepCopy(nil, oldTable, SerializationType.NONE, "copiedTableHasKeyAndValueNumber")
    local value = newTable[keyToLookFor]
    if value == nil then
        error("The copied object did not have a key of: " .. tostring(keyToLookFor))
    end
    if not isNumber(nil, value) then
        error("The copied object had a value type of: " .. __TS__TypeOf(value))
    end
    if value ~= valueToLookFor then
        error("The copied object had a value of: " .. tostring(value))
    end
end
function copiedTableDoesNotCoerceTypes(self)
    local keyToLookFor = 123
    local valueToLookFor = 456
    local oldTable = {}
    oldTable[keyToLookFor] = valueToLookFor
    local newTable = deepCopy(nil, oldTable, SerializationType.NONE, "copiedTableDoesNotCoerceTypes")
    local keyString = tostring(keyToLookFor)
    local valueString = tostring(valueToLookFor)
    local valueFromString = newTable[keyString]
    if valueFromString ~= nil then
        error("The copied object had a string key of: " .. keyString)
    end
    local value = newTable[keyToLookFor]
    if value == valueString then
        error("The copied object had a value that incorrectly matched the string of: " .. valueString)
    end
end
function copiedObjectHasNoReferencesForPrimitivesForward(self)
    local originalStringValue = "abcdef"
    local originalNumberValue = 123
    local oldObject = {abc = originalStringValue, def = originalNumberValue}
    local newObject = deepCopy(nil, oldObject, SerializationType.NONE, "copiedObjectHasNoReferencesForPrimitivesForward")
    oldObject.abc = "newValue"
    if oldObject.abc == newObject.abc then
        error("The copied object has a string reference going forward.")
    end
    oldObject.def = 456
    if oldObject.def == newObject.def then
        error("The copied object has a number reference going forward.")
    end
end
function copiedObjectHasNoReferencesForPrimitivesBackward(self)
    local originalStringValue = "abcdef"
    local originalNumberValue = 123
    local oldObject = {abc = originalStringValue, def = originalNumberValue}
    local newObject = deepCopy(nil, oldObject, SerializationType.NONE, "copiedObjectHasNoReferencesForPrimitivesBackward")
    newObject.abc = "newValue"
    if newObject.abc == oldObject.abc then
        error("The copied object has a string reference going backward.")
    end
    newObject.def = 456
    if newObject.def == oldObject.def then
        error("The copied object has a number reference going backward.")
    end
end
function copiedObjectHasNoReferencesForArray(self)
    local oldObject = {abc = {1, 2, 3}}
    local newObject = deepCopy(nil, oldObject, SerializationType.NONE, "copiedObjectHasNoReferencesForArray")
    if oldObject.abc == newObject.abc then
        error("The copied object has the same point to the child array.")
    end
    if not arrayEquals(nil, oldObject.abc, newObject.abc) then
        error("The copied object does not have an equal array.")
    end
    local ____oldObject_abc_0, ____1_1 = oldObject.abc, 1
    ____oldObject_abc_0[____1_1] = ____oldObject_abc_0[____1_1] + 1
    if arrayEquals(nil, oldObject.abc, newObject.abc) then
        error("The copied object has an equal array after a modification to the old array.")
    end
    local ____oldObject_abc_2, ____1_3 = oldObject.abc, 1
    ____oldObject_abc_2[____1_3] = ____oldObject_abc_2[____1_3] - 1
    local ____newObject_abc_4, ____1_5 = newObject.abc, 1
    ____newObject_abc_4[____1_5] = ____newObject_abc_4[____1_5] + 1
    if arrayEquals(nil, oldObject.abc, newObject.abc) then
        error("The copied object has an equal array after a modification to the new array.")
    end
    local ____newObject_abc_6, ____1_7 = newObject.abc, 1
    ____newObject_abc_6[____1_7] = ____newObject_abc_6[____1_7] - 1
end
function copiedObjectHasChildObject(self)
    local childObjectIndex = "abc"
    local keyToLookFor = "def"
    local valueToLookFor = "ghi"
    local oldObject = {abc = {def = valueToLookFor}}
    local newObject = deepCopy(nil, oldObject, SerializationType.NONE, "copiedObjectHasChildObject")
    local childObject = newObject[childObjectIndex]
    if childObject == nil then
        error("Failed to find the child object at index: " .. childObjectIndex)
    end
    if not isTable(nil, childObject) then
        error("The copied child object had a type of: " .. __TS__TypeOf(childObject))
    end
    local value = childObject[keyToLookFor]
    if value == nil then
        error("The child object did not have a key of: " .. keyToLookFor)
    end
    if not isString(nil, value) then
        error("The child object value had a type of: " .. __TS__TypeOf(value))
    end
    if value ~= valueToLookFor then
        error("The child object value was: " .. valueToLookFor)
    end
end
function copiedMapIsMap(self)
    local keyToLookFor = "abc"
    local valueToLookFor = "def"
    local oldMap = __TS__New(Map)
    oldMap:set(keyToLookFor, valueToLookFor)
    local newMap = deepCopy(nil, oldMap, SerializationType.NONE, "copiedMapIsMap")
    if not isTSTLMap(nil, newMap) then
        error("The copied Map was not a Map and has a type of: " .. __TS__TypeOf(newMap))
    end
end
function copiedMapHasValue(self)
    local keyToLookFor = "abc"
    local valueToLookFor = "def"
    local oldMap = __TS__New(Map)
    oldMap:set(keyToLookFor, valueToLookFor)
    local newMap = deepCopy(nil, oldMap, SerializationType.NONE, "copiedMapHasValue")
    if not isTSTLMap(nil, newMap) then
        error("The copied Map was not a Map and has a type of: " .. __TS__TypeOf(newMap))
    end
    local value = newMap:get(keyToLookFor)
    if value == nil then
        error("The copied Map did not have a key of: " .. keyToLookFor)
    end
    if value ~= valueToLookFor then
        error("The copied Map did not have a value of: " .. valueToLookFor)
    end
end
function copiedSetIsSet(self)
    local valueToLookFor = "abc"
    local oldSet = __TS__New(Set)
    oldSet:add(valueToLookFor)
    local newSet = deepCopy(nil, oldSet, SerializationType.NONE, "copiedSetIsSet")
    if not isTSTLSet(nil, newSet) then
        error("The copied Set was not a Set and has a type of: " .. __TS__TypeOf(newSet))
    end
end
function copiedSetHasValue(self)
    local valueToLookFor = "abc"
    local oldSet = __TS__New(Set)
    oldSet:add(valueToLookFor)
    local newSet = deepCopy(nil, oldSet, SerializationType.NONE, "copiedSetHasValue")
    if not isTSTLSet(nil, newSet) then
        error("The copied Set was not a Set and has a type of: " .. __TS__TypeOf(newSet))
    end
    local hasValue = newSet:has(valueToLookFor)
    if not hasValue then
        error("The copied Set did not have a value of: " .. valueToLookFor)
    end
end
function copiedMapHasChildMap(self)
    local childMapKey = 123
    local childMapValue = 456
    local oldChildMap = __TS__New(Map)
    oldChildMap:set(childMapKey, childMapValue)
    local keyToLookFor = "childMap"
    local oldMap = __TS__New(Map)
    oldMap:set(keyToLookFor, oldChildMap)
    local newMap = deepCopy(nil, oldMap, SerializationType.NONE, "copiedMapHasChildMap")
    if not isTSTLMap(nil, newMap) then
        error("The copied Map was not a Map and had a type of: " .. __TS__TypeOf(newMap))
    end
    local newChildMap = newMap:get(keyToLookFor)
    if newChildMap == nil then
        error("The copied Map did not have a child map at key: " .. keyToLookFor)
    end
    if not isTSTLMap(nil, newChildMap) then
        error("The copied child Map was not a Map and had a type of: " .. __TS__TypeOf(newChildMap))
    end
    local value = newChildMap:get(childMapKey)
    if value == nil then
        error("The copied child Map did not have a key of: " .. tostring(childMapKey))
    end
    if value ~= childMapValue then
        error("The copied child Map did not have a value of: " .. tostring(childMapValue))
    end
end
function copiedDefaultMapHasChildDefaultMap(self)
    local parentMapKey = "abc"
    local childMapKey1 = 123
    local childMapKey2 = 456
    local childMapDefaultValue = 1
    local childMapCustomValue = 2
    local oldParentMap = __TS__New(
        DefaultMap,
        function() return __TS__New(DefaultMap, childMapDefaultValue) end
    )
    local oldChildMap = oldParentMap:getAndSetDefault(parentMapKey)
    oldChildMap:getAndSetDefault(childMapKey1)
    oldChildMap:set(childMapKey2, childMapCustomValue)
    local newParentMap = deepCopy(nil, oldParentMap, SerializationType.NONE, "copiedDefaultMapHasChildDefaultMap")
    if not isDefaultMap(nil, newParentMap) then
        error("The copied parent DefaultMap was not a DefaultMap and had a type of: " .. __TS__TypeOf(newParentMap))
    end
    local newChildMap = newParentMap:get(parentMapKey)
    if newChildMap == nil then
        error("The copied DefaultMap did not have a child map at key: " .. parentMapKey)
    end
    if not isDefaultMap(nil, newChildMap) then
        error("The copied child DefaultMap was not a DefaultMap and had a type of: " .. __TS__TypeOf(newChildMap))
    end
    local newChildMapValue1 = newChildMap:get(childMapKey1)
    if newChildMapValue1 == nil then
        error("The copied child DefaultMap did not have a key of: " .. tostring(childMapKey1))
    end
    if newChildMapValue1 ~= childMapDefaultValue then
        error("The copied child Map did not have a default value of: " .. tostring(childMapDefaultValue))
    end
    local newChildMapValue2 = newChildMap:get(childMapKey2)
    if newChildMapValue2 == nil then
        error("The copied child DefaultMap did not have a key of: " .. tostring(childMapKey2))
    end
    if newChildMapValue2 ~= childMapCustomValue then
        error("The copied child Map did not have a custom value of: " .. tostring(childMapCustomValue))
    end
end
function copiedDefaultMapHasBrand(self)
    local oldDefaultValue = "foo"
    local oldDefaultMap = __TS__New(DefaultMap, oldDefaultValue)
    local newTable = deepCopy(nil, oldDefaultMap, SerializationType.SERIALIZE, "copiedDefaultMapHasBrand")
    if not isTable(nil, newTable) then
        error("The copied DefaultMap was not a table and had a type of: " .. __TS__TypeOf(newTable))
    end
    if not (newTable[SerializationBrand.DEFAULT_MAP] ~= nil) then
        error("The copied DefaultMap does not have the brand: " .. SerializationBrand.DEFAULT_MAP)
    end
end
function copiedSerializedMapHasStringKey(self)
    local mapKey = "123"
    local mapValue = 456
    local oldMap = __TS__New(Map)
    oldMap:set(mapKey, mapValue)
    local serializedOldMap = deepCopy(nil, oldMap, SerializationType.SERIALIZE, "copiedSerializedMapHasStringKey-serialize")
    local newTable = deepCopy(nil, serializedOldMap, SerializationType.DESERIALIZE, "copiedSerializedMapHasStringKey-deserialize")
    local newMap = newTable
    if not newMap:has(mapKey) then
        local keyType = type(mapKey)
        error((("The copied Map did not have a key of: " .. mapKey) .. " with type ") .. keyType)
    end
end
function copiedSerializedMapHasNumberKey(self)
    local mapKey = 123
    local mapValue = 456
    local oldMap = __TS__New(Map)
    oldMap:set(mapKey, mapValue)
    local serializedOldMap = deepCopy(nil, oldMap, SerializationType.SERIALIZE, "copiedSerializedMapHasNumberKey-serialize")
    local newTable = deepCopy(nil, serializedOldMap, SerializationType.DESERIALIZE, "copiedSerializedMapHasNumberKey-deserialize")
    local newMap = newTable
    if not newMap:has(mapKey) then
        local keyType = type(mapKey)
        error((("The copied Map did not have a key of: " .. tostring(mapKey)) .. " with type ") .. keyType)
    end
end
function copiedSerializedDefaultMapHasStringKey(self)
    local mapKey = "123"
    local oldDefaultMap = __TS__New(DefaultMap, 456)
    oldDefaultMap:getAndSetDefault(mapKey)
    local serializedOldDefaultMap = deepCopy(nil, oldDefaultMap, SerializationType.SERIALIZE, "copiedSerializedDefaultMapHasStringKey-serialize")
    local newTable = deepCopy(nil, serializedOldDefaultMap, SerializationType.DESERIALIZE, "copiedSerializedDefaultMapHasStringKey-deserialize")
    local newDefaultMap = newTable
    if not newDefaultMap:has(mapKey) then
        local keyType = type(mapKey)
        error((("The copied DefaultMap did not have a key of \"" .. mapKey) .. "\" with type: ") .. keyType)
    end
end
function copiedSerializedDefaultMapHasNumberKey(self)
    local mapKey = 123
    local oldDefaultMap = __TS__New(DefaultMap, 456)
    oldDefaultMap:getAndSetDefault(mapKey)
    local serializedOldDefaultMap = deepCopy(nil, oldDefaultMap, SerializationType.SERIALIZE, "copiedSerializedDefaultMapHasNumberKey-serialize")
    local newTable = deepCopy(nil, serializedOldDefaultMap, SerializationType.DESERIALIZE, "copiedSerializedDefaultMapHasNumberKey-deserialize")
    local newDefaultMap = newTable
    if not newDefaultMap:has(mapKey) then
        local keyType = type(mapKey)
        error((("The copied DefaultMap did not have a key of: " .. tostring(mapKey)) .. " with type ") .. keyType)
    end
end
--- Run the suite of tests that prove that the "deepCopy" helper function works properly.
-- 
-- This function is only useful if you are troubleshooting the "deepCopy" function.
function ____exports.runDeepCopyTests(self)
    copiedObjectIsTable(nil)
    copiedObjectHasKeyAndValueString(nil)
    copiedTableHasKeyAndValueNumber(nil)
    copiedTableDoesNotCoerceTypes(nil)
    copiedObjectHasNoReferencesForPrimitivesForward(nil)
    copiedObjectHasNoReferencesForPrimitivesBackward(nil)
    copiedObjectHasNoReferencesForArray(nil)
    copiedObjectHasChildObject(nil)
    copiedMapIsMap(nil)
    copiedMapHasValue(nil)
    copiedSetIsSet(nil)
    copiedSetHasValue(nil)
    copiedMapHasChildMap(nil)
    copiedDefaultMapHasChildDefaultMap(nil)
    copiedDefaultMapHasBrand(nil)
    copiedSerializedMapHasStringKey(nil)
    copiedSerializedMapHasNumberKey(nil)
    copiedSerializedDefaultMapHasStringKey(nil)
    copiedSerializedDefaultMapHasNumberKey(nil)
    local successText = "All deep copy tests passed!"
    log(successText)
    print(successText)
end
return ____exports
 end,
["functions.levelGrid"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__Iterator = ____lualib.__TS__Iterator
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local Set = ____lualib.Set
local ____exports = {}
local ADJACENT_ROOM_GRID_INDEX_DELTAS
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DisplayFlag = ____isaac_2Dtypescript_2Ddefinitions.DisplayFlag
local LevelStateFlag = ____isaac_2Dtypescript_2Ddefinitions.LevelStateFlag
local RoomDescriptorFlag = ____isaac_2Dtypescript_2Ddefinitions.RoomDescriptorFlag
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local ALL_DISPLAY_FLAGS = ____constants.ALL_DISPLAY_FLAGS
local LEVEL_GRID_ROW_WIDTH = ____constants.LEVEL_GRID_ROW_WIDTH
local MAX_LEVEL_GRID_INDEX = ____constants.MAX_LEVEL_GRID_INDEX
local ____roomShapeToDoorSlotsToGridIndexDelta = require("objects.roomShapeToDoorSlotsToGridIndexDelta")
local ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA = ____roomShapeToDoorSlotsToGridIndexDelta.ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA
local ____array = require("functions.array")
local getRandomArrayElement = ____array.getRandomArrayElement
local ____doors = require("functions.doors")
local doorSlotToDoorSlotFlag = ____doors.doorSlotToDoorSlotFlag
local ____flag = require("functions.flag")
local addFlag = ____flag.addFlag
local hasFlag = ____flag.hasFlag
local removeFlag = ____flag.removeFlag
local ____map = require("functions.map")
local copyMap = ____map.copyMap
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
local ____roomData = require("functions.roomData")
local getRoomAllowedDoors = ____roomData.getRoomAllowedDoors
local getRoomData = ____roomData.getRoomData
local getRoomDescriptor = ____roomData.getRoomDescriptor
local getRoomGridIndex = ____roomData.getRoomGridIndex
local getRoomShape = ____roomData.getRoomShape
local ____roomShape = require("functions.roomShape")
local getGridIndexDelta = ____roomShape.getGridIndexDelta
local ____rooms = require("functions.rooms")
local getRooms = ____rooms.getRooms
local getRoomsInsideGrid = ____rooms.getRoomsInsideGrid
local isMineShaft = ____rooms.isMineShaft
local isMirrorRoom = ____rooms.isMirrorRoom
local isSecretRoomType = ____rooms.isSecretRoomType
--- Helper function to get only the adjacent room grid indexes that exist (i.e. have room data).
-- 
-- This is just a filtering of the results of the `getAdjacentExistingRoomGridIndexes` function. See
-- that function for more information.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
function ____exports.getAdjacentExistingRoomGridIndexes(self, roomGridIndex)
    local adjacentRoomGridIndexes = ____exports.getAdjacentRoomGridIndexes(nil, roomGridIndex)
    return __TS__ArrayFilter(
        adjacentRoomGridIndexes,
        function(____, adjacentRoomGridIndex) return getRoomData(nil, adjacentRoomGridIndex) ~= nil end
    )
end
--- Helper function to get all of the room grid indexes that are adjacent to a given room grid index
-- (even if those room grid indexes do not have any rooms in them).
-- 
-- Adjacent room grid indexes that are outside of the grid will not be included in the returned
-- array.
-- 
-- If a room grid index is provided that is outside of the grid, then an empty array will be
-- returned.
-- 
-- Note that this function does not take the shape of the room into account; it only looks at a
-- single room grid index.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
function ____exports.getAdjacentRoomGridIndexes(self, roomGridIndex)
    local roomGridIndexToUse = roomGridIndex or getRoomGridIndex(nil)
    if not ____exports.isRoomInsideGrid(nil, roomGridIndexToUse) then
        return {}
    end
    local adjacentRoomGridIndexes = __TS__ArrayMap(
        ADJACENT_ROOM_GRID_INDEX_DELTAS,
        function(____, delta) return roomGridIndexToUse + delta end
    )
    return __TS__ArrayFilter(
        adjacentRoomGridIndexes,
        function(____, adjacentRoomGridIndex) return ____exports.isRoomInsideGrid(nil, adjacentRoomGridIndex) end
    )
end
--- Helper function to iterate through the possible doors for a room and see if any of them would be
-- a valid spot to insert a brand new room on the floor.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @param ensureDeadEnd Optional. Whether to only include doors that lead to a valid dead end
-- attached to a normal room. If false, the function will include all doors
-- that would have a red door.
-- @returns A array of tuples of `DoorSlot` and room grid index.
function ____exports.getNewRoomCandidatesBesideRoom(self, roomGridIndex, ensureDeadEnd)
    if ensureDeadEnd == nil then
        ensureDeadEnd = true
    end
    local roomDescriptor = getRoomDescriptor(nil, roomGridIndex)
    if not ____exports.isRoomInsideGrid(nil, roomDescriptor.SafeGridIndex) then
        return {}
    end
    local roomData = roomDescriptor.Data
    if roomData == nil then
        return {}
    end
    local doorSlotToRoomGridIndexes = ____exports.getRoomShapeAdjacentNonExistingGridIndexes(nil, roomDescriptor.SafeGridIndex, roomData.Shape)
    local roomCandidates = {}
    for ____, ____value in __TS__Iterator(doorSlotToRoomGridIndexes) do
        local doorSlot = ____value[1]
        local adjacentRoomGridIndex = ____value[2]
        do
            local doorSlotFlag = doorSlotToDoorSlotFlag(nil, doorSlot)
            if not hasFlag(nil, roomData.Doors, doorSlotFlag) then
                goto __continue17
            end
            if ensureDeadEnd and not ____exports.isDeadEnd(nil, adjacentRoomGridIndex) then
                goto __continue17
            end
            roomCandidates[#roomCandidates + 1] = {doorSlot = doorSlot, roomGridIndex = adjacentRoomGridIndex}
        end
        ::__continue17::
    end
    return roomCandidates
end
--- Helper function to get all of the spots on the floor to insert a brand new room.
-- 
-- @param ensureDeadEnd Optional. Whether to only include spots that are a valid dead end attached
-- to a normal room. If false, the function will include all valid spots that
-- have a red door.
-- @returns A array of tuples containing the adjacent room grid index, the `DoorSlot`, and the new
-- room grid index.
function ____exports.getNewRoomCandidatesForLevel(self, ensureDeadEnd)
    if ensureDeadEnd == nil then
        ensureDeadEnd = true
    end
    local roomsInsideGrid = getRoomsInsideGrid(nil)
    local normalRooms = __TS__ArrayFilter(
        roomsInsideGrid,
        function(____, room) return room.Data ~= nil and room.Data.Type == RoomType.DEFAULT and not isMirrorRoom(nil, room.Data) and not isMineShaft(nil, room.Data) end
    )
    local roomsToLookThrough = ensureDeadEnd and normalRooms or roomsInsideGrid
    local newRoomCandidates = {}
    for ____, room in ipairs(roomsToLookThrough) do
        local newRoomCandidatesBesideRoom = ____exports.getNewRoomCandidatesBesideRoom(nil, room.SafeGridIndex, ensureDeadEnd)
        for ____, ____value in ipairs(newRoomCandidatesBesideRoom) do
            local doorSlot = ____value.doorSlot
            local roomGridIndex = ____value.roomGridIndex
            newRoomCandidates[#newRoomCandidates + 1] = {adjacentRoomGridIndex = room.SafeGridIndex, doorSlot = doorSlot, newRoomGridIndex = roomGridIndex}
        end
    end
    return newRoomCandidates
end
--- Helper function to get only the adjacent room grid indexes for a room shape that exist (i.e. have
-- room data).
-- 
-- This is just a filtering of the results of the `getRoomShapeAdjacentGridIndexes` function. See
-- that function for more information.
function ____exports.getRoomShapeAdjacentExistingGridIndexes(self, safeRoomGridIndex, roomShape)
    local roomShapeAdjacentGridIndexes = copyMap(
        nil,
        ____exports.getRoomShapeAdjacentGridIndexes(nil, safeRoomGridIndex, roomShape)
    )
    for ____, ____value in __TS__Iterator(roomShapeAdjacentGridIndexes) do
        local doorSlot = ____value[1]
        local roomGridIndex = ____value[2]
        local roomData = getRoomData(nil, roomGridIndex)
        if roomData == nil then
            roomShapeAdjacentGridIndexes:delete(doorSlot)
        end
    end
    return roomShapeAdjacentGridIndexes
end
--- Helper function to get the room grid index delta that each hypothetical door in a given room
-- shape would go to.
-- 
-- This is used by the `getRoomShapeAdjacentGridIndexes` function.
-- 
-- @returns A map of `DoorSlot` to the corresponding room grid index delta.
function ____exports.getRoomShapeAdjacentGridIndexDeltas(self, roomShape)
    return ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA[roomShape]
end
--- Helper function to get the room grid index that each hypothetical door in a given room shape
-- would go to. (This will not include room grid indexes that are outside of the grid.)
-- 
-- @param safeRoomGridIndex This must be the room safe grid index (i.e. the top-left room grid index
-- for the respective room).
-- @param roomShape The shape of the hypothetical room.
-- @returns A map of `DoorSlot` to the corresponding room grid index.
function ____exports.getRoomShapeAdjacentGridIndexes(self, safeRoomGridIndex, roomShape)
    local roomShapeAdjacentGridIndexDeltas = ____exports.getRoomShapeAdjacentGridIndexDeltas(nil, roomShape)
    local adjacentGridIndexes = __TS__New(Map)
    for ____, ____value in __TS__Iterator(roomShapeAdjacentGridIndexDeltas) do
        local doorSlot = ____value[1]
        local delta = ____value[2]
        local roomGridIndex = safeRoomGridIndex + delta
        if ____exports.isRoomInsideGrid(nil, roomGridIndex) then
            adjacentGridIndexes:set(doorSlot, roomGridIndex)
        end
    end
    return adjacentGridIndexes
end
--- Helper function to get only the adjacent room grid indexes for a room shape that do not exist
-- (i.e. do not have room data).
-- 
-- This is just a filtering of the results of the `getRoomShapeAdjacentGridIndexes` function. See
-- that function for more information.
function ____exports.getRoomShapeAdjacentNonExistingGridIndexes(self, safeRoomGridIndex, roomShape)
    local roomShapeAdjacentGridIndexes = copyMap(
        nil,
        ____exports.getRoomShapeAdjacentGridIndexes(nil, safeRoomGridIndex, roomShape)
    )
    for ____, ____value in __TS__Iterator(roomShapeAdjacentGridIndexes) do
        local doorSlot = ____value[1]
        local roomGridIndex = ____value[2]
        local roomData = getRoomData(nil, roomGridIndex)
        if roomData ~= nil then
            roomShapeAdjacentGridIndexes:delete(doorSlot)
        end
    end
    return roomShapeAdjacentGridIndexes
end
--- Helper function to check if the given room grid index is a dead end. Specifically, this is
-- defined as having only one adjacent room that exists.
-- 
-- Note that this function does not take the shape of the room into account; it only looks at a
-- single room grid index.
-- 
-- This function does not care if the given room grid index actually exists, so you can use it to
-- check if a hypothetical room would be a dead end.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
function ____exports.isDeadEnd(self, roomGridIndex)
    local adjacentExistingRoomGridIndexes = ____exports.getAdjacentExistingRoomGridIndexes(nil, roomGridIndex)
    return #adjacentExistingRoomGridIndexes == 1
end
--- Helper function to detect if the provided room was created by the Red Key item.
-- 
-- Under the hood, this checks for the `RoomDescriptorFlag.FLAG_RED_ROOM` flag.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
function ____exports.isRedKeyRoom(self, roomGridIndex)
    local roomDescriptor = getRoomDescriptor(nil, roomGridIndex)
    return hasFlag(nil, roomDescriptor.Flags, RoomDescriptorFlag.RED_ROOM)
end
--- Helper function to determine if a given room grid index is inside of the normal 13x13 level grid.
-- 
-- For example, Devil Rooms and the Mega Satan room are not considered to be inside the grid.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
function ____exports.isRoomInsideGrid(self, roomGridIndex)
    if roomGridIndex == nil then
        roomGridIndex = getRoomGridIndex(nil)
    end
    return roomGridIndex >= 0 and roomGridIndex <= MAX_LEVEL_GRID_INDEX
end
--- Helper function to check if a room exists at the given room grid index. (A room will exist if it
-- has non-undefined data in the room descriptor.)
function ____exports.roomExists(self, roomGridIndex)
    local roomData = getRoomData(nil, roomGridIndex)
    return roomData ~= nil
end
local LEFT = -1
local UP = -LEVEL_GRID_ROW_WIDTH
local RIGHT = 1
local DOWN = LEVEL_GRID_ROW_WIDTH
ADJACENT_ROOM_GRID_INDEX_DELTAS = {LEFT, UP, RIGHT, DOWN}
--- Helper function to get only the adjacent room grid indexes that do not exist (i.e. do not have
-- room data).
-- 
-- This is just a filtering of the results of the `getAdjacentExistingRoomGridIndexes` function. See
-- that function for more information.
function ____exports.getAdjacentNonExistingRoomGridIndexes(self, roomGridIndex)
    local adjacentRoomGridIndexes = ____exports.getAdjacentRoomGridIndexes(nil, roomGridIndex)
    return __TS__ArrayFilter(
        adjacentRoomGridIndexes,
        function(____, adjacentRoomGridIndex) return getRoomData(nil, adjacentRoomGridIndex) == nil end
    )
end
--- Helper function to get the room safe grid index for every room on the entire floor. This includes
-- off-grid rooms, such as the Devil Room.
-- 
-- Rooms without any data are assumed to be non-existent and are not included.
function ____exports.getAllRoomGridIndexes(self)
    local rooms = getRooms(nil)
    return __TS__ArrayMap(
        rooms,
        function(____, roomDescriptor) return roomDescriptor.SafeGridIndex end
    )
end
--- Helper function to pick a random valid spot on the floor to insert a brand new room. Note that
-- some floors will not have any valid spots. If this is the case, this function will return
-- undefined.
-- 
-- If you want to get an unseeded room, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
-- @param ensureDeadEnd Optional. Whether to pick a valid dead end attached to a normal room. If
-- false, the function will randomly pick from any valid location that would
-- have a red door.
-- @returns Either a tuple of adjacent room grid index, `DoorSlot`, and new room grid index, or
-- undefined.
function ____exports.getNewRoomCandidate(self, seedOrRNG, ensureDeadEnd)
    if ensureDeadEnd == nil then
        ensureDeadEnd = true
    end
    local newRoomCandidatesForLevel = ____exports.getNewRoomCandidatesForLevel(nil, ensureDeadEnd)
    if #newRoomCandidatesForLevel == 0 then
        return nil
    end
    return getRandomArrayElement(nil, newRoomCandidatesForLevel, seedOrRNG)
end
--- Helper function to get the grid indexes of all the rooms connected to the given room index,
-- taking the shape of the room into account. (This will only include rooms with valid data.)
-- 
-- Returns an empty map if the provided room grid index is out of bounds or has no associated room
-- data.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @returns A map of `DoorSlot` to the corresponding room grid index.
function ____exports.getRoomAdjacentGridIndexes(self, roomGridIndex)
    local roomDescriptor = getRoomDescriptor(nil, roomGridIndex)
    if not ____exports.isRoomInsideGrid(nil, roomDescriptor.SafeGridIndex) then
        return __TS__New(Map)
    end
    local roomData = roomDescriptor.Data
    if roomData == nil then
        return __TS__New(Map)
    end
    return ____exports.getRoomShapeAdjacentExistingGridIndexes(nil, roomDescriptor.SafeGridIndex, roomData.Shape)
end
--- Helper function to get an array of all of the room descriptors for rooms that match the specified
-- room type.
-- 
-- This function only searches through rooms in the current dimension and rooms inside the grid.
-- 
-- This function is variadic, meaning that you can specify N arguments to get the combined room
-- descriptors for N room types.
function ____exports.getRoomDescriptorsForType(self, ...)
    local roomTypes = {...}
    local roomTypesSet = __TS__New(Set, roomTypes)
    local roomsInsideGrid = getRoomsInsideGrid(nil)
    return __TS__ArrayFilter(
        roomsInsideGrid,
        function(____, roomDescriptor) return roomDescriptor.Data ~= nil and roomTypesSet:has(roomDescriptor.Data.Type) end
    )
end
--- Helper function to get an array of all of the safe grid indexes for rooms that match the
-- specified room type.
-- 
-- This function only searches through rooms in the current dimension.
-- 
-- This function is variadic, meaning that you can specify N arguments to get the combined grid
-- indexes for N room types.
function ____exports.getRoomGridIndexesForType(self, ...)
    local roomDescriptors = ____exports.getRoomDescriptorsForType(nil, ...)
    return __TS__ArrayMap(
        roomDescriptors,
        function(____, roomDescriptor) return roomDescriptor.SafeGridIndex end
    )
end
--- Helper function to determine if the current room grid index is inside of the normal 13x13 level
-- grid.
-- 
-- For example, Devil Rooms and the Mega Satan room are not considered to be inside the grid.
function ____exports.inGrid(self)
    local roomGridIndex = getRoomGridIndex(nil)
    return ____exports.isRoomInsideGrid(nil, roomGridIndex)
end
--- Helper function to detect if the current room was created by the Red Key item.
-- 
-- Under the hood, this checks for the `RoomDescriptorFlag.FLAG_RED_ROOM` flag.
function ____exports.inRedKeyRoom(self)
    local roomGridIndex = getRoomGridIndex(nil)
    return ____exports.isRedKeyRoom(nil, roomGridIndex)
end
function ____exports.isDoorSlotValidAtGridIndex(self, doorSlot, roomGridIndex)
    local allowedDoors = getRoomAllowedDoors(nil, roomGridIndex)
    return allowedDoors:has(doorSlot)
end
function ____exports.isDoorSlotValidAtGridIndexForRedRoom(self, doorSlot, roomGridIndex)
    local doorSlotValidAtGridIndex = ____exports.isDoorSlotValidAtGridIndex(nil, doorSlot, roomGridIndex)
    if not doorSlotValidAtGridIndex then
        return false
    end
    local roomShape = getRoomShape(nil, roomGridIndex)
    if roomShape == nil then
        return false
    end
    local delta = getGridIndexDelta(nil, roomShape, doorSlot)
    if delta == nil then
        return false
    end
    local redRoomGridIndex = roomGridIndex + delta
    return not ____exports.roomExists(nil, redRoomGridIndex) and ____exports.isRoomInsideGrid(nil, redRoomGridIndex)
end
--- Helper function to generate a new room on the floor.
-- 
-- If you want to generate an unseeded room, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- Under the hood, this function uses the `Level.MakeRedRoomDoor` method to create the room.
-- 
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. Default is `Level.GetDungeonPlacementSeed`.
-- Note that the RNG is only used to select the random location to put the room on
-- the floor; it does not influence the randomly chosen room contents. (That is
-- performed by the game and can not be manipulated prior to its generation.)
-- @param ensureDeadEnd Optional. Whether to place the room at a valid dead end attached to a normal
-- room. If false, it will randomly appear at any valid location that would
-- have a red door.
-- @param customRoomData Optional. By default, the newly created room will have data corresponding
-- to the game's randomly generated red room. If you provide this function
-- with room data, it will be used to override the vanilla data.
-- @returns The room grid index of the new room or undefined if the floor had no valid dead ends to
-- place a room.
function ____exports.newRoom(self, seedOrRNG, ensureDeadEnd, customRoomData)
    if ensureDeadEnd == nil then
        ensureDeadEnd = true
    end
    local level = game:GetLevel()
    if seedOrRNG == nil then
        seedOrRNG = level:GetDungeonPlacementSeed()
    end
    local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
    local newRoomCandidate = ____exports.getNewRoomCandidate(nil, rng, ensureDeadEnd)
    if newRoomCandidate == nil then
        return nil
    end
    local adjacentRoomGridIndex = newRoomCandidate.adjacentRoomGridIndex
    local doorSlot = newRoomCandidate.doorSlot
    local newRoomGridIndex = newRoomCandidate.newRoomGridIndex
    level:MakeRedRoomDoor(adjacentRoomGridIndex, doorSlot)
    local roomDescriptor = getRoomDescriptor(nil, newRoomGridIndex)
    roomDescriptor.Flags = removeFlag(nil, roomDescriptor.Flags, RoomDescriptorFlag.RED_ROOM)
    if customRoomData ~= nil then
        roomDescriptor.Data = customRoomData
    end
    local roomData = roomDescriptor.Data
    if roomData ~= nil then
        local hasFullMap = level:GetStateFlag(LevelStateFlag.FULL_MAP_EFFECT)
        local hasCompass = level:GetStateFlag(LevelStateFlag.COMPASS_EFFECT)
        local hasBlueMap = level:GetStateFlag(LevelStateFlag.BLUE_MAP_EFFECT)
        local roomType = roomData.Type
        local isSecretRoom = isSecretRoomType(nil, roomType)
        if hasFullMap then
            roomDescriptor.DisplayFlags = ALL_DISPLAY_FLAGS
        elseif not isSecretRoom and hasCompass then
            roomDescriptor.DisplayFlags = addFlag(nil, DisplayFlag.VISIBLE, DisplayFlag.SHOW_ICON)
        elseif isSecretRoom and hasBlueMap then
            roomDescriptor.DisplayFlags = addFlag(nil, DisplayFlag.VISIBLE, DisplayFlag.SHOW_ICON)
        end
    end
    return newRoomGridIndex
end
--- Helper function to get the coordinates of a given room grid index. The floor is represented by a
-- 13x13 grid.
-- 
-- - Since the starting room is in the center, the starting room grid index of 84 is equal to
--   coordinates of (6, 6).
-- - The top-left grid index of 0 is equal to coordinates of: (12, 0)
-- - The top-right grid index of 12 is equal to coordinates of: (0, 0)
-- - The bottom-left grid index of 156 is equal to coordinates of: (0, 12)
-- - The bottom-right grid index of 168 is equal to coordinates of: (12, 12)
function ____exports.roomGridIndexToVector(self, roomGridIndex)
    local x = roomGridIndex % LEVEL_GRID_ROW_WIDTH
    local y = math.floor(roomGridIndex / LEVEL_GRID_ROW_WIDTH)
    return Vector(x, y)
end
--- Helper function to convert a room grid index expressed as a vector back into an integer.
-- 
-- Also see the `roomGridIndexToVector` helper function.
function ____exports.vectorToRoomGridIndex(self, roomVector)
    return roomVector.Y * LEVEL_GRID_ROW_WIDTH + roomVector.X
end
return ____exports
 end,
["maps.itemPoolTypeToItemPoolName"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemPoolType = ____isaac_2Dtypescript_2Ddefinitions.ItemPoolType
--- From "itempools.xml".
____exports.ITEM_POOL_TYPE_TO_ITEM_POOL_NAME = {
    [ItemPoolType.TREASURE] = "treasure",
    [ItemPoolType.SHOP] = "shop",
    [ItemPoolType.BOSS] = "boss",
    [ItemPoolType.DEVIL] = "devil",
    [ItemPoolType.ANGEL] = "angel",
    [ItemPoolType.SECRET] = "secret",
    [ItemPoolType.LIBRARY] = "library",
    [ItemPoolType.SHELL_GAME] = "shellGame",
    [ItemPoolType.GOLDEN_CHEST] = "goldenChest",
    [ItemPoolType.RED_CHEST] = "redChest",
    [ItemPoolType.BEGGAR] = "beggar",
    [ItemPoolType.DEMON_BEGGAR] = "demonBeggar",
    [ItemPoolType.CURSE] = "curse",
    [ItemPoolType.KEY_MASTER] = "keyMaster",
    [ItemPoolType.BATTERY_BUM] = "batteryBum",
    [ItemPoolType.MOMS_CHEST] = "momsChest",
    [ItemPoolType.GREED_TREASURE] = "greedTreasure",
    [ItemPoolType.GREED_BOSS] = "greedBoss",
    [ItemPoolType.GREED_SHOP] = "greedShop",
    [ItemPoolType.GREED_DEVIL] = "greedDevil",
    [ItemPoolType.GREED_ANGEL] = "greedAngel",
    [ItemPoolType.GREED_CURSE] = "greedCurse",
    [ItemPoolType.GREED_SECRET] = "greedSecret",
    [ItemPoolType.CRANE_GAME] = "craneGame",
    [ItemPoolType.ULTRA_SECRET] = "ultraSecret",
    [ItemPoolType.BOMB_BUM] = "bombBum",
    [ItemPoolType.PLANETARIUM] = "planetarium",
    [ItemPoolType.OLD_CHEST] = "oldChest",
    [ItemPoolType.BABY_SHOP] = "babyShop",
    [ItemPoolType.WOODEN_CHEST] = "woodenChest",
    [ItemPoolType.ROTTEN_BEGGAR] = "rottenBeggar"
}
return ____exports
 end,
["data.itempools"] = function(...) 
return {ItemPools = {Pool = {
    {["$"] = {Name = "treasure"}, Item = {
        {["$"] = {Id = "1", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "2", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "3", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "4", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "5", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "6", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "7", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "8", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "10", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "12", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "13", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "14", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "15", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "17", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "19", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "36", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "37", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "38", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "39", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "40", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "41", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "42", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "44", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "45", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "46", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "47", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "48", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "49", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "52", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "53", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "55", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "56", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "57", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "58", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "62", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "65", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "66", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "67", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "68", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "69", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "71", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "72", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "75", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "76", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "77", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "78", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "85", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "86", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "87", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "88", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "89", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "91", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "92", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "93", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "94", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "95", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "96", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "97", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "98", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "99", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "100", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "101", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "102", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "103", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "104", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "105", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "106", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "107", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "108", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "109", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "110", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "111", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "113", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "114", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "115", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "117", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "120", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "121", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "123", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "124", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "125", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "126", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "127", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "128", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "129", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "131", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "136", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "137", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "138", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "140", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "142", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "143", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "144", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "146", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "148", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "149", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "150", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "151", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "152", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "153", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "154", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "155", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "157", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "160", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "161", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "162", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "163", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "166", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "167", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "168", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "169", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "170", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "171", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "172", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "173", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "174", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "175", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "176", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "178", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "180", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "186", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "188", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "189", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "190", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "191", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "192", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "200", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "201", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "202", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "206", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "209", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "210", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "211", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "213", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "214", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "217", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "220", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "221", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "222", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "223", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "224", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "225", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "227", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "228", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "229", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "231", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "233", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "234", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "236", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "237", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "240", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "242", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "244", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "245", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "256", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "257", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "261", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "264", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "265", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "266", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "267", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "268", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "269", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "270", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "271", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "272", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "273", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "274", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "275", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "276", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "277", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "278", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "279", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "280", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "281", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "282", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "283", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "284", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "285", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "287", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "288", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "291", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "292", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "294", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "295", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "298", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "299", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "300", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "301", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "302", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "303", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "304", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "305", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "306", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "307", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "308", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "309", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "310", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "312", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "313", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "314", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "315", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "316", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "317", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "318", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "319", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "320", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "321", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "322", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "323", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "324", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "325", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "329", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "330", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "332", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "333", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "334", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "335", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "336", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "350", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "351", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "352", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "353", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "358", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "359", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "361", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "362", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "364", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "365", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "366", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "367", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "368", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "369", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "371", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "373", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "374", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "375", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "377", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "378", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "379", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "381", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "382", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "384", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "385", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "386", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "388", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "389", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "390", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "391", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "392", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "393", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "394", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "395", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "397", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "398", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "401", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "404", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "405", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "406", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "407", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "410", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "411", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "418", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "419", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "421", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "422", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "426", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "427", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "430", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "431", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "432", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "435", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "436", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "437", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "440", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "443", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "444", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "445", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "446", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "447", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "448", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "449", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "452", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "453", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "454", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "457", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "458", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "459", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "460", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "461", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "463", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "465", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "466", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "467", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "469", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "470", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "471", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "473", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "476", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "478", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "481", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "482", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "485", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "488", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "491", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "492", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "493", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "494", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "495", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "496", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "497", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "502", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "504", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "506", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "507", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "508", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "509", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "511", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "512", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "513", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "516", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "517", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "522", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "524", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "525", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "529", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "531", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "532", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "537", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "539", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "540", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "542", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "543", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "544", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "545", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "548", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "549", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "553", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "555", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "557", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "558", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "559", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "560", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "561", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "563", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "565", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "570", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "575", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "576", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "578", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "581", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "583", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "605", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "607", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "608", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "609", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "610", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "611", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "612", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "614", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "615", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "616", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "617", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "618", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "625", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "629", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "631", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "635", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "637", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "639", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "641", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "645", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "649", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "650", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "652", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "655", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "657", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "658", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "661", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "663", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "671", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "675", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "676", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "677", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "678", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "680", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "681", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "682", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "683", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "687", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "690", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "693", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "695", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "703", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "709", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "710", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "713", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "717", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "720", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "722", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "723", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "724", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "725", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "726", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "727", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "728", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "729", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "shop"}, Item = {
        {["$"] = {Id = "21", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "33", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "54", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "60", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "63", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "64", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "75", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "85", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "102", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "116", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "137", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "139", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "147", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "156", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "164", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "177", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "195", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "199", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "203", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "204", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "205", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "208", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "227", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "232", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "246", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "247", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "248", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "249", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "250", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "251", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "252", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "260", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "286", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "289", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "290", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "295", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "296", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "297", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "337", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "338", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "347", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "348", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "349", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "356", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "357", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "372", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "376", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "380", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "383", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "396", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "402", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "403", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "414", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "416", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "422", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "424", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "425", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "434", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "439", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "451", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "472", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "475", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "479", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "480", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "483", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "485", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "486", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "487", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "505", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "514", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "515", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "518", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "520", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "521", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "523", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "527", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "534", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "535", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "566", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "585", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "599", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "602", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "603", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "604", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "619", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "621", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "623", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "624", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "638", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "642", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "647", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "660", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "670", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "716", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "719", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}}
    }},
    {["$"] = {Name = "boss"}, Item = {
        {["$"] = {Id = "14", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "22", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "23", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "24", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "25", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "26", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "27", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "28", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "29", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "30", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "31", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "32", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "51", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "70", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "92", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "141", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "143", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "165", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "176", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "183", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "193", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "194", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "195", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "196", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "197", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "198", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "218", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "219", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "240", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "253", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "254", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "255", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "339", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "340", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "341", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "342", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "343", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "344", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "345", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "346", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "354", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "355", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "370", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "428", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "438", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "455", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "456", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "538", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "541", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "547", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "564", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "600", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "624", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "644", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "659", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "707", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "708", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "730", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "731", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "devil"}, Item = {
        {["$"] = {Id = "8", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "34", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "35", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "51", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "67", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "74", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "79", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "80", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "81", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "82", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "83", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "84", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "97", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "109", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "113", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "114", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "115", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "118", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "122", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "123", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "127", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "133", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "134", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "145", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "157", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "159", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "163", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "172", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "186", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "187", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "212", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "215", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "216", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "225", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "230", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "237", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "241", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "259", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "262", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "268", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "269", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "275", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "278", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "292", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "311", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "360", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "391", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "399", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "408", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "409", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "411", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "412", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "417", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "420", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "431", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "433", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "441", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "442", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "462", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "468", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "475", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "477", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "498", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "503", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "506", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "519", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "526", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "530", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "536", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "545", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "554", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "556", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "569", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "572", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "577", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "606", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "634", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "646", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "654", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "665", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "672", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "679", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "684", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "692", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "694", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "695", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "698", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "699", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "702", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "704", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "705", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "706", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "712", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "728", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "angel"}, Item = {
        {["$"] = {Id = "7", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "33", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "72", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "78", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "98", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "101", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "108", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "112", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "124", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "138", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "142", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "146", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "156", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "162", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "173", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "178", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "182", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "184", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "185", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "197", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "243", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "313", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "326", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "331", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "332", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "333", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "334", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "335", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "363", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "374", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "387", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "390", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "400", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "407", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "413", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "415", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "423", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "464", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "477", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "490", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "498", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "499", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "510", Weight = "0.4", DecreaseBy = "0.4", RemoveOn = "0.04"}},
        {["$"] = {Id = "519", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "526", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "528", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "533", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "543", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "567", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "568", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "573", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "574", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "579", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "584", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "586", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "601", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "622", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "634", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "640", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "643", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "651", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "653", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "685", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "686", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "691", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "696", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "secret"}, Item = {
        {["$"] = {Id = "11", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "16", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "17", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "20", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "35", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "84", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "120", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "121", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "127", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "168", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "190", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "213", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "226", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "242", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "258", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "262", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "263", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "271", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "286", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "287", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "316", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "321", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "348", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "388", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "389", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "402", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "405", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "424", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "450", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "489", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "500", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "501", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "546", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "562", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "571", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "580", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "582", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "609", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "612", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "625", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "628", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "632", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "636", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "664", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "667", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "669", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "674", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "675", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "677", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "688", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "689", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "691", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "697", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "700", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "701", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "703", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "711", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "716", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "717", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "719", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "721", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "723", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "library"}, Item = {
        {["$"] = {Id = "33", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "34", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "35", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "58", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "65", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "78", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "97", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "123", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "192", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "282", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "287", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "292", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "545", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "584", Weight = "0.2", DecreaseBy = "0.02", RemoveOn = "0.02"}},
        {["$"] = {Id = "712", Weight = "0.2", DecreaseBy = "0.02", RemoveOn = "0.02"}}
    }},
    {["$"] = {Name = "shellGame"}, Item = {
        {["$"] = {Id = "9", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "36", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "209", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "378", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "504", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "576", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "goldenChest"}, Item = {
        {["$"] = {Id = "28", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "29", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "32", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "74", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "179", Weight = "0.5", DecreaseBy = "0.2", RemoveOn = "0.05"}},
        {["$"] = {Id = "194", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "196", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "255", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "341", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "343", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "344", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "354", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "355", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "370", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "428", Weight = "0.5", DecreaseBy = "0.2", RemoveOn = "0.05"}},
        {["$"] = {Id = "438", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "444", Weight = "0.1", DecreaseBy = "0.04", RemoveOn = "0.01"}},
        {["$"] = {Id = "455", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "456", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "534", Weight = "0.5", DecreaseBy = "0.2", RemoveOn = "0.05"}},
        {["$"] = {Id = "571", Weight = "0.1", DecreaseBy = "0.04", RemoveOn = "0.01"}},
        {["$"] = {Id = "644", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "708", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "730", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "732", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "redChest"}, Item = {
        {["$"] = {Id = "81", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "133", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "134", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "140", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "145", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "212", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "297", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "316", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "371", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "475", Weight = "0.1", DecreaseBy = "0.04", RemoveOn = "0.01"}},
        {["$"] = {Id = "565", Weight = "0.5", DecreaseBy = "0.2", RemoveOn = "0.05"}},
        {["$"] = {Id = "580", Weight = "0.1", DecreaseBy = "0.04", RemoveOn = "0.01"}},
        {["$"] = {Id = "642", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "654", Weight = "0.2", DecreaseBy = "0.08", RemoveOn = "0.02"}},
        {["$"] = {Id = "665", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "beggar"}, Item = {
        {["$"] = {Id = "21", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "22", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "23", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "24", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "25", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "26", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "46", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "54", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "102", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "111", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "144", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "177", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "180", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "195", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "198", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "204", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "246", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "271", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "294", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "362", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "376", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "385", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "447", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "455", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "456", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "485", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "707", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "demonBeggar"}, Item = {
        {["$"] = {Id = "13", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "14", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "51", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "70", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "79", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "80", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "82", Weight = "0.2", DecreaseBy = "0.1", RemoveOn = "0.02"}},
        {["$"] = {Id = "83", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "87", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "102", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "122", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "126", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "127", Weight = "0.5", DecreaseBy = "0.25", RemoveOn = "0.05"}},
        {["$"] = {Id = "143", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "159", Weight = "0.2", DecreaseBy = "0.1", RemoveOn = "0.02"}},
        {["$"] = {Id = "195", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "216", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "225", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "230", Weight = "0.2", DecreaseBy = "0.1", RemoveOn = "0.02"}},
        {["$"] = {Id = "240", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "241", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "259", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "262", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "278", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "340", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "345", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "409", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "420", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "475", Weight = "0.2", DecreaseBy = "0.1", RemoveOn = "0.02"}},
        {["$"] = {Id = "487", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "493", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "496", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "503", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "672", Weight = "0.5", DecreaseBy = "0.25", RemoveOn = "0.05"}},
        {["$"] = {Id = "676", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "curse"}, Item = {
        {["$"] = {Id = "51", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "79", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "80", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "81", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "126", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "133", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "134", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "145", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "212", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "215", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "216", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "225", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "241", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "260", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "371", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "408", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "442", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "451", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "468", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "475", Weight = "0.2", DecreaseBy = "0.1", RemoveOn = "0.02"}},
        {["$"] = {Id = "496", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "503", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "536", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "565", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "569", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "580", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "642", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "654", Weight = "0.5", DecreaseBy = "0.25", RemoveOn = "0.05"}},
        {["$"] = {Id = "665", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "692", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "694", Weight = "0.5", DecreaseBy = "0.25", RemoveOn = "0.05"}},
        {["$"] = {Id = "697", Weight = "0.5", DecreaseBy = "0.25", RemoveOn = "0.05"}},
        {["$"] = {Id = "702", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "711", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "keyMaster"}, Item = {
        {["$"] = {Id = "10", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "57", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "128", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "175", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "199", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "264", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "272", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "279", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "320", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "343", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "364", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "365", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "388", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "426", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "430", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "492", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "527", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "580", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "581", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "629", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "649", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "693", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "batteryBum"}, Item = {
        {["$"] = {Id = "63", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "116", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "205", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "356", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "372", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "494", Weight = "0.1", DecreaseBy = "0.05", RemoveOn = "0.01"}},
        {["$"] = {Id = "520", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "559", Weight = "0.1", DecreaseBy = "0.05", RemoveOn = "0.01"}},
        {["$"] = {Id = "603", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "647", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "momsChest"}, Item = {
        {["$"] = {Id = "29", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "30", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "31", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "39", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "41", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "55", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "102", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "110", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "114", Weight = "0.1", DecreaseBy = "0.05", RemoveOn = "0.01"}},
        {["$"] = {Id = "139", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "195", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "199", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "200", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "217", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "228", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "355", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "439", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "508", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "580", Weight = "0.5", DecreaseBy = "0.25", RemoveOn = "0.05"}},
        {["$"] = {Id = "732", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "greedTreasure"}, Item = {
        {["$"] = {Id = "1", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "2", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "3", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "4", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "5", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "6", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "7", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "8", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "10", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "12", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "13", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "17", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "34", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "35", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "37", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "38", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "42", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "45", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "47", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "48", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "50", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "52", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "55", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "56", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "57", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "62", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "64", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "65", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "67", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "68", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "69", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "77", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "78", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "85", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "87", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "88", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "89", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "93", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "94", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "95", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "96", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "97", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "98", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "99", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "100", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "101", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "102", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "103", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "104", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "106", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "107", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "108", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "110", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "111", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "114", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "115", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "117", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "120", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "121", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "124", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "125", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "126", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "128", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "131", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "132", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "137", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "138", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "140", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "142", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "146", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "148", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "149", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "150", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "151", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "152", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "153", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "154", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "155", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "157", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "161", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "162", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "163", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "167", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "168", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "169", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "170", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "172", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "174", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "175", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "186", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "188", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "189", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "190", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "191", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "192", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "200", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "201", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "206", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "209", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "210", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "213", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "214", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "217", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "220", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "221", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "222", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "223", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "224", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "226", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "228", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "229", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "231", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "233", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "234", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "236", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "237", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "242", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "244", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "245", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "254", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "256", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "257", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "258", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "261", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "264", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "265", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "266", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "267", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "268", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "269", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "271", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "273", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "274", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "277", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "279", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "280", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "281", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "288", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "291", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "299", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "300", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "301", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "302", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "303", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "305", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "306", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "307", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "308", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "309", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "310", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "312", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "315", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "316", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "317", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "318", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "319", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "320", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "321", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "322", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "325", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "329", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "330", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "332", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "333", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "334", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "335", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "336", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "349", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "351", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "352", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "353", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "357", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "358", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "359", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "362", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "364", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "365", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "366", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "367", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "368", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "369", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "371", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "373", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "374", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "375", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "377", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "378", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "379", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "380", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "382", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "383", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "384", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "389", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "391", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "392", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "393", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "394", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "395", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "397", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "398", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "401", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "407", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "410", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "411", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "416", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "421", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "422", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "425", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "426", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "430", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "431", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "432", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "434", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "436", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "440", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "443", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "444", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "445", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "446", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "447", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "448", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "449", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "450", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "452", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "453", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "454", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "457", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "458", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "459", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "460", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "461", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "463", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "465", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "466", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "467", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "469", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "470", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "471", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "473", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "493", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "494", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "495", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "496", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "497", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "502", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "503", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "504", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "506", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "507", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "508", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "509", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "511", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "512", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "513", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "514", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "515", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "516", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "517", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "518", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "520", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "522", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "524", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "525", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "529", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "531", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "532", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "537", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "539", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "540", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "542", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "543", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "544", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "545", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "548", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "549", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "553", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "555", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "557", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "558", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "559", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "560", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "561", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "563", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "565", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "570", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "575", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "576", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "578", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "581", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "583", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "605", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "607", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "608", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "609", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "610", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "611", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "612", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "614", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "615", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "616", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "617", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "618", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "625", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "629", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "631", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "635", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "637", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "639", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "641", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "645", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "649", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "650", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "652", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "655", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "657", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "658", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "661", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "663", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "671", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "675", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "676", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "677", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "678", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "680", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "681", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "682", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "683", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "687", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "690", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "693", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "695", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "703", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "709", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "710", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "713", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "716", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "717", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "719", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "720", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "721", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "722", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "723", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "724", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "725", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "726", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "727", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "728", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "729", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "greedBoss"}, Item = {
        {["$"] = {Id = "12", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "14", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "15", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "16", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "22", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "23", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "24", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "25", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "26", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "27", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "28", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "29", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "30", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "31", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "32", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "70", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "71", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "73", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "101", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "120", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "121", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "132", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "143", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "176", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "183", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "193", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "194", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "195", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "196", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "197", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "198", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "207", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "240", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "253", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "254", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "255", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "314", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "339", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "340", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "341", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "342", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "343", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "344", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "345", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "346", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "354", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "355", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "370", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "428", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "438", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "455", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "456", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "538", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "541", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "547", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "564", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "600", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "624", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "644", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "659", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "707", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "708", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "730", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "731", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "greedShop"}, Item = {
        {["$"] = {Id = "11", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "46", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "63", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "73", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "75", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "76", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "84", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "91", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "105", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "116", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "139", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "156", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "166", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "199", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "204", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "208", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "246", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "247", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "248", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "251", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "252", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "260", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "283", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "284", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "285", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "286", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "289", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "297", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "348", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "356", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "372", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "380", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "386", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "402", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "403", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "405", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "406", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "416", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "434", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "439", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "451", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "472", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "475", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "476", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "477", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "478", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "481", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "482", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "483", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "485", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "486", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "487", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "488", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "489", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "500", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "512", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "515", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "516", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "518", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "527", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "534", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "535", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "566", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "585", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "603", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "604", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "619", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "621", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "623", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "624", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "636", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "638", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "647", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "667", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "674", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "688", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "689", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "691", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "692", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "700", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "701", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "703", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "711", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "721", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "722", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "723", Weight = "0.1", DecreaseBy = "0.1", RemoveOn = "0.01"}},
        {["$"] = {Id = "732", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "greedCurse"}, Item = {
        {["$"] = {Id = "51", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "73", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "79", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "80", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "81", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "126", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "133", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "145", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "212", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "216", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "225", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "260", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "371", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "408", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "442", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "451", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "468", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "475", Weight = "0.2", DecreaseBy = "0.1", RemoveOn = "0.02"}},
        {["$"] = {Id = "496", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "503", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "536", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "565", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "569", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "642", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "654", Weight = "0.5", DecreaseBy = "0.25", RemoveOn = "0.05"}},
        {["$"] = {Id = "665", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "692", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "694", Weight = "0.5", DecreaseBy = "0.25", RemoveOn = "0.05"}},
        {["$"] = {Id = "702", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "711", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "greedDevil"}, Item = {
        {["$"] = {Id = "34", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "35", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "51", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "67", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "68", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "74", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "79", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "80", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "81", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "82", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "83", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "97", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "109", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "113", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "114", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "115", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "118", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "122", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "123", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "132", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "133", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "145", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "157", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "159", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "172", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "187", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "212", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "216", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "225", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "230", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "237", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "259", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "268", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "269", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "270", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "292", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "311", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "360", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "391", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "399", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "408", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "409", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "411", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "412", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "420", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "431", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "433", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "441", Weight = "0.2", DecreaseBy = "0.2", RemoveOn = "0.02"}},
        {["$"] = {Id = "442", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "451", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "462", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "468", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "503", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "506", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "519", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "526", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "536", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "545", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "554", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "556", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "569", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "572", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "577", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "606", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "634", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "646", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "654", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "665", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "679", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "684", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "692", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "694", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "695", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "698", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "699", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "702", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "704", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "705", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "706", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "712", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "728", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "greedAngel"}, Item = {
        {["$"] = {Id = "7", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "72", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "78", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "112", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "138", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "162", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "178", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "182", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "184", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "185", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "197", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "243", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "313", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "326", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "331", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "333", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "334", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "335", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "363", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "387", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "390", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "400", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "407", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "413", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "415", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "423", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "490", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "499", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "526", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "528", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "533", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "543", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "567", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "568", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "573", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "574", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "579", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "584", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "586", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "601", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "622", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "634", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "640", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "643", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "651", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "653", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "685", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "686", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "691", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "696", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "greedSecret"}, Item = {
        {["$"] = {Id = "11", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "16", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "17", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "20", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "35", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "84", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "120", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "121", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "127", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "168", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "190", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "213", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "226", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "242", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "258", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "262", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "263", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "271", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "286", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "316", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "321", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "348", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "389", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "402", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "405", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "424", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "450", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "489", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "500", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "501", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "546", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "562", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "571", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "582", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "609", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "612", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "625", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "628", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "632", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "636", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "664", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "667", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "669", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "674", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "677", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "688", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "689", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "691", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "700", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "701", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "703", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "711", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "716", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "717", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "719", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "721", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "723", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "craneGame"}, Item = {
        {["$"] = {Id = "1", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "3", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "4", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "5", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "21", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "32", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "38", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "44", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "46", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "47", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "48", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "49", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "51", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "63", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "66", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "68", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "77", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "85", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "89", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "90", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "91", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "93", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "95", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "102", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "105", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "116", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "136", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "137", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "147", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "152", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "153", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "166", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "189", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "194", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "196", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "208", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "212", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "227", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "232", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "244", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "251", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "255", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "263", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "267", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "283", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "284", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "285", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "337", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "338", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "352", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "357", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "362", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "370", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "382", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "383", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "386", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "395", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "397", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "403", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "406", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "419", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "422", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "425", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "427", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "437", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "438", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "439", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "444", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "451", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "465", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "476", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "478", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "488", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "494", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "505", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "515", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "516", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "518", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "524", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "527", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "538", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "599", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "604", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "609", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "617", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "624", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "629", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "638", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "644", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "649", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "655", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "687", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "709", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "720", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "723", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}},
        {["$"] = {Id = "730", Weight = "1", DecreaseBy = "0.1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "ultraSecret"}, Item = {
        {["$"] = {Id = "12", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "13", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "15", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "30", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "31", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "40", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "45", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "49", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "51", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "53", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "67", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "72", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "73", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "79", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "80", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "82", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "96", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "105", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "109", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "110", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "118", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "119", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "122", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "135", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "137", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "157", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "159", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "166", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "167", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "176", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "177", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "182", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "193", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "208", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "214", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "230", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "247", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "253", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "254", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "261", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "276", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "289", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "334", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "373", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "394", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "399", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "411", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "412", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "421", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "435", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "443", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "452", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "462", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "466", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "475", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "481", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "506", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "511", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "531", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "541", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "554", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "556", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "565", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "572", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "573", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "580", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "606", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "607", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "614", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "616", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "618", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "621", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "637", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "650", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "654", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "657", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "671", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "678", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "682", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "684", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "692", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "694", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "695", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "700", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "702", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "703", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "704", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "705", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "706", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "711", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "724", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "726", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "728", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "bombBum"}, Item = {
        {["$"] = {Id = "37", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "106", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "125", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "137", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "140", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "190", Weight = "0.2", DecreaseBy = "0.1", RemoveOn = "0.02"}},
        {["$"] = {Id = "209", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "220", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "256", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "353", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "366", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "367", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "432", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "483", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "517", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "563", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "583", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "614", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}},
        {["$"] = {Id = "646", Weight = "0.2", DecreaseBy = "0.1", RemoveOn = "0.02"}},
        {["$"] = {Id = "727", Weight = "1", DecreaseBy = "0.5", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "planetarium"}, Item = {
        {["$"] = {Id = "588", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "589", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "590", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "591", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "592", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "593", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "594", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "595", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "596", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "597", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "598", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "oldChest"}, Item = {
        {["$"] = {Id = "29", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "30", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "31", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "39", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "41", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "55", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "102", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "110", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "114", Weight = "0.2", DecreaseBy = "0.08", RemoveOn = "0.02"}},
        {["$"] = {Id = "139", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "175", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "195", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "199", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "200", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "217", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "228", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "341", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "355", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "439", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "455", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "508", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "546", Weight = "0.2", DecreaseBy = "0.08", RemoveOn = "0.02"}},
        {["$"] = {Id = "547", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "604", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}},
        {["$"] = {Id = "732", Weight = "1", DecreaseBy = "0.4", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "babyShop"}, Item = {
        {["$"] = {Id = "8", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "10", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "57", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "67", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "73", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "88", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "95", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "96", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "99", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "100", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "112", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "113", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "117", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "128", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "144", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "155", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "163", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "167", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "170", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "172", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "174", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "188", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "207", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "264", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "265", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "266", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "267", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "268", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "269", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "270", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "272", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "273", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "274", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "275", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "277", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "278", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "279", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "280", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "281", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "320", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "322", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "360", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "361", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "363", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "364", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "365", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "372", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "384", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "385", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "388", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "390", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "403", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "404", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "417", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "426", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "430", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "435", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "468", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "470", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "471", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "472", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "473", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "491", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "492", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "509", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "511", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "518", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "519", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "537", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "575", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "581", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "607", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "608", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "610", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "612", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "615", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "629", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "635", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "645", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "649", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "661", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "679", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "682", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "698", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "woodenChest"}, Item = {
        {["$"] = {Id = "7", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "27", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "60", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "138", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "183", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "349", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "362", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "439", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "488", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "527", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "719", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }},
    {["$"] = {Name = "rottenBeggar"}, Item = {
        {["$"] = {Id = "26", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "42", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "140", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "268", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "273", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "336", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "480", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}},
        {["$"] = {Id = "618", Weight = "0.5", DecreaseBy = "0.5", RemoveOn = "0.05"}},
        {["$"] = {Id = "639", Weight = "1", DecreaseBy = "1", RemoveOn = "0.1"}}
    }}
}}}
 end,
["objects.itemPoolTypeToCollectibleTypesSet"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local ____exports = {}
local getItemPoolJSON
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local ITEM_POOL_TYPE_VALUES = ____cachedEnumValues.ITEM_POOL_TYPE_VALUES
local itemPoolsJSON = require("data.itempools")
local ____types = require("functions.types")
local asCollectibleType = ____types.asCollectibleType
local parseIntSafe = ____types.parseIntSafe
local ____itemPoolTypeToItemPoolName = require("maps.itemPoolTypeToItemPoolName")
local ITEM_POOL_TYPE_TO_ITEM_POOL_NAME = ____itemPoolTypeToItemPoolName.ITEM_POOL_TYPE_TO_ITEM_POOL_NAME
function getItemPoolJSON(self, itemPoolType)
    local itemPoolName = ITEM_POOL_TYPE_TO_ITEM_POOL_NAME[itemPoolType]
    local itemPoolsJSONArray = itemPoolsJSON.ItemPools.Pool
    return __TS__ArrayFind(
        itemPoolsJSONArray,
        function(____, itemPoolJSON) return itemPoolJSON["$"].Name == itemPoolName end
    )
end
____exports.ITEM_POOL_TYPE_TO_COLLECTIBLE_TYPES_SET = (function()
    local itemPoolTypeToCollectibleTypes = {}
    for ____, itemPoolType in ipairs(ITEM_POOL_TYPE_VALUES) do
        local itemPoolJSON = getItemPoolJSON(nil, itemPoolType)
        if itemPoolJSON == nil then
            itemPoolTypeToCollectibleTypes[itemPoolType] = __TS__New(Set)
        else
            local collectibleTypesSet = __TS__New(Set)
            for ____, itemPoolJSONElement in ipairs(itemPoolJSON.Item) do
                local collectibleTypeInt = parseIntSafe(nil, itemPoolJSONElement["$"].Id)
                if collectibleTypeInt == nil then
                    error("Failed to parse a collectible type in the \"itempools.json\" file: " .. itemPoolJSONElement["$"].Id)
                end
                local collectibleType = asCollectibleType(nil, collectibleTypeInt)
                collectibleTypesSet:add(collectibleType)
            end
            itemPoolTypeToCollectibleTypes[itemPoolType] = collectibleTypesSet
        end
    end
    return itemPoolTypeToCollectibleTypes
end)(nil)
return ____exports
 end,
["functions.itemPool"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemPoolType = ____isaac_2Dtypescript_2Ddefinitions.ItemPoolType
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local ITEM_POOL_TYPE_VALUES = ____cachedEnumValues.ITEM_POOL_TYPE_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____itemPoolTypeToItemPoolName = require("maps.itemPoolTypeToItemPoolName")
local ITEM_POOL_TYPE_TO_ITEM_POOL_NAME = ____itemPoolTypeToItemPoolName.ITEM_POOL_TYPE_TO_ITEM_POOL_NAME
local ____itemPoolTypeToCollectibleTypesSet = require("objects.itemPoolTypeToCollectibleTypesSet")
local ITEM_POOL_TYPE_TO_COLLECTIBLE_TYPES_SET = ____itemPoolTypeToCollectibleTypesSet.ITEM_POOL_TYPE_TO_COLLECTIBLE_TYPES_SET
local ____array = require("functions.array")
local arrayRemove = ____array.arrayRemove
local getRandomArrayElement = ____array.getRandomArrayElement
local NORMAL_MODE_ONLY_ITEM_POOL_TYPES = {
    ItemPoolType.TREASURE,
    ItemPoolType.BOSS,
    ItemPoolType.SHOP,
    ItemPoolType.DEVIL,
    ItemPoolType.ANGEL,
    ItemPoolType.CURSE,
    ItemPoolType.SECRET
}
local GREED_MODE_ONLY_ITEM_POOL_TYPES = {
    ItemPoolType.GREED_TREASURE,
    ItemPoolType.GREED_BOSS,
    ItemPoolType.GREED_SHOP,
    ItemPoolType.GREED_DEVIL,
    ItemPoolType.GREED_ANGEL,
    ItemPoolType.GREED_CURSE,
    ItemPoolType.GREED_SECRET
}
local FAKE_ITEM_POOL_TYPES = {ItemPoolType.SHELL_GAME}
local ____arrayRemove_1 = arrayRemove
local ____array_0 = __TS__SparseArrayNew(
    nil,
    ITEM_POOL_TYPE_VALUES,
    table.unpack(GREED_MODE_ONLY_ITEM_POOL_TYPES)
)
__TS__SparseArrayPush(
    ____array_0,
    table.unpack(FAKE_ITEM_POOL_TYPES)
)
local NORMAL_MODE_ITEM_POOL_TYPES = ____arrayRemove_1(__TS__SparseArraySpread(____array_0))
local ____arrayRemove_3 = arrayRemove
local ____array_2 = __TS__SparseArrayNew(
    nil,
    ITEM_POOL_TYPE_VALUES,
    table.unpack(NORMAL_MODE_ONLY_ITEM_POOL_TYPES)
)
__TS__SparseArrayPush(
    ____array_2,
    table.unpack(FAKE_ITEM_POOL_TYPES)
)
local GREED_MODE_ITEM_POOL_TYPES = ____arrayRemove_3(__TS__SparseArraySpread(____array_2))
--- Helper function to get the collectibles that are in a particular item pool at the beginning of a
-- vanilla run.
function ____exports.getDefaultCollectibleTypesInItemPool(self, itemPoolType)
    return ITEM_POOL_TYPE_TO_COLLECTIBLE_TYPES_SET[itemPoolType]
end
--- Helper function to get the item pools that a particular collectible starts in at the beginning of
-- a vanilla run.
-- 
-- This function will automatically account for Greed Mode. In other words, it will not return the
-- "normal" item pools when playing in Greed Mode.
function ____exports.getDefaultItemPoolsForCollectibleType(self, collectibleType)
    local collectibleItemPoolTypes = {}
    local itemPoolTypes = game:IsGreedMode() and GREED_MODE_ITEM_POOL_TYPES or NORMAL_MODE_ITEM_POOL_TYPES
    for ____, itemPoolType in ipairs(itemPoolTypes) do
        local collectibleTypesSet = ITEM_POOL_TYPE_TO_COLLECTIBLE_TYPES_SET[itemPoolType]
        if collectibleTypesSet:has(collectibleType) then
            collectibleItemPoolTypes[#collectibleItemPoolTypes + 1] = itemPoolType
        end
    end
    return collectibleItemPoolTypes
end
--- Helper function to get the name for an item pool type as it appears in the "itempools.xml" file.
function ____exports.getItemPoolName(self, itemPoolType)
    return ITEM_POOL_TYPE_TO_ITEM_POOL_NAME[itemPoolType]
end
--- Helper function to get a random item pool. This is not as simple as getting a random value from
-- the `ItemPoolType` enum, since `ItemPoolType.SHELL_GAME` (7) is not a real item pool and the
-- Greed Mode item pools should be excluded if not playing in Greed Mode.
-- 
-- If you want to get an unseeded item pool, you must explicitly pass `undefined` to the `seedOrRNG`
-- parameter.
-- 
-- @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
-- `RNG.Next` method will be called. If `undefined` is provided, it will default to
-- a random seed.
function ____exports.getRandomItemPool(self, seedOrRNG)
    local itemPoolTypes = game:IsGreedMode() and GREED_MODE_ITEM_POOL_TYPES or NORMAL_MODE_ITEM_POOL_TYPES
    return getRandomArrayElement(nil, itemPoolTypes, seedOrRNG)
end
--- Helper function to check if a particular collectibles is in a particular item pool at the
-- beginning of a vanilla run.
function ____exports.isCollectibleTypeInDefaultItemPool(self, collectibleType, itemPoolType)
    local collectibleTypesSet = ITEM_POOL_TYPE_TO_COLLECTIBLE_TYPES_SET[itemPoolType]
    return collectibleTypesSet:has(collectibleType)
end
--- Helper function to remove one or more collectibles from all item pools.
-- 
-- This function is variadic, meaning you can pass as many collectible types as you want to remove.
function ____exports.removeCollectibleFromPools(self, ...)
    local collectibleTypes = {...}
    local itemPool = game:GetItemPool()
    for ____, collectibleType in ipairs(collectibleTypes) do
        itemPool:RemoveCollectible(collectibleType)
    end
end
--- Helper function to remove one or more trinkets from all item pools.
-- 
-- This function is variadic, meaning you can pass as many trinket types as you want to remove.
function ____exports.removeTrinketFromPools(self, ...)
    local trinketTypes = {...}
    local itemPool = game:GetItemPool()
    for ____, trinketType in ipairs(trinketTypes) do
        itemPool:RemoveTrinket(trinketType)
    end
end
return ____exports
 end,
["functions.playerEffects"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____playerIndex = require("functions.playerIndex")
local getAllPlayers = ____playerIndex.getAllPlayers
local ____players = require("functions.players")
local isCharacter = ____players.isCharacter
--- Helper function to check to see if any player has a temporary collectible effect.
function ____exports.anyPlayerHasCollectibleEffect(self, collectibleType)
    local players = getAllPlayers(nil)
    return __TS__ArraySome(
        players,
        function(____, player)
            local effects = player:GetEffects()
            return effects:HasCollectibleEffect(collectibleType)
        end
    )
end
--- Helper function to check to see if any player has a temporary null effect.
function ____exports.anyPlayerHasNullEffect(self, nullItemID)
    local players = getAllPlayers(nil)
    return __TS__ArraySome(
        players,
        function(____, player)
            local effects = player:GetEffects()
            return effects:HasNullEffect(nullItemID)
        end
    )
end
--- Helper function to check to see if any player has a temporary trinket effect.
function ____exports.anyPlayerHasTrinketEffect(self, trinketType)
    local players = getAllPlayers(nil)
    return __TS__ArraySome(
        players,
        function(____, player)
            local effects = player:GetEffects()
            return effects:HasTrinketEffect(trinketType)
        end
    )
end
--- Helper function to get an array of temporary effects for a player. This is helpful so that you
-- don't have to manually create an array from an `EffectsList` object.
function ____exports.getEffectsList(self, player)
    local effects = player:GetEffects()
    local effectsList = effects:GetEffectsList()
    local effectArray = {}
    do
        local i = 0
        while i < effectsList.Size do
            local effect = effectsList:Get(i)
            if effect ~= nil then
                effectArray[#effectArray + 1] = effect
            end
            i = i + 1
        end
    end
    return effectArray
end
--- Helper function to check if a player should have Whore of Babylon active at their current health
-- level.
-- 
-- - For most characters, Whore of Babylon activates when the red hearts are at 1/2 or less.
-- - For Eve, Whore of Babylon activates when the red hearts are at 1 or less.
function ____exports.shouldWhoreOfBabylonBeActive(self, player)
    local redHearts = player:GetHearts()
    local threshold = isCharacter(nil, player, PlayerType.EVE) and 2 or 1
    return redHearts <= threshold
end
return ____exports
 end,
["functions.logMisc"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__Spread = ____lualib.__TS__Spread
local __TS__ArraySort = ____lualib.__TS__ArraySort
local __TS__ArrayEntries = ____lualib.__TS__ArrayEntries
local __TS__Iterator = ____lualib.__TS__Iterator
local Set = ____lualib.Set
local __TS__TypeOf = ____lualib.__TS__TypeOf
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local DamageFlag = ____isaac_2Dtypescript_2Ddefinitions.DamageFlag
local DisplayFlag = ____isaac_2Dtypescript_2Ddefinitions.DisplayFlag
local EntityFlag = ____isaac_2Dtypescript_2Ddefinitions.EntityFlag
local GameStateFlag = ____isaac_2Dtypescript_2Ddefinitions.GameStateFlag
local GridRoom = ____isaac_2Dtypescript_2Ddefinitions.GridRoom
local HeartSubType = ____isaac_2Dtypescript_2Ddefinitions.HeartSubType
local LevelStateFlag = ____isaac_2Dtypescript_2Ddefinitions.LevelStateFlag
local Music = ____isaac_2Dtypescript_2Ddefinitions.Music
local ProjectileFlag = ____isaac_2Dtypescript_2Ddefinitions.ProjectileFlag
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local SeedEffect = ____isaac_2Dtypescript_2Ddefinitions.SeedEffect
local SoundEffect = ____isaac_2Dtypescript_2Ddefinitions.SoundEffect
local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
local TearFlag = ____isaac_2Dtypescript_2Ddefinitions.TearFlag
local UseFlag = ____isaac_2Dtypescript_2Ddefinitions.UseFlag
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local musicManager = ____cachedClasses.musicManager
local sfxManager = ____cachedClasses.sfxManager
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____array = require("functions.array")
local arrayToString = ____array.arrayToString
local isArray = ____array.isArray
local ____bosses = require("functions.bosses")
local getBossID = ____bosses.getBossID
local ____collectibles = require("functions.collectibles")
local getCollectibleName = ____collectibles.getCollectibleName
local ____entities = require("functions.entities")
local getEntityID = ____entities.getEntityID
local ____enums = require("functions.enums")
local getEnumEntries = ____enums.getEnumEntries
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local ____isaacAPIClass = require("functions.isaacAPIClass")
local getIsaacAPIClassName = ____isaacAPIClass.getIsaacAPIClassName
local ____itemPool = require("functions.itemPool")
local getItemPoolName = ____itemPool.getItemPoolName
local ____log = require("functions.log")
local log = ____log.log
local ____playerEffects = require("functions.playerEffects")
local getEffectsList = ____playerEffects.getEffectsList
local ____playerHealth = require("functions.playerHealth")
local getPlayerHealth = ____playerHealth.getPlayerHealth
local ____players = require("functions.players")
local getPlayerName = ____players.getPlayerName
local ____roomData = require("functions.roomData")
local getRoomData = ____roomData.getRoomData
local getRoomGridIndex = ____roomData.getRoomGridIndex
local getRoomListIndex = ____roomData.getRoomListIndex
local ____set = require("functions.set")
local combineSets = ____set.combineSets
local getSortedSetValues = ____set.getSortedSetValues
local ____table = require("functions.table")
local iterateTableInOrder = ____table.iterateTableInOrder
local ____trinkets = require("functions.trinkets")
local getTrinketName = ____trinkets.getTrinketName
local ____tstlClass = require("functions.tstlClass")
local isDefaultMap = ____tstlClass.isDefaultMap
local isTSTLMap = ____tstlClass.isTSTLMap
local isTSTLSet = ____tstlClass.isTSTLSet
local ____types = require("functions.types")
local isTable = ____types.isTable
local isUserdata = ____types.isUserdata
local ____vector = require("functions.vector")
local vectorToString = ____vector.vectorToString
--- Helper function for logging every flag that is turned on. Useful when debugging.
function ____exports.logFlags(flags, flagEnum, description)
    if description == nil then
        description = ""
    end
    if description ~= "" then
        description = "flag"
    end
    log((("Logging " .. description) .. " values for: ") .. tostring(flags))
    local hasNoFlags = true
    local entries = getEnumEntries(nil, flagEnum)
    for ____, ____value in ipairs(entries) do
        local key = ____value[1]
        local value = ____value[2]
        if hasFlag(nil, flags, value) then
            log(((("  Has flag: " .. key) .. " (") .. tostring(value)) .. ")")
            hasNoFlags = false
        end
    end
    if hasNoFlags then
        log("  n/a (no flags)")
    end
end
--- Helper function to log all of the values in an array.
-- 
-- @param array The array to log.
-- @param name Optional. The name of the array, which will be logged before the elements.
function ____exports.logArray(array, name)
    if not isArray(nil, array, false) then
        log("Tried to log an array, but the given object was not an array.")
        return
    end
    local arrayString = arrayToString(nil, array)
    if name == nil then
        name = "array"
    end
    log((("Logging " .. name) .. ": ") .. arrayString)
end
--- Helper function to log the names of a collectible type array.
-- 
-- @param collectibleTypes The collectible types to log.
-- @param name Optional. The name of the array, which will be logged before the elements.
function ____exports.logCollectibleTypes(collectibleTypes, name)
    if name == nil then
        name = "collectibles"
    end
    log(("Logging " .. name) .. ":")
    local i = 1
    for ____, collectibleType in ipairs(collectibleTypes) do
        local collectibleName = getCollectibleName(nil, collectibleType)
        log(((((tostring(i) .. ") ") .. collectibleName) .. " (") .. tostring(collectibleType)) .. ")")
        i = i + 1
    end
end
--- Helper function to log a `Color` object.
-- 
-- @param color The `Color` object to log.
-- @param name Optional. The name of the object, which will be logged before the properties.
function ____exports.logColor(color, name)
    if name == nil then
        name = "color"
    end
    log((((((((((((((("Logging " .. name) .. ": R") .. tostring(color.R)) .. ", G") .. tostring(color.G)) .. ", B") .. tostring(color.B)) .. ", A") .. tostring(color.A)) .. ", RO") .. tostring(color.RO)) .. ", BO") .. tostring(color.BO)) .. ", GO") .. tostring(color.GO))
end
--- Helper function to log every damage flag that is turned on. Useful when debugging.
function ____exports.logDamageFlags(damageFlags)
    ____exports.logFlags(damageFlags, DamageFlag, "damage")
end
--- Helper function to log every display flag that is turned on. Useful when debugging.
function ____exports.logDisplayFlags(displayFlags)
    ____exports.logFlags(displayFlags, DisplayFlag, "display")
end
--- Helper function to log every entity flag that is turned on. Useful when debugging.
function ____exports.logEntityFlags(entityFlags)
    ____exports.logFlags(entityFlags, EntityFlag, "entity")
end
function ____exports.logEntityID(entity)
    local entityID = getEntityID(nil, entity)
    log("Logging entity: " .. entityID)
end
--- Helper function for logging every game state flag that is turned on. Useful when debugging.
function ____exports.logGameStateFlags()
    log("Logging game state flags:")
    local gameStateFlagEntries = getEnumEntries(nil, GameStateFlag)
    local hasNoFlags = true
    for ____, ____value in ipairs(gameStateFlagEntries) do
        local key = ____value[1]
        local gameStateFlag = ____value[2]
        local flagValue = game:GetStateFlag(gameStateFlag)
        if flagValue then
            log(((("  Has flag: " .. key) .. " (") .. tostring(gameStateFlag)) .. ")")
            hasNoFlags = false
        end
    end
    if hasNoFlags then
        log("  n/a (no flags)")
    end
end
--- Helper function to log the names of a item pool type array.
-- 
-- @param itemPoolTypes The item pool types to log.
-- @param name Optional. The name of the array, which will be logged before the elements.
function ____exports.logItemPoolTypes(itemPoolTypes, name)
    if name == nil then
        name = "item pool types"
    end
    log(("Logging " .. name) .. ":")
    local i = 1
    for ____, itemPoolType in ipairs(itemPoolTypes) do
        local itemPoolName = getItemPoolName(nil, itemPoolType)
        log(((((tostring(i) .. ") ") .. itemPoolName) .. " (") .. tostring(itemPoolType)) .. ")")
        i = i + 1
    end
end
--- Helper function to log a `KColor` object.
-- 
-- @param kColor The `KColor` object to log.
-- @param name Optional. The name of the object, which will be logged before the properties.
function ____exports.logKColor(kColor, name)
    if name == nil then
        name = "KColor"
    end
    log((((((((("Logging " .. name) .. ": R") .. tostring(kColor.Red)) .. ", G") .. tostring(kColor.Green)) .. ", B") .. tostring(kColor.Blue)) .. ", A") .. tostring(kColor.Alpha))
end
--- Helper function for logging every level state flag that is turned on. Useful when debugging.
function ____exports.logLevelStateFlags()
    local level = game:GetLevel()
    local levelStateFlagEntries = getEnumEntries(nil, LevelStateFlag)
    log("Logging level state flags:")
    local hasNoFlags = true
    for ____, ____value in ipairs(levelStateFlagEntries) do
        local key = ____value[1]
        local levelStateFlag = ____value[2]
        local flagValue = level:GetStateFlag(levelStateFlag)
        if flagValue then
            log(((("  Has flag: " .. key) .. " (") .. tostring(levelStateFlag)) .. ")")
            hasNoFlags = false
        end
    end
    if hasNoFlags then
        log("  n/a (no flags)")
    end
end
--- Helper function to log a TSTL `Map`.
-- 
-- @param map The TSTL `Map` to log.
-- @param name Optional. The name of the map, which will be logged before the elements.
function ____exports.logMap(map, name)
    if not isTSTLMap(nil, map) and not isDefaultMap(nil, map) then
        log("Tried to log a TSTL map, but the given object was not a TSTL map.")
        return
    end
    local suffix = name == nil and "" or (" \"" .. name) .. "\""
    log(("Logging a TSTL map" .. suffix) .. ":")
    local mapKeys = {__TS__Spread(map:keys())}
    __TS__ArraySort(mapKeys)
    for ____, key in ipairs(mapKeys) do
        local value = map:get(key)
        log((("  " .. tostring(key)) .. " --> ") .. tostring(value))
    end
    log("  The size of the map was: " .. tostring(map.size))
end
function ____exports.logMusic()
    local currentMusic = musicManager:GetCurrentMusicID()
    log(((("Currently playing music track: " .. Music[currentMusic]) .. " (") .. tostring(currentMusic)) .. ")")
end
function ____exports.logPlayerEffects(player)
    local effects = getEffectsList(nil, player)
    log("Logging player effects:")
    if #effects == 0 then
        log("  n/a (no effects)")
        return
    end
    for ____, ____value in __TS__Iterator(__TS__ArrayEntries(effects)) do
        local i = ____value[1]
        local effect = ____value[2]
        local effectDescription
        if effect.Item:IsCollectible() then
            local collectibleName = getCollectibleName(nil, effect.Item.ID)
            effectDescription = "Collectible: " .. collectibleName
        elseif effect.Item:IsTrinket() then
            local trinketName = getTrinketName(nil, effect.Item.ID)
            effectDescription = "Trinket: " .. trinketName
        elseif effect.Item:IsNull() then
            effectDescription = "Null item: " .. tostring(effect.Item.ID)
        else
            effectDescription = "Unknown type of effect: " .. tostring(effect.Item.ID)
        end
        log(((((("  " .. tostring(i + 1)) .. ") ") .. effectDescription) .. " (x") .. tostring(effect.Count)) .. ")")
    end
end
function ____exports.logPlayerHealth(player)
    local playerName = getPlayerName(nil, player)
    local playerHealth = getPlayerHealth(nil, player)
    log(("Player health for " .. playerName) .. ":")
    log("  Max hearts: " .. tostring(playerHealth.maxHearts))
    log("  Hearts: " .. tostring(playerHealth.hearts))
    log("  Eternal hearts: " .. tostring(playerHealth.eternalHearts))
    log("  Soul hearts: " .. tostring(playerHealth.soulHearts))
    log("  Bone hearts: " .. tostring(playerHealth.boneHearts))
    log("  Golden hearts: " .. tostring(playerHealth.goldenHearts))
    log("  Rotten hearts: " .. tostring(playerHealth.rottenHearts))
    log("  Broken hearts: " .. tostring(playerHealth.brokenHearts))
    log("  Soul charges: " .. tostring(playerHealth.soulCharges))
    log("  Blood charges: " .. tostring(playerHealth.bloodCharges))
    log("  Soul heart types: [")
    for ____, soulHeartType in ipairs(playerHealth.soulHeartTypes) do
        log("    HeartSubType." .. HeartSubType[soulHeartType])
    end
    log("  ]")
end
--- Helper function for logging every projectile flag that is turned on. Useful when debugging.
function ____exports.logProjectileFlags(projectileFlags)
    ____exports.logFlags(projectileFlags, ProjectileFlag, "projectile")
end
--- Helper function for logging information about the current room.
function ____exports.logRoom()
    local bossID = getBossID(nil)
    local roomGridIndex = getRoomGridIndex(nil)
    local roomListIndex = getRoomListIndex(nil)
    local roomData = getRoomData(nil)
    log("Logging room information:")
    log(("- Room stage ID: " .. StageID[roomData.StageID]) .. " (roomData.StageID)")
    log(((("- Room type: " .. RoomType[roomData.Type]) .. " (") .. tostring(roomData.Type)) .. ")")
    log("- Variant: " .. tostring(roomData.Variant))
    log("- Sub-type: " .. tostring(roomData.Subtype))
    log("- Name: " .. roomData.Name)
    local roomGridIndexName = GridRoom[roomGridIndex]
    if roomGridIndexName == nil then
        log("- Grid index: " .. tostring(roomGridIndex))
    else
        log(((("- Grid index: " .. roomGridIndexName) .. " (") .. tostring(roomGridIndex)) .. ")")
    end
    log("- List index: " .. tostring(roomListIndex))
    if bossID == nil then
        log("- Boss ID: undefined")
    else
        log(((("- Boss ID: " .. BossID[bossID]) .. " (") .. tostring(bossID)) .. ")")
    end
end
--- Helper function for logging every seed effect (i.e. Easter Egg) that is turned on for the
-- particular run.
function ____exports.logSeedEffects()
    local seeds = game:GetSeeds()
    local seedEffectEntries = getEnumEntries(nil, SeedEffect)
    log("Logging seed effects:")
    local hasNoSeedEffects = true
    for ____, ____value in ipairs(seedEffectEntries) do
        local key = ____value[1]
        local seedEffect = ____value[2]
        if seeds:HasSeedEffect(seedEffect) then
            log(((("  " .. key) .. " (") .. tostring(seedEffect)) .. ")")
            hasNoSeedEffects = false
        end
    end
    if hasNoSeedEffects then
        log("  n/a (no seed effects)")
    end
end
--- Helper function to log a TSTL `Set`.
-- 
-- @param set The TSTL `Set` to log.
-- @param name Optional. The name of the set, which will be logged before the elements.
function ____exports.logSet(set, name)
    if not isTSTLSet(nil, set) then
        log("Tried to log a TSTL set, but the given object was not a TSTL set.")
        return
    end
    local suffix = name == nil and "" or (" \"" .. name) .. "\""
    log(("Logging a TSTL set" .. suffix) .. ":")
    local setValues = getSortedSetValues(nil, set)
    for ____, value in ipairs(setValues) do
        log("  Value: " .. tostring(value))
    end
    log("  The size of the set was: " .. tostring(set.size))
end
--- Helper function for logging every sound effect that is currently playing.
function ____exports.logSounds()
    local soundEffects = getEnumEntries(nil, SoundEffect)
    for ____, ____value in ipairs(soundEffects) do
        local key = ____value[1]
        local soundEffect = ____value[2]
        if sfxManager:IsPlaying(soundEffect) then
            log(((("Currently playing sound effect: " .. key) .. " (") .. tostring(soundEffect)) .. ")")
        end
    end
end
--- Helper function for logging every key and value of a Lua table. This is a deep log; the function
-- will recursively call itself if it encounters a table within a table.
-- 
-- This function will only work on tables that have string keys (because it logs the keys in order,
-- instead of randomly). It will throw a run-time error if it encounters a non-string key.
-- 
-- In order to prevent infinite recursion, this function will not log a sub-table when there are 10
-- or more parent tables.
function ____exports.logTable(luaTable, parentTables)
    if parentTables == nil then
        parentTables = 0
    end
    if parentTables == 0 then
        log("Logging a Lua table:", false)
    elseif parentTables > 10 then
        return
    end
    local numSpaces = (parentTables + 1) * 2
    local indentation = string.rep(
        " ",
        math.floor(numSpaces)
    )
    if not isTable(nil, luaTable) then
        log(
            ((indentation .. "n/a (encountered a variable of type \"") .. __TS__TypeOf(luaTable)) .. "\" instead of a table)",
            false
        )
        return
    end
    local numElements = 0
    iterateTableInOrder(
        nil,
        luaTable,
        function(____, key, value)
            log(
                ((indentation .. tostring(key)) .. " --> ") .. tostring(value),
                false
            )
            if isTable(nil, value) then
                if key == "__class" then
                    log(indentation .. "  (skipping enumerating this key to avoid infinite recursion)", false)
                else
                    ____exports.logTable(value, parentTables + 1)
                end
            end
            numElements = numElements + 1
        end
    )
    log(
        (indentation .. "The size of the table was: ") .. tostring(numElements),
        false
    )
end
--- Helper function to log the differences between the entries of two tables. Note that this will
-- only do a shallow comparison.
function ____exports.logTableDifferences(table1, table2)
    log("Comparing two Lua tables:")
    local table1Keys = __TS__ObjectKeys(table1)
    local table1KeysSet = __TS__New(ReadonlySet, table1Keys)
    local table2Keys = __TS__ObjectKeys(table2)
    local table2KeysSet = __TS__New(ReadonlySet, table2Keys)
    local keysSet = combineSets(nil, table1KeysSet, table2KeysSet)
    local keys = {__TS__Spread(keysSet:values())}
    __TS__ArraySort(keys)
    for ____, key in ipairs(keys) do
        local value1 = table1[key]
        local value2 = table2[key]
        if value1 == nil then
            log("  Table 1 is missing key: " .. tostring(key))
        end
        if value2 == nil then
            log("  Table 2 is missing key: " .. tostring(key))
        end
        if value1 ~= value2 then
            log(((((("  " .. tostring(key)) .. " --> \"") .. tostring(value1)) .. "\" versus \"") .. tostring(value2)) .. "\"")
        end
    end
end
--- Helper function to log the keys of a Lua table. This is not a deep log; only the keys of the
-- top-most table will be logged.
-- 
-- This function is useful for tables that have recursive references.
function ____exports.logTableKeys(luaTable)
    log("Logging the keys of a Lua table:")
    if not isTable(nil, luaTable) then
        log(("  n/a (encountered a variable of type \"" .. __TS__TypeOf(luaTable)) .. "\" instead of a table)")
        return
    end
    local numElements = 0
    iterateTableInOrder(
        nil,
        luaTable,
        function(____, key)
            log(tostring(key))
            numElements = numElements + 1
        end
    )
    log("  The size of the table was: " .. tostring(numElements))
end
--- Helper function to log every table key and value. This is a shallow log; the function will not
-- recursively traverse sub-tables.
-- 
-- This function will only work on tables that have string keys (because it logs the keys in order,
-- instead of randomly). It will throw a run-time error if it encounters a non-string key.
function ____exports.logTableShallow(luaTable)
    log("Logging a Lua table (shallow):", false)
    if not isTable(nil, luaTable) then
        log(
            ("n/a (encountered a variable of type \"" .. __TS__TypeOf(luaTable)) .. "\" instead of a table)",
            false
        )
        return
    end
    local numElements = 0
    local indentation = "  "
    iterateTableInOrder(
        nil,
        luaTable,
        function(____, key, value)
            log(
                ((indentation .. tostring(key)) .. " --> ") .. tostring(value),
                false
            )
            numElements = numElements + 1
        end
    )
    log(
        (indentation .. "The size of the table was: ") .. tostring(numElements),
        false
    )
end
--- Helper function for log every tear flag that is turned on. Useful when debugging.
function ____exports.logTearFlags(tearFlags)
    ____exports.logFlags(tearFlags, TearFlag, "tear")
end
--- Helper function for printing out every use flag that is turned on. Useful when debugging.
function ____exports.logUseFlags(useFlags)
    ____exports.logFlags(useFlags, UseFlag, "use")
end
--- Helper function to enumerate all of the properties of a "userdata" object (i.e. an object from
-- the Isaac API).
function ____exports.logUserdata(userdata)
    if not isUserdata(nil, userdata) then
        log("Userdata: [not userdata]")
        return
    end
    local metatable = getmetatable(userdata)
    if metatable == nil then
        log("Userdata: [no metatable]")
        return
    end
    local classType = getIsaacAPIClassName(nil, userdata)
    if classType == nil then
        log("Userdata: [no class type]")
    else
        log("Userdata: " .. classType)
    end
    ____exports.logTable(metatable)
end
--- Helper function to log a `Vector` object.
-- 
-- @param vector The `Vector` object to log.
-- @param name Optional. The name of the object, which will be logged before the properties.
-- @param round Optional. If true, will round the vector values to the nearest integer. Default is
-- false.
function ____exports.logVector(vector, name, round)
    if round == nil then
        round = false
    end
    if name == nil then
        name = "vector"
    end
    local vectorString = vectorToString(nil, vector, round)
    log((("Logging " .. name) .. ": ") .. vectorString)
end
return ____exports
 end,
["functions.mergeTests"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local oldTableHasUpdatedValue, newTableHasSameValue, oldTableHasUpdatedValueFromNull, oldTableHasSerializedIsaacAPIClass, oldTableHasFilledChildTable, oldTableHasFilledMap, oldTableHasFilledDefaultMap, oldTableHasVector, oldTableHasVectorSerialized, oldTableHasRNG, oldTableHasRNGSerialized
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____SerializationType = require("enums.SerializationType")
local SerializationType = ____SerializationType.SerializationType
local ____deepCopy = require("functions.deepCopy")
local deepCopy = ____deepCopy.deepCopy
local ____log = require("functions.log")
local logAndPrint = ____log.logAndPrint
local ____merge = require("functions.merge")
local merge = ____merge.merge
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
local ____serialization = require("functions.serialization")
local isSerializedIsaacAPIClass = ____serialization.isSerializedIsaacAPIClass
local ____vector = require("functions.vector")
local isVector = ____vector.isVector
local serializeVector = ____vector.serializeVector
function oldTableHasUpdatedValue(self)
    local key = "foo"
    local oldValue = "bar"
    local newValue = "baz"
    local oldTable = {foo = oldValue}
    local newTable = {foo = newValue}
    merge(nil, oldTable, newTable, "oldTableHasUpdatedValue")
    local oldTableValue = oldTable[key]
    if oldTableValue ~= newValue then
        error("The old table does not have a value of: " .. newValue)
    end
end
function newTableHasSameValue(self)
    local key = "foo"
    local oldValue = "bar"
    local newValue = "baz"
    local oldTable = {foo = oldValue}
    local newTable = {foo = newValue}
    merge(nil, oldTable, newTable, "newTableHasSameValue")
    local newTableValue = newTable[key]
    if newTableValue ~= newValue then
        error("The new table does not have a value of: " .. newValue)
    end
end
function oldTableHasUpdatedValueFromNull(self)
    local key = "foo"
    local newValue = "baz"
    local oldTable = {foo = nil}
    local newTable = {foo = newValue}
    merge(nil, oldTable, newTable, "oldTableHasUpdatedValueFromNull")
    local oldTableValue = oldTable[key]
    if oldTableValue ~= newValue then
        error("The old table does not have a value of: " .. newValue)
    end
end
function oldTableHasSerializedIsaacAPIClass(self)
    local x = 50
    local y = 60
    local vector = Vector(x, y)
    local vectorSerialized = serializeVector(nil, vector)
    if not isSerializedIsaacAPIClass(nil, vectorSerialized) then
        error("The \"isSerializedIsaacAPIClass\" function says that a serialized vector is not serialized.")
    end
end
function oldTableHasFilledChildTable(self)
    local key = "foo"
    local newValue = "baz"
    local oldTable = {foo = nil}
    local foo = {bar = newValue}
    local newTable = {foo = foo}
    merge(nil, oldTable, newTable, "oldTableHasFilledChildTable")
    local oldTableValue = oldTable[key]
    if oldTableValue == nil then
        error(("The old table's key of \"" .. key) .. "\" was not filled.")
    end
    if oldTableValue.bar ~= newValue then
        error("The old table's key of \"bar\" was not filled.")
    end
end
function oldTableHasFilledMap(self)
    local fakeV = {run = {myMap = __TS__New(Map)}}
    local saveData = {run = {myMap = __TS__New(Map, {{"foo1", "bar1"}, {"foo2", "bar2"}, {"foo3", "bar3"}})}}
    local serializedSaveData = deepCopy(nil, saveData, SerializationType.SERIALIZE)
    merge(nil, fakeV, serializedSaveData, "oldTableHasFilledMap")
    local expectedSize = 3
    if fakeV.run.myMap.size ~= expectedSize then
        error((("The size of the merged map was equal to " .. tostring(fakeV.run.myMap.size)) .. ", but it should be equal to: ") .. tostring(expectedSize))
    end
    do
        local key = "foo1"
        local expectedValue = "bar1"
        local value = fakeV.run.myMap:get(key)
        if value ~= expectedValue then
            error((((("The old table's map key of \"" .. key) .. "\" was not equal to \"") .. expectedValue) .. "\" and was instead equal to: ") .. tostring(value))
        end
    end
    do
        local key = "foo2"
        local expectedValue = "bar2"
        local value = fakeV.run.myMap:get(key)
        if value ~= expectedValue then
            error((((("The old table's map key of \"" .. key) .. "\" was not equal to \"") .. expectedValue) .. "\" and was instead equal to: ") .. tostring(value))
        end
    end
    do
        local key = "foo3"
        local expectedValue = "bar3"
        local value = fakeV.run.myMap:get(key)
        if value ~= expectedValue then
            error((((("The old table's map key of \"" .. key) .. "\" was not equal to \"") .. expectedValue) .. "\" and was instead equal to: ") .. tostring(value))
        end
    end
end
function oldTableHasFilledDefaultMap(self)
    local fakeV = {run = {myDefaultMap = __TS__New(DefaultMap, "default")}}
    local saveData = {run = {myDefaultMap = __TS__New(DefaultMap, "default", {{"foo1", "bar1"}, {"foo2", "bar2"}, {"foo3", "bar3"}})}}
    local serializedSaveData = deepCopy(nil, saveData, SerializationType.SERIALIZE)
    merge(nil, fakeV, serializedSaveData, "oldTableHasFilledDefaultMap")
    local expectedSize = 3
    if fakeV.run.myDefaultMap.size ~= expectedSize then
        error((("The size of the merged default map was equal to " .. tostring(fakeV.run.myDefaultMap.size)) .. ", but it should be equal to: ") .. tostring(expectedSize))
    end
    do
        local key = "foo1"
        local expectedValue = "bar1"
        local value = fakeV.run.myDefaultMap:get(key)
        if value ~= expectedValue then
            error((((("The old table's default map key of \"" .. key) .. "\" was not equal to \"") .. expectedValue) .. "\" and was instead equal to: ") .. tostring(value))
        end
    end
    do
        local key = "foo2"
        local expectedValue = "bar2"
        local value = fakeV.run.myDefaultMap:get(key)
        if value ~= expectedValue then
            error((((("The old table's default map key of \"" .. key) .. "\" was not equal to \"") .. expectedValue) .. "\" and was instead equal to: ") .. tostring(value))
        end
    end
    do
        local key = "foo3"
        local expectedValue = "bar3"
        local value = fakeV.run.myDefaultMap:get(key)
        if value ~= expectedValue then
            error((((("The old table's default map key of \"" .. key) .. "\" was not equal to \"") .. expectedValue) .. "\" and was instead equal to: ") .. tostring(value))
        end
    end
end
function oldTableHasVector(self)
    local key = "foo"
    local x = 50
    local y = 60
    local newValue = Vector(x, y)
    local oldTable = {foo = nil}
    local foo = {bar = newValue}
    local newTable = {foo = foo}
    merge(nil, oldTable, newTable, "oldTableHasVector")
    local oldTableValue = oldTable[key]
    if oldTableValue == nil then
        error(("The old table's key of \"" .. key) .. "\" was not filled.")
    end
    if oldTableValue.bar.X ~= x then
        error("The old table's value for \"x\" does not match: " .. tostring(x))
    end
    if oldTableValue.bar.Y ~= y then
        error("The old table's value for \"y\" does not match: " .. tostring(y))
    end
    if not isVector(nil, oldTableValue.bar) then
        error("The old table's value is not a Vector object.")
    end
end
function oldTableHasVectorSerialized(self)
    local key = "foo"
    local x = 50
    local y = 60
    local newValue = Vector(x, y)
    local oldTable = {foo = nil}
    local foo = {bar = newValue}
    local newTable = {foo = foo}
    local newTableSerialized = deepCopy(nil, newTable, SerializationType.SERIALIZE, "oldTableHasVectorSerialized")
    merge(nil, oldTable, newTableSerialized, "oldTableHasVectorSerialized")
    local oldTableValue = oldTable[key]
    if oldTableValue == nil then
        error(("The old table's key of \"" .. key) .. "\" was not filled.")
    end
    if oldTableValue.bar.X ~= x then
        error("The old table's value for \"x\" does not match: " .. tostring(x))
    end
    if oldTableValue.bar.Y ~= y then
        error("The old table's value for \"y\" does not match: " .. tostring(y))
    end
    if not isVector(nil, oldTableValue.bar) then
        error("The old table's value is not a Vector object (during the serialized test).")
    end
end
function oldTableHasRNG(self)
    local key = "foo"
    local seed = 50
    local newValue = newRNG(nil, seed)
    local oldTable = {foo = nil}
    local foo = {bar = newValue}
    local newTable = {foo = foo}
    merge(nil, oldTable, newTable, "oldTableHasRNG")
    local oldTableValue = oldTable[key]
    if oldTableValue == nil then
        error(("The old table's key of \"" .. key) .. "\" was not filled.")
    end
    if not isRNG(nil, oldTableValue.bar) then
        error("The old table's value is not an RNG object.")
    end
    local newSeed = oldTableValue.bar:GetSeed()
    if newSeed ~= seed then
        error("The old table's seed not match: " .. tostring(seed))
    end
end
function oldTableHasRNGSerialized(self)
    local key = "foo"
    local seed = 50
    local newValue = newRNG(nil, seed)
    local oldTable = {foo = nil}
    local foo = {bar = newValue}
    local newTable = {foo = foo}
    local newTableSerialized = deepCopy(nil, newTable, SerializationType.SERIALIZE, "oldTableHasRNGSerialized")
    merge(nil, oldTable, newTableSerialized, "oldTableHasRNGSerialized")
    local oldTableValue = oldTable[key]
    if oldTableValue == nil then
        error(("The old table's key of \"" .. key) .. "\" was not filled.")
    end
    if not isRNG(nil, oldTableValue.bar) then
        error("The old table's value is not an RNG object (during the serialized test).")
    end
    local newSeed = oldTableValue.bar:GetSeed()
    if newSeed ~= seed then
        error("The old table's seed not match: " .. tostring(seed))
    end
end
--- Run the suite of tests that prove that the "merge" function works properly.
-- 
-- This function is only useful if you are troubleshooting the save data manager.
function ____exports.runMergeTests(self)
    oldTableHasUpdatedValue(nil)
    newTableHasSameValue(nil)
    oldTableHasUpdatedValueFromNull(nil)
    oldTableHasSerializedIsaacAPIClass(nil)
    oldTableHasFilledChildTable(nil)
    oldTableHasFilledMap(nil)
    oldTableHasFilledDefaultMap(nil)
    oldTableHasVector(nil)
    oldTableHasVectorSerialized(nil)
    oldTableHasRNG(nil)
    oldTableHasRNGSerialized(nil)
    local successText = "All merge tests passed!"
    logAndPrint(nil, successText)
end
return ____exports
 end,
["maps.cardNameToTypeMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CardType = ____isaac_2Dtypescript_2Ddefinitions.CardType
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
--- Maps card names to the values of the `CardType` enum.
____exports.CARD_NAME_TO_TYPE_MAP = __TS__New(ReadonlyMap, {
    {"fool", CardType.FOOL},
    {"magician", CardType.MAGICIAN},
    {"mag", CardType.MAGICIAN},
    {"highPriestess", CardType.HIGH_PRIESTESS},
    {"priestess", CardType.HIGH_PRIESTESS},
    {"priest", CardType.HIGH_PRIESTESS},
    {"hp", CardType.HIGH_PRIESTESS},
    {"empress", CardType.EMPRESS},
    {"emperor", CardType.EMPEROR},
    {"emp", CardType.EMPEROR},
    {"hierophant", CardType.HIEROPHANT},
    {"hi", CardType.HIEROPHANT},
    {"lovers", CardType.LOVERS},
    {"chariot", CardType.CHARIOT},
    {"justice", CardType.JUSTICE},
    {"hermit", CardType.HERMIT},
    {"wheelOfFortune", CardType.WHEEL_OF_FORTUNE},
    {"wheel", CardType.WHEEL_OF_FORTUNE},
    {"fortune", CardType.WHEEL_OF_FORTUNE},
    {"strength", CardType.STRENGTH},
    {"str", CardType.STRENGTH},
    {"hangedMan", CardType.HANGED_MAN},
    {"hanged", CardType.HANGED_MAN},
    {"death", CardType.DEATH},
    {"temperance", CardType.TEMPERANCE},
    {"devil", CardType.DEVIL},
    {"tower", CardType.TOWER},
    {"stars", CardType.STARS},
    {"moon", CardType.MOON},
    {"sun", CardType.SUN},
    {"judgement", CardType.JUDGEMENT},
    {"judge", CardType.JUDGEMENT},
    {"world", CardType.WORLD},
    {"2OfClubs", CardType.TWO_OF_CLUBS},
    {"2Clubs", CardType.TWO_OF_CLUBS},
    {"2OfDiamonds", CardType.TWO_OF_DIAMONDS},
    {"2Diamonds", CardType.TWO_OF_DIAMONDS},
    {"2OfSpades", CardType.TWO_OF_SPADES},
    {"2Spades", CardType.TWO_OF_SPADES},
    {"2OfHearts", CardType.TWO_OF_HEARTS},
    {"2Hearts", CardType.TWO_OF_HEARTS},
    {"aceOfClubs", CardType.ACE_OF_CLUBS},
    {"aceClubs", CardType.ACE_OF_CLUBS},
    {"aceOfDiamonds", CardType.ACE_OF_DIAMONDS},
    {"aceDiamonds", CardType.ACE_OF_DIAMONDS},
    {"aceOfSpades", CardType.ACE_OF_SPADES},
    {"aceSpades", CardType.ACE_OF_SPADES},
    {"aceOfHearts", CardType.ACE_OF_HEARTS},
    {"aceHearts", CardType.ACE_OF_HEARTS},
    {"joker", CardType.JOKER},
    {"hagalaz", CardType.RUNE_HAGALAZ},
    {"destruction", CardType.RUNE_HAGALAZ},
    {"jera", CardType.RUNE_JERA},
    {"abundance", CardType.RUNE_JERA},
    {"ehwaz", CardType.RUNE_EHWAZ},
    {"passage", CardType.RUNE_EHWAZ},
    {"dagaz", CardType.RUNE_DAGAZ},
    {"purity", CardType.RUNE_DAGAZ},
    {"ansuz", CardType.RUNE_ANSUZ},
    {"vision", CardType.RUNE_ANSUZ},
    {"perthro", CardType.RUNE_PERTHRO},
    {"change", CardType.RUNE_PERTHRO},
    {"berkano", CardType.RUNE_BERKANO},
    {"companionship", CardType.RUNE_BERKANO},
    {"algiz", CardType.RUNE_ALGIZ},
    {"resistance", CardType.RUNE_ALGIZ},
    {"shield", CardType.RUNE_ALGIZ},
    {"blankRune", CardType.RUNE_BLANK},
    {"blackRune", CardType.RUNE_BLACK},
    {"chaos", CardType.CHAOS},
    {"credit", CardType.CREDIT},
    {"rules", CardType.RULES},
    {"againstHumanity", CardType.AGAINST_HUMANITY},
    {"humanity", CardType.AGAINST_HUMANITY},
    {"suicideKing", CardType.SUICIDE_KING},
    {"suicide", CardType.SUICIDE_KING},
    {"getOutOfJailFree", CardType.GET_OUT_OF_JAIL_FREE},
    {"jail", CardType.GET_OUT_OF_JAIL_FREE},
    {"?", CardType.QUESTION_MARK},
    {"diceShard", CardType.DICE_SHARD},
    {"shard", CardType.DICE_SHARD},
    {"emergencyContact", CardType.EMERGENCY_CONTACT},
    {"contact", CardType.EMERGENCY_CONTACT},
    {"holy", CardType.HOLY},
    {"hugeGrowth", CardType.HUGE_GROWTH},
    {"growth", CardType.HUGE_GROWTH},
    {"ancientRecall", CardType.ANCIENT_RECALL},
    {"recall", CardType.ANCIENT_RECALL},
    {"eraWalk", CardType.ERA_WALK},
    {"walk", CardType.ERA_WALK},
    {"runeShard", CardType.RUNE_SHARD},
    {"shard", CardType.RUNE_SHARD},
    {"fool?", CardType.REVERSE_FOOL},
    {"magician?", CardType.REVERSE_MAGICIAN},
    {"magi?", CardType.REVERSE_MAGICIAN},
    {"mag?", CardType.REVERSE_MAGICIAN},
    {"highPriestess?", CardType.REVERSE_HIGH_PRIESTESS},
    {"high?", CardType.REVERSE_HIGH_PRIESTESS},
    {"hi?", CardType.REVERSE_HIGH_PRIESTESS},
    {"priestess?", CardType.REVERSE_HIGH_PRIESTESS},
    {"priest?", CardType.REVERSE_HIGH_PRIESTESS},
    {"hp?", CardType.REVERSE_HIGH_PRIESTESS},
    {"empress?", CardType.REVERSE_EMPRESS},
    {"emperor?", CardType.REVERSE_EMPEROR},
    {"emp?", CardType.REVERSE_EMPEROR},
    {"hierophant?", CardType.REVERSE_HIEROPHANT},
    {"hiero?", CardType.REVERSE_HIEROPHANT},
    {"lovers?", CardType.REVERSE_LOVERS},
    {"chariot?", CardType.REVERSE_CHARIOT},
    {"justice?", CardType.REVERSE_JUSTICE},
    {"hermit?", CardType.REVERSE_HERMIT},
    {"wheelOfFortune?", CardType.REVERSE_WHEEL_OF_FORTUNE},
    {"wheel?", CardType.REVERSE_WHEEL_OF_FORTUNE},
    {"fortune?", CardType.REVERSE_WHEEL_OF_FORTUNE},
    {"strength?", CardType.REVERSE_STRENGTH},
    {"str?", CardType.REVERSE_STRENGTH},
    {"hangedMan?", CardType.REVERSE_HANGED_MAN},
    {"hanged?", CardType.REVERSE_HANGED_MAN},
    {"death?", CardType.REVERSE_DEATH},
    {"temperance?", CardType.REVERSE_TEMPERANCE},
    {"devil?", CardType.REVERSE_DEVIL},
    {"tower?", CardType.REVERSE_TOWER},
    {"stars?", CardType.REVERSE_STARS},
    {"moon?", CardType.REVERSE_MOON},
    {"sun?", CardType.REVERSE_SUN},
    {"judgement?", CardType.REVERSE_JUDGEMENT},
    {"judge?", CardType.REVERSE_JUDGEMENT},
    {"world?", CardType.REVERSE_WORLD},
    {"crackedKey", CardType.CRACKED_KEY},
    {"key", CardType.CRACKED_KEY},
    {"queenOfHearts", CardType.QUEEN_OF_HEARTS},
    {"queenHearts", CardType.QUEEN_OF_HEARTS},
    {"wildcard", CardType.WILD},
    {"soulOfIsaac", CardType.SOUL_OF_ISAAC},
    {"soulIsaac", CardType.SOUL_OF_ISAAC},
    {"isaac", CardType.SOUL_OF_ISAAC},
    {"soulOfMagdalene", CardType.SOUL_OF_MAGDALENE},
    {"soulMagdalene", CardType.SOUL_OF_MAGDALENE},
    {"magdalene", CardType.SOUL_OF_MAGDALENE},
    {"soulOfCain", CardType.SOUL_OF_CAIN},
    {"soulCain", CardType.SOUL_OF_CAIN},
    {"cain", CardType.SOUL_OF_CAIN},
    {"soulOfJudas", CardType.SOUL_OF_JUDAS},
    {"soulJudas", CardType.SOUL_OF_JUDAS},
    {"judas", CardType.SOUL_OF_JUDAS},
    {"soulOf???", CardType.SOUL_OF_BLUE_BABY},
    {"soul???", CardType.SOUL_OF_BLUE_BABY},
    {"???", CardType.SOUL_OF_BLUE_BABY},
    {"soulOfBlueBaby", CardType.SOUL_OF_BLUE_BABY},
    {"soulBlueBaby", CardType.SOUL_OF_BLUE_BABY},
    {"blueBaby", CardType.SOUL_OF_BLUE_BABY},
    {"soulOfEve", CardType.SOUL_OF_EVE},
    {"soulEve", CardType.SOUL_OF_EVE},
    {"eve", CardType.SOUL_OF_EVE},
    {"soulOfSamson", CardType.SOUL_OF_SAMSON},
    {"soulSamson", CardType.SOUL_OF_SAMSON},
    {"samson", CardType.SOUL_OF_SAMSON},
    {"soulOfAzazel", CardType.SOUL_OF_AZAZEL},
    {"soulAzazel", CardType.SOUL_OF_AZAZEL},
    {"azazel", CardType.SOUL_OF_AZAZEL},
    {"soulOfLazarus", CardType.SOUL_OF_LAZARUS},
    {"soulLazarus", CardType.SOUL_OF_LAZARUS},
    {"lazarus", CardType.SOUL_OF_LAZARUS},
    {"soulOfEden", CardType.SOUL_OF_EDEN},
    {"soulEden", CardType.SOUL_OF_EDEN},
    {"eden", CardType.SOUL_OF_EDEN},
    {"soulOfTheLost", CardType.SOUL_OF_LOST},
    {"soulTheLost", CardType.SOUL_OF_LOST},
    {"theLost", CardType.SOUL_OF_LOST},
    {"soulOfLost", CardType.SOUL_OF_LOST},
    {"soulLost", CardType.SOUL_OF_LOST},
    {"lost", CardType.SOUL_OF_LOST},
    {"soulOfLilith", CardType.SOUL_OF_LILITH},
    {"soulLilith", CardType.SOUL_OF_LILITH},
    {"lilith", CardType.SOUL_OF_LILITH},
    {"soulOfTheKeeper", CardType.SOUL_OF_KEEPER},
    {"soulTheKeeper", CardType.SOUL_OF_KEEPER},
    {"theKeeper", CardType.SOUL_OF_KEEPER},
    {"soulOfKeeper", CardType.SOUL_OF_KEEPER},
    {"soulKeeper", CardType.SOUL_OF_KEEPER},
    {"keeper", CardType.SOUL_OF_KEEPER},
    {"soulOfApollyon", CardType.SOUL_OF_APOLLYON},
    {"soulApollyon", CardType.SOUL_OF_APOLLYON},
    {"apollyon", CardType.SOUL_OF_APOLLYON},
    {"soulOfTheForgotten", CardType.SOUL_OF_FORGOTTEN},
    {"soulTheForgotten", CardType.SOUL_OF_FORGOTTEN},
    {"theForgotten", CardType.SOUL_OF_FORGOTTEN},
    {"soulOfForgotten", CardType.SOUL_OF_FORGOTTEN},
    {"soulForgotten", CardType.SOUL_OF_FORGOTTEN},
    {"forgotten", CardType.SOUL_OF_FORGOTTEN},
    {"soulOfBethany", CardType.SOUL_OF_BETHANY},
    {"soulBethany", CardType.SOUL_OF_BETHANY},
    {"bethany", CardType.SOUL_OF_BETHANY},
    {"soulOfJacobAndEsau", CardType.SOUL_OF_JACOB_AND_ESAU},
    {"soulJacobAndEsau", CardType.SOUL_OF_JACOB_AND_ESAU},
    {"jacobAndEsau", CardType.SOUL_OF_JACOB_AND_ESAU},
    {"soulOfJacob&Esau", CardType.SOUL_OF_JACOB_AND_ESAU},
    {"soulJacob&Esau", CardType.SOUL_OF_JACOB_AND_ESAU},
    {"jacob&Esau", CardType.SOUL_OF_JACOB_AND_ESAU},
    {"soulOfJacob", CardType.SOUL_OF_JACOB_AND_ESAU},
    {"soulJacob", CardType.SOUL_OF_JACOB_AND_ESAU},
    {"jacob", CardType.SOUL_OF_JACOB_AND_ESAU}
})
return ____exports
 end,
["maps.characterNameToTypeMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
--- Maps character names to the values of the `PlayerType` enum.
____exports.CHARACTER_NAME_TO_TYPE_MAP = __TS__New(ReadonlyMap, {
    {"isaac", PlayerType.ISAAC},
    {"magdalene", PlayerType.MAGDALENE},
    {"maggy", PlayerType.MAGDALENE},
    {"cain", PlayerType.CAIN},
    {"judas", PlayerType.JUDAS},
    {"blueBaby", PlayerType.BLUE_BABY},
    {"bb", PlayerType.BLUE_BABY},
    {"eve", PlayerType.EVE},
    {"samson", PlayerType.SAMSON},
    {"azazel", PlayerType.AZAZEL},
    {"lazarus", PlayerType.LAZARUS},
    {"laz", PlayerType.LAZARUS},
    {"eden", PlayerType.EDEN},
    {"theLost", PlayerType.LOST},
    {"lost", PlayerType.LOST},
    {"lazarus2", PlayerType.LAZARUS_2},
    {"laz2", PlayerType.LAZARUS_2},
    {"darkJudas", PlayerType.DARK_JUDAS},
    {"dJudas", PlayerType.DARK_JUDAS},
    {"blackJudas", PlayerType.DARK_JUDAS},
    {"bJudas", PlayerType.DARK_JUDAS},
    {"lilith", PlayerType.LILITH},
    {"keeper", PlayerType.KEEPER},
    {"apollyon", PlayerType.APOLLYON},
    {"theForgotten", PlayerType.FORGOTTEN},
    {"forgotten", PlayerType.FORGOTTEN},
    {"theSoul", PlayerType.SOUL},
    {"soul", PlayerType.SOUL},
    {"bethany", PlayerType.BETHANY},
    {"jacob", PlayerType.JACOB},
    {"esau", PlayerType.ESAU},
    {"taintedIsaac", PlayerType.ISAAC_B},
    {"tIsaac", PlayerType.ISAAC_B},
    {"taintedMagdalene", PlayerType.MAGDALENE_B},
    {"tMagdalene", PlayerType.MAGDALENE_B},
    {"taintedMaggy", PlayerType.MAGDALENE_B},
    {"tMaggy", PlayerType.MAGDALENE_B},
    {"taintedCain", PlayerType.CAIN_B},
    {"tCain", PlayerType.CAIN_B},
    {"taintedJudas", PlayerType.JUDAS_B},
    {"tJudas", PlayerType.JUDAS_B},
    {"taintedBlueBaby", PlayerType.BLUE_BABY_B},
    {"tBlueBaby", PlayerType.BLUE_BABY_B},
    {"tbb", PlayerType.BLUE_BABY_B},
    {"taintedEve", PlayerType.EVE_B},
    {"tEve", PlayerType.EVE_B},
    {"taintedSamson", PlayerType.SAMSON_B},
    {"tSamson", PlayerType.SAMSON_B},
    {"taintedAzazel", PlayerType.AZAZEL_B},
    {"tAzazel", PlayerType.AZAZEL_B},
    {"taintedLazarus", PlayerType.LAZARUS_B},
    {"tLazarus", PlayerType.LAZARUS_B},
    {"taintedLaz", PlayerType.LAZARUS_B},
    {"tLaz", PlayerType.LAZARUS_B},
    {"taintedEden", PlayerType.EDEN_B},
    {"tEden", PlayerType.EDEN_B},
    {"taintedLost", PlayerType.LOST_B},
    {"tLost", PlayerType.LOST_B},
    {"taintedLilith", PlayerType.LILITH_B},
    {"tLilith", PlayerType.LILITH_B},
    {"taintedKeeper", PlayerType.KEEPER_B},
    {"tKeeper", PlayerType.KEEPER_B},
    {"taintedApollyon", PlayerType.APOLLYON_B},
    {"tApollyon", PlayerType.APOLLYON_B},
    {"taintedForgotten", PlayerType.FORGOTTEN_B},
    {"tForgotten", PlayerType.FORGOTTEN_B},
    {"taintedBethany", PlayerType.BETHANY_B},
    {"tBethany", PlayerType.BETHANY_B},
    {"taintedJacob", PlayerType.JACOB_B},
    {"tJacob", PlayerType.JACOB_B},
    {"taintedLazarusDead", PlayerType.LAZARUS_2_B},
    {"tLazarusDead", PlayerType.LAZARUS_2_B},
    {"taintedLazDead", PlayerType.LAZARUS_2_B},
    {"tLazDead", PlayerType.LAZARUS_2_B},
    {"deadTaintedLazarus", PlayerType.LAZARUS_2_B},
    {"deadTLazarus", PlayerType.LAZARUS_2_B},
    {"deadTaintedLaz", PlayerType.LAZARUS_2_B},
    {"deadTLaz", PlayerType.LAZARUS_2_B},
    {"taintedJacobGhost", PlayerType.JACOB_2_B},
    {"tJacobGhost", PlayerType.JACOB_2_B},
    {"taintedSoul", PlayerType.SOUL_B},
    {"tSoul", PlayerType.SOUL_B}
})
return ____exports
 end,
["maps.collectibleNameToTypeMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local ____exports = {}
local ____string = require("functions.string")
local removeNonAlphanumericCharacters = ____string.removeNonAlphanumericCharacters
local ____collectibleNames = require("objects.collectibleNames")
local COLLECTIBLE_NAMES = ____collectibleNames.COLLECTIBLE_NAMES
--- Maps collectible names to the values of the `CollectibleType` enum.
-- 
-- For a mapping of `CollectibleType` to name, see the `COLLECTIBLE_NAMES` constant.
____exports.COLLECTIBLE_NAME_TO_TYPE_MAP = (function()
    local collectibleNameToTypeMap = __TS__New(Map)
    for ____, ____value in ipairs(__TS__ObjectEntries(COLLECTIBLE_NAMES)) do
        local collectibleTypeString = ____value[1]
        local name = ____value[2]
        local collectibleType = collectibleTypeString
        local simpleString = removeNonAlphanumericCharacters(nil, name)
        collectibleNameToTypeMap:set(simpleString, collectibleType)
    end
    return collectibleNameToTypeMap
end)(nil)
return ____exports
 end,
["maps.pillNameToEffectMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PillEffect = ____isaac_2Dtypescript_2Ddefinitions.PillEffect
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
--- Maps pill effect names to the values of the `PillEffect` enum.
____exports.PILL_NAME_TO_EFFECT_MAP = __TS__New(ReadonlyMap, {
    {"badGas", PillEffect.BAD_GAS},
    {"gas", PillEffect.BAD_GAS},
    {"badTrip", PillEffect.BAD_TRIP},
    {"trip", PillEffect.BAD_TRIP},
    {"ballsOfSteel", PillEffect.BALLS_OF_STEEL},
    {"ballsSteel", PillEffect.BALLS_OF_STEEL},
    {"steel", PillEffect.BALLS_OF_STEEL},
    {"bombsAreKey", PillEffect.BOMBS_ARE_KEYS},
    {"bombsKey", PillEffect.BOMBS_ARE_KEYS},
    {"key", PillEffect.BOMBS_ARE_KEYS},
    {"explosiveDiarrhea", PillEffect.EXPLOSIVE_DIARRHEA},
    {"diarrhea", PillEffect.EXPLOSIVE_DIARRHEA},
    {"fullHealth", PillEffect.FULL_HEALTH},
    {"healthDown", PillEffect.HEALTH_DOWN},
    {"healthUp", PillEffect.HEALTH_UP},
    {"iFoundPills", PillEffect.I_FOUND_PILLS},
    {"foundPills", PillEffect.I_FOUND_PILLS},
    {"pills", PillEffect.I_FOUND_PILLS},
    {"puberty", PillEffect.PUBERTY},
    {"prettyFly", PillEffect.PRETTY_FLY},
    {"fly", PillEffect.PRETTY_FLY},
    {"rangeDown", PillEffect.RANGE_DOWN},
    {"rangeUp", PillEffect.RANGE_UP},
    {"speedDown", PillEffect.SPEED_DOWN},
    {"speedUp", PillEffect.SPEED_UP},
    {"tearsDown", PillEffect.TEARS_DOWN},
    {"tearsUp", PillEffect.TEARS_UP},
    {"luckDown", PillEffect.LUCK_DOWN},
    {"luckUp", PillEffect.LUCK_UP},
    {"telepills", PillEffect.TELEPILLS},
    {"48HourEnergy", PillEffect.FORTY_EIGHT_HOUR_ENERGY},
    {"energy", PillEffect.FORTY_EIGHT_HOUR_ENERGY},
    {"48", PillEffect.FORTY_EIGHT_HOUR_ENERGY},
    {"hematemesis", PillEffect.HEMATEMESIS},
    {"paralysis", PillEffect.PARALYSIS},
    {"iCanSeeForever!", PillEffect.I_CAN_SEE_FOREVER},
    {"canSee", PillEffect.I_CAN_SEE_FOREVER},
    {"see", PillEffect.I_CAN_SEE_FOREVER},
    {"pheromones", PillEffect.PHEROMONES},
    {"amnesia", PillEffect.AMNESIA},
    {"lemonParty", PillEffect.LEMON_PARTY},
    {"party", PillEffect.LEMON_PARTY},
    {"RUAWizard", PillEffect.R_U_A_WIZARD},
    {"areYouAWizard", PillEffect.R_U_A_WIZARD},
    {"wizard", PillEffect.R_U_A_WIZARD},
    {"percs!", PillEffect.PERCS},
    {"addicted!", PillEffect.ADDICTED},
    {"relax", PillEffect.RELAX},
    {"???", PillEffect.QUESTION_MARKS},
    {"oneMakesYouLarger", PillEffect.ONE_MAKES_YOU_LARGER},
    {"larger", PillEffect.ONE_MAKES_YOU_LARGER},
    {"oneMakesYouSmaller", PillEffect.ONE_MAKES_YOU_SMALL},
    {"smaller", PillEffect.ONE_MAKES_YOU_SMALL},
    {"infested!", PillEffect.INFESTED_EXCLAMATION},
    {"infest!", PillEffect.INFESTED_EXCLAMATION},
    {"inf!", PillEffect.INFESTED_EXCLAMATION},
    {"infested?", PillEffect.INFESTED_QUESTION},
    {"infest?", PillEffect.INFESTED_QUESTION},
    {"inf?", PillEffect.INFESTED_QUESTION},
    {"powerPill", PillEffect.POWER},
    {"retroVision", PillEffect.RETRO_VISION},
    {"vision", PillEffect.RETRO_VISION},
    {"friendsTillTheEnd", PillEffect.FRIENDS_TILL_THE_END},
    {"friendsUntilTheEnd", PillEffect.FRIENDS_TILL_THE_END},
    {"xlax", PillEffect.X_LAX},
    {"somethingsWrong", PillEffect.SOMETHINGS_WRONG},
    {"wrong", PillEffect.SOMETHINGS_WRONG},
    {"imDrowsy", PillEffect.IM_DROWSY},
    {"drowsy", PillEffect.IM_DROWSY},
    {"imExcited!!!", PillEffect.IM_EXCITED},
    {"excited", PillEffect.IM_EXCITED},
    {"gulp!", PillEffect.GULP},
    {"horf!", PillEffect.HORF},
    {"feelsLikeImWalkingOnSunshine!", PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE},
    {"walking", PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE},
    {"sunshine", PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE},
    {"vurp!", PillEffect.VURP},
    {"shotSpeedDown", PillEffect.SHOT_SPEED_DOWN},
    {"shotSpeedUp", PillEffect.SHOT_SPEED_UP},
    {"experimental", PillEffect.EXPERIMENTAL}
})
return ____exports
 end,
["maps.roomNameToTypeMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
--- Maps room names to the values of the `RoomType` enum.
____exports.ROOM_NAME_TO_TYPE_MAP = __TS__New(ReadonlyMap, {
    {"default", RoomType.DEFAULT},
    {"shop", RoomType.SHOP},
    {"error", RoomType.ERROR},
    {"iAmError", RoomType.ERROR},
    {"treasure", RoomType.TREASURE},
    {"boss", RoomType.BOSS},
    {"miniBoss", RoomType.MINI_BOSS},
    {"secret", RoomType.SECRET},
    {"superSecret", RoomType.SUPER_SECRET},
    {"arcade", RoomType.ARCADE},
    {"curse", RoomType.CURSE},
    {"challenge", RoomType.CHALLENGE},
    {"library", RoomType.LIBRARY},
    {"sacrifice", RoomType.SACRIFICE},
    {"devil", RoomType.DEVIL},
    {"angel", RoomType.ANGEL},
    {"dungeon", RoomType.DUNGEON},
    {"crawlSpace", RoomType.DUNGEON},
    {"bossRush", RoomType.BOSS_RUSH},
    {"isaacs", RoomType.CLEAN_BEDROOM},
    {"bedroom", RoomType.CLEAN_BEDROOM},
    {"cleanBedroom", RoomType.CLEAN_BEDROOM},
    {"dirtyBedroom", RoomType.DIRTY_BEDROOM},
    {"barren", RoomType.DIRTY_BEDROOM},
    {"vault", RoomType.VAULT},
    {"chest", RoomType.VAULT},
    {"dice", RoomType.DICE},
    {"blackMarket", RoomType.BLACK_MARKET},
    {"greedExit", RoomType.GREED_EXIT},
    {"planetarium", RoomType.PLANETARIUM},
    {"teleporter", RoomType.TELEPORTER},
    {"teleporterExit", RoomType.TELEPORTER_EXIT},
    {"secretExit", RoomType.SECRET_EXIT},
    {"blue", RoomType.BLUE},
    {"ultraSecret", RoomType.ULTRA_SECRET}
})
return ____exports
 end,
["maps.trinketNameToTypeMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local ____exports = {}
local ____string = require("functions.string")
local removeNonAlphanumericCharacters = ____string.removeNonAlphanumericCharacters
local ____trinketNames = require("objects.trinketNames")
local TRINKET_NAMES = ____trinketNames.TRINKET_NAMES
--- Maps trinket names to the values of the `TrinketType` enum.
-- 
-- For a mapping of `TrinketType` to name, see the `TRINKET_NAMES` constant.
____exports.TRINKET_NAME_TO_TYPE_MAP = (function()
    local trinketNameToTypeMap = __TS__New(Map)
    for ____, ____value in ipairs(__TS__ObjectEntries(TRINKET_NAMES)) do
        local trinketTypeString = ____value[1]
        local name = ____value[2]
        local trinketType = trinketTypeString
        local simpleString = removeNonAlphanumericCharacters(nil, name)
        trinketNameToTypeMap:set(simpleString, trinketType)
    end
    return trinketNameToTypeMap
end)(nil)
return ____exports
 end,
["functions.logEntities"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__ArrayEntries = ____lualib.__TS__ArrayEntries
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__StringTrim = ____lualib.__TS__StringTrim
local __TS__StringSplit = ____lualib.__TS__StringSplit
local ____exports = {}
local getEntityLogLine, getBombVariantName, getEffectVariantName, getFamiliarVariantName, getKnifeVariantName, getLaserVariantName, getEntityTypeName, getPickupVariantName, getPlayerVariantName, getProjectileVariantName, getTearVariantName, getGridEntityLogLine
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BombVariant = ____isaac_2Dtypescript_2Ddefinitions.BombVariant
local EffectVariant = ____isaac_2Dtypescript_2Ddefinitions.EffectVariant
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local FamiliarVariant = ____isaac_2Dtypescript_2Ddefinitions.FamiliarVariant
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local KnifeVariant = ____isaac_2Dtypescript_2Ddefinitions.KnifeVariant
local LaserVariant = ____isaac_2Dtypescript_2Ddefinitions.LaserVariant
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local PlayerVariant = ____isaac_2Dtypescript_2Ddefinitions.PlayerVariant
local ProjectileVariant = ____isaac_2Dtypescript_2Ddefinitions.ProjectileVariant
local TearVariant = ____isaac_2Dtypescript_2Ddefinitions.TearVariant
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____entities = require("functions.entities")
local getEntities = ____entities.getEntities
local getEntityFromPtrHash = ____entities.getEntityFromPtrHash
local getEntityID = ____entities.getEntityID
local ____gridEntities = require("functions.gridEntities")
local getGridEntities = ____gridEntities.getGridEntities
local getGridEntityID = ____gridEntities.getGridEntityID
local ____log = require("functions.log")
local log = ____log.log
--- Helper function to log information about a specific entity.
function ____exports.logEntity(entity)
    local msg = getEntityLogLine(entity)
    log(msg)
end
function getEntityLogLine(entity, num)
    local msg = num == nil and "" or tostring(num) .. ") "
    msg = msg .. getEntityID(nil, entity)
    local bomb = entity:ToBomb()
    if bomb ~= nil then
        msg = msg .. (" (bomb - " .. getBombVariantName(nil, bomb)) .. ")"
    end
    local effect = entity:ToEffect()
    if effect ~= nil then
        msg = msg .. (((" (effect - " .. getEffectVariantName(nil, effect)) .. ") (State: ") .. tostring(effect.State)) .. ")"
    end
    local familiar = entity:ToFamiliar()
    if familiar ~= nil then
        msg = msg .. (((" (familiar - " .. getFamiliarVariantName(nil, familiar)) .. ") (State: ") .. tostring(familiar.State)) .. ")"
    end
    local knife = entity:ToKnife()
    if knife ~= nil then
        msg = msg .. (" (knife - " .. getKnifeVariantName(nil, knife)) .. ")"
    end
    local laser = entity:ToLaser()
    if laser ~= nil then
        msg = msg .. (" (laser - " .. getLaserVariantName(nil, laser)) .. ")"
    end
    local npc = entity:ToNPC()
    if npc ~= nil then
        msg = msg .. (((" (NPC - " .. getEntityTypeName(nil, npc)) .. ") (State: ") .. tostring(npc.State)) .. ")"
    end
    local pickup = entity:ToPickup()
    if pickup ~= nil then
        msg = msg .. (((" (pickup - " .. getPickupVariantName(nil, pickup)) .. ") (State: ") .. tostring(pickup.State)) .. ")"
    end
    local player = entity:ToPlayer()
    if player ~= nil then
        msg = msg .. (" (player - " .. getPlayerVariantName(nil, player)) .. ")"
    end
    local projectile = entity:ToProjectile()
    if projectile ~= nil then
        msg = msg .. (" (projectile - " .. getProjectileVariantName(nil, projectile)) .. ")"
    end
    local tear = entity:ToTear()
    if tear ~= nil then
        msg = msg .. (" (tear - " .. getTearVariantName(nil, tear)) .. ")"
    end
    msg = msg .. "\n"
    msg = msg .. ("  - Index: " .. tostring(entity.Index)) .. "\n"
    msg = msg .. ("  - InitSeed: " .. tostring(entity.InitSeed)) .. "\n"
    msg = msg .. ("  - DropSeed: " .. tostring(entity.DropSeed)) .. "\n"
    msg = msg .. ((("  - Position: (" .. tostring(entity.Position.X)) .. ", ") .. tostring(entity.Position.Y)) .. ")\n"
    msg = msg .. ((("  - Velocity: (" .. tostring(entity.Velocity.X)) .. ", ") .. tostring(entity.Velocity.Y)) .. ")\n"
    msg = msg .. ((("  - HP: " .. tostring(entity.HitPoints)) .. " / ") .. tostring(entity.MaxHitPoints)) .. "\n"
    msg = msg .. ("  - Parent: " .. tostring(entity.Parent)) .. "\n"
    msg = msg .. ("  - Child: " .. tostring(entity.Child)) .. "\n"
    msg = msg .. ("  - SpawnerEntity: " .. tostring(entity.SpawnerEntity)) .. "\n"
    msg = msg .. ((("  - SpawnerType / SpawnerVariant: " .. tostring(entity.SpawnerType)) .. ".") .. tostring(entity.SpawnerVariant)) .. "\n"
    msg = msg .. ("  - FrameCount: " .. tostring(entity.FrameCount)) .. "\n"
    if npc ~= nil then
        msg = msg .. ("  - CanShutDoors: " .. tostring(npc.CanShutDoors)) .. "\n"
    end
    return msg
end
function getBombVariantName(self, bomb)
    local enumName = BombVariant[bomb.Variant]
    return enumName == nil and "unknown" or "BombVariant." .. enumName
end
function getEffectVariantName(self, effect)
    local enumName = EffectVariant[effect.Variant]
    return enumName == nil and "unknown" or "EffectVariant." .. enumName
end
function getFamiliarVariantName(self, familiar)
    local enumName = FamiliarVariant[familiar.Variant]
    return enumName == nil and "unknown" or "FamiliarVariant." .. enumName
end
function getKnifeVariantName(self, knife)
    local enumName = KnifeVariant[knife.Variant]
    return enumName == nil and "unknown" or "KnifeVariant." .. enumName
end
function getLaserVariantName(self, laser)
    local enumName = LaserVariant[laser.Variant]
    return enumName == nil and "unknown" or "LaserVariant." .. enumName
end
function getEntityTypeName(self, npc)
    local enumName = EntityType[npc.Type]
    return enumName == nil and "unknown" or "EntityType." .. enumName
end
function getPickupVariantName(self, pickup)
    local enumName = PickupVariant[pickup.Variant]
    return enumName == nil and "unknown" or "PickupVariant." .. enumName
end
function getPlayerVariantName(self, player)
    local enumName = PlayerVariant[player.Variant]
    return enumName == nil and "unknown" or "PlayerVariant." .. enumName
end
function getProjectileVariantName(self, projectile)
    local enumName = ProjectileVariant[projectile.Variant]
    return enumName == nil and "unknown" or "ProjectileVariant." .. enumName
end
function getTearVariantName(self, tear)
    local enumName = TearVariant[tear.Variant]
    return enumName == nil and "unknown" or "TearVariant." .. enumName
end
--- Helper function for log information about a specific grid entity.
function ____exports.logGridEntity(gridEntity)
    local msg = getGridEntityLogLine(gridEntity)
    log(msg)
end
function getGridEntityLogLine(gridEntity, num)
    local gridEntityDesc = gridEntity:GetSaveState()
    local msg = num == nil and "" or tostring(num) .. ") "
    msg = msg .. getGridEntityID(nil, gridEntity)
    local door = gridEntity:ToDoor()
    if door ~= nil then
        msg = msg .. " (door)"
    end
    local pit = gridEntity:ToPit()
    if pit ~= nil then
        msg = msg .. " (pit)"
    end
    local poop = gridEntity:ToPoop()
    if poop ~= nil then
        msg = msg .. " (poop)"
    end
    local pressurePlate = gridEntity:ToPressurePlate()
    if pressurePlate ~= nil then
        msg = msg .. " (pressurePlate)"
    end
    local rock = gridEntity:ToRock()
    if rock ~= nil then
        msg = msg .. " (rock)"
    end
    local spikes = gridEntity:ToSpikes()
    if spikes ~= nil then
        msg = msg .. " (spikes)"
    end
    local tnt = gridEntity:ToTNT()
    if tnt ~= nil then
        msg = msg .. " (TNT)"
    end
    msg = msg .. ("  - State: " .. tostring(gridEntity.State)) .. "\n"
    msg = msg .. ("  - VarData: " .. tostring(gridEntity.VarData)) .. "\n"
    msg = msg .. ((("  - Position: (" .. tostring(gridEntity.Position.X)) .. ", ") .. tostring(gridEntity.Position.Y)) .. ")\n"
    msg = msg .. ("  - SpawnSeed: " .. tostring(gridEntityDesc.SpawnSeed)) .. "\n"
    msg = msg .. ("  - VariableSeed: " .. tostring(gridEntityDesc.VariableSeed)) .. ")\n"
    if door ~= nil then
        msg = msg .. ("  - Slot: " .. tostring(door.Slot)) .. "\n"
        msg = msg .. ("  - Direction: " .. tostring(door.Direction)) .. "\n"
        msg = msg .. ("  - TargetRoomIndex: " .. tostring(door.TargetRoomIndex)) .. "\n"
        msg = msg .. ("  - TargetRoomType: " .. tostring(door.TargetRoomType)) .. "\n"
    end
    return msg
end
local IGNORE_EFFECT_VARIANTS = __TS__New(ReadonlySet, {
    EffectVariant.BLOOD_EXPLOSION,
    EffectVariant.BLOOD_PARTICLE,
    EffectVariant.TINY_BUG,
    EffectVariant.TINY_FLY,
    EffectVariant.WATER_DROPLET,
    EffectVariant.WORM,
    EffectVariant.WALL_BUG,
    EffectVariant.FALLING_EMBER,
    EffectVariant.LIGHT,
    EffectVariant.MIST,
    EffectVariant.BACKDROP_DECORATION,
    EffectVariant.TADPOLE
})
--- Helper function for printing out every entity (or filtered entity) in the current room.
function ____exports.logAllEntities(includeBackgroundEffects, entityTypeFilter)
    local msg = "Entities in the room"
    if entityTypeFilter ~= nil then
        msg = msg .. (" (filtered to entity type " .. tostring(entityTypeFilter)) .. ")"
    elseif not includeBackgroundEffects then
        msg = msg .. " (not including background effects)"
    end
    msg = msg .. ":\n"
    local entities = getEntities(nil)
    local numMatchedEntities = 0
    for ____, ____value in __TS__Iterator(__TS__ArrayEntries(entities)) do
        local i = ____value[1]
        local entity = ____value[2]
        do
            if entityTypeFilter ~= nil and entity.Type ~= entityTypeFilter then
                goto __continue5
            end
            local effect = entity:ToEffect()
            if not includeBackgroundEffects and effect ~= nil and IGNORE_EFFECT_VARIANTS:has(effect.Variant) then
                goto __continue5
            end
            msg = msg .. getEntityLogLine(entity, i + 1)
            numMatchedEntities = numMatchedEntities + 1
        end
        ::__continue5::
    end
    local zeroText = "(no entities matched)"
    local oneOrMoreText = ((("(" .. tostring(numMatchedEntities)) .. " total ") .. (numMatchedEntities == 1 and "entity" or "entities")) .. ")"
    local text = numMatchedEntities == 0 and zeroText or oneOrMoreText
    msg = msg .. text .. "\n"
    for ____, line in ipairs(__TS__StringSplit(
        __TS__StringTrim(msg),
        "\n"
    )) do
        log(line)
    end
end
--- Helper function for printing out every grid entity (or filtered grid entity) in the current room.
-- 
-- @param includeWalls Optional. Whether oto log the walls. Default is false.
-- @param gridEntityTypeFilter Optional. If specified, will only log the given `GridEntityType`.
-- Default is undefined.
function ____exports.logAllGridEntities(includeWalls, gridEntityTypeFilter)
    if includeWalls == nil then
        includeWalls = false
    end
    local msg = "Grid entities in the room"
    if gridEntityTypeFilter ~= nil then
        msg = msg .. (" (filtered to grid entity type " .. tostring(gridEntityTypeFilter)) .. ")"
    elseif not includeWalls then
        msg = msg .. " (not including walls)"
    end
    msg = msg .. ":\n"
    local gridEntities = getGridEntities(nil)
    local numMatchedEntities = 0
    for ____, gridEntity in ipairs(gridEntities) do
        do
            local gridEntityIndex = gridEntity:GetGridIndex()
            local gridEntityType = gridEntity:GetType()
            if gridEntityTypeFilter ~= nil and gridEntityType ~= gridEntityTypeFilter then
                goto __continue14
            end
            if not includeWalls and gridEntityType == GridEntityType.WALL and gridEntityTypeFilter ~= GridEntityType.WALL then
                goto __continue14
            end
            msg = msg .. getGridEntityLogLine(gridEntity, gridEntityIndex)
            numMatchedEntities = numMatchedEntities + 1
        end
        ::__continue14::
    end
    msg = msg .. (numMatchedEntities == 0 and "(no grid entities matched)\n" or ((("(" .. tostring(numMatchedEntities)) .. " total grid ") .. (numMatchedEntities == 1 and "entity" or "entities")) .. ")\n")
    for ____, line in ipairs(__TS__StringSplit(
        __TS__StringTrim(msg),
        "\n"
    )) do
        log(line)
    end
end
--- Helper function for logging an array of specific entities.
function ____exports.logEntities(entities)
    for ____, entity in ipairs(entities) do
        ____exports.logEntity(entity)
    end
end
--- Helper function for logging an array of specific grid entities.
function ____exports.logGridEntities(gridEntities)
    for ____, gridEntity in ipairs(gridEntities) do
        ____exports.logGridEntity(gridEntity)
    end
end
--- Helper function to log information about the entity that corresponding to a pointer hash. (Only
-- use this when debugging, since retrieving the corresponding entity is expensive.)
function ____exports.logPtrHash(ptrHash)
    log("PtrHash: " .. tostring(ptrHash))
    local entity = getEntityFromPtrHash(nil, ptrHash)
    if entity == nil then
        log("No corresponding entity found.")
    else
        ____exports.logEntity(entity)
    end
end
--- Helper function to log information about the entity that corresponding to one or more pointer
-- hashes. (Only use this when debugging, since retrieving the corresponding entity is expensive.)
function ____exports.logPtrHashes(ptrHashes)
    for ____, ptrHash in ipairs(ptrHashes) do
        ____exports.logPtrHash(ptrHash)
    end
end
return ____exports
 end,
["classes.features.other.extraConsoleCommands.subroutines"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local GridRoom = ____isaac_2Dtypescript_2Ddefinitions.GridRoom
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____HealthType = require("enums.HealthType")
local HealthType = ____HealthType.HealthType
local ____direction = require("functions.direction")
local directionToVector = ____direction.directionToVector
local ____gridEntities = require("functions.gridEntities")
local spawnGridEntity = ____gridEntities.spawnGridEntity
local ____levelGrid = require("functions.levelGrid")
local getRoomAdjacentGridIndexes = ____levelGrid.getRoomAdjacentGridIndexes
local getRoomGridIndexesForType = ____levelGrid.getRoomGridIndexesForType
local ____logEntities = require("functions.logEntities")
local logAllEntities = ____logEntities.logAllEntities
local logAllGridEntities = ____logEntities.logAllGridEntities
local ____playerHealth = require("functions.playerHealth")
local addPlayerHealthType = ____playerHealth.addPlayerHealthType
local ____roomData = require("functions.roomData")
local getRoomData = ____roomData.getRoomData
local getRoomDescriptor = ____roomData.getRoomDescriptor
local ____rooms = require("functions.rooms")
local changeRoom = ____rooms.changeRoom
local ____types = require("functions.types")
local parseIntSafe = ____types.parseIntSafe
local ____roomTypeNames = require("objects.roomTypeNames")
local ROOM_TYPE_NAMES = ____roomTypeNames.ROOM_TYPE_NAMES
local DEFAULT_MOVE_UNITS = 0.5
function ____exports.addHeart(self, params, healthType)
    local numHearts = healthType == HealthType.MAX_HEARTS and 2 or 1
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("That is an invalid amount of hearts to add.")
            return
        end
        numHearts = num
    end
    local player = Isaac.GetPlayer()
    addPlayerHealthType(nil, player, healthType, numHearts)
end
function ____exports.devilAngel(self, useDevil)
    local level = game:GetLevel()
    local devilAngelRoomData = getRoomData(nil, GridRoom.DEVIL)
    if devilAngelRoomData ~= nil then
        local roomType = devilAngelRoomData.Type
        local conflictingType = useDevil and RoomType.ANGEL or RoomType.DEVIL
        if roomType == conflictingType then
            local roomDescriptor = getRoomDescriptor(nil, GridRoom.DEVIL)
            roomDescriptor.Data = nil
        end
    end
    if useDevil then
        level:InitializeDevilAngelRoom(false, true)
    else
        level:InitializeDevilAngelRoom(true, false)
    end
    changeRoom(nil, GridRoom.DEVIL)
end
function ____exports.listEntities(self, params, includeBackgroundEffects)
    local entityTypeFilter
    if params ~= "" then
        entityTypeFilter = parseIntSafe(nil, params)
        if entityTypeFilter == nil then
            print("That is an invalid entity type to filter by.")
            return
        end
    end
    logAllEntities(includeBackgroundEffects, entityTypeFilter)
    print("Logged the entities in the room to the \"log.txt\" file.")
end
function ____exports.listGridEntities(self, params, includeWalls)
    local gridEntityTypeFilter
    if params ~= "" then
        gridEntityTypeFilter = parseIntSafe(nil, params)
        if gridEntityTypeFilter == nil then
            print("That is an invalid grid entity type to filter by.")
            return
        end
    end
    logAllGridEntities(includeWalls, gridEntityTypeFilter)
    print("Logged the grid entities in the room to the \"log.txt\" file.")
end
function ____exports.movePlayer(self, params, direction)
    local amount = DEFAULT_MOVE_UNITS
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("That is an invalid amount of units to move.")
            return
        end
        amount = num
    end
    local player = Isaac.GetPlayer()
    local vector = directionToVector(nil, direction)
    local modifiedVector = vector * amount
    player.Position = player.Position + modifiedVector
end
function ____exports.spawnTrapdoorOrCrawlSpace(self, trapdoor)
    local room = game:GetRoom()
    local player = Isaac.GetPlayer()
    local position = room:FindFreeTilePosition(player.Position, 0)
    local gridEntityType = trapdoor and GridEntityType.TRAPDOOR or GridEntityType.CRAWL_SPACE
    spawnGridEntity(nil, gridEntityType, position)
end
function ____exports.warpToRoomType(self, roomType)
    local roomTypeName = ROOM_TYPE_NAMES[roomType]
    local gridIndexes = getRoomGridIndexesForType(nil, roomType)
    local firstGridIndex = gridIndexes[1]
    if firstGridIndex == nil then
        print(("There are no " .. roomTypeName) .. "s on this floor.")
        return
    end
    changeRoom(nil, firstGridIndex)
    print(((("Warped to room type: " .. roomTypeName) .. " (") .. tostring(roomType)) .. ")")
end
function ____exports.warpNextToRoomType(self, roomType)
    local roomTypeName = ROOM_TYPE_NAMES[roomType]
    local gridIndexes = getRoomGridIndexesForType(nil, roomType)
    local firstGridIndex = gridIndexes[1]
    if firstGridIndex == nil then
        print(("There are no " .. roomTypeName) .. "s on this floor.")
        return
    end
    local adjacentRoomGridIndexes = getRoomAdjacentGridIndexes(nil, firstGridIndex)
    for ____, ____value in __TS__Iterator(adjacentRoomGridIndexes) do
        local _doorSlot = ____value[1]
        local roomGridIndex = ____value[2]
        local roomData = getRoomData(nil, roomGridIndex)
        if roomData ~= nil and roomData.Type == RoomType.DEFAULT then
            changeRoom(nil, roomGridIndex)
            print(((("Warped next to room type: " .. roomTypeName) .. " (") .. tostring(roomType)) .. ")")
            return
        end
    end
    print(((("Failed to find the room next to room type: " .. roomTypeName) .. " (") .. tostring(roomType)) .. ")")
end
return ____exports
 end,
["classes.features.other.extraConsoleCommands.v"] = function(...) 
local ____exports = {}
____exports.v = {persistent = {
    darkness = false,
    labyrinth = false,
    lost = false,
    unknown = false,
    cursed = false,
    maze = false,
    blind = false,
    giant = false,
    disableCurses = false,
    damage = false,
    damageAmount = 500,
    speed = false,
    speedAmount = 2,
    tears = false,
    tearsAmount = 1,
    flight = false,
    chaosCardTears = false,
    spamBloodRights = false
}}
return ____exports
 end,
["classes.features.other.extraConsoleCommands.commands"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__StringSplit = ____lualib.__TS__StringSplit
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ActiveSlot = ____isaac_2Dtypescript_2Ddefinitions.ActiveSlot
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local CacheFlag = ____isaac_2Dtypescript_2Ddefinitions.CacheFlag
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
local DisplayFlag = ____isaac_2Dtypescript_2Ddefinitions.DisplayFlag
local GameStateFlag = ____isaac_2Dtypescript_2Ddefinitions.GameStateFlag
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
local GridRoom = ____isaac_2Dtypescript_2Ddefinitions.GridRoom
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
local PillColor = ____isaac_2Dtypescript_2Ddefinitions.PillColor
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local SoundEffect = ____isaac_2Dtypescript_2Ddefinitions.SoundEffect
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local GRID_ENTITY_TYPE_VALUES = ____cachedEnumValues.GRID_ENTITY_TYPE_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local sfxManager = ____cachedClasses.sfxManager
local ____constants = require("core.constants")
local DOGMA_ROOM_GRID_INDEX = ____constants.DOGMA_ROOM_GRID_INDEX
local MAX_LEVEL_GRID_INDEX = ____constants.MAX_LEVEL_GRID_INDEX
local MAX_NUM_FAMILIARS = ____constants.MAX_NUM_FAMILIARS
local ____constantsFirstLast = require("core.constantsFirstLast")
local FIRST_CARD_TYPE = ____constantsFirstLast.FIRST_CARD_TYPE
local FIRST_HORSE_PILL_COLOR = ____constantsFirstLast.FIRST_HORSE_PILL_COLOR
local FIRST_PILL_COLOR = ____constantsFirstLast.FIRST_PILL_COLOR
local LAST_VANILLA_CARD_TYPE = ____constantsFirstLast.LAST_VANILLA_CARD_TYPE
local ____HealthType = require("enums.HealthType")
local HealthType = ____HealthType.HealthType
local ____cards = require("functions.cards")
local getCardName = ____cards.getCardName
local isValidCardType = ____cards.isValidCardType
local ____characters = require("functions.characters")
local getCharacterName = ____characters.getCharacterName
local ____charge = require("functions.charge")
local addCharge = ____charge.addCharge
local getTotalCharge = ____charge.getTotalCharge
local ____collectibles = require("functions.collectibles")
local isValidCollectibleType = ____collectibles.isValidCollectibleType
local ____console = require("functions.console")
local printEnabled = ____console.printEnabled
local ____deepCopyTests = require("functions.deepCopyTests")
local runDeepCopyTests = ____deepCopyTests.runDeepCopyTests
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getNPCs = ____entitiesSpecific.getNPCs
local ____enums = require("functions.enums")
local isEnumValue = ____enums.isEnumValue
local ____flag = require("functions.flag")
local addFlag = ____flag.addFlag
local ____gridEntities = require("functions.gridEntities")
local spawnGridEntity = ____gridEntities.spawnGridEntity
local ____levelGrid = require("functions.levelGrid")
local getRoomGridIndexesForType = ____levelGrid.getRoomGridIndexesForType
local ____logMisc = require("functions.logMisc")
local logMusic = ____logMisc.logMusic
local logPlayerEffects = ____logMisc.logPlayerEffects
local logRoom = ____logMisc.logRoom
local logSeedEffects = ____logMisc.logSeedEffects
local logSounds = ____logMisc.logSounds
local ____mergeTests = require("functions.mergeTests")
local runMergeTests = ____mergeTests.runMergeTests
local ____pickupsSpecific = require("functions.pickupsSpecific")
local spawnCard = ____pickupsSpecific.spawnCard
local spawnPill = ____pickupsSpecific.spawnPill
local spawnTrinketFunction = ____pickupsSpecific.spawnTrinket
local ____pills = require("functions.pills")
local getPillEffectName = ____pills.getPillEffectName
local isValidPillEffect = ____pills.isValidPillEffect
local ____playerCollectibles = require("functions.playerCollectibles")
local addCollectibleCostume = ____playerCollectibles.addCollectibleCostume
local removeCollectibleCostume = ____playerCollectibles.removeCollectibleCostume
local useActiveItemTemp = ____playerCollectibles.useActiveItemTemp
local ____playerIndex = require("functions.playerIndex")
local getPlayers = ____playerIndex.getPlayers
local ____players = require("functions.players")
local getPlayerName = ____players.getPlayerName
local ____roomData = require("functions.roomData")
local getRoomData = ____roomData.getRoomData
local ____roomGrid = require("functions.roomGrid")
local gridCoordinatesToWorldPosition = ____roomGrid.gridCoordinatesToWorldPosition
local ____roomTransition = require("functions.roomTransition")
local reloadRoomFunction = ____roomTransition.reloadRoom
local ____rooms = require("functions.rooms")
local changeRoom = ____rooms.changeRoom
local ____run = require("functions.run")
local onSetSeed = ____run.onSetSeed
local restart = ____run.restart
local setUnseeded = ____run.setUnseeded
local ____spawnCollectible = require("functions.spawnCollectible")
local spawnCollectibleFunc = ____spawnCollectible.spawnCollectible
local ____stage = require("functions.stage")
local onStage = ____stage.onStage
local setStage = ____stage.setStage
local ____string = require("functions.string")
local getMapPartialMatch = ____string.getMapPartialMatch
local ____trinkets = require("functions.trinkets")
local getGoldenTrinketType = ____trinkets.getGoldenTrinketType
local isValidTrinketType = ____trinkets.isValidTrinketType
local ____types = require("functions.types")
local parseIntSafe = ____types.parseIntSafe
local ____utils = require("functions.utils")
local iRange = ____utils.iRange
local ____cardNameToTypeMap = require("maps.cardNameToTypeMap")
local CARD_NAME_TO_TYPE_MAP = ____cardNameToTypeMap.CARD_NAME_TO_TYPE_MAP
local ____characterNameToTypeMap = require("maps.characterNameToTypeMap")
local CHARACTER_NAME_TO_TYPE_MAP = ____characterNameToTypeMap.CHARACTER_NAME_TO_TYPE_MAP
local ____collectibleNameToTypeMap = require("maps.collectibleNameToTypeMap")
local COLLECTIBLE_NAME_TO_TYPE_MAP = ____collectibleNameToTypeMap.COLLECTIBLE_NAME_TO_TYPE_MAP
local ____pillNameToEffectMap = require("maps.pillNameToEffectMap")
local PILL_NAME_TO_EFFECT_MAP = ____pillNameToEffectMap.PILL_NAME_TO_EFFECT_MAP
local ____roomNameToTypeMap = require("maps.roomNameToTypeMap")
local ROOM_NAME_TO_TYPE_MAP = ____roomNameToTypeMap.ROOM_NAME_TO_TYPE_MAP
local ____trinketNameToTypeMap = require("maps.trinketNameToTypeMap")
local TRINKET_NAME_TO_TYPE_MAP = ____trinketNameToTypeMap.TRINKET_NAME_TO_TYPE_MAP
local ____roomTypeNames = require("objects.roomTypeNames")
local ROOM_TYPE_NAMES = ____roomTypeNames.ROOM_TYPE_NAMES
local ____subroutines = require("classes.features.other.extraConsoleCommands.subroutines")
local addHeart = ____subroutines.addHeart
local devilAngel = ____subroutines.devilAngel
local listEntities = ____subroutines.listEntities
local listGridEntities = ____subroutines.listGridEntities
local movePlayer = ____subroutines.movePlayer
local spawnTrapdoorOrCrawlSpace = ____subroutines.spawnTrapdoorOrCrawlSpace
local warpNextToRoomType = ____subroutines.warpNextToRoomType
local warpToRoomType = ____subroutines.warpToRoomType
local ____v = require("classes.features.other.extraConsoleCommands.v")
local v = ____v.v
--- Warps to the first Boss Room on the floor (or the Delirium Boss Room if on The Void).
function ____exports.bossRoom(self)
    local roomType = RoomType.BOSS
    local roomGridIndexes = getRoomGridIndexesForType(nil, roomType)
    local roomGridIndex = roomGridIndexes[1]
    if onStage(nil, LevelStage.VOID) then
        roomGridIndex = __TS__ArrayFind(
            roomGridIndexes,
            function(____, thisRoomGridIndex)
                local ____opt_0 = getRoomData(nil, thisRoomGridIndex)
                return (____opt_0 and ____opt_0.Subtype) == BossID.DELIRIUM
            end
        )
    end
    local roomTypeName = ROOM_TYPE_NAMES[RoomType.BOSS]
    if roomGridIndex == nil then
        print(("There are no " .. roomTypeName) .. "s on this floor.")
        return
    end
    changeRoom(nil, roomGridIndex)
    print(((("Warped to room type: " .. roomTypeName) .. " (") .. tostring(roomType)) .. ")")
end
--- Toggles Chaos Card tears for the player. Useful for killing enemies very fast without using
-- "debug 10".
function ____exports.chaosCardTears(self)
    v.persistent.chaosCardTears = not v.persistent.chaosCardTears
    printEnabled(nil, v.persistent.chaosCardTears, "Chaos Card tears")
end
--- Warps to the Devil Room for the floor. If the Angel Room has already been visited or initialized,
-- this will uninitialize it and make an Devil Room instead.
function ____exports.devilRoom(self)
    devilAngel(nil, true)
end
--- Gives the player a golden bomb.
function ____exports.goldenBomb(self)
    local player = Isaac.GetPlayer()
    player:AddGoldenBomb()
end
--- Gives a golden heart. Provide a number to give a custom amount of hearts. (You can use negative
-- numbers to remove hearts.)
function ____exports.goldenHearts(self, params)
    addHeart(nil, params, HealthType.GOLDEN)
end
--- Gives the player a golden key.
function ____exports.goldenKey(self)
    local player = Isaac.GetPlayer()
    player:AddGoldenKey()
end
--- Alias for the "debug 2" command. Useful for seeing the grid costs of each tile in the room.
function ____exports.gridCosts(self)
    Isaac.ExecuteCommand("debug 2")
end
--- Warps to the I AM ERROR room for the floor.
function ____exports.iAmErrorRoom(self)
    changeRoom(nil, GridRoom.ERROR)
end
--- Sets every NPC in the room to 1 HP.
function ____exports.oneHP(self)
    for ____, npc in ipairs(getNPCs(nil)) do
        npc.HitPoints = 1
    end
    print("Set every NPC to 1 HP.")
end
--- Gives a poop mana charge. This only affects Tainted Blue Baby. Provide a number to give a custom
-- amount of charges. (You can use negative numbers to remove charges.)
function ____exports.poopMana(self, params)
    local charges = 1
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid mana amount: " .. tostring(num))
            return
        end
        charges = num
    end
    local player = Isaac.GetPlayer()
    player:AddPoopMana(charges)
end
--- Play the supplied sound effect.
-- 
-- For example:
-- - sound 1 - Plays the 1-Up sound effect.
function ____exports.sound(self, params)
    local soundEffect = parseIntSafe(nil, params)
    if soundEffect == nil or not isEnumValue(nil, soundEffect, SoundEffect) then
        print(("Invalid sound effect ID: " .. tostring(soundEffect)) .. ".")
        return
    end
    sfxManager:Play(soundEffect)
end
--- Spawns a collectible in the center of the room. You must specify the collectible name or the
-- number corresponding to the collectible type.
-- 
-- For example, all of the following commands would spawn Spoon Bender:
-- 
-- ```text
-- spawnCollectible spoon bender
-- spawnCollectible spoon
-- spawnCollectible spo
-- spawnCollectible 3
-- ```
function ____exports.spawnCollectible(self, params)
    if params == "" then
        print("You must specify the collectible name or the number corresponding to the collectible type.")
        return
    end
    local num = parseIntSafe(nil, params)
    local collectibleType
    if num == nil then
        local match = getMapPartialMatch(nil, params, COLLECTIBLE_NAME_TO_TYPE_MAP)
        if match == nil then
            print("Unknown collectible: " .. params)
            return
        end
        collectibleType = match[2]
    else
        if not isValidCollectibleType(nil, num) then
            print("Invalid collectible type: " .. tostring(num))
        end
        collectibleType = num
    end
    local roomClass = game:GetRoom()
    local centerPos = roomClass:GetCenterPos()
    spawnCollectibleFunc(nil, collectibleType, centerPos, nil)
end
--- The same thing as the `spawnTrinket` command but spawns a golden version of the specified
-- trinket.
function ____exports.spawnGoldenTrinket(self, params)
    ____exports.spawnTrinket(nil, params, true)
end
--- Spawns a trinket in the center of the room. You must specify the trinket name or the number
-- corresponding to the trinket type.
-- 
-- For example, all of the following commands would spawn the Wiggle Worm trinket:
-- 
-- ```text
-- spawnTrinket wiggle worm
-- spawnTrinket wiggle
-- spawnTrinket wig
-- spawnTrinket 10
-- ```
-- 
-- Also see the `spawnGoldenTrinket` command.
function ____exports.spawnTrinket(self, params, golden)
    if golden == nil then
        golden = false
    end
    if params == "" then
        print("You must specify the name or number corresponding to the trinket type.")
        return
    end
    local num = parseIntSafe(nil, params)
    local trinketType
    if num == nil then
        local match = getMapPartialMatch(nil, params, TRINKET_NAME_TO_TYPE_MAP)
        if match == nil then
            print("Unknown trinket: " .. params)
            return
        end
        trinketType = match[2]
    else
        if not isValidTrinketType(nil, num) then
            print("Invalid trinket type: " .. tostring(num))
            return
        end
        trinketType = num
    end
    local roomClass = game:GetRoom()
    local centerPos = roomClass:GetCenterPos()
    local goldenTrinketType = getGoldenTrinketType(nil, trinketType)
    local trinketTypeToSpawn = golden and goldenTrinketType or trinketType
    spawnTrinketFunction(nil, trinketTypeToSpawn, centerPos)
end
--- Spawns a trinket at a specific grid tile location. You must specify the number corresponding to
-- the trinket type and the number corresponding to the grid tile location.
-- 
-- For example, this would spawn Wiggle Worm in the top-left corner of a 1x1 room:
-- 
-- ```text
-- spawnTrinketAt 10 16
-- ```
-- 
-- (You can use the "grid" command to toggle displaying the numerical grid indexes corresponding to
-- a grid tile.)
function ____exports.spawnTrinketAt(self, params, golden)
    if golden == nil then
        golden = false
    end
    if params == "" then
        print("You must specify the number corresponding to the trinket type and the number corresponding to the grid tile location.")
        return
    end
    local args = __TS__StringSplit(params, " ")
    if #args ~= 2 then
        print("You must specify the number corresponding to the trinket type and the number corresponding to the grid tile location.")
        return
    end
    local trinketTypeString, gridIndexString = table.unpack(args)
    if trinketTypeString == nil or gridIndexString == nil then
        return
    end
    local trinketType = parseIntSafe(nil, trinketTypeString)
    if trinketType == nil or not isValidTrinketType(nil, trinketType) then
        print("Invalid trinket type: " .. trinketTypeString)
        return
    end
    local gridIndex = parseIntSafe(nil, gridIndexString)
    if gridIndex == nil or gridIndex < 0 then
        print("Failed to parse the grid index of: " .. tostring(args[2]))
        return
    end
    local goldenTrinketType = getGoldenTrinketType(nil, trinketType)
    local trinketTypeToSpawn = golden and goldenTrinketType or trinketType
    spawnTrinketFunction(nil, trinketTypeToSpawn, gridIndex)
end
--- Warps to the starting room of the floor.
function ____exports.startingRoom(self)
    local level = game:GetLevel()
    local startingRoomIndex = level:GetStartingRoomIndex()
    changeRoom(nil, startingRoomIndex)
end
--- Adds a single charge to the player's specified active item. You must provide the active slot
-- number. Provide a second number to give a custom amount of charges. (You can use negative numbers
-- to remove charge.)
function ____exports.addCharges(self, params)
    if params == "" then
        print("You must specify a slot number. (Use 0 for the primary slot, 1 for the Schoolbag slot, 2 for the pocket item slot, and 3 for the Dice Bag slot.)")
        return
    end
    local args = __TS__StringSplit(params, " ")
    if #args ~= 1 and #args ~= 2 then
        print("Invalid amount of arguments: " .. tostring(#args))
        return
    end
    local activeSlotString, numChargeString = table.unpack(args)
    if activeSlotString == nil then
        return
    end
    local activeSlot = parseIntSafe(nil, activeSlotString)
    if activeSlot == nil or not isEnumValue(nil, activeSlot, ActiveSlot) then
        print("Invalid slot number: " .. tostring(activeSlot))
        return
    end
    local numCharges = 1
    if numChargeString ~= nil then
        local numChargesAttempt = parseIntSafe(nil, numChargeString)
        if numChargesAttempt == nil then
            print("Invalid charge amount: " .. numChargeString)
            return
        end
        numCharges = numChargesAttempt
    end
    local player = Isaac.GetPlayer()
    addCharge(nil, player, activeSlot, numCharges)
end
--- Warps to the Angel Room for the floor. If the Devil Room has already been visited or initialized,
-- this will uninitialize it and make an Angel Room instead.
function ____exports.angelRoom(self)
    devilAngel(nil, false)
end
--- Activates the flags for the Ascent (i.e. Backwards Path).
function ____exports.ascent(self)
    game:SetStateFlag(GameStateFlag.BACKWARDS_PATH_INIT, true)
    game:SetStateFlag(GameStateFlag.BACKWARDS_PATH, true)
    print("Set Ascent flags.")
end
--- Warps to the first Clean Bedroom or Dirty Bedroom on the floor.
function ____exports.bedroom(self)
    local cleanBedroomGridIndexes = getRoomGridIndexesForType(nil, RoomType.CLEAN_BEDROOM)
    if #cleanBedroomGridIndexes > 0 then
        warpToRoomType(nil, RoomType.CLEAN_BEDROOM)
        return
    end
    local dirtyBedroomGridIndexes = getRoomGridIndexesForType(nil, RoomType.DIRTY_BEDROOM)
    if #dirtyBedroomGridIndexes > 0 then
        warpToRoomType(nil, RoomType.DIRTY_BEDROOM)
        return
    end
    print("There are no Clean Bedrooms or Dirty Bedrooms on this floor.")
end
--- Gives a half black heart. Provide a number to give a custom amount of hearts. (You can use
-- negative numbers to remove hearts.)
function ____exports.blackHearts(self, params)
    addHeart(nil, params, HealthType.BLACK)
end
--- Warps to the Black Market for the floor.
function ____exports.blackMarket(self)
    changeRoom(nil, GridRoom.BLACK_MARKET)
end
--- Toggles permanent Curse of the Blind.
function ____exports.blind(self)
    v.persistent.blind = not v.persistent.blind
    printEnabled(nil, v.persistent.blind, "permanent Curse of the Blind")
end
--- Gives a blood charge. This only affects Bethany. Provide a number to give a custom amount of
-- charges. (You can use negative numbers to remove charges.)
function ____exports.bloodCharges(self, params)
    local charges = 1
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid charge amount: " .. tostring(num))
            return
        end
        charges = num
    end
    local player = Isaac.GetPlayer()
    player:AddBloodCharge(charges)
end
--- Alias for the "blackMarket" command.
function ____exports.bm(self)
    ____exports.blackMarket(nil)
end
--- Gives a bomb. Provide a number to give a custom amount of bombs. (You can use negative numbers to
-- remove bombs.)
function ____exports.bomb(self, params)
    local numBombs = 1
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid bomb amount: " .. tostring(num))
            return
        end
        numBombs = num
    end
    local player = Isaac.GetPlayer()
    player:AddBombs(numBombs)
end
--- Gives 99 bombs. Provide a number to give a custom amount of bombs. (You can use negative numbers
-- to remove bombs.)
function ____exports.bombs(self, params)
    local numBombs = 99
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid bomb amount: " .. tostring(num))
            return
        end
        numBombs = num
    end
    local player = Isaac.GetPlayer()
    player:AddBombs(numBombs)
end
--- Gives a bone heart. Provide a number to give a custom amount of hearts. (You can use negative
-- numbers to remove hearts.)
function ____exports.boneHearts(self, params)
    addHeart(nil, params, HealthType.BONE)
end
--- Alias for the "bossRoom" command.
function ____exports.boss(self)
    ____exports.bossRoom(nil)
end
--- Warps to the room next to the first Boss Room on the floor.
function ____exports.bossNextRoom(self)
    warpNextToRoomType(nil, RoomType.BOSS)
end
--- Warps to the Boss Rush for the floor.
function ____exports.bossRush(self)
    changeRoom(nil, GridRoom.BOSS_RUSH)
end
--- Gives a broken heart. Provide a number to give a custom amount of hearts. (You can use negative
-- numbers to remove hearts.)
function ____exports.brokenHearts(self, params)
    addHeart(nil, params, HealthType.BROKEN)
end
--- Gives the specified card. Accepts either the card type or the partial name of the card.
-- 
-- For example:
-- - card 5 - Gives The Emperor.
-- - card spa - Gives 2 of Spades.
function ____exports.card(self, params)
    if params == "" then
        print("You must specify a card name or number.")
        return
    end
    local cardType
    local num = parseIntSafe(nil, params)
    if num == nil then
        local match = getMapPartialMatch(nil, params, CARD_NAME_TO_TYPE_MAP)
        if match == nil then
            print("Unknown card: " .. params)
            return
        end
        cardType = match[2]
    else
        if not isValidCardType(nil, num) then
            print("Invalid card type: " .. tostring(num))
            return
        end
        cardType = num
    end
    local cardName = getCardName(nil, cardType)
    Isaac.ExecuteCommand("g k" .. tostring(cardType))
    print(((("Gave card: " .. cardName) .. " (") .. tostring(cardType)) .. ")")
end
--- Spawns every card on the ground, starting at the top-left-most tile.
function ____exports.cards(self)
    local cardType = FIRST_CARD_TYPE
    do
        local y = 0
        while y <= 6 do
            do
                local x = 0
                while x <= 12 do
                    if cardType > LAST_VANILLA_CARD_TYPE then
                        return
                    end
                    local worldPosition = gridCoordinatesToWorldPosition(nil, x, y)
                    spawnCard(nil, cardType, worldPosition)
                    cardType = cardType + 1
                    x = x + 1
                end
            end
            y = y + 1
        end
    end
end
--- Alias for the "chaosCardTears" command.
function ____exports.cc(self)
    ____exports.chaosCardTears(nil)
end
--- Restart as the specified character. Accepts either the character sub-type or the partial name of
-- the character.
-- 
-- For example:
-- - character 2 - Restarts as Cain.
-- - character ta - Restarts as Tainted Azazel.
function ____exports.character(self, params)
    if params == "" then
        print("You must specify a character name or number.")
        return
    end
    local playerType
    local num = parseIntSafe(nil, params)
    if num == nil then
        local match = getMapPartialMatch(nil, params, CHARACTER_NAME_TO_TYPE_MAP)
        if match == nil then
            print("Unknown character: " .. params)
            return
        end
        playerType = match[2]
    else
        if not isEnumValue(nil, num, PlayerType) or num == PlayerType.POSSESSOR then
            print("Invalid character number: " .. tostring(num))
            return
        end
        playerType = num
    end
    local characterName = getCharacterName(nil, playerType)
    restart(nil, playerType)
    print(((("Restarting as character: " .. characterName) .. " (") .. tostring(playerType)) .. ")")
end
--- Alias for the "addCharges" command.
function ____exports.charge(self, params)
    ____exports.addCharges(nil, params)
end
--- Warps to the first Clean Bedroom on the floor.
function ____exports.cleanBedroom(self)
    warpToRoomType(nil, RoomType.CLEAN_BEDROOM)
end
--- Gives a coin. Provide a number to give a custom amount of coins. (You can use negative numbers to
-- remove coins.)
function ____exports.coin(self, params)
    local numCoins = 1
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid coin amount: " .. tostring(num))
            return
        end
        numCoins = num
    end
    local player = Isaac.GetPlayer()
    player:AddCoins(numCoins)
end
--- Gives 999 coins. Provide a number to give a custom amount of coins. (You can use negative numbers
-- to remove coins.)
function ____exports.coins(self, params)
    local numCoins = 999
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid coin amount: " .. tostring(num))
            return
        end
        numCoins = num
    end
    local player = Isaac.GetPlayer()
    player:AddCoins(numCoins)
end
--- Alias for the "spawnCollectible" command.
function ____exports.collectible(self, params)
    ____exports.spawnCollectible(nil, params)
end
--- Creates a crawl space next to the player.
function ____exports.crawlSpace(self)
    spawnTrapdoorOrCrawlSpace(nil, false)
end
--- Toggles permanent Curse of the Cursed.
function ____exports.cursed(self)
    v.persistent.cursed = not v.persistent.cursed
    printEnabled(nil, v.persistent.cursed, "permanent Curse of the Cursed")
end
--- Uses the D20.
function ____exports.d20(self)
    local player = Isaac.GetPlayer()
    useActiveItemTemp(nil, player, CollectibleType.D20)
end
--- Uses the D6.
function ____exports.d6(self)
    local player = Isaac.GetPlayer()
    useActiveItemTemp(nil, player, CollectibleType.D6)
end
--- Warps to the Mausoleum 2 Boss Room that has Dad's Note in it.
function ____exports.dadsNote(self)
    game:SetStateFlag(GameStateFlag.BACKWARDS_PATH_INIT, true)
    setStage(nil, LevelStage.DEPTHS_2, StageType.REPENTANCE)
    ____exports.bossRoom(nil)
end
--- Toggles a set damage stat for the player. You can provide an optional argument to this command in
-- order to set the damage to a specific amount. Default is 500.
function ____exports.damage(self, params)
    if params ~= "" then
        local num = tonumber(params)
        if num == nil then
            print("Invalid damage amount: " .. params)
            return
        end
        v.persistent.damageAmount = num
    end
    v.persistent.damage = not v.persistent.damage
    local player = Isaac.GetPlayer()
    player:AddCacheFlags(CacheFlag.DAMAGE)
    player:EvaluateItems()
    printEnabled(nil, v.persistent.damage, "set damage")
end
--- Toggles permanent Curse of Darkness.
function ____exports.darkness(self)
    v.persistent.darkness = not v.persistent.darkness
    printEnabled(nil, v.persistent.darkness, "permanent Curse of Darkness")
end
--- Alias for the "devil" command.
function ____exports.dd(self)
    ____exports.devilRoom(nil)
end
--- Warps to the first Dirty Bedroom on the floor.
function ____exports.dirtyBedroom(self)
    warpToRoomType(nil, RoomType.DIRTY_BEDROOM)
end
--- Toggles whether curses can appear.
function ____exports.disableCurses(self)
    v.persistent.disableCurses = not v.persistent.disableCurses
    printEnabled(nil, not v.persistent.disableCurses, "curses")
end
--- Warps to the Dogma Boss Room.
function ____exports.dogma(self)
    setStage(nil, LevelStage.HOME, StageType.WRATH_OF_THE_LAMB)
    changeRoom(nil, DOGMA_ROOM_GRID_INDEX)
end
--- Moves the player 0.5 units down. Provide a number to move a custom amount of units.
function ____exports.down(self, params)
    movePlayer(nil, params, Direction.DOWN)
end
--- Warps to the Dungeon (i.e. the crawl space room) for the floor.
function ____exports.dungeon(self)
    changeRoom(nil, GridRoom.DUNGEON)
end
--- Logs the player's current temporary effects to the "log.txt" file.
function ____exports.effects(self)
    local player = Isaac.GetPlayer()
    logPlayerEffects(player)
    print("Logged the player's effects to the \"log.txt\" file.")
end
--- Alias for the "iAmError" command.
function ____exports.errorRoom(self)
    ____exports.iAmErrorRoom(nil)
end
--- Gives an eternal heart. Provide a number to give a custom amount of hearts. (You can use negative
-- numbers to remove hearts.)
function ____exports.eternalHearts(self, params)
    addHeart(nil, params, HealthType.ETERNAL)
end
--- Grants the maximum amount of blue flies to the player.
function ____exports.flies(self)
    local player = Isaac.GetPlayer()
    player:AddBlueFlies(MAX_NUM_FAMILIARS, player.Position, nil)
end
--- Toggles flight for the player.
function ____exports.flight(self, params)
    local player = Isaac.GetPlayer()
    v.persistent.flight = not v.persistent.flight
    if params == "true" then
        v.persistent.flight = true
    elseif params == "false" then
        v.persistent.flight = false
    end
    player:AddCacheFlags(CacheFlag.FLYING)
    player:EvaluateItems()
    local collectibleUsedToShowFlight = CollectibleType.FATE
    if v.persistent.flight then
        addCollectibleCostume(nil, player, collectibleUsedToShowFlight)
    else
        removeCollectibleCostume(nil, player, collectibleUsedToShowFlight)
    end
    printEnabled(nil, v.persistent.flight, "flight")
end
--- Alias for the "startingRoom" command.
function ____exports.fool(self)
    ____exports.startingRoom(nil)
end
--- Displays the current challenge, if any.
function ____exports.getChallenge(self)
    local challenge = Isaac.GetChallenge()
    local challengeName = Challenge[challenge]
    local challengeDescription = challengeName == nil and tostring(challenge) .. " (custom)" or ((("Challenge." .. challengeName) .. " (") .. tostring(challenge)) .. ")"
    print("The current challenge is: " .. challengeDescription)
end
--- Prints the charge for the specified slot. By default, will use `ActiveSlot.PRIMARY`.
function ____exports.getCharge(self, params)
    local activeSlot = ActiveSlot.PRIMARY
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil or not isEnumValue(nil, num, ActiveSlot) then
            print("Invalid slot number: " .. params)
            return
        end
        activeSlot = num
    end
    local player = Isaac.GetPlayer()
    local totalCharge = getTotalCharge(nil, player, activeSlot)
    print((((("Total charge for ActiveSlot." .. ActiveSlot[activeSlot]) .. " (") .. tostring(activeSlot)) .. ") is: ") .. tostring(totalCharge))
end
--- Prints the current position of all players.
function ____exports.getPosition(self)
    for ____, player in ipairs(getPlayers(nil)) do
        local playerName = getPlayerName(nil, player)
        print(((((("Player position for " .. playerName) .. ": (") .. tostring(player.Position.X)) .. ", ") .. tostring(player.Position.Y)) .. ")")
    end
end
--- Toggles permanent Curse of the Giant.
function ____exports.giant(self)
    v.persistent.giant = not v.persistent.giant
    printEnabled(nil, v.persistent.giant, "permanent Curse of the Giant")
end
--- Gives a Giga Bomb. Provide a number to give a custom amount of Giga Bombs. (You can use negative
-- numbers to remove bombs.)
function ____exports.gigaBomb(self, params)
    local numBombs = 1
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid Giga Bomb amount: " .. tostring(num))
            return
        end
        numBombs = num
    end
    local player = Isaac.GetPlayer()
    player:AddGigaBombs(numBombs)
end
--- Alias for the "goldenBomb" command.
function ____exports.goldBomb(self)
    ____exports.goldenBomb(nil)
end
--- Alias for the "goldenHearts" command.
function ____exports.goldHearts(self, params)
    ____exports.goldenHearts(nil, params)
end
--- Alias for the "goldenKey" command.
function ____exports.goldKey(self)
    ____exports.goldenKey(nil)
end
--- Alias for the "spawnGoldenTrinket" command.
function ____exports.goldTrinket(self, params)
    ____exports.spawnGoldenTrinket(nil, params)
end
--- Alias for the "spawnGoldenTrinket" command.
function ____exports.goldenTrinket(self, params)
    ____exports.spawnGoldenTrinket(nil, params)
end
--- Alias for the "debug 11" command. Useful for seeing the coordinates and grid index of each tile
-- in the room.
function ____exports.grid(self)
    Isaac.ExecuteCommand("debug 11")
end
--- Alias for the "gridCosts" command.
function ____exports.grid2(self)
    ____exports.gridCosts(nil)
end
--- Spawns every grid entity, starting at the top-left-most tile.
function ____exports.gridEntities(self)
    local gridEntityTypeIndex = -1
    do
        local y = 0
        while y <= 6 do
            do
                local x = 0
                while x <= 12 do
                    gridEntityTypeIndex = gridEntityTypeIndex + 1
                    local gridEntityType = GRID_ENTITY_TYPE_VALUES[gridEntityTypeIndex + 1]
                    if gridEntityType == nil then
                        return
                    end
                    local worldPosition = gridCoordinatesToWorldPosition(nil, x, y)
                    spawnGridEntity(nil, gridEntityType, worldPosition)
                    x = x + 1
                end
            end
            y = y + 1
        end
    end
end
--- Gives a half red heart. Provide a number to give a custom amount of hearts. (You can use negative
-- numbers to remove hearts.)
function ____exports.hearts(self, params)
    addHeart(nil, params, HealthType.RED)
end
--- Alias for the "debug 6" command.
function ____exports.hitboxes(self)
    Isaac.ExecuteCommand("debug 6")
end
--- Warps to the Blue Womb Boss Room.
function ____exports.hush(self)
    setStage(nil, LevelStage.BLUE_WOMB, StageType.ORIGINAL)
    ____exports.bossRoom(nil)
end
--- Gives a key. Provide a number to give a custom amount of key. (You can use negative numbers to
-- remove keys.)
function ____exports.key(self, params)
    local numKeys = 1
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid key amount: " .. tostring(num))
            return
        end
        numKeys = num
    end
    local player = Isaac.GetPlayer()
    player:AddKeys(numKeys)
end
--- Gives 99 keys. Provide a number to give a custom amount of coins. (You can use negative numbers
-- to remove keys.)
function ____exports.keys(self, params)
    local numKeys = 99
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid key amount: " .. tostring(num))
            return
        end
        numKeys = num
    end
    local player = Isaac.GetPlayer()
    player:AddKeys(numKeys)
end
--- Toggles permanent Curse of the Labyrinth.
function ____exports.labyrinth(self)
    v.persistent.labyrinth = not v.persistent.labyrinth
    printEnabled(nil, v.persistent.labyrinth, "permanent Curse of the Labyrinth")
end
--- Moves the player 0.5 units left. Provide a number to move a custom amount of units.
function ____exports.left(self, params)
    movePlayer(nil, params, Direction.LEFT)
end
--- Warps to the first Library on the floor.
function ____exports.library(self)
    warpToRoomType(nil, RoomType.LIBRARY)
end
--- Logs the entities in the room to the "log.txt" file. Provide a number to only log that specific
-- `EntityType`.
-- 
-- By default, this command will exclude background effects. If that is not desired, use the
-- "listAll" command instead.
function ____exports.list(self, params)
    listEntities(nil, params, false)
end
--- Logs the entities in the room to the "log.txt" file. Provide a number to only log that specific
-- `EntityType`.
function ____exports.listAll(self, params)
    listEntities(nil, params, true)
end
--- Logs the grid entities in the room to the "log.txt" file. Provide a number to only log that
-- specific `GridEntityType`.
-- 
-- By default, this command will exclude walls. If that is not desired, use the "listGridAll"
-- command instead.
function ____exports.listGrid(self, params)
    listGridEntities(nil, params, false)
end
--- Logs the grid entities in the room to the "log.txt" file. Provide a number to only log that
-- specific `GridEntityType`.
function ____exports.listGridAll(self, params)
    listGridEntities(nil, params, true)
end
--- Toggles permanent Curse of the Lost.
function ____exports.lost(self)
    v.persistent.lost = not v.persistent.lost
    printEnabled(nil, v.persistent.lost, "permanent Curse of the Lost")
end
--- Alias for the "1hp" command.
function ____exports.lowHP(self)
    ____exports.oneHP(nil)
end
--- Alias for "debug 9".
function ____exports.luck(self)
    Isaac.ExecuteCommand("debug 9")
end
--- Alias for the "poopMana" command.
function ____exports.mana(self, params)
    ____exports.poopMana(nil, params)
end
--- Completely reveals the entire map, including the Ultra Secret Room.
function ____exports.map(self)
    local level = game:GetLevel()
    local displayFlags = addFlag(nil, DisplayFlag.VISIBLE, DisplayFlag.SHADOW, DisplayFlag.SHOW_ICON)
    for ____, roomGridIndex in ipairs(iRange(nil, MAX_LEVEL_GRID_INDEX)) do
        local roomDesc = level:GetRoomByIdx(roomGridIndex)
        roomDesc.DisplayFlags = displayFlags
    end
    level:UpdateVisibility()
end
--- Gives a heart container. Provide a number to give a custom amount of heart containers. (You can
-- use negative numbers to remove heart containers.)
function ____exports.maxHearts(self, params)
    addHeart(nil, params, HealthType.MAX_HEARTS)
end
--- Toggles permanent Curse of the Maze.
function ____exports.maze(self)
    v.persistent.maze = not v.persistent.maze
    printEnabled(nil, v.persistent.maze, "permanent Curse of the Maze")
end
--- Warps to the first Miniboss Room on the floor.
function ____exports.miniboss(self)
    warpToRoomType(nil, RoomType.MINI_BOSS)
end
--- Logs the currently playing music track to the "log.txt" file.
function ____exports.music(self)
    logMusic()
    print("Logged the currently playing music track to the \"log.txt\" file.")
end
--- Alias for the "disableCurses" command.
function ____exports.noCurses(self)
    ____exports.disableCurses(nil)
end
--- Gives a pill with the specified pill effect. Accepts either the effect ID or the partial name of
-- the effect.
-- 
-- For example:
-- 
-- - `pill 5` - Gives a "Full Health" pill.
-- - `pill suns` - Gives a "Feels like I'm walking on sunshine" pill.
function ____exports.pill(self, params)
    if params == "" then
        print("You must specify a pill name or number.")
        return
    end
    local pillEffect
    local num = parseIntSafe(nil, params)
    if num == nil then
        local match = getMapPartialMatch(nil, params, PILL_NAME_TO_EFFECT_MAP)
        if match == nil then
            print("Unknown pill effect: " .. params)
            return
        end
        pillEffect = match[2]
    else
        if not isValidPillEffect(nil, num) then
            print("Invalid pill effect ID: " .. tostring(num))
            return
        end
        pillEffect = num
    end
    local pillEffectName = getPillEffectName(nil, pillEffect)
    Isaac.ExecuteCommand("g p" .. tostring(pillEffect))
    print(((("Gave pill: " .. pillEffectName) .. " (") .. tostring(pillEffect)) .. ")")
end
--- Spawns every pill on the ground, starting at the top-left-most tile.
function ____exports.pills(self)
    local y
    local pillColor
    y = 1
    pillColor = FIRST_PILL_COLOR
    do
        local x = 0
        while x <= 12 do
            if pillColor >= PillColor.GOLD then
                break
            end
            local worldPosition = gridCoordinatesToWorldPosition(nil, x, y)
            spawnPill(nil, pillColor, worldPosition)
            pillColor = pillColor + 1
            x = x + 1
        end
    end
    y = 2
    pillColor = FIRST_HORSE_PILL_COLOR
    do
        local x = 0
        while x <= 12 do
            if pillColor >= PillColor.HORSE_GOLD then
                break
            end
            local worldPosition = gridCoordinatesToWorldPosition(nil, x, y)
            spawnPill(nil, pillColor, worldPosition)
            pillColor = pillColor + 1
            x = x + 1
        end
    end
    y = 3
    local worldPosition1 = gridCoordinatesToWorldPosition(nil, 0, y)
    spawnPill(nil, PillColor.GOLD, worldPosition1)
    local worldPosition2 = gridCoordinatesToWorldPosition(nil, 1, y)
    spawnPill(nil, PillColor.HORSE_GOLD, worldPosition2)
end
--- Warps to the first Planetarium on the floor.
function ____exports.planetarium(self)
    warpToRoomType(nil, RoomType.PLANETARIUM)
end
--- Alias for the "sound" command.
function ____exports.playSound(self, params)
    ____exports.sound(nil, params)
end
--- Sets the player's pocket item to the specified collectible type.
function ____exports.pocket(self, params)
    if params == "" then
        print("You must supply a collectible type to put as the pocket item.")
        return
    end
    local collectibleType = parseIntSafe(nil, params)
    if collectibleType == nil or not isValidCollectibleType(nil, collectibleType) then
        print("Invalid collectible type: " .. tostring(collectibleType))
        return
    end
    local player = Isaac.GetPlayer()
    player:SetPocketActiveItem(collectibleType, ActiveSlot.POCKET)
end
--- Creates a poop grid entity next to the player.
function ____exports.poop(self)
    local roomClass = game:GetRoom()
    local player = Isaac.GetPlayer()
    local tilePosition = roomClass:FindFreeTilePosition(player.Position, 0)
    spawnGridEntity(nil, GridEntityType.POOP, tilePosition)
end
--- Alias for the "getPosition" command.
function ____exports.position(self)
    ____exports.getPosition(nil)
end
--- Alias for the "hearts" command.
function ____exports.redHearts(self, params)
    ____exports.hearts(nil, params)
end
--- Starts a room transition to the same room that you are already in.
function ____exports.reloadRoom(self)
    reloadRoomFunction(nil)
end
--- Moves the player 0.5 units right. Provide a number to move a custom amount of units.
function ____exports.right(self, params)
    movePlayer(nil, params, Direction.RIGHT)
end
--- Logs information about the room to the "log.txt" file.
function ____exports.room(self)
    logRoom()
    print("Logged room information to the \"log.txt\" file.")
end
--- Gives a rotten heart. Provide a number to give a custom amount of hearts. (You can use negative
-- numbers to remove hearts.)
function ____exports.rottenHearts(self, params)
    addHeart(nil, params, HealthType.ROTTEN)
end
--- Run the suite of tests that prove that the "deepCopy" helper function and the "merge" function
-- work properly. For more information, see the `runDeepCopyTests` and the `runMergeTests`
-- functions.
-- 
-- In general, running the tests is only useful if you are troubleshooting the save data manager.
function ____exports.runTests(self)
    runDeepCopyTests(nil)
    runMergeTests(nil)
end
--- Alias for the "stage" command.
-- 
-- For example:
-- - s 3 - Warps to Caves 1.
-- - s 1c - Warps to Downpour 1.
function ____exports.s(self, params)
    if params == "" then
        print("You must specify a stage number.")
        return
    end
    local finalCharacter = string.sub(params, -1)
    local stageString
    local stageTypeLetter
    if finalCharacter == "a" or finalCharacter == "b" or finalCharacter == "c" or finalCharacter == "d" then
        stageString = string.sub(params, 1, -2)
        stageTypeLetter = finalCharacter
    else
        stageString = params
        stageTypeLetter = ""
    end
    local stage = parseIntSafe(nil, stageString)
    if stage == nil or not isEnumValue(nil, stage, StageType) then
        print("Invalid stage number: " .. tostring(stage))
        return
    end
    Isaac.ExecuteCommand(("stage " .. tostring(stage)) .. stageTypeLetter)
end
--- Warps to the first Sacrifice Room on the floor.
function ____exports.sacrificeRoom(self)
    warpToRoomType(nil, RoomType.SACRIFICE)
end
--- Warps to the first Secret Room on the floor.
function ____exports.secretRoom(self)
    warpToRoomType(nil, RoomType.SECRET)
end
--- Warps to the Secret Shop that you would normally get to with a Member Card.
function ____exports.secretShop(self)
    changeRoom(nil, GridRoom.SECRET_SHOP)
end
--- Changes to a seeded run, using the seed of the current run.
function ____exports.seedStick(self)
    local seedsClass = game:GetSeeds()
    local startSeedString = seedsClass:GetStartSeedString()
    Isaac.ExecuteCommand("seed " .. startSeedString)
    print("Sticking to seed: " .. startSeedString)
end
--- Logs all of the current run's seed effects to the "log.txt" file.
function ____exports.seeds(self)
    logSeedEffects()
    print("Logged the seed effects to the \"log.txt\" file.")
end
--- Sets a charge to the player's specified active item. You must provide the active slot number and
-- the number of charges to set.
function ____exports.setCharges(self, params)
    if params == "" then
        print("You must specify a slot number and a charge amount. (Use 0 for the primary slot, 1 for the Schoolbag slot, 2 for the pocket item slot, and 3 for the Dice Bag slot.)")
        return
    end
    local args = __TS__StringSplit(params, " ")
    if #args == 1 then
        print("You must specify the amount of charge to set.")
        return
    end
    if #args ~= 2 then
        print("Invalid amount of arguments: " .. tostring(#args))
        return
    end
    local activeSlotString, chargeString = table.unpack(args)
    if activeSlotString == nil or chargeString == nil then
        return
    end
    local activeSlot = parseIntSafe(nil, activeSlotString)
    if activeSlot == nil or not isEnumValue(nil, activeSlot, ActiveSlot) then
        print("Invalid slot number: " .. activeSlotString)
        return
    end
    local chargeNum = parseIntSafe(nil, chargeString)
    if chargeNum == nil then
        print("Invalid charge amount: " .. chargeString)
        return
    end
    if chargeNum < 0 then
        print("Invalid charge amount: " .. tostring(chargeNum))
        return
    end
    local player = Isaac.GetPlayer()
    player:SetActiveCharge(chargeNum, activeSlot)
end
--- Moves the first player to the specified position.
-- 
-- For example:
-- - setPosition 100 50
function ____exports.setPosition(self, params)
    if params == "" then
        print("You must specify a position. (e.g. \"setPosition 100 50\")")
        return
    end
    local args = __TS__StringSplit(params, " ")
    if #args ~= 2 then
        print("You must specify a position. (e.g. \"setPosition 100 50\")")
        return
    end
    local xString, yString = table.unpack(args)
    if xString == nil or yString == nil then
        return
    end
    local x = parseIntSafe(nil, xString)
    if x == nil then
        print("Invalid x value: " .. xString)
        return
    end
    local y = parseIntSafe(nil, yString)
    if y == nil then
        print("Invalid y value: " .. yString)
        return
    end
    local player = Isaac.GetPlayer()
    local newPosition = Vector(x, y)
    player.Position = newPosition
end
--- Warps to the first shop on the floor.
function ____exports.shop(self)
    warpToRoomType(nil, RoomType.SHOP)
end
--- Uses the Smelter to smelt the current player's trinket.
function ____exports.smelt(self)
    local player = Isaac.GetPlayer()
    useActiveItemTemp(nil, player, CollectibleType.SMELTER)
end
--- Gives a soul charge. This only affects Tainted Bethany. Provide a number to give a custom amount
-- of charges. (You can use negative numbers to remove charges.)
function ____exports.soulCharges(self, params)
    local charges = 1
    if params ~= "" then
        local num = parseIntSafe(nil, params)
        if num == nil then
            print("Invalid charges amount: " .. tostring(num))
            return
        end
        charges = num
    end
    local player = Isaac.GetPlayer()
    player:AddSoulCharge(charges)
end
--- Gives a half soul heart. Provide a number to give a custom amount of hearts. (You can use
-- negative numbers to remove hearts.)
function ____exports.soulHearts(self, params)
    addHeart(nil, params, HealthType.SOUL)
end
--- Logs all of the currently playing sound effects to the "log.txt" file.
function ____exports.sounds(self)
    logSounds()
    print("Logged the currently playing sound effects to the \"log.txt\" file.")
end
--- Toggles spamming Blood Rights on every frame. Useful for killing enemies very fast without using
-- "debug 10".
function ____exports.spam(self)
    v.persistent.spamBloodRights = not v.persistent.spamBloodRights
    printEnabled(nil, v.persistent.spamBloodRights, "spamming Blood Rights")
end
--- Spawns a collectible at a specific grid tile location. You must specify the number corresponding
-- to the collectible type and the number corresponding to the grid tile location.
-- 
-- For example, this would spawn Spoon Bender in the top-left corner of a 1x1 room:
-- 
-- ```text
-- spawnCollectibleAt 3 16
-- ```
-- 
-- (You can use the "grid" command to toggle displaying the numerical grid indexes corresponding to
-- a grid tile.)
function ____exports.spawnCollectibleAt(self, params)
    if params == "" then
        print("You must specify the number corresponding to the collectible type and the number corresponding to the grid tile location.")
        return
    end
    local args = __TS__StringSplit(params, " ")
    if #args ~= 2 then
        print("You must specify the number corresponding to the collectible type and the number corresponding to the grid tile location.")
        return
    end
    local collectibleTypeString, gridIndexString = table.unpack(args)
    if collectibleTypeString == nil or gridIndexString == nil then
        return
    end
    local collectibleType = parseIntSafe(nil, collectibleTypeString)
    if collectibleType == nil or not isValidCollectibleType(nil, collectibleType) then
        print("Invalid collectible type: " .. tostring(args[1]))
        return
    end
    local gridIndex = parseIntSafe(nil, gridIndexString)
    if gridIndex == nil or gridIndex < 0 then
        print("Failed to parse the grid index of: " .. tostring(args[2]))
        return
    end
    spawnCollectibleFunc(nil, collectibleType, gridIndex, nil)
end
--- Alias for the `spawnGoldenTrinket` command.
function ____exports.spawnGoldTrinket(self, params)
    ____exports.spawnGoldenTrinket(nil, params)
end
--- The same thing as the `spawnTrinketAt` command but spawns a golden version of the specified
-- trinket.
function ____exports.spawnGoldenTrinketAt(self, params)
    ____exports.spawnTrinketAt(nil, params, true)
end
--- Toggles a set movement speed and flight for the player. You can provide an optional argument to
-- this command in order to set the speed to a specific amount. Default is 2.0 (which is the maximum
-- that the stat can be set to).
function ____exports.speed(self, params)
    local player = Isaac.GetPlayer()
    if params ~= "" then
        local num = tonumber(params)
        if num == nil then
            print("Invalid speed amount: " .. params)
            return
        end
        v.persistent.damageAmount = num
    end
    v.persistent.speed = not v.persistent.speed
    player:AddCacheFlags(CacheFlag.SPEED)
    player:EvaluateItems()
    local value = tostring(v.persistent.speed)
    ____exports.flight(nil, value)
    printEnabled(nil, v.persistent.speed, "set speed")
end
--- Creates a spikes grid entity next to the player.
function ____exports.spikes(self)
    local roomClass = game:GetRoom()
    local player = Isaac.GetPlayer()
    local tilePosition = roomClass:FindFreeTilePosition(player.Position, 0)
    spawnGridEntity(nil, GridEntityType.SPIKES, tilePosition)
end
--- Alias for the "startingRoom" command.
function ____exports.startRoom(self)
    ____exports.startingRoom(nil)
end
--- Warps to the first Super Secret Room on the floor.
function ____exports.superSecretRoom(self)
    warpToRoomType(nil, RoomType.SUPER_SECRET)
end
--- Toggles a set tear delay (e.g. fire rate) for the player. You can provide an optional argument to
-- this command in order to set the tear delay to a specific amount. Default is 1 (which is
-- equivalent to the Soy Milk tear rate).
function ____exports.tears(self, params)
    if params ~= "" then
        local num = tonumber(params)
        if num == nil then
            print("Invalid tear delay amount: " .. params)
            return
        end
        v.persistent.tearsAmount = num
    end
    v.persistent.tears = not v.persistent.tears
    local player = Isaac.GetPlayer()
    player:AddCacheFlags(CacheFlag.FIRE_DELAY)
    player:EvaluateItems()
    printEnabled(nil, v.persistent.damage, "set tear delay")
end
--- Alias for the "runTests" command.
function ____exports.tests(self)
    ____exports.runTests(nil)
end
--- Creates a trapdoor next to the player.
function ____exports.trapdoor(self)
    spawnTrapdoorOrCrawlSpace(nil, true)
end
--- Warps to the first Treasure Room on the floor.
function ____exports.treasureRoom(self)
    warpToRoomType(nil, RoomType.TREASURE)
end
--- Alias for the "spawnTrinket" command.
function ____exports.trinket(self, params)
    ____exports.spawnTrinket(nil, params)
end
--- Warps to the first Ultra Secret Room on the floor.
function ____exports.ultraSecretRoom(self)
    warpToRoomType(nil, RoomType.ULTRA_SECRET)
end
--- Toggles permanent Curse of the Unknown.
function ____exports.unknown(self)
    v.persistent.unknown = not v.persistent.unknown
    printEnabled(nil, v.persistent.unknown, "permanent Curse of the Unknown")
end
--- If currently on a set seed, changes to an unseeded state and restarts the game.
function ____exports.unseed(self)
    if not onSetSeed(nil) then
        print("You are not on a set seed, so you cannot unseed the run.")
        return
    end
    setUnseeded(nil)
    restart(nil)
end
--- Moves the player 0.5 units up. Provide a number to move a custom amount of units.
function ____exports.up(self, params)
    movePlayer(nil, params, Direction.UP)
end
--- Warps to the specified room type. Accepts either the room type number or the partial name of the
-- room type.
-- 
-- For example:
-- - warp 5 - Warps to the first Boss Room on the floor, if any.
-- - warp tr - Warps to the first Treasure Room on the floor, if any.
function ____exports.warp(self, params)
    if params == "" then
        print("You must specify a room type name or number.")
        return
    end
    local roomType
    local num = parseIntSafe(nil, params)
    if num == nil then
        local match = getMapPartialMatch(nil, params, ROOM_NAME_TO_TYPE_MAP)
        if match == nil then
            print("Unknown room type: " .. params)
            return
        end
        roomType = match[2]
    else
        if not isEnumValue(nil, num, RoomType) then
            print("Invalid room type: " .. tostring(num))
            return
        end
        roomType = num
    end
    warpToRoomType(nil, roomType)
end
--- Alias for the "labyrinth" command.
function ____exports.xl(self)
    ____exports.labyrinth(nil)
end
return ____exports
 end,
["classes.features.other.ExtraConsoleCommands"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CacheFlag = ____isaac_2Dtypescript_2Ddefinitions.CacheFlag
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local LevelCurse = ____isaac_2Dtypescript_2Ddefinitions.LevelCurse
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local TearVariant = ____isaac_2Dtypescript_2Ddefinitions.TearVariant
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____console = require("functions.console")
local isVanillaConsoleCommand = ____console.isVanillaConsoleCommand
local ____flag = require("functions.flag")
local addFlag = ____flag.addFlag
local bitFlags = ____flag.bitFlags
local ____log = require("functions.log")
local logError = ____log.logError
local ____string = require("functions.string")
local getMapPartialMatch = ____string.getMapPartialMatch
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local commands = require("classes.features.other.extraConsoleCommands.commands")
local ____v = require("classes.features.other.extraConsoleCommands.v")
local v = ____v.v
--- When you enable this feature, many custom commands will be added to the in-game console. See the
-- [dedicated command list](ExtraConsoleCommandsList) for more information about them.
-- 
-- Note that in order to avoid conflicts, if two or more mods enable this feature, then the first
-- loaded one will control all of the command logic. When this occurs, a global variable of
-- `__ISAACSCRIPT_COMMON_EXTRA_CONSOLE_COMMANDS_FEATURE` will be created and will automatically be
-- used by the non-main instances. For this reason, if you use multiple mods with
-- `isaacscript-common` and a custom command from the standard library is not working properly, then
-- you might need to get another mod author to update their version of `isaacscript-common`.
____exports.ExtraConsoleCommands = __TS__Class()
local ExtraConsoleCommands = ____exports.ExtraConsoleCommands
ExtraConsoleCommands.name = "ExtraConsoleCommands"
__TS__ClassExtends(ExtraConsoleCommands, Feature)
function ExtraConsoleCommands.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.commandFunctionMap = __TS__New(Map)
    self.postUpdate = function()
        if v.persistent.spamBloodRights then
            local player = Isaac.GetPlayer()
            player:UseActiveItem(CollectibleType.BLOOD_RIGHTS)
        end
    end
    self.evaluateCacheDamage = function(____, player)
        if v.persistent.damage then
            player.Damage = v.persistent.damageAmount
        end
    end
    self.evaluateCacheFireDelay = function(____, player)
        if v.persistent.tears then
            player.FireDelay = v.persistent.tearsAmount
        end
    end
    self.evaluateCacheSpeed = function(____, player)
        if v.persistent.speed then
            player.MoveSpeed = v.persistent.speedAmount
        end
    end
    self.evaluateCacheFlying = function(____, player)
        if v.persistent.flight then
            player.CanFly = true
        end
    end
    self.postCurseEval = function(____, curses)
        if v.persistent.disableCurses then
            return bitFlags(nil, LevelCurse.NONE)
        end
        local newCurses = curses
        if v.persistent.darkness then
            newCurses = addFlag(nil, newCurses, LevelCurse.DARKNESS)
        end
        if v.persistent.labyrinth then
            newCurses = addFlag(nil, newCurses, LevelCurse.LABYRINTH)
        end
        if v.persistent.lost then
            newCurses = addFlag(nil, newCurses, LevelCurse.LOST)
        end
        if v.persistent.unknown then
            newCurses = addFlag(nil, newCurses, LevelCurse.UNKNOWN)
        end
        if v.persistent.cursed then
            newCurses = addFlag(nil, newCurses, LevelCurse.CURSED)
        end
        if v.persistent.maze then
            newCurses = addFlag(nil, newCurses, LevelCurse.MAZE)
        end
        if v.persistent.blind then
            newCurses = addFlag(nil, newCurses, LevelCurse.BLIND)
        end
        if v.persistent.giant then
            newCurses = addFlag(nil, newCurses, LevelCurse.GIANT)
        end
        local ____temp_0
        if curses == newCurses then
            ____temp_0 = nil
        else
            ____temp_0 = newCurses
        end
        return ____temp_0
    end
    self.executeCmd = function(____, command, params)
        local resultTuple = getMapPartialMatch(nil, command, self.commandFunctionMap)
        if resultTuple == nil then
            return
        end
        local commandName, commandFunction = table.unpack(resultTuple)
        print("Command: " .. commandName)
        commandFunction(nil, params)
    end
    self.postFireTear = function(____, tear)
        if v.persistent.chaosCardTears then
            tear:ChangeVariant(TearVariant.CHAOS_CARD)
        end
    end
    self.entityTakeDmgPlayer = function(____, _player, _damageAmount, _damageFlags, _damageSource, _damageCountdownFrames)
        if v.persistent.spamBloodRights then
            return false
        end
        return nil
    end
    self.isMainFeature = __ISAACSCRIPT_COMMON_EXTRA_CONSOLE_COMMANDS_FEATURE == nil
    if not self.isMainFeature then
        return
    end
    __ISAACSCRIPT_COMMON_EXTRA_CONSOLE_COMMANDS_FEATURE = self
    self.callbacksUsed = {
        {ModCallback.POST_UPDATE, self.postUpdate},
        {ModCallback.EVALUATE_CACHE, self.evaluateCacheDamage, {CacheFlag.DAMAGE}},
        {ModCallback.EVALUATE_CACHE, self.evaluateCacheFireDelay, {CacheFlag.FIRE_DELAY}},
        {ModCallback.EVALUATE_CACHE, self.evaluateCacheSpeed, {CacheFlag.SPEED}},
        {ModCallback.EVALUATE_CACHE, self.evaluateCacheFlying, {CacheFlag.FLYING}},
        {ModCallback.POST_CURSE_EVAL, self.postCurseEval},
        {ModCallback.EXECUTE_CMD, self.executeCmd},
        {ModCallback.POST_FIRE_TEAR, self.postFireTear}
    }
    self.customCallbacksUsed = {{ModCallbackCustom.ENTITY_TAKE_DMG_PLAYER, self.entityTakeDmgPlayer}}
    for ____, ____value in ipairs(__TS__ObjectEntries(commands)) do
        local funcName = ____value[1]
        local func = ____value[2]
        self.commandFunctionMap:set(funcName, func)
    end
end
function ExtraConsoleCommands.prototype.addConsoleCommand(self, commandName, commandFunction)
    if not self.isMainFeature then
        assertDefined(nil, __ISAACSCRIPT_COMMON_EXTRA_CONSOLE_COMMANDS_FEATURE, "Failed to find the non-main isaacscript-common extra console commands feature in the global variable.")
        __ISAACSCRIPT_COMMON_EXTRA_CONSOLE_COMMANDS_FEATURE:addConsoleCommand(commandName, commandFunction)
        return
    end
    if isVanillaConsoleCommand(nil, commandName) then
        logError(("Failed to add a new console command of \"" .. commandName) .. "\" because that name already belongs to a vanilla command. You must pick a non-colliding name.")
        return
    end
    if self.commandFunctionMap:has(commandName) then
        logError(("Failed to add a new console command of \"" .. commandName) .. "\" because there is already an existing custom command by that name. If you want to overwrite a command from the standard library, you can use the \"removeExtraConsoleCommand\" function.")
        return
    end
    self.commandFunctionMap:set(commandName, commandFunction)
end
__TS__DecorateLegacy({Exported}, ExtraConsoleCommands.prototype, "addConsoleCommand", true)
function ExtraConsoleCommands.prototype.removeConsoleCommand(self, commandName)
    if not self.isMainFeature then
        assertDefined(nil, __ISAACSCRIPT_COMMON_EXTRA_CONSOLE_COMMANDS_FEATURE, "Failed to find the non-main isaacscript-common extra console commands feature in the global variable.")
        __ISAACSCRIPT_COMMON_EXTRA_CONSOLE_COMMANDS_FEATURE:removeConsoleCommand(commandName)
        return
    end
    if not self.commandFunctionMap:has(commandName) then
        error(("Failed to remove the console command of \"" .. commandName) .. "\", since it does not already exist in the command map.")
    end
    self.commandFunctionMap:delete(commandName)
end
__TS__DecorateLegacy({Exported}, ExtraConsoleCommands.prototype, "removeConsoleCommand", true)
function ExtraConsoleCommands.prototype.removeAllConsoleCommands(self)
    self.commandFunctionMap:clear()
end
__TS__DecorateLegacy({Exported}, ExtraConsoleCommands.prototype, "removeAllConsoleCommands", true)
return ____exports
 end,
["classes.features.other.FadeInRemover"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local INSTANT_FADE_IN_SPEED = 1
____exports.FadeInRemover = __TS__Class()
local FadeInRemover = ____exports.FadeInRemover
FadeInRemover.name = "FadeInRemover"
__TS__ClassExtends(FadeInRemover, Feature)
function FadeInRemover.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.enabled = false
    self.postGameStartedReordered = function()
        if self.enabled then
            game:Fadein(INSTANT_FADE_IN_SPEED)
        end
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_GAME_STARTED_REORDERED, self.postGameStartedReordered, {nil}}}
end
function FadeInRemover.prototype.removeFadeIn(self)
    self.enabled = true
end
__TS__DecorateLegacy({Exported}, FadeInRemover.prototype, "removeFadeIn", true)
function FadeInRemover.prototype.restoreFadeIn(self)
    self.enabled = false
end
__TS__DecorateLegacy({Exported}, FadeInRemover.prototype, "restoreFadeIn", true)
return ____exports
 end,
["classes.features.other.FastReset"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local checkResetInput
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ButtonAction = ____isaac_2Dtypescript_2Ddefinitions.ButtonAction
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____input = require("functions.input")
local isActionTriggeredOnAnyInput = ____input.isActionTriggeredOnAnyInput
local isModifierKeyPressed = ____input.isModifierKeyPressed
local ____run = require("functions.run")
local restart = ____run.restart
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
function checkResetInput(self)
    local isPaused = game:IsPaused()
    if isPaused then
        return
    end
    if AwaitingTextInput then
        return
    end
    if isModifierKeyPressed(nil) then
        return
    end
    if isActionTriggeredOnAnyInput(nil, ButtonAction.RESTART) then
        restart(nil)
    end
end
____exports.FastReset = __TS__Class()
local FastReset = ____exports.FastReset
FastReset.name = "FastReset"
__TS__ClassExtends(FastReset, Feature)
function FastReset.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.enabled = false
    self.postRender = function()
        if not self.enabled then
            return
        end
        checkResetInput(nil)
    end
    self.callbacksUsed = {{ModCallback.POST_RENDER, self.postRender}}
end
function FastReset.prototype.enableFastReset(self)
    self.enabled = true
end
__TS__DecorateLegacy({Exported}, FastReset.prototype, "enableFastReset", true)
function FastReset.prototype.disableFastReset(self)
    self.enabled = false
end
__TS__DecorateLegacy({Exported}, FastReset.prototype, "disableFastReset", true)
return ____exports
 end,
["classes.features.other.FlyingDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local NullItemID = ____isaac_2Dtypescript_2Ddefinitions.NullItemID
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local FLYING_NULL_ITEMS = {NullItemID.REVERSE_SUN, NullItemID.SPIRIT_SHACKLES_SOUL, NullItemID.LOST_CURSE}
____exports.FlyingDetection = __TS__Class()
local FlyingDetection = ____exports.FlyingDetection
FlyingDetection.name = "FlyingDetection"
__TS__ClassExtends(FlyingDetection, Feature)
function FlyingDetection.prototype.____constructor(self, moddedElementSets)
    Feature.prototype.____constructor(self)
    self.featuresUsed = {ISCFeature.MODDED_ELEMENT_SETS}
    self.moddedElementSets = moddedElementSets
end
function FlyingDetection.prototype.hasFlyingTemporaryEffect(self, player)
    local effects = player:GetEffects()
    local flyingCollectibles = self.moddedElementSets:getFlyingCollectibleTypes(true)
    for ____, collectibleType in ipairs(flyingCollectibles) do
        if effects:HasCollectibleEffect(collectibleType) then
            return true
        end
    end
    local flyingTrinkets = self.moddedElementSets:getFlyingTrinketTypes()
    for ____, trinketType in ipairs(flyingTrinkets) do
        if effects:HasTrinketEffect(trinketType) then
            return true
        end
    end
    for ____, nullItemID in ipairs(FLYING_NULL_ITEMS) do
        if effects:HasNullEffect(nullItemID) then
            return true
        end
    end
    return false
end
__TS__DecorateLegacy({Exported}, FlyingDetection.prototype, "hasFlyingTemporaryEffect", true)
return ____exports
 end,
["classes.features.other.PressInput"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local InputHook = ____isaac_2Dtypescript_2Ddefinitions.InputHook
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____playerIndex = require("functions.playerIndex")
local getPlayerIndex = ____playerIndex.getPlayerIndex
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {buttonActionPairs = {}}}
____exports.PressInput = __TS__Class()
local PressInput = ____exports.PressInput
PressInput.name = "PressInput"
__TS__ClassExtends(PressInput, Feature)
function PressInput.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.isActionTriggered = function(____, entity, _inputHook, buttonAction)
        if entity == nil then
            return nil
        end
        local player = entity:ToPlayer()
        if player == nil then
            return nil
        end
        local playerIndex = getPlayerIndex(nil, player)
        do
            local i = #v.run.buttonActionPairs - 1
            while i >= 0 do
                local pair = v.run.buttonActionPairs[i + 1]
                if pair.playerIndex == playerIndex and pair.buttonAction == buttonAction then
                    __TS__ArraySplice(v.run.buttonActionPairs, i)
                    return true
                end
                i = i - 1
            end
        end
        return nil
    end
    self.callbacksUsed = {{ModCallback.INPUT_ACTION, self.isActionTriggered, {InputHook.IS_ACTION_TRIGGERED}}}
end
function PressInput.prototype.pressInput(self, player, buttonAction)
    local playerIndex = getPlayerIndex(nil, player)
    local ____v_run_buttonActionPairs_0 = v.run.buttonActionPairs
    ____v_run_buttonActionPairs_0[#____v_run_buttonActionPairs_0 + 1] = {playerIndex = playerIndex, buttonAction = buttonAction}
end
__TS__DecorateLegacy({Exported}, PressInput.prototype, "pressInput", true)
return ____exports
 end,
["classes.features.other.ForgottenSwitch"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ButtonAction = ____isaac_2Dtypescript_2Ddefinitions.ButtonAction
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
____exports.ForgottenSwitch = __TS__Class()
local ForgottenSwitch = ____exports.ForgottenSwitch
ForgottenSwitch.name = "ForgottenSwitch"
__TS__ClassExtends(ForgottenSwitch, Feature)
function ForgottenSwitch.prototype.____constructor(self, pressInput)
    Feature.prototype.____constructor(self)
    self.v = {run = {shouldSwitch = false}}
    self.featuresUsed = {ISCFeature.PRESS_INPUT}
    self.pressInput = pressInput
end
function ForgottenSwitch.prototype.forgottenSwitch(self, player)
    self.pressInput:pressInput(player, ButtonAction.DROP)
end
__TS__DecorateLegacy({Exported}, ForgottenSwitch.prototype, "forgottenSwitch", true)
return ____exports
 end,
["classes.features.other.ItemPoolDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local removeItemsAndTrinketsThatAffectItemPools, restoreItemsAndTrinketsThatAffectItemPools, COLLECTIBLES_THAT_AFFECT_ITEM_POOLS, TRINKETS_THAT_AFFECT_ITEM_POOLS
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local ItemConfigTag = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigTag
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____collectibleTag = require("functions.collectibleTag")
local collectibleHasTag = ____collectibleTag.collectibleHasTag
local ____playerCollectibles = require("functions.playerCollectibles")
local anyPlayerHasCollectible = ____playerCollectibles.anyPlayerHasCollectible
local ____playerDataStructures = require("functions.playerDataStructures")
local mapGetPlayer = ____playerDataStructures.mapGetPlayer
local mapSetPlayer = ____playerDataStructures.mapSetPlayer
local ____playerIndex = require("functions.playerIndex")
local getAllPlayers = ____playerIndex.getAllPlayers
local ____players = require("functions.players")
local getPlayersOfType = ____players.getPlayersOfType
local ____utils = require("functions.utils")
local ____repeat = ____utils["repeat"]
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
function removeItemsAndTrinketsThatAffectItemPools(self)
    local removedItemsMap = __TS__New(Map)
    local removedTrinketsMap = __TS__New(Map)
    for ____, player in ipairs(getAllPlayers(nil)) do
        local removedItems = {}
        for ____, itemToRemove in ipairs(COLLECTIBLES_THAT_AFFECT_ITEM_POOLS) do
            local numCollectibles = player:GetCollectibleNum(itemToRemove)
            ____repeat(
                nil,
                numCollectibles,
                function()
                    player:RemoveCollectible(itemToRemove)
                    removedItems[#removedItems + 1] = itemToRemove
                end
            )
        end
        mapSetPlayer(nil, removedItemsMap, player, removedItems)
        local removedTrinkets = {}
        for ____, trinketToRemove in ipairs(TRINKETS_THAT_AFFECT_ITEM_POOLS) do
            if player:HasTrinket(trinketToRemove) then
                local numTrinkets = player:GetTrinketMultiplier(trinketToRemove)
                ____repeat(
                    nil,
                    numTrinkets,
                    function()
                        player:TryRemoveTrinket(trinketToRemove)
                        removedTrinkets[#removedTrinkets + 1] = trinketToRemove
                    end
                )
            end
        end
        mapSetPlayer(nil, removedTrinketsMap, player, removedTrinkets)
    end
    return {removedItemsMap = removedItemsMap, removedTrinketsMap = removedTrinketsMap}
end
function restoreItemsAndTrinketsThatAffectItemPools(self, removedItemsMap, removedTrinketsMap)
    for ____, player in ipairs(getAllPlayers(nil)) do
        local removedItems = mapGetPlayer(nil, removedItemsMap, player)
        if removedItems ~= nil then
            for ____, collectibleType in ipairs(removedItems) do
                player:AddCollectible(collectibleType, 0, false)
            end
        end
        local removedTrinkets = mapGetPlayer(nil, removedTrinketsMap, player)
        if removedTrinkets ~= nil then
            for ____, trinketType in ipairs(removedTrinkets) do
                player:AddTrinket(trinketType, false)
            end
        end
    end
end
local COLLECTIBLE_TYPE_THAT_IS_NOT_IN_ANY_POOLS = CollectibleType.KEY_PIECE_1
COLLECTIBLES_THAT_AFFECT_ITEM_POOLS = {CollectibleType.CHAOS, CollectibleType.SACRED_ORB, CollectibleType.TMTRAINER}
TRINKETS_THAT_AFFECT_ITEM_POOLS = {TrinketType.NO}
____exports.ItemPoolDetection = __TS__Class()
local ItemPoolDetection = ____exports.ItemPoolDetection
ItemPoolDetection.name = "ItemPoolDetection"
__TS__ClassExtends(ItemPoolDetection, Feature)
function ItemPoolDetection.prototype.____constructor(self, moddedElementSets)
    Feature.prototype.____constructor(self)
    self.featuresUsed = {ISCFeature.MODDED_ELEMENT_SETS}
    self.moddedElementSets = moddedElementSets
end
function ItemPoolDetection.prototype.getCollectiblesInItemPool(self, itemPoolType)
    local collectibleArray = self.moddedElementSets:getCollectibleTypes()
    return __TS__ArrayFilter(
        collectibleArray,
        function(____, collectibleType) return self:isCollectibleInItemPool(collectibleType, itemPoolType) end
    )
end
__TS__DecorateLegacy({Exported}, ItemPoolDetection.prototype, "getCollectiblesInItemPool", true)
function ItemPoolDetection.prototype.isCollectibleInItemPool(self, collectibleType, itemPoolType)
    if collectibleType == COLLECTIBLE_TYPE_THAT_IS_NOT_IN_ANY_POOLS then
        return false
    end
    local taintedLosts = getPlayersOfType(nil, PlayerType.LOST_B)
    local isOffensive = collectibleHasTag(nil, collectibleType, ItemConfigTag.OFFENSIVE)
    local changedPlayerTypes = false
    if not isOffensive then
        changedPlayerTypes = true
        for ____, player in ipairs(taintedLosts) do
            player:ChangePlayerType(PlayerType.ISAAC)
        end
    end
    local ____removeItemsAndTrinketsThatAffectItemPools_result_0 = removeItemsAndTrinketsThatAffectItemPools(nil)
    local removedItemsMap = ____removeItemsAndTrinketsThatAffectItemPools_result_0.removedItemsMap
    local removedTrinketsMap = ____removeItemsAndTrinketsThatAffectItemPools_result_0.removedTrinketsMap
    local itemPool = game:GetItemPool()
    itemPool:ResetRoomBlacklist()
    for ____, collectibleTypeInSet in ipairs(self.moddedElementSets:getCollectibleTypes()) do
        if collectibleTypeInSet ~= collectibleType then
            itemPool:AddRoomBlacklist(collectibleTypeInSet)
        end
    end
    local seed = 1
    local retrievedCollectibleType = itemPool:GetCollectible(itemPoolType, false, seed, COLLECTIBLE_TYPE_THAT_IS_NOT_IN_ANY_POOLS)
    local collectibleUnlocked = retrievedCollectibleType == collectibleType
    itemPool:ResetRoomBlacklist()
    restoreItemsAndTrinketsThatAffectItemPools(nil, removedItemsMap, removedTrinketsMap)
    if changedPlayerTypes then
        for ____, player in ipairs(taintedLosts) do
            player:ChangePlayerType(PlayerType.LOST_B)
        end
    end
    return collectibleUnlocked
end
__TS__DecorateLegacy({Exported}, ItemPoolDetection.prototype, "isCollectibleInItemPool", true)
function ItemPoolDetection.prototype.isCollectibleUnlocked(self, collectibleType, itemPoolType)
    if anyPlayerHasCollectible(nil, collectibleType) then
        return true
    end
    return self:isCollectibleInItemPool(collectibleType, itemPoolType)
end
__TS__DecorateLegacy({Exported}, ItemPoolDetection.prototype, "isCollectibleUnlocked", true)
return ____exports
 end,
["classes.features.other.NoSirenSteal"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {familiarBlacklist = {}}}
____exports.NoSirenSteal = __TS__Class()
local NoSirenSteal = ____exports.NoSirenSteal
NoSirenSteal.name = "NoSirenSteal"
__TS__ClassExtends(NoSirenSteal, Feature)
function NoSirenSteal.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postNPCInitSirenHelper = function(____, npc)
        self:checkReturnFamiliarToPlayer(npc)
    end
    self.callbacksUsed = {{ModCallback.POST_NPC_INIT, self.postNPCInitSirenHelper, {EntityType.SIREN_HELPER}}}
end
function NoSirenSteal.prototype.checkReturnFamiliarToPlayer(self, npc)
    if npc.Target == nil then
        return
    end
    local familiar = npc.Target:ToFamiliar()
    if familiar == nil then
        return
    end
    if self:blacklistEntryExists(familiar.Variant, familiar.SubType) then
        npc:Remove()
        familiar:AddToFollowers()
    end
end
function NoSirenSteal.prototype.blacklistEntryExists(self, incomingFamiliarVariant, incomingFamiliarSubType)
    for ____, familiarTuple in ipairs(v.run.familiarBlacklist) do
        local familiarVariant, familiarSubType = table.unpack(familiarTuple)
        if familiarVariant == incomingFamiliarVariant and familiarSubType == incomingFamiliarSubType then
            return true
        end
        if familiarVariant == incomingFamiliarVariant and familiarSubType == nil then
            return true
        end
    end
    return false
end
function NoSirenSteal.prototype.setFamiliarNoSirenSteal(self, familiarVariant, familiarSubType)
    if self:blacklistEntryExists(familiarVariant, familiarSubType) then
        return
    end
    local ____v_run_familiarBlacklist_0 = v.run.familiarBlacklist
    ____v_run_familiarBlacklist_0[#____v_run_familiarBlacklist_0 + 1] = {familiarVariant, familiarSubType}
end
__TS__DecorateLegacy({Exported}, NoSirenSteal.prototype, "setFamiliarNoSirenSteal", true)
return ____exports
 end,
["classes.features.other.PersistentEntities"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Spread = ____lualib.__TS__Spread
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityFlag = ____isaac_2Dtypescript_2Ddefinitions.EntityFlag
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____entities = require("functions.entities")
local spawn = ____entities.spawn
local ____roomData = require("functions.roomData")
local getRoomListIndex = ____roomData.getRoomListIndex
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {
    run = {persistentEntityIndexCounter = 0},
    level = {persistentEntities = __TS__New(Map)},
    room = {spawnedPersistentEntities = __TS__New(Map)}
}
____exports.PersistentEntities = __TS__Class()
local PersistentEntities = ____exports.PersistentEntities
PersistentEntities.name = "PersistentEntities"
__TS__ClassExtends(PersistentEntities, Feature)
function PersistentEntities.prototype.____constructor(self, roomHistory)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postEntityRemove = function(____, entity)
        local ptrHash = GetPtrHash(entity)
        local tuple = v.room.spawnedPersistentEntities:get(ptrHash)
        if tuple == nil then
            return
        end
        local index = tuple[1]
        if self.roomHistory:isLeavingRoom() then
            self:trackDespawningPickupPosition(entity, index)
        else
            self:removePersistentEntity(index, false)
        end
    end
    self.postNewRoomReordered = function()
        local roomListIndex = getRoomListIndex(nil)
        local persistentEntities = {__TS__Spread(v.level.persistentEntities:entries())}
        local persistentEntitiesInThisRoom = __TS__ArrayFilter(
            persistentEntities,
            function(____, ____bindingPattern0)
                local description
                local _index = ____bindingPattern0[1]
                description = ____bindingPattern0[2]
                return roomListIndex == description.roomListIndex
            end
        )
        for ____, ____value in ipairs(persistentEntitiesInThisRoom) do
            local index = ____value[1]
            local description = ____value[2]
            v.level.persistentEntities:delete(index)
            self:spawnAndTrack(
                description.entityType,
                description.variant,
                description.subType,
                description.position,
                index,
                true
            )
        end
    end
    self.featuresUsed = {ISCFeature.ROOM_HISTORY}
    self.callbacksUsed = {{ModCallback.POST_ENTITY_REMOVE, self.postEntityRemove}}
    self.customCallbacksUsed = {{ModCallbackCustom.POST_NEW_ROOM_REORDERED, self.postNewRoomReordered}}
    self.roomHistory = roomHistory
end
function PersistentEntities.prototype.trackDespawningPickupPosition(self, entity, index)
    local previousRoomDescription = self.roomHistory:getLatestRoomDescription()
    if previousRoomDescription == nil then
        return
    end
    local persistentEntityDescription = {
        entityType = entity.Type,
        variant = entity.Variant,
        subType = entity.SubType,
        dimension = previousRoomDescription.dimension,
        roomListIndex = previousRoomDescription.roomListIndex,
        position = entity.Position
    }
    v.level.persistentEntities:set(index, persistentEntityDescription)
end
function PersistentEntities.prototype.spawnAndTrack(self, entityType, variant, subType, position, index, respawning)
    if respawning == nil then
        respawning = false
    end
    local entity = spawn(
        nil,
        entityType,
        variant,
        subType,
        position
    )
    if respawning then
        entity:ClearEntityFlags(EntityFlag.APPEAR)
    end
    local ptrHash = GetPtrHash(entity)
    local tuple = {
        index,
        EntityPtr(entity)
    }
    v.room.spawnedPersistentEntities:set(ptrHash, tuple)
    return entity
end
function PersistentEntities.prototype.removePersistentEntity(self, persistentEntityIndex, removeEntity)
    if removeEntity == nil then
        removeEntity = true
    end
    v.level.persistentEntities:delete(persistentEntityIndex)
    for ____, ____value in __TS__Iterator(v.room.spawnedPersistentEntities) do
        local ptrHash = ____value[1]
        local tuple = ____value[2]
        do
            local index, entityPtr = table.unpack(tuple)
            if index ~= persistentEntityIndex then
                goto __continue16
            end
            v.room.spawnedPersistentEntities:delete(ptrHash)
            if removeEntity and entityPtr.Ref ~= nil then
                entityPtr.Ref:Remove()
            end
        end
        ::__continue16::
    end
end
__TS__DecorateLegacy({Exported}, PersistentEntities.prototype, "removePersistentEntity", true)
function PersistentEntities.prototype.spawnPersistentEntity(self, entityType, variant, subType, position)
    local ____v_run_0, ____persistentEntityIndexCounter_1 = v.run, "persistentEntityIndexCounter"
    ____v_run_0[____persistentEntityIndexCounter_1] = ____v_run_0[____persistentEntityIndexCounter_1] + 1
    local entity = self:spawnAndTrack(
        entityType,
        variant,
        subType,
        position,
        v.run.persistentEntityIndexCounter
    )
    return {entity = entity, persistentIndex = v.run.persistentEntityIndexCounter}
end
__TS__DecorateLegacy({Exported}, PersistentEntities.prototype, "spawnPersistentEntity", true)
return ____exports
 end,
["classes.features.other.PlayerCollectibleTracking"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local __TS__ArrayAt = ____lualib.__TS__ArrayAt
local ____exports = {}
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____array = require("functions.array")
local arrayRemoveInPlace = ____array.arrayRemoveInPlace
local ____collectibles = require("functions.collectibles")
local isActiveCollectible = ____collectibles.isActiveCollectible
local ____playerDataStructures = require("functions.playerDataStructures")
local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
local ____DefaultMap = require("classes.DefaultMap")
local DefaultMap = ____DefaultMap.DefaultMap
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {playersCollectibleTypes = __TS__New(
    DefaultMap,
    function() return {} end
)}}
____exports.PlayerCollectibleTracking = __TS__Class()
local PlayerCollectibleTracking = ____exports.PlayerCollectibleTracking
PlayerCollectibleTracking.name = "PlayerCollectibleTracking"
__TS__ClassExtends(PlayerCollectibleTracking, Feature)
function PlayerCollectibleTracking.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postPlayerCollectibleAdded = function(____, player, collectibleType)
        local collectibleTypes = defaultMapGetPlayer(nil, v.run.playersCollectibleTypes, player, player)
        collectibleTypes[#collectibleTypes + 1] = collectibleType
    end
    self.postPlayerCollectibleRemoved = function(____, player, collectibleType)
        local collectibleTypes = defaultMapGetPlayer(nil, v.run.playersCollectibleTypes, player, player)
        arrayRemoveInPlace(nil, collectibleTypes, collectibleType)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED, self.postPlayerCollectibleAdded}, {ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED, self.postPlayerCollectibleRemoved}}
end
function PlayerCollectibleTracking.prototype.getPlayerCollectibleTypes(self, player, includeActiveCollectibles)
    if includeActiveCollectibles == nil then
        includeActiveCollectibles = true
    end
    local collectibleTypes = defaultMapGetPlayer(nil, v.run.playersCollectibleTypes, player, player)
    if includeActiveCollectibles then
        return collectibleTypes
    end
    return __TS__ArrayFilter(
        collectibleTypes,
        function(____, collectibleType) return not isActiveCollectible(nil, collectibleType) end
    )
end
__TS__DecorateLegacy({Exported}, PlayerCollectibleTracking.prototype, "getPlayerCollectibleTypes", true)
function PlayerCollectibleTracking.prototype.getPlayerLastPassiveCollectibleType(self, player)
    local collectibleTypes = self:getPlayerCollectibleTypes(player, false)
    return __TS__ArrayAt(collectibleTypes, -1)
end
__TS__DecorateLegacy({Exported}, PlayerCollectibleTracking.prototype, "getPlayerLastPassiveCollectibleType", true)
return ____exports
 end,
["classes.features.other.PreventChildEntities"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {room = {preventingEntities = __TS__New(Set)}}
____exports.PreventChildEntities = __TS__Class()
local PreventChildEntities = ____exports.PreventChildEntities
PreventChildEntities.name = "PreventChildEntities"
__TS__ClassExtends(PreventChildEntities, Feature)
function PreventChildEntities.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postNPCInit = function(____, npc)
        local spawnerEntityMatch = npc.SpawnerEntity ~= nil and v.room.preventingEntities:has(GetPtrHash(npc.SpawnerEntity))
        local parentMatch = npc.Parent ~= nil and v.room.preventingEntities:has(GetPtrHash(npc.Parent))
        if spawnerEntityMatch or parentMatch then
            npc:Remove()
        end
    end
    self.callbacksUsed = {{ModCallback.POST_NPC_INIT, self.postNPCInit}}
end
function PreventChildEntities.prototype.preventChildEntities(self, entity)
    local ptrHash = GetPtrHash(entity)
    v.room.preventingEntities:add(ptrHash)
end
__TS__DecorateLegacy({Exported}, PreventChildEntities.prototype, "preventChildEntities", true)
return ____exports
 end,
["classes.features.other.RerunDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____rooms = require("functions.rooms")
local inStartingRoom = ____rooms.inStartingRoom
local ____stage = require("functions.stage")
local onFirstFloor = ____stage.onFirstFloor
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {persistent = {pastFirstFloor = false, onRerun = false}}
____exports.RerunDetection = __TS__Class()
local RerunDetection = ____exports.RerunDetection
RerunDetection.name = "RerunDetection"
__TS__ClassExtends(RerunDetection, Feature)
function RerunDetection.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postGameStartedReordered = function(____, isContinued)
        if isContinued then
            if onFirstFloor(nil) and inStartingRoom(nil) and v.persistent.pastFirstFloor then
                v.persistent.onRerun = true
            end
        else
            v.persistent.onRerun = false
        end
    end
    self.postNewLevelReordered = function()
        v.persistent.pastFirstFloor = not onFirstFloor(nil)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_GAME_STARTED_REORDERED, self.postGameStartedReordered}, {ModCallbackCustom.POST_NEW_LEVEL_REORDERED, self.postNewLevelReordered}}
end
function RerunDetection.prototype.onRerun(self)
    return v.persistent.onRerun
end
__TS__DecorateLegacy({Exported}, RerunDetection.prototype, "onRerun", true)
return ____exports
 end,
["classes.features.other.RunNextRun"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____array = require("functions.array")
local emptyArray = ____array.emptyArray
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {persistent = {queuedFunctions = {}}}
____exports.RunNextRun = __TS__Class()
local RunNextRun = ____exports.RunNextRun
RunNextRun.name = "RunNextRun"
__TS__ClassExtends(RunNextRun, Feature)
function RunNextRun.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.vConditionalFunc = function() return false end
    self.postGameStartedReorderedFalse = function()
        for ____, func in ipairs(v.persistent.queuedFunctions) do
            func(nil)
        end
        emptyArray(nil, v.persistent.queuedFunctions)
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_GAME_STARTED_REORDERED, self.postGameStartedReorderedFalse, {false}}}
end
function RunNextRun.prototype.runNextRun(self, func)
    local ____v_persistent_queuedFunctions_0 = v.persistent.queuedFunctions
    ____v_persistent_queuedFunctions_0[#____v_persistent_queuedFunctions_0 + 1] = func
end
__TS__DecorateLegacy({Exported}, RunNextRun.prototype, "runNextRun", true)
return ____exports
 end,
["functions.projectiles"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityFlag = ____isaac_2Dtypescript_2Ddefinitions.EntityFlag
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ProjectilesMode = ____isaac_2Dtypescript_2Ddefinitions.ProjectilesMode
local ____entities = require("functions.entities")
local getFilteredNewEntities = ____entities.getFilteredNewEntities
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getProjectiles = ____entitiesSpecific.getProjectiles
local spawnNPC = ____entitiesSpecific.spawnNPC
--- Helper function to make an NPC fire one or more projectiles. Returns the fired projectile(s).
-- 
-- Use this function instead of the `EntityNPC.FireProjectiles` method if you need to modify or
-- access the `EntityProjectile` objects after they are fired, since this function returns the
-- objects in an array.
-- 
-- @param npc The NPC to fire the projectile(s) from. You can also pass undefined if you do not want
-- the projectile(s) to come from anything in particular.
-- @param position The staring position of the projectile(s).
-- @param velocity The starting velocity of the projectile(s).
-- @param projectilesMode Optional. The mode of the projectile(s). Default is
-- `ProjectilesMode.ONE_PROJECTILE`.
-- @param projectileParams Optional. The parameters of the projectile(s). Default is
-- `ProjectileParams()`.
-- @returns The fired projectile(s).
function ____exports.fireProjectiles(self, npc, position, velocity, projectilesMode, projectileParams)
    if projectilesMode == nil then
        projectilesMode = ProjectilesMode.ONE_PROJECTILE
    end
    if projectileParams == nil then
        projectileParams = ProjectileParams()
    end
    local oldProjectiles = getProjectiles(nil, projectileParams.Variant)
    local spawnedFly = false
    if npc == nil then
        spawnedFly = true
        npc = spawnNPC(
            nil,
            EntityType.FLY,
            0,
            0,
            position
        )
        npc.Visible = false
        npc:ClearEntityFlags(EntityFlag.APPEAR)
    end
    npc:FireProjectiles(position, velocity, projectilesMode, projectileParams)
    local newProjectiles = getProjectiles(nil, projectileParams.Variant)
    if spawnedFly then
        npc:Remove()
    end
    return getFilteredNewEntities(nil, oldProjectiles, newProjectiles)
end
--- Helper function to spawn projectiles in a circle around a position. Under the hood, this
-- leverages `ProjectileMode.N_PROJECTILES_IN_CIRCLE`.
-- 
-- @param npc The NPC to fire the projectile(s) from. You can also pass undefined if you do not want
-- the projectile(s) to come from anything in particular.
-- @param position The staring position of the projectile(s).
-- @param speed The speed of the projectile(s).
-- @param numProjectiles The amount of projectiles to spawn.
-- @returns The fired projectile(s).
function ____exports.fireProjectilesInCircle(self, npc, position, speed, numProjectiles)
    local velocity = Vector(speed, numProjectiles)
    return ____exports.fireProjectiles(
        nil,
        npc,
        position,
        velocity,
        ProjectilesMode.N_PROJECTILES_IN_CIRCLE
    )
end
return ____exports
 end,
["classes.features.other.SpawnRockAltRewards"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CardType = ____isaac_2Dtypescript_2Ddefinitions.CardType
local CoinSubType = ____isaac_2Dtypescript_2Ddefinitions.CoinSubType
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
local EffectVariant = ____isaac_2Dtypescript_2Ddefinitions.EffectVariant
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local HeartSubType = ____isaac_2Dtypescript_2Ddefinitions.HeartSubType
local ItemPoolType = ____isaac_2Dtypescript_2Ddefinitions.ItemPoolType
local PillColor = ____isaac_2Dtypescript_2Ddefinitions.PillColor
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____constants = require("core.constants")
local DISTANCE_OF_GRID_TILE = ____constants.DISTANCE_OF_GRID_TILE
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____RockAltType = require("enums.RockAltType")
local RockAltType = ____RockAltType.RockAltType
local ____entitiesSpecific = require("functions.entitiesSpecific")
local spawnEffectWithSeed = ____entitiesSpecific.spawnEffectWithSeed
local spawnNPCWithSeed = ____entitiesSpecific.spawnNPCWithSeed
local ____pickupsSpecific = require("functions.pickupsSpecific")
local spawnCardWithSeed = ____pickupsSpecific.spawnCardWithSeed
local spawnCoinWithSeed = ____pickupsSpecific.spawnCoinWithSeed
local spawnHeartWithSeed = ____pickupsSpecific.spawnHeartWithSeed
local spawnPillWithSeed = ____pickupsSpecific.spawnPillWithSeed
local spawnTrinketWithSeed = ____pickupsSpecific.spawnTrinketWithSeed
local ____projectiles = require("functions.projectiles")
local fireProjectilesInCircle = ____projectiles.fireProjectilesInCircle
local ____random = require("functions.random")
local getRandom = ____random.getRandom
local ____rng = require("functions.rng")
local isRNG = ____rng.isRNG
local newRNG = ____rng.newRNG
local ____spawnCollectible = require("functions.spawnCollectible")
local spawnCollectible = ____spawnCollectible.spawnCollectible
local ____utils = require("functions.utils")
local ____repeat = ____utils["repeat"]
local ____vector = require("functions.vector")
local getRandomVector = ____vector.getRandomVector
local isVector = ____vector.isVector
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local ROCK_ALT_CHANCES = {NOTHING = 0.68, BASIC_DROP = 0.0967, TRINKET = 0.025, COLLECTIBLE = 0.005}
local COIN_VELOCITY_MULTIPLIER = 2
--- Matches the vanilla value, according to Fly's decompilation.
local FIND_FREE_INITIAL_STEP = 70
--- Matches the vanilla value, according to Fly's decompilation.
local FART_RADIUS = DISTANCE_OF_GRID_TILE * 3
local POLYP_PROJECTILE_SPEED = 10
local POLYP_NUM_PROJECTILES = 6
____exports.SpawnRockAltRewards = __TS__Class()
local SpawnRockAltRewards = ____exports.SpawnRockAltRewards
SpawnRockAltRewards.name = "SpawnRockAltRewards"
__TS__ClassExtends(SpawnRockAltRewards, Feature)
function SpawnRockAltRewards.prototype.____constructor(self, itemPoolDetection)
    Feature.prototype.____constructor(self)
    self.featuresUsed = {ISCFeature.ITEM_POOL_DETECTION}
    self.itemPoolDetection = itemPoolDetection
end
function SpawnRockAltRewards.prototype.spawnRockAltReward(self, positionOrGridIndex, rockAltType, seedOrRNG)
    local room = game:GetRoom()
    local position = isVector(nil, positionOrGridIndex) and positionOrGridIndex or room:GetGridPosition(positionOrGridIndex)
    local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
    repeat
        local ____switch4 = rockAltType
        local ____cond4 = ____switch4 == RockAltType.URN
        if ____cond4 then
            do
                return self:spawnRockAltRewardUrn(position, rng)
            end
        end
        ____cond4 = ____cond4 or ____switch4 == RockAltType.MUSHROOM
        if ____cond4 then
            do
                return self:spawnRockAltRewardMushroom(position, rng)
            end
        end
        ____cond4 = ____cond4 or ____switch4 == RockAltType.SKULL
        if ____cond4 then
            do
                return self:spawnRockAltRewardSkull(position, rng)
            end
        end
        ____cond4 = ____cond4 or ____switch4 == RockAltType.POLYP
        if ____cond4 then
            do
                return self:spawnRockAltRewardPolyp(position, rng)
            end
        end
        ____cond4 = ____cond4 or ____switch4 == RockAltType.BUCKET_DOWNPOUR
        if ____cond4 then
            do
                return self:spawnRockAltRewardBucketDownpour(position, rng)
            end
        end
        ____cond4 = ____cond4 or ____switch4 == RockAltType.BUCKET_DROSS
        if ____cond4 then
            do
                return self:spawnRockAltRewardBucketDross(position, rng)
            end
        end
    until true
end
__TS__DecorateLegacy({Exported}, SpawnRockAltRewards.prototype, "spawnRockAltReward", true)
function SpawnRockAltRewards.prototype.spawnRockAltRewardUrn(self, position, rng)
    local room = game:GetRoom()
    local chance = getRandom(nil, rng)
    local totalChance = 0
    totalChance = totalChance + ROCK_ALT_CHANCES.NOTHING
    if chance < totalChance then
        return false
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.BASIC_DROP
    if chance < totalChance then
        local numCoinsChance = getRandom(nil, rng)
        local numCoins = numCoinsChance < 0.5 and 1 or 2
        ____repeat(
            nil,
            numCoins,
            function()
                local randomVector = getRandomVector(nil, rng)
                local velocity = randomVector * COIN_VELOCITY_MULTIPLIER
                spawnCoinWithSeed(
                    nil,
                    CoinSubType.NULL,
                    position,
                    rng,
                    velocity
                )
            end
        )
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.TRINKET
    if chance < totalChance then
        spawnTrinketWithSeed(nil, TrinketType.SWALLOWED_PENNY, position, rng)
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.COLLECTIBLE
    if chance < totalChance then
        local stillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.QUARTER, ItemPoolType.DEVIL)
        if stillInPools then
            spawnCollectible(nil, CollectibleType.QUARTER, position, rng)
            return true
        end
        return false
    end
    local numEnemiesChance = getRandom(nil, rng)
    local numEnemies = numEnemiesChance < 0.5 and 1 or 2
    ____repeat(
        nil,
        numEnemies,
        function()
            local targetPos = room:FindFreePickupSpawnPosition(position, FIND_FREE_INITIAL_STEP)
            EntityNPC.ThrowSpider(
                position,
                nil,
                targetPos,
                false,
                0
            )
        end
    )
    return true
end
__TS__DecorateLegacy({Exported}, SpawnRockAltRewards.prototype, "spawnRockAltRewardUrn", true)
function SpawnRockAltRewards.prototype.spawnRockAltRewardMushroom(self, position, rng)
    local room = game:GetRoom()
    local roomType = room:GetType()
    local chance = getRandom(nil, rng)
    local totalChance = 0
    totalChance = totalChance + ROCK_ALT_CHANCES.NOTHING
    if chance < totalChance then
        return false
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.BASIC_DROP
    if chance < totalChance then
        spawnPillWithSeed(nil, PillColor.NULL, position, rng)
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.TRINKET
    if chance < totalChance then
        spawnTrinketWithSeed(nil, TrinketType.LIBERTY_CAP, position, rng)
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.COLLECTIBLE
    if chance < totalChance then
        if roomType == RoomType.SECRET then
            local wavyCapChance = getRandom(nil, rng)
            if wavyCapChance < 0.0272 then
                local stillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.WAVY_CAP, ItemPoolType.SECRET)
                if stillInPools then
                    spawnCollectible(nil, CollectibleType.WAVY_CAP, position, rng)
                    return true
                end
            end
        end
        local magicMushroomStillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.MAGIC_MUSHROOM, ItemPoolType.TREASURE)
        local miniMushStillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.MINI_MUSH, ItemPoolType.TREASURE)
        if magicMushroomStillInPools and miniMushStillInPools then
            local collectibleChance = getRandom(nil, rng)
            local collectibleType = collectibleChance < 0.5 and CollectibleType.MAGIC_MUSHROOM or CollectibleType.MINI_MUSH
            spawnCollectible(nil, collectibleType, position, rng)
            return true
        end
        if magicMushroomStillInPools then
            spawnCollectible(nil, CollectibleType.MINI_MUSH, position, rng)
            return true
        end
        if miniMushStillInPools then
            spawnCollectible(nil, CollectibleType.MAGIC_MUSHROOM, position, rng)
            return true
        end
        return false
    end
    game:Fart(position)
    game:ButterBeanFart(position, FART_RADIUS, nil)
    return true
end
__TS__DecorateLegacy({Exported}, SpawnRockAltRewards.prototype, "spawnRockAltRewardMushroom", true)
function SpawnRockAltRewards.prototype.spawnRockAltRewardSkull(self, position, rng)
    local chance = getRandom(nil, rng)
    local totalChance = 0
    totalChance = totalChance + ROCK_ALT_CHANCES.NOTHING
    if chance < totalChance then
        return false
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.BASIC_DROP
    if chance < totalChance then
        spawnCardWithSeed(nil, CardType.NULL, position, rng)
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.TRINKET
    if chance < totalChance then
        spawnHeartWithSeed(nil, HeartSubType.BLACK, position, rng)
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.COLLECTIBLE
    if chance < totalChance then
        local ghostBabyStillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.GHOST_BABY, ItemPoolType.TREASURE)
        local dryBabyStillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.DRY_BABY, ItemPoolType.TREASURE)
        if ghostBabyStillInPools and dryBabyStillInPools then
            local collectibleChance = getRandom(nil, rng)
            local collectibleType = collectibleChance < 0.5 and CollectibleType.GHOST_BABY or CollectibleType.DRY_BABY
            spawnCollectible(nil, collectibleType, position, rng)
            return true
        end
        if ghostBabyStillInPools then
            spawnCollectible(nil, CollectibleType.DRY_BABY, position, rng)
            return true
        end
        if dryBabyStillInPools then
            spawnCollectible(nil, CollectibleType.GHOST_BABY, position, rng)
            return true
        end
        return false
    end
    spawnNPCWithSeed(
        nil,
        EntityType.HOST,
        0,
        0,
        position,
        rng
    )
    return true
end
__TS__DecorateLegacy({Exported}, SpawnRockAltRewards.prototype, "spawnRockAltRewardSkull", true)
function SpawnRockAltRewards.prototype.spawnRockAltRewardPolyp(self, position, rng)
    local chance = getRandom(nil, rng)
    local totalChance = 0
    totalChance = totalChance + ROCK_ALT_CHANCES.NOTHING
    if chance < totalChance then
        return false
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.BASIC_DROP
    if chance < totalChance then
        spawnHeartWithSeed(nil, HeartSubType.NULL, position, rng)
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.TRINKET
    if chance < totalChance then
        spawnTrinketWithSeed(nil, TrinketType.UMBILICAL_CORD, position, rng)
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.COLLECTIBLE
    if chance < totalChance then
        local placentaStillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.PLACENTA, ItemPoolType.BOSS)
        local bloodClotStillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.BLOOD_CLOT, ItemPoolType.BOSS)
        if placentaStillInPools and bloodClotStillInPools then
            local collectibleChance = getRandom(nil, rng)
            local collectibleType = collectibleChance < 0.5 and CollectibleType.PLACENTA or CollectibleType.BLOOD_CLOT
            spawnCollectible(nil, collectibleType, position, rng)
            return true
        end
        if placentaStillInPools then
            spawnCollectible(nil, CollectibleType.PLACENTA, position, rng)
            return true
        end
        if bloodClotStillInPools then
            spawnCollectible(nil, CollectibleType.BLOOD_CLOT, position, rng)
            return true
        end
        return false
    end
    spawnEffectWithSeed(
        nil,
        EffectVariant.CREEP_RED,
        0,
        position,
        rng
    )
    fireProjectilesInCircle(
        nil,
        nil,
        position,
        POLYP_PROJECTILE_SPEED,
        POLYP_NUM_PROJECTILES
    )
    return true
end
__TS__DecorateLegacy({Exported}, SpawnRockAltRewards.prototype, "spawnRockAltRewardPolyp", true)
function SpawnRockAltRewards.prototype.spawnRockAltRewardBucketDownpour(self, position, rng)
    local room = game:GetRoom()
    local chance = getRandom(nil, rng)
    local totalChance = 0
    totalChance = totalChance + ROCK_ALT_CHANCES.NOTHING
    if chance < totalChance then
        return false
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.BASIC_DROP
    if chance < totalChance then
        local numCoinsChance = getRandom(nil, rng)
        local numCoins = numCoinsChance < 0.5 and 1 or 2
        ____repeat(
            nil,
            numCoins,
            function()
                local randomVector = getRandomVector(nil, rng)
                local velocity = randomVector * COIN_VELOCITY_MULTIPLIER
                spawnCoinWithSeed(
                    nil,
                    CoinSubType.NULL,
                    position,
                    rng,
                    velocity
                )
            end
        )
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.TRINKET
    if chance < totalChance then
        spawnTrinketWithSeed(nil, TrinketType.SWALLOWED_PENNY, position, rng)
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.COLLECTIBLE
    if chance < totalChance then
        local stillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.LEECH, ItemPoolType.TREASURE)
        if stillInPools then
            spawnCollectible(nil, CollectibleType.LEECH, position, rng)
            return true
        end
        return false
    end
    local enemiesChance = getRandom(nil, rng)
    local entityType = enemiesChance < 0.5 and EntityType.SPIDER or EntityType.SMALL_LEECH
    local numEnemiesChance = getRandom(nil, rng)
    local numEnemies = numEnemiesChance < 0.5 and 1 or 2
    ____repeat(
        nil,
        numEnemies,
        function()
            local targetPos = room:FindFreePickupSpawnPosition(position, FIND_FREE_INITIAL_STEP)
            local spider = EntityNPC.ThrowSpider(
                position,
                nil,
                targetPos,
                false,
                0
            )
            if entityType == EntityType.SMALL_LEECH and spider.Type ~= entityType then
                spider:Morph(entityType, 0, 0, -1)
            end
        end
    )
    return true
end
__TS__DecorateLegacy({Exported}, SpawnRockAltRewards.prototype, "spawnRockAltRewardBucketDownpour", true)
function SpawnRockAltRewards.prototype.spawnRockAltRewardBucketDross(self, position, rng)
    local room = game:GetRoom()
    local chance = getRandom(nil, rng)
    local totalChance = 0
    totalChance = totalChance + ROCK_ALT_CHANCES.NOTHING
    if chance < totalChance then
        return false
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.BASIC_DROP
    if chance < totalChance then
        local numCoinsChance = getRandom(nil, rng)
        local numCoins = numCoinsChance < 0.5 and 1 or 2
        ____repeat(
            nil,
            numCoins,
            function()
                local randomVector = getRandomVector(nil, rng)
                local velocity = randomVector * COIN_VELOCITY_MULTIPLIER
                spawnCoinWithSeed(
                    nil,
                    CoinSubType.NULL,
                    position,
                    rng,
                    velocity
                )
            end
        )
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.TRINKET
    if chance < totalChance then
        spawnTrinketWithSeed(nil, TrinketType.BUTT_PENNY, position, rng)
        return true
    end
    totalChance = totalChance + ROCK_ALT_CHANCES.COLLECTIBLE
    if chance < totalChance then
        local stillInPools = self.itemPoolDetection:isCollectibleInItemPool(CollectibleType.POOP, ItemPoolType.TREASURE)
        if stillInPools then
            spawnCollectible(nil, CollectibleType.POOP, position, rng)
            return true
        end
        return false
    end
    local enemiesChance = getRandom(nil, rng)
    local entityType = enemiesChance < 0.5 and EntityType.DRIP or EntityType.SMALL_LEECH
    local numEnemiesChance = getRandom(nil, rng)
    local numEnemies = numEnemiesChance < 0.5 and 1 or 2
    ____repeat(
        nil,
        numEnemies,
        function()
            local targetPos = room:FindFreePickupSpawnPosition(position, FIND_FREE_INITIAL_STEP)
            local spider = EntityNPC.ThrowSpider(
                position,
                nil,
                targetPos,
                false,
                0
            )
            spider:Morph(entityType, 0, 0, -1)
        end
    )
    return true
end
__TS__DecorateLegacy({Exported}, SpawnRockAltRewards.prototype, "spawnRockAltRewardBucketDross", true)
return ____exports
 end,
["classes.features.other.StartAmbush"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local SackSubType = ____isaac_2Dtypescript_2Ddefinitions.SackSubType
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____entities = require("functions.entities")
local removeEntities = ____entities.removeEntities
local ____pickupsSpecific = require("functions.pickupsSpecific")
local getCoins = ____pickupsSpecific.getCoins
local spawnSackWithSeed = ____pickupsSpecific.spawnSackWithSeed
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
--- Hard-coding this makes it easier to clean up the pickups afterwards.
local SACK_SEED_THAT_SPAWNS_TWO_COINS = 6
____exports.StartAmbush = __TS__Class()
local StartAmbush = ____exports.StartAmbush
StartAmbush.name = "StartAmbush"
__TS__ClassExtends(StartAmbush, Feature)
function StartAmbush.prototype.____constructor(self, runInNFrames)
    Feature.prototype.____constructor(self)
    self.featuresUsed = {ISCFeature.RUN_IN_N_FRAMES}
    self.runInNFrames = runInNFrames
end
function StartAmbush.prototype.startAmbush(self)
    local player = Isaac.GetPlayer()
    local sack = spawnSackWithSeed(nil, SackSubType.NULL, player.Position, SACK_SEED_THAT_SPAWNS_TWO_COINS)
    local sprite = sack:GetSprite()
    sprite:Stop()
    local sackPtr = EntityPtr(sack)
    self.runInNFrames:runNextGameFrame(function()
        local futureSack = sackPtr.Ref
        if futureSack == nil then
            return
        end
        futureSack:Remove()
        local sackPtrHash = GetPtrHash(futureSack)
        local coins = getCoins(nil)
        local coinsFromSack = __TS__ArrayFilter(
            coins,
            function(____, pickup) return pickup.SpawnerEntity ~= nil and GetPtrHash(pickup.SpawnerEntity) == sackPtrHash end
        )
        removeEntities(nil, coinsFromSack)
    end)
end
__TS__DecorateLegacy({Exported}, StartAmbush.prototype, "startAmbush", true)
return ____exports
 end,
["classes.features.other.TaintedLazarusPlayers"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____log = require("functions.log")
local logError = ____log.logError
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {
    queuedTaintedLazarus = {},
    queuedDeadTaintedLazarus = {},
    subPlayerMap = __TS__New(Map)
}}
--- This feature provides a way for end-users to get the `EntityPlayer` object for the other Tainted
-- Lazarus.
____exports.TaintedLazarusPlayers = __TS__Class()
local TaintedLazarusPlayers = ____exports.TaintedLazarusPlayers
TaintedLazarusPlayers.name = "TaintedLazarusPlayers"
__TS__ClassExtends(TaintedLazarusPlayers, Feature)
function TaintedLazarusPlayers.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.vConditionalFunc = function() return false end
    self.postPlayerInit = function(____, player)
        local character = player:GetPlayerType()
        if character == PlayerType.LAZARUS_B then
            local ____v_run_queuedTaintedLazarus_0 = v.run.queuedTaintedLazarus
            ____v_run_queuedTaintedLazarus_0[#____v_run_queuedTaintedLazarus_0 + 1] = player
        elseif character == PlayerType.LAZARUS_2_B then
            local ____v_run_queuedDeadTaintedLazarus_1 = v.run.queuedDeadTaintedLazarus
            ____v_run_queuedDeadTaintedLazarus_1[#____v_run_queuedDeadTaintedLazarus_1 + 1] = player
        else
            return
        end
        self:checkDequeue()
    end
    self.callbacksUsed = {{ModCallback.POST_PLAYER_INIT, self.postPlayerInit}}
end
function TaintedLazarusPlayers.prototype.checkDequeue(self)
    if #v.run.queuedTaintedLazarus == 0 or #v.run.queuedDeadTaintedLazarus == 0 then
        return
    end
    local taintedLazarus = table.remove(v.run.queuedTaintedLazarus, 1)
    local deadTaintedLazarus = table.remove(v.run.queuedDeadTaintedLazarus, 1)
    if taintedLazarus == nil or deadTaintedLazarus == nil then
        return
    end
    local taintedLazarusPtrHash = GetPtrHash(taintedLazarus)
    local deadTaintedLazarusPtrHash = GetPtrHash(deadTaintedLazarus)
    if taintedLazarusPtrHash == deadTaintedLazarusPtrHash then
        logError("Failed to cache the Tainted Lazarus player objects, since the hash for Tainted Lazarus and Dead Tainted Lazarus were the same.")
        return
    end
    v.run.subPlayerMap:set(taintedLazarusPtrHash, deadTaintedLazarus)
    v.run.subPlayerMap:set(deadTaintedLazarusPtrHash, taintedLazarus)
end
function TaintedLazarusPlayers.prototype.getTaintedLazarusSubPlayer(self, player)
    local ptrHash = GetPtrHash(player)
    return v.run.subPlayerMap:get(ptrHash)
end
__TS__DecorateLegacy({Exported}, TaintedLazarusPlayers.prototype, "getTaintedLazarusSubPlayer", true)
return ____exports
 end,
["classes.features.other.UnlockAchievementsDetection"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__DecorateLegacy = ____lualib.__TS__DecorateLegacy
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local SlotVariant = ____isaac_2Dtypescript_2Ddefinitions.SlotVariant
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____decorators = require("decorators")
local Exported = ____decorators.Exported
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____entitiesSpecific = require("functions.entitiesSpecific")
local spawnSlot = ____entitiesSpecific.spawnSlot
local ____Feature = require("classes.private.Feature")
local Feature = ____Feature.Feature
local v = {run = {canRunUnlockAchievements = true}}
____exports.UnlockAchievementsDetection = __TS__Class()
local UnlockAchievementsDetection = ____exports.UnlockAchievementsDetection
UnlockAchievementsDetection.name = "UnlockAchievementsDetection"
__TS__ClassExtends(UnlockAchievementsDetection, Feature)
function UnlockAchievementsDetection.prototype.____constructor(self)
    Feature.prototype.____constructor(self)
    self.v = v
    self.postGameStartedReordered = function()
        local greedDonationMachine = spawnSlot(nil, SlotVariant.GREED_DONATION_MACHINE, 0, VectorZero)
        v.run.canRunUnlockAchievements = greedDonationMachine:Exists()
        greedDonationMachine:Remove()
    end
    self.customCallbacksUsed = {{ModCallbackCustom.POST_GAME_STARTED_REORDERED, self.postGameStartedReordered}}
end
function UnlockAchievementsDetection.prototype.canRunUnlockAchievements(self)
    return v.run.canRunUnlockAchievements
end
__TS__DecorateLegacy({Exported}, UnlockAchievementsDetection.prototype, "canRunUnlockAchievements", true)
return ____exports
 end,
["features"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____CustomGridEntities = require("classes.features.callbackLogic.CustomGridEntities")
local CustomGridEntities = ____CustomGridEntities.CustomGridEntities
local ____CustomRevive = require("classes.features.callbackLogic.CustomRevive")
local CustomRevive = ____CustomRevive.CustomRevive
local ____EsauJrDetection = require("classes.features.callbackLogic.EsauJrDetection")
local EsauJrDetection = ____EsauJrDetection.EsauJrDetection
local ____FlipDetection = require("classes.features.callbackLogic.FlipDetection")
local FlipDetection = ____FlipDetection.FlipDetection
local ____GameReorderedCallbacks = require("classes.features.callbackLogic.GameReorderedCallbacks")
local GameReorderedCallbacks = ____GameReorderedCallbacks.GameReorderedCallbacks
local ____GridEntityCollisionDetection = require("classes.features.callbackLogic.GridEntityCollisionDetection")
local GridEntityCollisionDetection = ____GridEntityCollisionDetection.GridEntityCollisionDetection
local ____GridEntityRenderDetection = require("classes.features.callbackLogic.GridEntityRenderDetection")
local GridEntityRenderDetection = ____GridEntityRenderDetection.GridEntityRenderDetection
local ____GridEntityUpdateDetection = require("classes.features.callbackLogic.GridEntityUpdateDetection")
local GridEntityUpdateDetection = ____GridEntityUpdateDetection.GridEntityUpdateDetection
local ____ItemPickupDetection = require("classes.features.callbackLogic.ItemPickupDetection")
local ItemPickupDetection = ____ItemPickupDetection.ItemPickupDetection
local ____PickupChangeDetection = require("classes.features.callbackLogic.PickupChangeDetection")
local PickupChangeDetection = ____PickupChangeDetection.PickupChangeDetection
local ____PlayerCollectibleDetection = require("classes.features.callbackLogic.PlayerCollectibleDetection")
local PlayerCollectibleDetection = ____PlayerCollectibleDetection.PlayerCollectibleDetection
local ____PlayerReorderedCallbacks = require("classes.features.callbackLogic.PlayerReorderedCallbacks")
local PlayerReorderedCallbacks = ____PlayerReorderedCallbacks.PlayerReorderedCallbacks
local ____SlotDestroyedDetection = require("classes.features.callbackLogic.SlotDestroyedDetection")
local SlotDestroyedDetection = ____SlotDestroyedDetection.SlotDestroyedDetection
local ____SlotRenderDetection = require("classes.features.callbackLogic.SlotRenderDetection")
local SlotRenderDetection = ____SlotRenderDetection.SlotRenderDetection
local ____SlotUpdateDetection = require("classes.features.callbackLogic.SlotUpdateDetection")
local SlotUpdateDetection = ____SlotUpdateDetection.SlotUpdateDetection
local ____CharacterHealthConversion = require("classes.features.other.CharacterHealthConversion")
local CharacterHealthConversion = ____CharacterHealthConversion.CharacterHealthConversion
local ____CharacterStats = require("classes.features.other.CharacterStats")
local CharacterStats = ____CharacterStats.CharacterStats
local ____CollectibleItemPoolType = require("classes.features.other.CollectibleItemPoolType")
local CollectibleItemPoolType = ____CollectibleItemPoolType.CollectibleItemPoolType
local ____CustomHotkeys = require("classes.features.other.CustomHotkeys")
local CustomHotkeys = ____CustomHotkeys.CustomHotkeys
local ____CustomItemPools = require("classes.features.other.CustomItemPools")
local CustomItemPools = ____CustomItemPools.CustomItemPools
local ____CustomPickups = require("classes.features.other.CustomPickups")
local CustomPickups = ____CustomPickups.CustomPickups
local ____CustomStages = require("classes.features.other.CustomStages")
local CustomStages = ____CustomStages.CustomStages
local ____CustomTrapdoors = require("classes.features.other.CustomTrapdoors")
local CustomTrapdoors = ____CustomTrapdoors.CustomTrapdoors
local ____DebugDisplay = require("classes.features.other.DebugDisplay")
local DebugDisplay = ____DebugDisplay.DebugDisplay
local ____DeployJSONRoom = require("classes.features.other.DeployJSONRoom")
local DeployJSONRoom = ____DeployJSONRoom.DeployJSONRoom
local ____DisableAllSound = require("classes.features.other.DisableAllSound")
local DisableAllSound = ____DisableAllSound.DisableAllSound
local ____DisableInputs = require("classes.features.other.DisableInputs")
local DisableInputs = ____DisableInputs.DisableInputs
local ____EdenStartingStatsHealth = require("classes.features.other.EdenStartingStatsHealth")
local EdenStartingStatsHealth = ____EdenStartingStatsHealth.EdenStartingStatsHealth
local ____ExtraConsoleCommands = require("classes.features.other.ExtraConsoleCommands")
local ExtraConsoleCommands = ____ExtraConsoleCommands.ExtraConsoleCommands
local ____FadeInRemover = require("classes.features.other.FadeInRemover")
local FadeInRemover = ____FadeInRemover.FadeInRemover
local ____FastReset = require("classes.features.other.FastReset")
local FastReset = ____FastReset.FastReset
local ____FlyingDetection = require("classes.features.other.FlyingDetection")
local FlyingDetection = ____FlyingDetection.FlyingDetection
local ____ForgottenSwitch = require("classes.features.other.ForgottenSwitch")
local ForgottenSwitch = ____ForgottenSwitch.ForgottenSwitch
local ____ItemPoolDetection = require("classes.features.other.ItemPoolDetection")
local ItemPoolDetection = ____ItemPoolDetection.ItemPoolDetection
local ____ModdedElementDetection = require("classes.features.other.ModdedElementDetection")
local ModdedElementDetection = ____ModdedElementDetection.ModdedElementDetection
local ____ModdedElementSets = require("classes.features.other.ModdedElementSets")
local ModdedElementSets = ____ModdedElementSets.ModdedElementSets
local ____NoSirenSteal = require("classes.features.other.NoSirenSteal")
local NoSirenSteal = ____NoSirenSteal.NoSirenSteal
local ____Pause = require("classes.features.other.Pause")
local Pause = ____Pause.Pause
local ____PersistentEntities = require("classes.features.other.PersistentEntities")
local PersistentEntities = ____PersistentEntities.PersistentEntities
local ____PickupIndexCreation = require("classes.features.other.PickupIndexCreation")
local PickupIndexCreation = ____PickupIndexCreation.PickupIndexCreation
local ____PlayerCollectibleTracking = require("classes.features.other.PlayerCollectibleTracking")
local PlayerCollectibleTracking = ____PlayerCollectibleTracking.PlayerCollectibleTracking
local ____PonyDetection = require("classes.features.other.PonyDetection")
local PonyDetection = ____PonyDetection.PonyDetection
local ____PressInput = require("classes.features.other.PressInput")
local PressInput = ____PressInput.PressInput
local ____PreventChildEntities = require("classes.features.other.PreventChildEntities")
local PreventChildEntities = ____PreventChildEntities.PreventChildEntities
local ____PreventGridEntityRespawn = require("classes.features.other.PreventGridEntityRespawn")
local PreventGridEntityRespawn = ____PreventGridEntityRespawn.PreventGridEntityRespawn
local ____RerunDetection = require("classes.features.other.RerunDetection")
local RerunDetection = ____RerunDetection.RerunDetection
local ____RoomClearFrame = require("classes.features.other.RoomClearFrame")
local RoomClearFrame = ____RoomClearFrame.RoomClearFrame
local ____RoomHistory = require("classes.features.other.RoomHistory")
local RoomHistory = ____RoomHistory.RoomHistory
local ____RunInNFrames = require("classes.features.other.RunInNFrames")
local RunInNFrames = ____RunInNFrames.RunInNFrames
local ____RunNextRoom = require("classes.features.other.RunNextRoom")
local RunNextRoom = ____RunNextRoom.RunNextRoom
local ____RunNextRun = require("classes.features.other.RunNextRun")
local RunNextRun = ____RunNextRun.RunNextRun
local ____SaveDataManager = require("classes.features.other.SaveDataManager")
local SaveDataManager = ____SaveDataManager.SaveDataManager
local ____SpawnRockAltRewards = require("classes.features.other.SpawnRockAltRewards")
local SpawnRockAltRewards = ____SpawnRockAltRewards.SpawnRockAltRewards
local ____StageHistory = require("classes.features.other.StageHistory")
local StageHistory = ____StageHistory.StageHistory
local ____StartAmbush = require("classes.features.other.StartAmbush")
local StartAmbush = ____StartAmbush.StartAmbush
local ____TaintedLazarusPlayers = require("classes.features.other.TaintedLazarusPlayers")
local TaintedLazarusPlayers = ____TaintedLazarusPlayers.TaintedLazarusPlayers
local ____UnlockAchievementsDetection = require("classes.features.other.UnlockAchievementsDetection")
local UnlockAchievementsDetection = ____UnlockAchievementsDetection.UnlockAchievementsDetection
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____enums = require("functions.enums")
local validateInterfaceMatchesEnum = ____enums.validateInterfaceMatchesEnum
validateInterfaceMatchesEnum(nil)
function ____exports.getFeatures(self, mod, callbacks)
    local gameReorderedCallbacks = __TS__New(
        GameReorderedCallbacks,
        callbacks[ModCallbackCustom.POST_GAME_STARTED_REORDERED],
        callbacks[ModCallbackCustom.POST_NEW_LEVEL_REORDERED],
        callbacks[ModCallbackCustom.POST_NEW_ROOM_REORDERED],
        callbacks[ModCallbackCustom.POST_GAME_STARTED_REORDERED_LAST]
    )
    local disableAllSound = __TS__New(DisableAllSound)
    local disableInputs = __TS__New(DisableInputs)
    local moddedElementDetection = __TS__New(ModdedElementDetection)
    local ponyDetection = __TS__New(PonyDetection)
    local pressInput = __TS__New(PressInput)
    local roomClearFrame = __TS__New(RoomClearFrame)
    local roomHistory = __TS__New(RoomHistory)
    local runNextRoom = __TS__New(RunNextRoom)
    local saveDataManager = __TS__New(SaveDataManager, mod)
    local stageHistory = __TS__New(StageHistory)
    local runInNFrames = __TS__New(RunInNFrames, roomHistory)
    local pickupIndexCreation = __TS__New(PickupIndexCreation, roomHistory, saveDataManager)
    local customGridEntities = __TS__New(CustomGridEntities, runInNFrames)
    local moddedElementSets = __TS__New(ModdedElementSets, moddedElementDetection)
    local itemPoolDetection = __TS__New(ItemPoolDetection, moddedElementSets)
    local pause = __TS__New(Pause, disableInputs)
    local preventGridEntityRespawn = __TS__New(PreventGridEntityRespawn, runInNFrames)
    local customTrapdoors = __TS__New(
        CustomTrapdoors,
        customGridEntities,
        disableInputs,
        ponyDetection,
        roomClearFrame,
        runInNFrames,
        runNextRoom,
        stageHistory
    )
    local features = {
        [ISCFeature.CUSTOM_REVIVE] = __TS__New(CustomRevive, callbacks[ModCallbackCustom.PRE_CUSTOM_REVIVE], callbacks[ModCallbackCustom.POST_CUSTOM_REVIVE], runInNFrames),
        [ISCFeature.ESAU_JR_DETECTION] = __TS__New(EsauJrDetection, callbacks[ModCallbackCustom.POST_ESAU_JR], callbacks[ModCallbackCustom.POST_FIRST_ESAU_JR]),
        [ISCFeature.FLIP_DETECTION] = __TS__New(FlipDetection, callbacks[ModCallbackCustom.POST_FLIP], callbacks[ModCallbackCustom.POST_FIRST_FLIP]),
        [ISCFeature.GRID_ENTITY_COLLISION_DETECTION] = __TS__New(GridEntityCollisionDetection, callbacks[ModCallbackCustom.POST_GRID_ENTITY_COLLISION], callbacks[ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_COLLISION], customGridEntities),
        [ISCFeature.GRID_ENTITY_UPDATE_DETECTION] = __TS__New(
            GridEntityUpdateDetection,
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_INIT],
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_INIT],
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_UPDATE],
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_UPDATE],
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_REMOVE],
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_REMOVE],
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_STATE_CHANGED],
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_STATE_CHANGED],
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_BROKEN],
            callbacks[ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_BROKEN],
            customGridEntities
        ),
        [ISCFeature.GRID_ENTITY_RENDER_DETECTION] = __TS__New(GridEntityRenderDetection, callbacks[ModCallbackCustom.POST_GRID_ENTITY_RENDER], callbacks[ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_RENDER], customGridEntities),
        [ISCFeature.GAME_REORDERED_CALLBACKS] = gameReorderedCallbacks,
        [ISCFeature.ITEM_PICKUP_DETECTION] = __TS__New(ItemPickupDetection, callbacks[ModCallbackCustom.POST_ITEM_PICKUP], callbacks[ModCallbackCustom.PRE_ITEM_PICKUP]),
        [ISCFeature.PICKUP_CHANGE_DETECTION] = __TS__New(PickupChangeDetection, callbacks[ModCallbackCustom.POST_PICKUP_CHANGED], pickupIndexCreation),
        [ISCFeature.PLAYER_COLLECTIBLE_DETECTION] = __TS__New(
            PlayerCollectibleDetection,
            callbacks[ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED],
            callbacks[ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED],
            moddedElementSets,
            runInNFrames
        ),
        [ISCFeature.PLAYER_REORDERED_CALLBACKS] = __TS__New(PlayerReorderedCallbacks, callbacks[ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED], callbacks[ModCallbackCustom.POST_PLAYER_RENDER_REORDERED], callbacks[ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED]),
        [ISCFeature.SLOT_DESTROYED_DETECTION] = __TS__New(SlotDestroyedDetection, callbacks[ModCallbackCustom.POST_SLOT_DESTROYED], roomHistory),
        [ISCFeature.SLOT_RENDER_DETECTION] = __TS__New(SlotRenderDetection, callbacks[ModCallbackCustom.POST_SLOT_RENDER], callbacks[ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED]),
        [ISCFeature.SLOT_UPDATE_DETECTION] = __TS__New(SlotUpdateDetection, callbacks[ModCallbackCustom.POST_SLOT_INIT], callbacks[ModCallbackCustom.POST_SLOT_UPDATE]),
        [ISCFeature.CHARACTER_HEALTH_CONVERSION] = __TS__New(CharacterHealthConversion),
        [ISCFeature.CHARACTER_STATS] = __TS__New(CharacterStats),
        [ISCFeature.COLLECTIBLE_ITEM_POOL_TYPE] = __TS__New(CollectibleItemPoolType, pickupIndexCreation),
        [ISCFeature.CUSTOM_GRID_ENTITIES] = customGridEntities,
        [ISCFeature.CUSTOM_ITEM_POOLS] = __TS__New(CustomItemPools),
        [ISCFeature.CUSTOM_HOTKEYS] = __TS__New(CustomHotkeys),
        [ISCFeature.CUSTOM_PICKUPS] = __TS__New(CustomPickups),
        [ISCFeature.CUSTOM_STAGES] = __TS__New(
            CustomStages,
            customGridEntities,
            customTrapdoors,
            disableAllSound,
            gameReorderedCallbacks,
            pause,
            runInNFrames
        ),
        [ISCFeature.CUSTOM_TRAPDOORS] = customTrapdoors,
        [ISCFeature.DEBUG_DISPLAY] = __TS__New(DebugDisplay, mod),
        [ISCFeature.DEPLOY_JSON_ROOM] = __TS__New(DeployJSONRoom, preventGridEntityRespawn),
        [ISCFeature.DISABLE_ALL_SOUND] = disableAllSound,
        [ISCFeature.DISABLE_INPUTS] = disableInputs,
        [ISCFeature.EDEN_STARTING_STATS_HEALTH] = __TS__New(EdenStartingStatsHealth),
        [ISCFeature.FADE_IN_REMOVER] = __TS__New(FadeInRemover),
        [ISCFeature.FAST_RESET] = __TS__New(FastReset),
        [ISCFeature.FLYING_DETECTION] = __TS__New(FlyingDetection, moddedElementSets),
        [ISCFeature.FORGOTTEN_SWITCH] = __TS__New(ForgottenSwitch, pressInput),
        [ISCFeature.EXTRA_CONSOLE_COMMANDS] = __TS__New(ExtraConsoleCommands),
        [ISCFeature.ITEM_POOL_DETECTION] = itemPoolDetection,
        [ISCFeature.MODDED_ELEMENT_DETECTION] = moddedElementDetection,
        [ISCFeature.MODDED_ELEMENT_SETS] = moddedElementSets,
        [ISCFeature.NO_SIREN_STEAL] = __TS__New(NoSirenSteal),
        [ISCFeature.PAUSE] = pause,
        [ISCFeature.PERSISTENT_ENTITIES] = __TS__New(PersistentEntities, roomHistory),
        [ISCFeature.PICKUP_INDEX_CREATION] = pickupIndexCreation,
        [ISCFeature.PLAYER_COLLECTIBLE_TRACKING] = __TS__New(PlayerCollectibleTracking),
        [ISCFeature.PONY_DETECTION] = ponyDetection,
        [ISCFeature.PRESS_INPUT] = pressInput,
        [ISCFeature.PREVENT_CHILD_ENTITIES] = __TS__New(PreventChildEntities),
        [ISCFeature.PREVENT_GRID_ENTITY_RESPAWN] = preventGridEntityRespawn,
        [ISCFeature.RERUN_DETECTION] = __TS__New(RerunDetection),
        [ISCFeature.ROOM_CLEAR_FRAME] = roomClearFrame,
        [ISCFeature.ROOM_HISTORY] = roomHistory,
        [ISCFeature.RUN_IN_N_FRAMES] = runInNFrames,
        [ISCFeature.RUN_NEXT_ROOM] = runNextRoom,
        [ISCFeature.RUN_NEXT_RUN] = __TS__New(RunNextRun),
        [ISCFeature.SAVE_DATA_MANAGER] = saveDataManager,
        [ISCFeature.SPAWN_ALT_ROCK_REWARDS] = __TS__New(SpawnRockAltRewards, itemPoolDetection),
        [ISCFeature.STAGE_HISTORY] = stageHistory,
        [ISCFeature.START_AMBUSH] = __TS__New(StartAmbush, runInNFrames),
        [ISCFeature.TAINTED_LAZARUS_PLAYERS] = __TS__New(TaintedLazarusPlayers),
        [ISCFeature.UNLOCK_ACHIEVEMENTS_DETECTION] = __TS__New(UnlockAchievementsDetection)
    }
    return features
end
return ____exports
 end,
["types.FunctionTuple"] = function(...) 
local ____exports = {}
return ____exports
 end,
["classes.ModUpgraded"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__Spread = ____lualib.__TS__Spread
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__ArrayUnshift = ____lualib.__TS__ArrayUnshift
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local ____exports = {}
local getExportedMethodsFromFeature
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CallbackPriority = ____isaac_2Dtypescript_2Ddefinitions.CallbackPriority
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
local ____callbacks = require("callbacks")
local getCallbacks = ____callbacks.getCallbacks
local ____decorators = require("decorators")
local EXPORTED_METHOD_NAMES_KEY = ____decorators.EXPORTED_METHOD_NAMES_KEY
local ____ISCFeature = require("enums.ISCFeature")
local ISCFeature = ____ISCFeature.ISCFeature
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
local ____features = require("features")
local getFeatures = ____features.getFeatures
local ____debugFunctions = require("functions.debugFunctions")
local getElapsedTimeSince = ____debugFunctions.getElapsedTimeSince
local getTime = ____debugFunctions.getTime
local ____enums = require("functions.enums")
local isEnumValue = ____enums.isEnumValue
local ____log = require("functions.log")
local getParentFunctionDescription = ____log.getParentFunctionDescription
local log = ____log.log
local ____tstlClass = require("functions.tstlClass")
local getTSTLClassConstructor = ____tstlClass.getTSTLClassConstructor
local getTSTLClassName = ____tstlClass.getTSTLClassName
local ____types = require("functions.types")
local parseIntSafe = ____types.parseIntSafe
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
function getExportedMethodsFromFeature(self, featureClass)
    local constructor = getTSTLClassConstructor(nil, featureClass)
    local exportedMethodNames = constructor[EXPORTED_METHOD_NAMES_KEY]
    if exportedMethodNames == nil then
        return {}
    end
    return __TS__ArrayMap(
        exportedMethodNames,
        function(____, name)
            local featureClassRecord = featureClass
            if featureClassRecord[name] == nil then
                error("Failed to find a decorated exported method: " .. name)
            end
            local function wrappedMethod(____, ...)
                return featureClassRecord[name](featureClassRecord, ...)
            end
            return {name, wrappedMethod}
        end
    )
end
--- `isaacscript-common` has many custom callbacks that you can use in your mods. Instead of
-- hijacking the vanilla `Mod` object, we provide a `ModUpgraded` object for you to use, which
-- extends the base class and adds a new method of `AddCallbackCustom`.
-- 
-- To upgrade your mod, use the `upgradeMod` helper function.
-- 
-- By specifying one or more optional features when upgrading your mod, you will get a version of
-- `ModUpgraded` that has extra methods corresponding to the features that were specified. (This
-- corresponds to the internal-type `ModUpgradedWithFeatures` type, which extends `ModUpgraded`.)
____exports.ModUpgraded = __TS__Class()
local ModUpgraded = ____exports.ModUpgraded
ModUpgraded.name = "ModUpgraded"
function ModUpgraded.prototype.____constructor(self, mod, ____debug, timeThreshold)
    self.Name = mod.Name
    self.mod = mod
    self.debug = ____debug
    self.timeThreshold = timeThreshold
    self.callbacks = getCallbacks(nil)
    self.features = getFeatures(nil, self, self.callbacks)
end
function ModUpgraded.prototype.AddCallback(self, modCallback, ...)
    self:AddPriorityCallback(modCallback, CallbackPriority.DEFAULT, ...)
end
function ModUpgraded.prototype.AddPriorityCallback(self, modCallback, priority, ...)
    local args = {...}
    if self.debug then
        local callback = args[1]
        local optionalArg = args[2]
        local parentFunctionDescription = getParentFunctionDescription()
        local customCallback = type(modCallback) == "string"
        local callbackName = customCallback and tostring(modCallback) .. " (custom callback)" or "ModCallback." .. ModCallback[modCallback]
        local signature = parentFunctionDescription == nil and callbackName or (parentFunctionDescription .. " - ") .. callbackName
        --- We don't use the "log" helper function here since it will always show the same "unknown"
        -- prefix.
        local function callbackWithLogger(____, ...)
            local startTime = getTime(nil)
            Isaac.DebugString(signature .. " - START")
            local returnValue = callback(nil, ...)
            local elapsedTime = getElapsedTimeSince(nil, startTime)
            if self.timeThreshold == nil or self.timeThreshold <= elapsedTime then
                Isaac.DebugString((signature .. " - END - time: ") .. tostring(elapsedTime))
            else
                Isaac.DebugString(signature .. " - END")
            end
            return returnValue
        end
        local newArgs = {callbackWithLogger, optionalArg}
        self.mod:AddPriorityCallback(
            modCallback,
            priority,
            table.unpack(newArgs)
        )
    else
        self.mod:AddPriorityCallback(
            modCallback,
            priority,
            __TS__Spread(args)
        )
    end
end
function ModUpgraded.prototype.HasData(self)
    return self.mod:HasData()
end
function ModUpgraded.prototype.LoadData(self)
    return self.mod:LoadData()
end
function ModUpgraded.prototype.RemoveCallback(self, modCallback, callback)
    self.mod:RemoveCallback(modCallback, callback)
end
function ModUpgraded.prototype.RemoveData(self)
    self.mod:RemoveData()
end
function ModUpgraded.prototype.SaveData(self, data)
    self.mod:SaveData(data)
end
function ModUpgraded.prototype.AddCallbackCustom(self, modCallbackCustom, ...)
    self:AddPriorityCallbackCustom(modCallbackCustom, CallbackPriority.DEFAULT, ...)
end
function ModUpgraded.prototype.AddPriorityCallbackCustom(self, modCallbackCustom, priority, ...)
    local callbackClass = self.callbacks[modCallbackCustom]
    callbackClass:addSubscriber(priority, ...)
    self:initFeature(callbackClass)
end
function ModUpgraded.prototype.RemoveCallbackCustom(self, modCallbackCustom, callback)
    local callbackClass = self.callbacks[modCallbackCustom]
    callbackClass:removeSubscriber(callback)
    self:uninitFeature(callbackClass)
end
function ModUpgraded.prototype.logUsedFeatures(self)
    for ____, ____value in ipairs(__TS__ObjectEntries(self.callbacks)) do
        local modCallbackCustomString = ____value[1]
        local callbackClass = ____value[2]
        do
            if callbackClass.numConsumers == 0 then
                goto __continue19
            end
            local modCallbackCustom = parseIntSafe(nil, modCallbackCustomString)
            assertDefined(nil, modCallbackCustom, ("Failed to convert the string \"" .. modCallbackCustomString) .. "\" representing a \"ModCallbackCustom\" value to a number.")
            if not isEnumValue(nil, modCallbackCustom, ModCallbackCustom) then
                error(("Failed to convert the number " .. tostring(modCallbackCustom)) .. " to a \"ModCallbackCustom\" value.")
            end
            log(((("- ModCallbackCustom." .. ModCallbackCustom[modCallbackCustom]) .. " (") .. tostring(modCallbackCustom)) .. ")")
        end
        ::__continue19::
    end
    for ____, ____value in ipairs(__TS__ObjectEntries(self.features)) do
        local iscFeatureString = ____value[1]
        local featureClass = ____value[2]
        do
            if featureClass.numConsumers == 0 then
                goto __continue23
            end
            local iscFeature = parseIntSafe(nil, iscFeatureString)
            assertDefined(nil, iscFeature, ("Failed to convert the string \"" .. iscFeatureString) .. "\" representing a \"ISCFeature\" value to a number.")
            if not isEnumValue(nil, iscFeature, ISCFeature) then
                error(("Failed to convert the number " .. tostring(iscFeature)) .. " to a \"ISCFeature\" value.")
            end
            log(((("- ISCFeature." .. ISCFeature[iscFeature]) .. " (") .. tostring(iscFeature)) .. ")")
        end
        ::__continue23::
    end
end
function ModUpgraded.prototype.initFeature(self, feature)
    feature.numConsumers = feature.numConsumers + 1
    if feature.initialized then
        return
    end
    feature.initialized = true
    if feature.v ~= nil then
        if feature.featuresUsed == nil then
            feature.featuresUsed = {}
        end
        if not __TS__ArrayIncludes(feature.featuresUsed, ISCFeature.SAVE_DATA_MANAGER) then
            __TS__ArrayUnshift(feature.featuresUsed, ISCFeature.SAVE_DATA_MANAGER)
        end
    end
    if feature.featuresUsed ~= nil then
        for ____, featureUsed in ipairs(feature.featuresUsed) do
            local featureClass = self.features[featureUsed]
            self:initFeature(featureClass)
        end
    end
    if feature.callbacksUsed ~= nil then
        for ____, callbackTuple in ipairs(feature.callbacksUsed) do
            local modCallback, callbackFunc, optionalArgs = table.unpack(callbackTuple)
            self:AddPriorityCallback(
                modCallback,
                CallbackPriority.IMPORTANT,
                callbackFunc,
                table.unpack(optionalArgs or ({}))
            )
        end
    end
    if feature.customCallbacksUsed ~= nil then
        for ____, callbackTuple in ipairs(feature.customCallbacksUsed) do
            local modCallback, callbackFunc, optionalArgs = table.unpack(callbackTuple)
            self:AddPriorityCallbackCustom(
                modCallback,
                CallbackPriority.IMPORTANT,
                callbackFunc,
                table.unpack(optionalArgs or ({}))
            )
        end
    end
    if feature.v ~= nil then
        local className = getTSTLClassName(nil, feature)
        assertDefined(nil, className, "Failed to get the name of a feature.")
        local saveDataManagerClass = self.features[ISCFeature.SAVE_DATA_MANAGER]
        saveDataManagerClass:saveDataManager(className, feature.v, feature.vConditionalFunc)
    end
end
function ModUpgraded.prototype.uninitFeature(self, feature)
    if feature.numConsumers <= 0 then
        local className = getTSTLClassName(nil, feature) or "unknown"
        error(((("Failed to uninit feature \"" .. className) .. "\" since it has ") .. tostring(feature.numConsumers)) .. " consumers, which should never happen.")
    end
    if not feature.initialized then
        local className = getTSTLClassName(nil, feature) or "unknown"
        error(("Failed to uninit feature \"" .. className) .. "\" since it was not initialized, which should never happen.")
    end
    feature.numConsumers = feature.numConsumers - 1
    if feature.numConsumers > 0 then
        return
    end
    feature.initialized = false
    if feature.featuresUsed ~= nil then
        for ____, featureUsed in ipairs(feature.featuresUsed) do
            local featureClass = self.features[featureUsed]
            self:uninitFeature(featureClass)
        end
    end
    if feature.callbacksUsed ~= nil then
        for ____, callbackTuple in ipairs(feature.callbacksUsed) do
            local modCallback, callbackFunc = table.unpack(callbackTuple)
            self:RemoveCallback(modCallback, callbackFunc)
        end
    end
    if feature.customCallbacksUsed ~= nil then
        for ____, callbackTuple in ipairs(feature.customCallbacksUsed) do
            local modCallback, callbackFunc = table.unpack(callbackTuple)
            self:RemoveCallbackCustom(modCallback, callbackFunc)
        end
    end
    if feature.v ~= nil then
        local className = getTSTLClassName(nil, feature)
        assertDefined(nil, className, "Failed to get the name of a feature.")
        local saveDataManagerClass = self.features[ISCFeature.SAVE_DATA_MANAGER]
        saveDataManagerClass:saveDataManagerRemove(className)
    end
end
function ModUpgraded.prototype.initOptionalFeature(self, feature)
    local featureClass = self.features[feature]
    self:initFeature(featureClass)
    return getExportedMethodsFromFeature(nil, featureClass)
end
return ____exports
 end,
["classes.ModFeature"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local initDecoratedCallbacks, addCallback, removeCallback, initSaveDataManager, WRAPPED_CALLBACK_METHODS_KEY, WRAPPED_CUSTOM_CALLBACK_METHODS_KEY
local ____array = require("functions.array")
local isArray = ____array.isArray
local ____tstlClass = require("functions.tstlClass")
local getTSTLClassConstructor = ____tstlClass.getTSTLClassConstructor
local getTSTLClassName = ____tstlClass.getTSTLClassName
local ____types = require("functions.types")
local isFunction = ____types.isFunction
local isInteger = ____types.isInteger
local isTable = ____types.isTable
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
function initDecoratedCallbacks(self, modFeature, constructor, tstlClassName, vanilla, init)
    local modFeatureConstructor = constructor
    local callbackTuplesKey = vanilla and ____exports.MOD_FEATURE_CALLBACKS_KEY or ____exports.MOD_FEATURE_CUSTOM_CALLBACKS_KEY
    local callbackTuples = modFeatureConstructor[callbackTuplesKey]
    if callbackTuples == nil then
        return
    end
    if not isArray(nil, callbackTuples) then
        error((("Failed to initialize/uninitialize the decorated callbacks on a mod feature since the callback arguments on the key of \"" .. callbackTuplesKey) .. "\" was not an array and was instead of type: ") .. type(callbackTuples))
    end
    for ____, callbackTuple in ipairs(callbackTuples) do
        if not isArray(nil, callbackTuple) then
            error((("Failed to initialize/uninitialize the decorated callbacks on a mod feature since one of the callback arguments on the key of \"" .. callbackTuplesKey) .. "\" was not an array and was instead of type: ") .. type(callbackTuple))
        end
        local modCallback = callbackTuple[1]
        if not isInteger(nil, modCallback) then
            error("Failed to get the callback number from the callback tuple for class: " .. tstlClassName)
        end
        local priority = callbackTuple[2]
        if not isInteger(nil, priority) then
            error("Failed to get the callback priority from the callback tuple for class: " .. tstlClassName)
        end
        local callback = callbackTuple[3]
        if not isFunction(nil, callback) then
            error("Failed to get the callback function from the callback tuple for class: " .. tstlClassName)
        end
        local parameters = callbackTuple[4]
        if not isArray(nil, parameters, false) then
            error("Failed to get the callback parameters from the callback tuple for class: " .. tstlClassName)
        end
        local mod = modFeature.mod
        if init then
            addCallback(
                nil,
                modFeature,
                modFeatureConstructor,
                mod,
                modCallback,
                priority,
                callback,
                parameters,
                vanilla
            )
        else
            removeCallback(
                nil,
                modFeatureConstructor,
                mod,
                modCallback,
                vanilla
            )
        end
    end
end
function addCallback(self, modFeature, modFeatureConstructor, mod, modCallback, priority, callback, parameters, vanilla)
    local function wrappedCallback(____, ...)
        local conditionalFunc = modFeature.shouldCallbackMethodsFire
        if conditionalFunc ~= nil then
            local shouldRun = conditionalFunc(nil, vanilla, modCallback, ...)
            if not shouldRun then
                return nil
            end
        end
        local castedCallback = callback
        return castedCallback(modFeature, ...)
    end
    if vanilla then
        local modCallbackVanilla = modCallback
        local wrappedMethodsMap = modFeatureConstructor[WRAPPED_CALLBACK_METHODS_KEY]
        if wrappedMethodsMap == nil then
            wrappedMethodsMap = __TS__New(Map)
            modFeatureConstructor[WRAPPED_CALLBACK_METHODS_KEY] = wrappedMethodsMap
        end
        wrappedMethodsMap:set(modCallbackVanilla, wrappedCallback)
    else
        local modCallbackCustom = modCallback
        local wrappedMethodsMap = modFeatureConstructor[WRAPPED_CUSTOM_CALLBACK_METHODS_KEY]
        if wrappedMethodsMap == nil then
            wrappedMethodsMap = __TS__New(Map)
            modFeatureConstructor[WRAPPED_CUSTOM_CALLBACK_METHODS_KEY] = wrappedMethodsMap
        end
        wrappedMethodsMap:set(modCallbackCustom, wrappedCallback)
    end
    if vanilla then
        mod:AddPriorityCallback(
            modCallback,
            priority,
            wrappedCallback,
            table.unpack(parameters)
        )
    else
        mod:AddPriorityCallbackCustom(
            modCallback,
            priority,
            wrappedCallback,
            table.unpack(parameters)
        )
    end
end
function removeCallback(self, modFeatureConstructor, mod, modCallback, vanilla)
    if vanilla then
        local modCallbackVanilla = modCallback
        local wrappedMethodsMap = modFeatureConstructor[WRAPPED_CALLBACK_METHODS_KEY]
        if wrappedMethodsMap == nil then
            return
        end
        local wrappedCallback = wrappedMethodsMap:get(modCallbackVanilla)
        mod:RemoveCallback(modCallback, wrappedCallback)
    else
        local modCallbackCustom = modCallback
        local wrappedMethodsMap = modFeatureConstructor[WRAPPED_CUSTOM_CALLBACK_METHODS_KEY]
        if wrappedMethodsMap == nil then
            return
        end
        local wrappedCallback = wrappedMethodsMap:get(modCallbackCustom)
        mod:RemoveCallbackCustom(modCallback, wrappedCallback)
    end
end
function initSaveDataManager(self, modFeature, tstlClassName, init)
    local ____modFeature_0 = modFeature
    local v = ____modFeature_0.v
    if v == nil then
        return
    end
    if not isTable(nil, v) then
        error("Failed to initialize a mod feature class due to having a \"v\" property that is not an object. (The \"v\" property is supposed to be an object that holds the variables for the class, managed by the save data manager.)")
    end
    local mod = modFeature.mod
    local saveDataManagerMethodName = init and "saveDataManager" or "saveDataManagerRemove"
    local saveDataManagerMethod = mod[saveDataManagerMethodName]
    assertDefined(nil, saveDataManagerMethod, "Failed to initialize a mod feature class due to having a \"v\" object and not having the save data manager initialized. You must pass \"ISCFeature.SAVE_DATA_MANAGER\" to the \"upgradeMod\" function.")
    if type(saveDataManagerMethod) ~= "function" then
        error(("The \"" .. saveDataManagerMethodName) .. "\" property of the \"ModUpgraded\" object was not a function.")
    end
    if init then
        saveDataManagerMethod(nil, tstlClassName, v)
    else
        saveDataManagerMethod(nil, tstlClassName)
    end
end
____exports.MOD_FEATURE_CALLBACKS_KEY = "__callbacks"
____exports.MOD_FEATURE_CUSTOM_CALLBACKS_KEY = "__customCallbacks"
WRAPPED_CALLBACK_METHODS_KEY = "__wrappedCallbackMethods"
WRAPPED_CUSTOM_CALLBACK_METHODS_KEY = "__wrappedCustomCallbacksMethods"
--- Helper class for mods that want to represent their individual features as classes. Extend your
-- mod features from this class in order to enable the `@Callback` and `@CustomCallback` decorators
-- that automatically subscribe to callbacks.
-- 
-- It is recommended that you use the `initModFeatures` helper function to instantiate all of your
-- mod classes (instead of instantiating them yourself). This is so that any attached `v` objects
-- are properly registered with the save data manager; see below.
-- 
-- If you are manually instantiating a mod feature yourself, then:
-- 
-- - You must pass your upgraded mod as the first argument to the constructor.
-- - In almost all cases, you will want the callback functions to be immediately subscribed after
--   instantiating the class. However, if this is not the case, you can pass `false` as the optional
--   second argument to the constructor.
-- 
-- If your mod feature has a property called `v`, it will be assumed that these are variables that
-- should be managed by the save data manager. Unfortunately, due to technical limitations with
-- classes, this registration will only occur if you initialize the class with the `initModFeatures`
-- helper function. (This is because the parent class does not have access to the child's properties
-- upon first construction.)
____exports.ModFeature = __TS__Class()
local ModFeature = ____exports.ModFeature
ModFeature.name = "ModFeature"
function ModFeature.prototype.____constructor(self, mod, init)
    if init == nil then
        init = true
    end
    self.shouldCallbackMethodsFire = nil
    self.initialized = false
    self.mod = mod
    if init then
        self:init()
    end
end
function ModFeature.prototype.init(self, init)
    if init == nil then
        init = true
    end
    if self.initialized == init then
        return
    end
    self.initialized = init
    local constructor = getTSTLClassConstructor(nil, self)
    assertDefined(nil, constructor, "Failed to get the TSTL class constructor for a mod feature.")
    local tstlClassName = getTSTLClassName(nil, self)
    assertDefined(nil, tstlClassName, "Failed to get the TSTL class name for a mod feature.")
    initDecoratedCallbacks(
        nil,
        self,
        constructor,
        tstlClassName,
        true,
        init
    )
    initDecoratedCallbacks(
        nil,
        self,
        constructor,
        tstlClassName,
        false,
        init
    )
    initSaveDataManager(nil, self, tstlClassName, init)
end
function ModFeature.prototype.uninit(self)
    self:init(false)
end
return ____exports
 end,
["patchErrorFunctions"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__StringSplit = ____lualib.__TS__StringSplit
local __TS__StringIncludes = ____lualib.__TS__StringIncludes
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local ____exports = {}
local errorWithTraceback, slimTracebackOutput, removeLinesContaining, LINE_SEPARATOR, USELESS_TRACEBACK_MESSAGES, vanillaError
local ____debugFunctions = require("functions.debugFunctions")
local getTraceback = ____debugFunctions.getTraceback
local isLuaDebugEnabled = ____debugFunctions.isLuaDebugEnabled
function errorWithTraceback(message, level)
    if level == nil then
        level = 1
    end
    if vanillaError == nil then
        error(message, level)
    end
    local tracebackOutput = getTraceback()
    local slimmedTracebackOutput = slimTracebackOutput(nil, tracebackOutput)
    message = message .. "\n"
    message = message .. slimmedTracebackOutput
    return vanillaError(message, level + 1)
end
function slimTracebackOutput(self, tracebackOutput)
    for ____, msg in ipairs(USELESS_TRACEBACK_MESSAGES) do
        tracebackOutput = removeLinesContaining(nil, tracebackOutput, msg)
    end
    return tracebackOutput
end
function removeLinesContaining(self, msg, containsMsg)
    local lines = __TS__StringSplit(msg, LINE_SEPARATOR)
    local linesThatDontContain = __TS__ArrayFilter(
        lines,
        function(____, line) return not __TS__StringIncludes(line, containsMsg) end
    )
    return table.concat(linesThatDontContain, LINE_SEPARATOR or ",")
end
LINE_SEPARATOR = "\n"
USELESS_TRACEBACK_MESSAGES = {"in upvalue 'getTraceback'", "in function 'sandbox.GetTraceback'", "in function 'error'"}
--- In Lua, the `error` function will tell you the line number of the error, but not give you a full
-- traceback of the parent functions, which is unlike how JavaScript works. This function monkey
-- patches the `error` function to add this functionality.
-- 
-- Traceback functionality can only be added if the "--luadebug" flag is turned on, so this function
-- does nothing if the "--luadebug" flag is disabled.
function ____exports.patchErrorFunction(self)
    if not isLuaDebugEnabled(nil) then
        return
    end
    if __PATCHED_ERROR ~= nil then
        return
    end
    __PATCHED_ERROR = true
    vanillaError = error
    error = errorWithTraceback
end
return ____exports
 end,
["shaderCrashFix"] = function(...) 
local ____exports = {}
local postPlayerInit
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
function postPlayerInit(self, _player)
    local players = Isaac.FindByType(EntityType.PLAYER)
    if #players == 0 then
        Isaac.ExecuteCommand("reloadshaders")
    end
end
--- Using the "luamod" console command with a mod that has custom shaders can crash the game. A
-- simple fix for this is automatically applied to any upgraded mods. This method was originally
-- discovered by AgentCucco.
-- 
-- This code is not put inside of a feature class because we want it to apply to every upgraded mod,
-- but we do not want to have any mandatory features. Mandatory features are confusing for end-users
-- since the type of their upgraded mod would contain features that they did not explicitly enable.
function ____exports.applyShaderCrashFix(self, mod)
    mod:AddCallback(ModCallback.POST_PLAYER_INIT, postPlayerInit)
end
return ____exports
 end,
["types.PublicInterface"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.TupleToIntersection"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.Writable"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.private.ModUpgradedWithFeatures"] = function(...) 
local ____exports = {}
return ____exports
 end,
["core.upgradeMod"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__Iterator = ____lualib.__TS__Iterator
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local initOptionalFeatures
local ____ModUpgraded = require("classes.ModUpgraded")
local ModUpgraded = ____ModUpgraded.ModUpgraded
local ____patchErrorFunctions = require("patchErrorFunctions")
local patchErrorFunction = ____patchErrorFunctions.patchErrorFunction
local ____shaderCrashFix = require("shaderCrashFix")
local applyShaderCrashFix = ____shaderCrashFix.applyShaderCrashFix
function initOptionalFeatures(self, mod, features)
    for ____, feature in ipairs(features) do
        local exportedMethodTuples = mod.initOptionalFeature(mod, feature)
        local modRecord = mod
        for ____, ____value in ipairs(exportedMethodTuples) do
            local funcName = ____value[1]
            local func = ____value[2]
            if modRecord[funcName] ~= nil then
                error(("Failed to upgrade the mod since two or more features share the name function name of \"" .. funcName) .. "\". This should never happen, so report this error to the library authors.")
            end
            modRecord[funcName] = func
        end
    end
end
--- Use this function to enable the custom callbacks and other optional features provided by
-- `isaacscript-common`.
-- 
-- For example:
-- 
-- ```ts
-- const modVanilla = RegisterMod("My Mod", 1);
-- const mod = upgradeMod(modVanilla);
-- 
-- // Subscribe to vanilla callbacks.
-- mod.AddCallback(ModCallback.POST_UPDATE, postUpdate);
-- 
-- // Subscribe to custom callbacks.
-- mod.AddCallbackCustom(ModCallbackCustom.POST_ITEM_PICKUP, postItemPickup);
-- ```
-- 
-- @param modVanilla The mod object returned by the `RegisterMod` function.
-- @param features Optional. An array containing the optional standard library features that you
-- want to enable, if any. Default is an empty array.
-- @param debug Optional. Whether to log additional output when a callback is fired. Default is
-- false.
-- @param timeThreshold Optional. If provided, will only log callbacks that take longer than the
-- specified number of seconds (if the "--luadebug" launch flag is turned on)
-- or milliseconds (if the "--luadebug" launch flag is turned off).
-- @returns The upgraded mod object.
function ____exports.upgradeMod(self, modVanilla, features, ____debug, timeThreshold)
    if features == nil then
        features = {}
    end
    if ____debug == nil then
        ____debug = false
    end
    for ____, feature in __TS__Iterator(features) do
        local featureType = type(feature)
        if featureType ~= "number" then
            error(("Failed to upgrade the mod due to one of the specified features being of type \"" .. featureType) .. "\". (All of the features should be numbers represented by the \"ISCFeature\" enum.)")
        end
    end
    local featureSet = __TS__New(Set, features)
    if featureSet.size ~= #features then
        error("Failed to upgrade the mod since there are two or more of the same features specified in the \"features\" array. When you pass the array of features to the \"upgradeMod\" function, all of the elements should be unique.")
    end
    patchErrorFunction(nil)
    local mod = __TS__New(ModUpgraded, modVanilla, ____debug, timeThreshold)
    applyShaderCrashFix(nil, mod)
    initOptionalFeatures(nil, mod, features)
    return mod
end
return ____exports
 end,
["functions.arrayLua"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local __TS__ArrayJoin = ____lualib.__TS__ArrayJoin
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
--- Helper function for non-TypeScript users to check if every element in the array is equal to a
-- condition.
-- 
-- Internally, this just calls `Array.every`.
function ____exports.every(self, array, func)
    return __TS__ArrayEvery(array, func)
end
--- Helper function for non-TypeScript users to filter the elements in an array. Returns the filtered
-- array.
-- 
-- Internally, this just calls `Array.filter`.
function ____exports.filter(self, array, func)
    return __TS__ArrayFilter(array, func)
end
--- Helper function for non-TypeScript users to find an element in an array.
-- 
-- Internally, this just calls `Array.find`.
function ____exports.find(self, array, func)
    return __TS__ArrayFind(array, func)
end
--- Helper function for non-TypeScript users to iterate over an array.
-- 
-- Internally, this just calls `Array.forEach`.
function ____exports.forEach(self, array, func)
    __TS__ArrayForEach(array, func)
end
--- Helper function for non-TypeScript users to convert an array to a string with the specified
-- separator.
-- 
-- Internally, this just calls `Array.join`.
function ____exports.join(self, array, separator)
    return __TS__ArrayJoin(array, separator)
end
--- Helper function for non-TypeScript users to convert all of the elements in an array to something
-- else.
-- 
-- Internally, this just calls `Array.map`.
function ____exports.map(self, array, func)
    return __TS__ArrayMap(array, func)
end
--- Helper function for non-TypeScript users to check if one or more elements in the array is equal
-- to a condition.
-- 
-- Internally, this just calls `Array.some`.
function ____exports.some(self, array, func)
    return __TS__ArraySome(array, func)
end
return ____exports
 end,
["functions.benchmark"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayEntries = ____lualib.__TS__ArrayEntries
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____log = require("functions.log")
local log = ____log.log
--- Helper function to benchmark the performance of a function.
-- 
-- This function is variadic, which means that you can supply as many functions as you want to
-- benchmark.
-- 
-- This function uses the `Isaac.GetTime` method to record how long the function took to execute.
-- This method only reports time in milliseconds. For this reason, if you are benchmarking smaller
-- functions, then you should provide a very high value for the number of trials.
-- 
-- @returns An array containing the average time in milliseconds for each function. (This will also
-- be printed to the log.)
function ____exports.benchmark(self, numTrials, ...)
    local functions = {...}
    log(((("Benchmarking " .. tostring(#functions)) .. " function(s) with ") .. tostring(numTrials)) .. " trials.")
    local averages = {}
    for ____, ____value in __TS__Iterator(__TS__ArrayEntries(functions)) do
        local i = ____value[1]
        local func = ____value[2]
        local totalTimeMilliseconds = 0
        do
            local j = 0
            while j < numTrials do
                local startTimeMilliseconds = Isaac.GetTime()
                func(nil)
                local endTimeMilliseconds = Isaac.GetTime()
                local elapsedTimeMilliseconds = endTimeMilliseconds - startTimeMilliseconds
                totalTimeMilliseconds = totalTimeMilliseconds + elapsedTimeMilliseconds
                j = j + 1
            end
        end
        local averageTimeMilliseconds = totalTimeMilliseconds / numTrials
        log(((("The average time of the function at index " .. tostring(i)) .. " is: ") .. tostring(averageTimeMilliseconds)) .. " milliseconds")
        averages[#averages + 1] = averageTimeMilliseconds
    end
    return averages
end
return ____exports
 end,
["functions.bombs"] = function(...) 
local ____exports = {}
--- Helper function to find out how large a bomb explosion is based on the damage inflicted.
function ____exports.getBombRadiusFromDamage(self, damage)
    if damage > 175 then
        return 105
    end
    if damage <= 140 then
        return 75
    end
    return 90
end
return ____exports
 end,
["objects.challengeBosses"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
____exports.DEFAULT_CHALLENGE_BOSS_ID = BossID.MOM
--- Contains the boss goal for each challenge.
-- 
-- Taken from the "challenges.xml" file.
-- 
-- @see https ://bindingofisaacrebirth.fandom.com/wiki/Challenges
____exports.CHALLENGE_BOSSES = {
    [Challenge.NULL] = BossID.MOM,
    [Challenge.PITCH_BLACK] = BossID.MOM,
    [Challenge.HIGH_BROW] = BossID.MOM,
    [Challenge.HEAD_TRAUMA] = BossID.MOM,
    [Challenge.DARKNESS_FALLS] = BossID.SATAN,
    [Challenge.TANK] = BossID.MOM,
    [Challenge.SOLAR_SYSTEM] = BossID.MOMS_HEART,
    [Challenge.SUICIDE_KING] = BossID.ISAAC,
    [Challenge.CAT_GOT_YOUR_TONGUE] = BossID.MOM,
    [Challenge.DEMO_MAN] = BossID.MOMS_HEART,
    [Challenge.CURSED] = BossID.MOM,
    [Challenge.GLASS_CANNON] = BossID.SATAN,
    [Challenge.WHEN_LIFE_GIVES_YOU_LEMONS] = BossID.MOM,
    [Challenge.BEANS] = BossID.MOM,
    [Challenge.ITS_IN_THE_CARDS] = BossID.MOM,
    [Challenge.SLOW_ROLL] = BossID.MOM,
    [Challenge.COMPUTER_SAVY] = BossID.MOM,
    [Challenge.WAKA_WAKA] = BossID.MOM,
    [Challenge.HOST] = BossID.MOM,
    [Challenge.FAMILY_MAN] = BossID.ISAAC,
    [Challenge.PURIST] = BossID.MOMS_HEART,
    [Challenge.XXXXXXXXL] = BossID.MOMS_HEART,
    [Challenge.SPEED] = BossID.MOMS_HEART,
    [Challenge.BLUE_BOMBER] = BossID.SATAN,
    [Challenge.PAY_TO_PLAY] = BossID.ISAAC,
    [Challenge.HAVE_A_HEART] = BossID.MOMS_HEART,
    [Challenge.I_RULE] = BossID.MEGA_SATAN,
    [Challenge.BRAINS] = BossID.BLUE_BABY,
    [Challenge.PRIDE_DAY] = BossID.MOMS_HEART,
    [Challenge.ONANS_STREAK] = BossID.ISAAC,
    [Challenge.GUARDIAN] = BossID.MOMS_HEART,
    [Challenge.BACKASSWARDS] = BossID.MEGA_SATAN,
    [Challenge.APRILS_FOOL] = BossID.MOMS_HEART,
    [Challenge.POKEY_MANS] = BossID.ISAAC,
    [Challenge.ULTRA_HARD] = BossID.MEGA_SATAN,
    [Challenge.PONG] = BossID.BLUE_BABY,
    [Challenge.SCAT_MAN] = BossID.MOM,
    [Challenge.BLOODY_MARY] = BossID.SATAN,
    [Challenge.BAPTISM_BY_FIRE] = BossID.SATAN,
    [Challenge.ISAACS_AWAKENING] = BossID.MOTHER,
    [Challenge.SEEING_DOUBLE] = BossID.MOMS_HEART,
    [Challenge.PICA_RUN] = BossID.ISAAC,
    [Challenge.HOT_POTATO] = BossID.SATAN,
    [Challenge.CANTRIPPED] = BossID.MOM,
    [Challenge.RED_REDEMPTION] = BossID.MOTHER,
    [Challenge.DELETE_THIS] = BossID.BLUE_BABY
}
return ____exports
 end,
["objects.challengeCharacters"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
____exports.DEFAULT_CHALLENGE_CHARACTER = PlayerType.ISAAC
--- Contains the starting character for each challenge.
-- 
-- Taken from the "challenges.xml" file.
____exports.CHALLENGE_CHARACTERS = {
    [Challenge.NULL] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.PITCH_BLACK] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.HIGH_BROW] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.HEAD_TRAUMA] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.DARKNESS_FALLS] = PlayerType.EVE,
    [Challenge.TANK] = PlayerType.MAGDALENE,
    [Challenge.SOLAR_SYSTEM] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.SUICIDE_KING] = PlayerType.LAZARUS,
    [Challenge.CAT_GOT_YOUR_TONGUE] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.DEMO_MAN] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.CURSED] = PlayerType.MAGDALENE,
    [Challenge.GLASS_CANNON] = PlayerType.JUDAS,
    [Challenge.WHEN_LIFE_GIVES_YOU_LEMONS] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.BEANS] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.ITS_IN_THE_CARDS] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.SLOW_ROLL] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.COMPUTER_SAVY] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.WAKA_WAKA] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.HOST] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.FAMILY_MAN] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.PURIST] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.XXXXXXXXL] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.SPEED] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.BLUE_BOMBER] = PlayerType.BLUE_BABY,
    [Challenge.PAY_TO_PLAY] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.HAVE_A_HEART] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.I_RULE] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.BRAINS] = PlayerType.BLUE_BABY,
    [Challenge.PRIDE_DAY] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.ONANS_STREAK] = PlayerType.JUDAS,
    [Challenge.GUARDIAN] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.BACKASSWARDS] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.APRILS_FOOL] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.POKEY_MANS] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.ULTRA_HARD] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.PONG] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.SCAT_MAN] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.BLOODY_MARY] = PlayerType.BETHANY,
    [Challenge.BAPTISM_BY_FIRE] = PlayerType.BETHANY,
    [Challenge.ISAACS_AWAKENING] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.SEEING_DOUBLE] = PlayerType.JACOB,
    [Challenge.PICA_RUN] = ____exports.DEFAULT_CHALLENGE_CHARACTER,
    [Challenge.HOT_POTATO] = PlayerType.FORGOTTEN_B,
    [Challenge.CANTRIPPED] = PlayerType.CAIN_B,
    [Challenge.RED_REDEMPTION] = PlayerType.JACOB_B,
    [Challenge.DELETE_THIS] = ____exports.DEFAULT_CHALLENGE_CHARACTER
}
return ____exports
 end,
["objects.challengeCollectibleTypes"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
--- Contains the extra starting collectibles for each challenge. Challenges that do not grant extra
-- starting collectibles are represented by an empty array.
-- 
-- Taken from the "challenges.xml" file.
____exports.CHALLENGE_COLLECTIBLE_TYPES = {
    [Challenge.NULL] = {},
    [Challenge.PITCH_BLACK] = {},
    [Challenge.HIGH_BROW] = {CollectibleType.NUMBER_ONE, CollectibleType.BUTT_BOMBS, CollectibleType.E_COLI, CollectibleType.FLUSH},
    [Challenge.HEAD_TRAUMA] = {CollectibleType.SMALL_ROCK, CollectibleType.IRON_BAR, CollectibleType.TINY_PLANET, CollectibleType.SOY_MILK},
    [Challenge.DARKNESS_FALLS] = {CollectibleType.PENTAGRAM, CollectibleType.RAZOR_BLADE, CollectibleType.SACRIFICIAL_DAGGER, CollectibleType.DARK_MATTER},
    [Challenge.TANK] = {CollectibleType.BUCKET_OF_LARD, CollectibleType.INFAMY, CollectibleType.THUNDER_THIGHS},
    [Challenge.SOLAR_SYSTEM] = {CollectibleType.HALO_OF_FLIES, CollectibleType.TRANSCENDENCE, CollectibleType.DISTANT_ADMIRATION, CollectibleType.FOREVER_ALONE},
    [Challenge.SUICIDE_KING] = {CollectibleType.MY_REFLECTION, CollectibleType.MR_MEGA, CollectibleType.IPECAC},
    [Challenge.CAT_GOT_YOUR_TONGUE] = {CollectibleType.GUPPYS_TAIL, CollectibleType.GUPPYS_HEAD, CollectibleType.GUPPYS_HAIRBALL},
    [Challenge.DEMO_MAN] = {CollectibleType.DR_FETUS, CollectibleType.REMOTE_DETONATOR},
    [Challenge.CURSED] = {CollectibleType.RAW_LIVER, CollectibleType.COMPASS, CollectibleType.TREASURE_MAP, CollectibleType.BLUE_MAP},
    [Challenge.GLASS_CANNON] = {CollectibleType.LOKIS_HORNS, CollectibleType.EPIC_FETUS},
    [Challenge.WHEN_LIFE_GIVES_YOU_LEMONS] = {CollectibleType.LEMON_MISHAP, CollectibleType.NINE_VOLT, CollectibleType.HABIT},
    [Challenge.BEANS] = {
        CollectibleType.BEAN,
        CollectibleType.NINE_VOLT,
        CollectibleType.BLACK_BEAN,
        CollectibleType.PYRO,
        CollectibleType.BUTT_BOMBS
    },
    [Challenge.ITS_IN_THE_CARDS] = {CollectibleType.BATTERY, CollectibleType.DECK_OF_CARDS, CollectibleType.NINE_VOLT, CollectibleType.STARTER_DECK},
    [Challenge.SLOW_ROLL] = {CollectibleType.MY_REFLECTION, CollectibleType.CUPIDS_ARROW, CollectibleType.POLYPHEMUS},
    [Challenge.COMPUTER_SAVY] = {CollectibleType.SPOON_BENDER, CollectibleType.TECHNOLOGY, CollectibleType.TECHNOLOGY_2},
    [Challenge.WAKA_WAKA] = {CollectibleType.ANTI_GRAVITY, CollectibleType.STRANGE_ATTRACTOR},
    [Challenge.HOST] = {CollectibleType.MULLIGAN, CollectibleType.SPIDERBABY},
    [Challenge.FAMILY_MAN] = {
        CollectibleType.BROTHER_BOBBY,
        CollectibleType.SISTER_MAGGY,
        CollectibleType.DADS_KEY,
        CollectibleType.BFFS,
        CollectibleType.ROTTEN_BABY
    },
    [Challenge.PURIST] = {},
    [Challenge.XXXXXXXXL] = {},
    [Challenge.SPEED] = {},
    [Challenge.BLUE_BOMBER] = {CollectibleType.BROTHER_BOBBY, CollectibleType.KAMIKAZE, CollectibleType.MR_MEGA, CollectibleType.PYROMANIAC},
    [Challenge.PAY_TO_PLAY] = {CollectibleType.SACK_OF_PENNIES, CollectibleType.MONEY_EQUALS_POWER},
    [Challenge.HAVE_A_HEART] = {CollectibleType.CHARM_OF_THE_VAMPIRE},
    [Challenge.I_RULE] = {CollectibleType.LADDER, CollectibleType.MOMS_KNIFE, CollectibleType.TRINITY_SHIELD, CollectibleType.BOOMERANG},
    [Challenge.BRAINS] = {CollectibleType.BOBS_BRAIN, CollectibleType.BOBS_BRAIN, CollectibleType.BOBS_BRAIN, CollectibleType.THUNDER_THIGHS},
    [Challenge.PRIDE_DAY] = {CollectibleType.RAINBOW_BABY, CollectibleType.THREE_DOLLAR_BILL},
    [Challenge.ONANS_STREAK] = {CollectibleType.CHOCOLATE_MILK},
    [Challenge.GUARDIAN] = {CollectibleType.HOLY_GRAIL, CollectibleType.ISAACS_HEART, CollectibleType.PUNCHING_BAG, CollectibleType.SPEAR_OF_DESTINY},
    [Challenge.BACKASSWARDS] = {},
    [Challenge.APRILS_FOOL] = {},
    [Challenge.POKEY_MANS] = {CollectibleType.MOMS_EYESHADOW, CollectibleType.FRIEND_BALL},
    [Challenge.ULTRA_HARD] = {CollectibleType.BOOK_OF_REVELATIONS, CollectibleType.CAFFEINE_PILL},
    [Challenge.PONG] = {CollectibleType.CUPIDS_ARROW, CollectibleType.RUBBER_CEMENT},
    [Challenge.SCAT_MAN] = {
        CollectibleType.SKATOLE,
        CollectibleType.POOP,
        CollectibleType.NINE_VOLT,
        CollectibleType.BUTT_BOMBS,
        CollectibleType.BUTT_BOMBS,
        CollectibleType.BUTT_BOMBS,
        CollectibleType.E_COLI,
        CollectibleType.BFFS,
        CollectibleType.THUNDER_THIGHS,
        CollectibleType.DIRTY_MIND
    },
    [Challenge.BLOODY_MARY] = {CollectibleType.BOOK_OF_BELIAL, CollectibleType.BLOOD_BAG, CollectibleType.ANEMIC, CollectibleType.BLOOD_OATH},
    [Challenge.BAPTISM_BY_FIRE] = {CollectibleType.GUPPYS_PAW, CollectibleType.SCHOOLBAG, CollectibleType.URN_OF_SOULS},
    [Challenge.ISAACS_AWAKENING] = {CollectibleType.TRINITY_SHIELD, CollectibleType.SPIRIT_SWORD, CollectibleType.MOMS_BRACELET},
    [Challenge.SEEING_DOUBLE] = {245},
    [Challenge.PICA_RUN] = {CollectibleType.MOMS_PURSE, CollectibleType.MOMS_BOX, CollectibleType.MARBLES},
    [Challenge.HOT_POTATO] = {},
    [Challenge.CANTRIPPED] = {},
    [Challenge.RED_REDEMPTION] = {CollectibleType.DADS_KEY},
    [Challenge.DELETE_THIS] = {CollectibleType.TMTRAINER}
}
return ____exports
 end,
["objects.challengeNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
____exports.DEFAULT_CHALLENGE_NAME = "Unknown"
--- Taken from the "challenges.xml" file.
____exports.CHALLENGE_NAMES = {
    [Challenge.NULL] = ____exports.DEFAULT_CHALLENGE_NAME,
    [Challenge.PITCH_BLACK] = "Pitch Black",
    [Challenge.HIGH_BROW] = "High Brow",
    [Challenge.HEAD_TRAUMA] = "Head Trauma",
    [Challenge.DARKNESS_FALLS] = "Darkness Falls",
    [Challenge.TANK] = "The Tank",
    [Challenge.SOLAR_SYSTEM] = "Solar System",
    [Challenge.SUICIDE_KING] = "Suicide King",
    [Challenge.CAT_GOT_YOUR_TONGUE] = "Cat Got Your Tongue",
    [Challenge.DEMO_MAN] = "Demo Man",
    [Challenge.CURSED] = "Cursed!",
    [Challenge.GLASS_CANNON] = "Glass Cannon",
    [Challenge.WHEN_LIFE_GIVES_YOU_LEMONS] = "When Life Gives You Lemons",
    [Challenge.BEANS] = "Beans!",
    [Challenge.ITS_IN_THE_CARDS] = "It's In The Cards",
    [Challenge.SLOW_ROLL] = "Slow Roll",
    [Challenge.COMPUTER_SAVY] = "Computer Savvy",
    [Challenge.WAKA_WAKA] = "Waka Waka",
    [Challenge.HOST] = "The Host",
    [Challenge.FAMILY_MAN] = "The Family Man",
    [Challenge.PURIST] = "Purist",
    [Challenge.XXXXXXXXL] = "XXXXXXXXL",
    [Challenge.SPEED] = "SPEED!",
    [Challenge.BLUE_BOMBER] = "Blue Bomber",
    [Challenge.PAY_TO_PLAY] = "PAY TO PLAY",
    [Challenge.HAVE_A_HEART] = "Have a Heart",
    [Challenge.I_RULE] = "I RULE!",
    [Challenge.BRAINS] = "BRAINS!",
    [Challenge.PRIDE_DAY] = "PRIDE DAY!",
    [Challenge.ONANS_STREAK] = "Onan's Streak",
    [Challenge.GUARDIAN] = "The Guardian",
    [Challenge.BACKASSWARDS] = "Backasswards",
    [Challenge.APRILS_FOOL] = "Aprils Fool",
    [Challenge.POKEY_MANS] = "Pokey Mans",
    [Challenge.ULTRA_HARD] = "Ultra Hard",
    [Challenge.PONG] = "Pong",
    [Challenge.SCAT_MAN] = "Scat Man",
    [Challenge.BLOODY_MARY] = "Bloody Mary",
    [Challenge.BAPTISM_BY_FIRE] = "Baptism By Fire",
    [Challenge.ISAACS_AWAKENING] = "Isaac's Awakening",
    [Challenge.SEEING_DOUBLE] = "Seeing Double",
    [Challenge.PICA_RUN] = "Pica Run",
    [Challenge.HOT_POTATO] = "Hot Potato",
    [Challenge.CANTRIPPED] = "Cantripped!",
    [Challenge.RED_REDEMPTION] = "Red Redemption",
    [Challenge.DELETE_THIS] = "DELETE THIS"
}
return ____exports
 end,
["objects.challengeTrinketType"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
--- Contains the starting trinket for each challenge. Challenges that do not grant a starting trinket
-- will have a value of `undefined`.
-- 
-- Taken from the "challenges.xml" file.
____exports.CHALLENGE_TRINKET_TYPE = {
    [Challenge.NULL] = nil,
    [Challenge.PITCH_BLACK] = nil,
    [Challenge.HIGH_BROW] = TrinketType.PETRIFIED_POOP,
    [Challenge.HEAD_TRAUMA] = nil,
    [Challenge.DARKNESS_FALLS] = nil,
    [Challenge.TANK] = nil,
    [Challenge.SOLAR_SYSTEM] = nil,
    [Challenge.SUICIDE_KING] = nil,
    [Challenge.CAT_GOT_YOUR_TONGUE] = nil,
    [Challenge.DEMO_MAN] = TrinketType.MATCH_STICK,
    [Challenge.CURSED] = TrinketType.CHILDS_HEART,
    [Challenge.GLASS_CANNON] = nil,
    [Challenge.WHEN_LIFE_GIVES_YOU_LEMONS] = nil,
    [Challenge.BEANS] = nil,
    [Challenge.ITS_IN_THE_CARDS] = nil,
    [Challenge.SLOW_ROLL] = nil,
    [Challenge.COMPUTER_SAVY] = nil,
    [Challenge.WAKA_WAKA] = nil,
    [Challenge.HOST] = TrinketType.TICK,
    [Challenge.FAMILY_MAN] = nil,
    [Challenge.PURIST] = nil,
    [Challenge.XXXXXXXXL] = nil,
    [Challenge.SPEED] = nil,
    [Challenge.BLUE_BOMBER] = nil,
    [Challenge.PAY_TO_PLAY] = nil,
    [Challenge.HAVE_A_HEART] = nil,
    [Challenge.I_RULE] = nil,
    [Challenge.BRAINS] = nil,
    [Challenge.PRIDE_DAY] = TrinketType.RAINBOW_WORM,
    [Challenge.ONANS_STREAK] = nil,
    [Challenge.GUARDIAN] = nil,
    [Challenge.BACKASSWARDS] = nil,
    [Challenge.APRILS_FOOL] = nil,
    [Challenge.POKEY_MANS] = nil,
    [Challenge.ULTRA_HARD] = nil,
    [Challenge.PONG] = nil,
    [Challenge.SCAT_MAN] = TrinketType.MYSTERIOUS_CANDY,
    [Challenge.BLOODY_MARY] = TrinketType.CHILDS_HEART,
    [Challenge.BAPTISM_BY_FIRE] = TrinketType.MAGGYS_FAITH,
    [Challenge.ISAACS_AWAKENING] = nil,
    [Challenge.SEEING_DOUBLE] = nil,
    [Challenge.PICA_RUN] = nil,
    [Challenge.HOT_POTATO] = nil,
    [Challenge.CANTRIPPED] = nil,
    [Challenge.RED_REDEMPTION] = nil,
    [Challenge.DELETE_THIS] = nil
}
return ____exports
 end,
["functions.challenges"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local Challenge = ____isaac_2Dtypescript_2Ddefinitions.Challenge
local ____challengeBosses = require("objects.challengeBosses")
local CHALLENGE_BOSSES = ____challengeBosses.CHALLENGE_BOSSES
local DEFAULT_CHALLENGE_BOSS_ID = ____challengeBosses.DEFAULT_CHALLENGE_BOSS_ID
local ____challengeCharacters = require("objects.challengeCharacters")
local CHALLENGE_CHARACTERS = ____challengeCharacters.CHALLENGE_CHARACTERS
local DEFAULT_CHALLENGE_CHARACTER = ____challengeCharacters.DEFAULT_CHALLENGE_CHARACTER
local ____challengeCollectibleTypes = require("objects.challengeCollectibleTypes")
local CHALLENGE_COLLECTIBLE_TYPES = ____challengeCollectibleTypes.CHALLENGE_COLLECTIBLE_TYPES
local ____challengeNames = require("objects.challengeNames")
local CHALLENGE_NAMES = ____challengeNames.CHALLENGE_NAMES
local DEFAULT_CHALLENGE_NAME = ____challengeNames.DEFAULT_CHALLENGE_NAME
local ____challengeTrinketType = require("objects.challengeTrinketType")
local CHALLENGE_TRINKET_TYPE = ____challengeTrinketType.CHALLENGE_TRINKET_TYPE
local ____log = require("functions.log")
local log = ____log.log
--- Helper function to see if the player is playing any challenge.
function ____exports.onAnyChallenge(self)
    local challenge = Isaac.GetChallenge()
    return challenge ~= Challenge.NULL
end
--- Helper function to clear the current challenge, which will restart the run on a new random
-- non-challenge seed with the current character.
-- 
-- If the player is not in a challenge already, this function will do nothing.
-- 
-- Under the hood, this function executes the `challenge 0` console command.
function ____exports.clearChallenge(self)
    if ____exports.onAnyChallenge(nil) then
        local command = "challenge " .. tostring(Challenge.NULL)
        log("Restarting the run to clear the current challenge with a console command of: " .. command)
        Isaac.ExecuteCommand(command)
    end
end
--- Get the final boss of a challenge. This will only work for vanilla challenges.
-- 
-- For modded challenges, `BossID.MOM` (6) will be returned.
-- 
-- Note that for `Challenge.BACKASSWARDS` (31), this function will return `BossID.MEGA_SATAN` (55),
-- but this is not actually the final boss. (There is no final boss for this challenge.)
function ____exports.getChallengeBoss(self, challenge)
    local challengeBossID = CHALLENGE_BOSSES[challenge]
    return challengeBossID or DEFAULT_CHALLENGE_BOSS_ID
end
--- Get the starting character of a challenge. This will only work for vanilla challenges.
-- 
-- For modded challenges, `PlayerType.ISAAC` (0) will be returned.
function ____exports.getChallengeCharacter(self, challenge)
    local challengeCharacter = CHALLENGE_CHARACTERS[challenge]
    return challengeCharacter or DEFAULT_CHALLENGE_CHARACTER
end
--- Get the extra starting collectibles for a challenge. This will only work for vanilla challenges.
-- 
-- For modded challenges, an empty array will be returned.
function ____exports.getChallengeCollectibleTypes(self, challenge)
    return CHALLENGE_COLLECTIBLE_TYPES[challenge]
end
--- Get the proper name for a `Challenge` enum. This will only work for vanilla challenges.
-- 
-- For modded challenges, "Unknown" will be returned.
function ____exports.getChallengeName(self, challenge)
    local challengeName = CHALLENGE_NAMES[challenge]
    return challengeName or DEFAULT_CHALLENGE_NAME
end
--- Get the extra starting trinket for a challenge. This will only work for vanilla challenges.
-- 
-- If a challenge does not grant a starting trinket, `undefined` will be returned.
-- 
-- For modded challenges, `undefined` will be returned.
function ____exports.getChallengeTrinketType(self, challenge)
    return CHALLENGE_TRINKET_TYPE[challenge]
end
--- Helper function to check to see if the player is playing a particular challenge.
-- 
-- This function is variadic, meaning that you can specify as many challenges as you want to check
-- for.
function ____exports.onChallenge(self, ...)
    local challenges = {...}
    local challenge = Isaac.GetChallenge()
    return __TS__ArrayIncludes(challenges, challenge)
end
--- Helper function to restart the run on a particular challenge.
-- 
-- If the player is already in the particular challenge, this function will do nothing.
-- 
-- Under the hood, this function executes the `challenge 0` console command.
function ____exports.setChallenge(self, challenge)
    if not ____exports.onChallenge(nil, challenge) then
        local command = "challenge " .. tostring(challenge)
        log("Restarting the run to set a challenge with a console command of: " .. command)
        Isaac.ExecuteCommand(command)
    end
end
return ____exports
 end,
["interfaces.ChargeBarSprites"] = function(...) 
local ____exports = {}
return ____exports
 end,
["functions.chargeBar"] = function(...) 
local ____exports = {}
local getChargeBarClamp
function getChargeBarClamp(self, charges, maxCharges)
    local meterMultiplier = 24 / maxCharges
    local meterClip = 26 - charges * meterMultiplier
    return Vector(0, meterClip)
end
local CHARGE_BAR_ANM2 = "gfx/ui/ui_chargebar.anm2"
--- Constructor for a `ChargeBarSprites` object. For more information, see the `renderChargeBar`
-- helper function.
-- 
-- Note that this is for the vertical charge bar that represents the number of charges that an
-- active item has, not the circular charge bar that shows e.g. the charge rate of Brimstone.
function ____exports.newChargeBarSprites(self, maxCharges)
    local back = Sprite()
    back:Load(CHARGE_BAR_ANM2, true)
    back:Play("BarEmpty", true)
    local meter = Sprite()
    meter:Load(CHARGE_BAR_ANM2, true)
    meter:Play("BarFull", true)
    local meterBattery = Sprite()
    meterBattery:Load(CHARGE_BAR_ANM2, true)
    meterBattery:Play("BarFull", true)
    local lines = Sprite()
    lines:Load(CHARGE_BAR_ANM2, true)
    lines:Play(
        "BarOverlay" .. tostring(maxCharges),
        true
    )
    return {
        back = back,
        meter = meter,
        meterBattery = meterBattery,
        lines = lines,
        maxCharges = maxCharges
    }
end
--- Helper function to render a charge bar on the screen. First, call the `newChargeBarSprites`
-- function to initialize the sprites, and then call this function on every render frame.
-- 
-- Note that this is for the vertical charge bar that represents the number of charges that an
-- active item has, not the circular charge bar that shows e.g. the charge rate of Brimstone.
function ____exports.renderChargeBar(self, sprites, position, normalCharges, batteryCharges)
    sprites.back:Render(position)
    local normalChargesClamp = getChargeBarClamp(nil, normalCharges, sprites.maxCharges)
    sprites.meter:Render(position, normalChargesClamp)
    local batteryChargesClamp = getChargeBarClamp(nil, batteryCharges, sprites.maxCharges)
    sprites.meterBattery:Render(position, batteryChargesClamp)
    sprites.lines:Render(position)
end
return ____exports
 end,
["functions.decorators"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local CallbackPriority = ____isaac_2Dtypescript_2Ddefinitions.CallbackPriority
local ____ModFeature = require("classes.ModFeature")
local MOD_FEATURE_CALLBACKS_KEY = ____ModFeature.MOD_FEATURE_CALLBACKS_KEY
local MOD_FEATURE_CUSTOM_CALLBACKS_KEY = ____ModFeature.MOD_FEATURE_CUSTOM_CALLBACKS_KEY
local ____tstlClass = require("functions.tstlClass")
local getTSTLClassName = ____tstlClass.getTSTLClassName
--- A decorator function that signifies that the decorated class method should be automatically
-- registered with `Mod.AddPriorityCallback`.
-- 
-- @allowEmptyVariadic
-- @ignore
function ____exports.PriorityCallback(self, modCallback, priority, ...)
    local optionalArgs = {...}
    return function(____, target, propertyKey, _descriptor)
        local methodName = propertyKey
        local method = target[methodName]
        local callbackTuple = {modCallback, priority, method, optionalArgs}
        local constructor = target.constructor
        if constructor == nil then
            local tstlClassName = getTSTLClassName(nil, target) or "Unknown"
            error(("Failed to get the constructor for class \"" .. tstlClassName) .. "\". Did you decorate a static method? You can only decorate non-static class methods, because the \"Mod\" object is not present before the class is instantiated.")
        end
        if not (constructor[MOD_FEATURE_CALLBACKS_KEY] ~= nil) then
            constructor[MOD_FEATURE_CALLBACKS_KEY] = {}
        end
        local callbackTuples = constructor[MOD_FEATURE_CALLBACKS_KEY]
        callbackTuples[#callbackTuples + 1] = callbackTuple
    end
end
--- A decorator function that signifies that the decorated class method should be automatically
-- registered with `ModUpgraded.AddCallbackCustom`.
-- 
-- @allowEmptyVariadic
-- @ignore
function ____exports.PriorityCallbackCustom(self, modCallbackCustom, priority, ...)
    local optionalArgs = {...}
    return function(____, target, propertyKey, _descriptor)
        local methodName = propertyKey
        local method = target[methodName]
        local callbackTuple = {modCallbackCustom, priority, method, optionalArgs}
        local constructor = target.constructor
        if constructor == nil then
            local tstlClassName = getTSTLClassName(nil, target) or "Unknown"
            error(("Failed to get the constructor for class \"" .. tstlClassName) .. "\". Did you decorate a static method? You can only decorate non-static class methods, because the \"Mod\" object is not present before the class is instantiated.")
        end
        if not (constructor[MOD_FEATURE_CUSTOM_CALLBACKS_KEY] ~= nil) then
            constructor[MOD_FEATURE_CUSTOM_CALLBACKS_KEY] = {}
        end
        local callbackTuples = constructor[MOD_FEATURE_CUSTOM_CALLBACKS_KEY]
        callbackTuples[#callbackTuples + 1] = callbackTuple
    end
end
--- A decorator function that signifies that the decorated class method should be automatically
-- registered with `Mod.AddCallback`.
-- 
-- @allowEmptyVariadic
-- @ignore
function ____exports.Callback(self, modCallback, ...)
    return ____exports.PriorityCallback(nil, modCallback, CallbackPriority.DEFAULT, ...)
end
--- A decorator function that signifies that the decorated class method should be automatically
-- registered with `ModUpgraded.AddCallbackCustom`.
-- 
-- @allowEmptyVariadic
-- @ignore
function ____exports.CallbackCustom(self, modCallbackCustom, ...)
    return ____exports.PriorityCallbackCustom(nil, modCallbackCustom, CallbackPriority.DEFAULT, ...)
end
return ____exports
 end,
["functions.globals"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local Set = ____lualib.Set
local __TS__ArraySort = ____lualib.__TS__ArraySort
local __TS__ArrayEntries = ____lualib.__TS__ArrayEntries
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local ____exports = {}
local isRacingPlusSandboxEnabled
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____debugFunctions = require("functions.debugFunctions")
local getTraceback = ____debugFunctions.getTraceback
local isLuaDebugEnabled = ____debugFunctions.isLuaDebugEnabled
local traceback = ____debugFunctions.traceback
local logExports = require("functions.log")
local ____log = require("functions.log")
local log = ____log.log
local logEntitiesExports = require("functions.logEntities")
local logMiscExports = require("functions.logMisc")
local ____set = require("functions.set")
local addSetsToSet = ____set.addSetsToSet
local copySet = ____set.copySet
local ____sort = require("functions.sort")
local sortTwoDimensionalArray = ____sort.sortTwoDimensionalArray
function isRacingPlusSandboxEnabled(self)
    return SandboxGetParentFunctionDescription ~= nil
end
local DEFAULT_GLOBALS = __TS__New(ReadonlySet, {
    "ActionTriggers",
    "ActiveSlot",
    "BabySubType",
    "BackdropType",
    "BatterySubType",
    "BedSubType",
    "BitSet128",
    "BombSubType",
    "BombVariant",
    "ButtonAction",
    "CacheFlag",
    "Card",
    "Challenge",
    "ChampionColor",
    "ChestSubType",
    "CoinSubType",
    "CollectibleType",
    "Color",
    "CppContainer",
    "DamageFlag",
    "Difficulty",
    "Direction",
    "DoorSlot",
    "DoorState",
    "DoorVariant",
    "EffectVariant",
    "Entity",
    "EntityBomb",
    "EntityCollisionClass",
    "EntityEffect",
    "EntityFamiliar",
    "EntityFlag",
    "EntityGridCollisionClass",
    "EntityKnife",
    "EntityLaser",
    "EntityNPC",
    "EntityPartition",
    "EntityPickup",
    "EntityPlayer",
    "EntityProjectile",
    "EntityPtr",
    "EntityRef",
    "EntityTear",
    "EntityType",
    "FamiliarVariant",
    "Font",
    "Game",
    "GameStateFlag",
    "GetPtrHash",
    "GridCollisionClass",
    "GridEntity",
    "GridEntityDesc",
    "GridEntityDoor",
    "GridEntityPit",
    "GridEntityPoop",
    "GridEntityPressurePlate",
    "GridEntityRock",
    "GridEntitySpikes",
    "GridEntityTNT",
    "GridEntityType",
    "GridRooms",
    "HUD",
    "HeartSubType",
    "Input",
    "InputHook",
    "Isaac",
    "ItemConfig",
    "ItemPool",
    "ItemPoolType",
    "ItemType",
    "KColor",
    "KeySubType",
    "Keyboard",
    "LaserOffset",
    "LaserSubType",
    "Level",
    "LevelCurse",
    "LevelStage",
    "LevelStateFlag",
    "LocustSubtypes",
    "ModCallbacks",
    "Mouse",
    "Music",
    "MusicManager",
    "NpcState",
    "NullItemID",
    "Options",
    "PathFinder",
    "PickupPrice",
    "PickupVariant",
    "PillColor",
    "PillEffect",
    "PlayerForm",
    "PlayerSpriteLayer",
    "PlayerType",
    "PlayerTypes",
    "PoopPickupSubType",
    "PoopSpellType",
    "ProjectileFlags",
    "ProjectileParams",
    "ProjectileVariant",
    "QueueItemData",
    "REPENTANCE",
    "RNG",
    "Random",
    "RandomVector",
    "RegisterMod",
    "RenderMode",
    "Room",
    "RoomConfig",
    "RoomDescriptor",
    "RoomShape",
    "RoomTransitionAnim",
    "RoomType",
    "SFXManager",
    "SackSubType",
    "SeedEffect",
    "Seeds",
    "SkinColor",
    "SortingLayer",
    "SoundEffect",
    "Sprite",
    "StageType",
    "StartDebug",
    "TearFlags",
    "TearParams",
    "TearVariant",
    "TemporaryEffect",
    "TemporaryEffects",
    "TrinketType",
    "UseFlag",
    "Vector",
    "WeaponType",
    "_G",
    "_VERSION",
    "assert",
    "collectgarbage",
    "coroutine",
    "error",
    "getmetatable",
    "include",
    "ipairs",
    "load",
    "math",
    "next",
    "pairs",
    "pcall",
    "print",
    "rawequal",
    "rawget",
    "rawlen",
    "rawset",
    "require",
    "select",
    "setmetatable",
    "string",
    "table",
    "tonumber",
    "tostring",
    "type",
    "utf8",
    "xpcall"
})
local LUA_DEBUG_ADDED_GLOBALS = __TS__New(ReadonlySet, {
    "debug",
    "dofile",
    "loadfile",
    "io",
    "os",
    "package"
})
local RACING_PLUS_SANDBOX_ADDED_GLOBALS = __TS__New(ReadonlySet, {"sandboxTraceback", "sandboxGetTraceback", "getParentFunctionDescription"})
--- Helper function to get a set containing all of the global variable names that are contained
-- within the Isaac environment by default.
-- 
-- Returns a slightly different set depending on whether the "--luadebug" flag is enabled.
function ____exports.getDefaultGlobals(self)
    local defaultGlobals = copySet(nil, DEFAULT_GLOBALS)
    if isLuaDebugEnabled(nil) then
        addSetsToSet(nil, defaultGlobals, LUA_DEBUG_ADDED_GLOBALS)
    end
    if isRacingPlusSandboxEnabled(nil) then
        addSetsToSet(nil, defaultGlobals, RACING_PLUS_SANDBOX_ADDED_GLOBALS)
    end
    return defaultGlobals
end
--- Helper function to get an array of any added global variables in the Isaac Lua environment.
-- Returns a sorted array of key/value tuples.
function ____exports.getNewGlobals(self)
    local defaultGlobals = ____exports.getDefaultGlobals(nil)
    local newGlobals = {}
    for key, value in pairs(_G) do
        if not defaultGlobals:has(key) then
            local keyValueTuple = {key, value}
            newGlobals[#newGlobals + 1] = keyValueTuple
        end
    end
    __TS__ArraySort(newGlobals, sortTwoDimensionalArray)
    return newGlobals
end
--- Helper function to log any added global variables in the Isaac Lua environment.
function ____exports.logNewGlobals(self)
    local newGlobals = ____exports.getNewGlobals(nil)
    log("List of added global variables in the Isaac environment:")
    if #newGlobals == 0 then
        log("- n/a (no extra global variables found)")
    else
        for ____, ____value in __TS__Iterator(__TS__ArrayEntries(newGlobals)) do
            local i = ____value[1]
            local tuple = ____value[2]
            local key, value = table.unpack(tuple)
            log((((tostring(i + 1) .. ") ") .. tostring(key)) .. " - ") .. tostring(value))
        end
    end
end
--- Converts every `isaacscript-common` function that begins with "log" to a global function.
-- 
-- This is useful when printing out variables from the in-game debug console.
function ____exports.setLogFunctionsGlobal(self)
    local globals = _G
    for ____, exports in ipairs({logExports, logMiscExports, logEntitiesExports}) do
        for ____, ____value in ipairs(__TS__ObjectEntries(exports)) do
            local logFuncName = ____value[1]
            local logFunc = ____value[2]
            globals[logFuncName] = logFunc
        end
    end
end
--- Sets the `traceback` and `getTraceback` functions to be global functions.
-- 
-- This is useful when editing Lua files when troubleshooting.
function ____exports.setTracebackFunctionsGlobal(self)
    local globals = _G
    globals.getTraceback = getTraceback
    globals.traceback = traceback
end
return ____exports
 end,
["functions.hash"] = function(...) 
local ____exports = {}
local CRC32 = {
    0,
    1996959894,
    3993919788,
    2567524794,
    124634137,
    1886057615,
    3915621685,
    2657392035,
    249268274,
    2044508324,
    3772115230,
    2547177864,
    162941995,
    2125561021,
    3887607047,
    2428444049,
    498536548,
    1789927666,
    4089016648,
    2227061214,
    450548861,
    1843258603,
    4107580753,
    2211677639,
    325883990,
    1684777152,
    4251122042,
    2321926636,
    335633487,
    1661365465,
    4195302755,
    2366115317,
    997073096,
    1281953886,
    3579855332,
    2724688242,
    1006888145,
    1258607687,
    3524101629,
    2768942443,
    901097722,
    1119000684,
    3686517206,
    2898065728,
    853044451,
    1172266101,
    3705015759,
    2882616665,
    651767980,
    1373503546,
    3369554304,
    3218104598,
    565507253,
    1454621731,
    3485111705,
    3099436303,
    671266974,
    1594198024,
    3322730930,
    2970347812,
    795835527,
    1483230225,
    3244367275,
    3060149565,
    1994146192,
    31158534,
    2563907772,
    4023717930,
    1907459465,
    112637215,
    2680153253,
    3904427059,
    2013776290,
    251722036,
    2517215374,
    3775830040,
    2137656763,
    141376813,
    2439277719,
    3865271297,
    1802195444,
    476864866,
    2238001368,
    4066508878,
    1812370925,
    453092731,
    2181625025,
    4111451223,
    1706088902,
    314042704,
    2344532202,
    4240017532,
    1658658271,
    366619977,
    2362670323,
    4224994405,
    1303535960,
    984961486,
    2747007092,
    3569037538,
    1256170817,
    1037604311,
    2765210733,
    3554079995,
    1131014506,
    879679996,
    2909243462,
    3663771856,
    1141124467,
    855842277,
    2852801631,
    3708648649,
    1342533948,
    654459306,
    3188396048,
    3373015174,
    1466479909,
    544179635,
    3110523913,
    3462522015,
    1591671054,
    702138776,
    2966460450,
    3352799412,
    1504918807,
    783551873,
    3082640443,
    3233442989,
    3988292384,
    2596254646,
    62317068,
    1957810842,
    3939845945,
    2647816111,
    81470997,
    1943803523,
    3814918930,
    2489596804,
    225274430,
    2053790376,
    3826175755,
    2466906013,
    167816743,
    2097651377,
    4027552580,
    2265490386,
    503444072,
    1762050814,
    4150417245,
    2154129355,
    426522225,
    1852507879,
    4275313526,
    2312317920,
    282753626,
    1742555852,
    4189708143,
    2394877945,
    397917763,
    1622183637,
    3604390888,
    2714866558,
    953729732,
    1340076626,
    3518719985,
    2797360999,
    1068828381,
    1219638859,
    3624741850,
    2936675148,
    906185462,
    1090812512,
    3747672003,
    2825379669,
    829329135,
    1181335161,
    3412177804,
    3160834842,
    628085408,
    1382605366,
    3423369109,
    3138078467,
    570562233,
    1426400815,
    3317316542,
    2998733608,
    733239954,
    1555261956,
    3268935591,
    3050360625,
    752459403,
    1541320221,
    2607071920,
    3965973030,
    1969922972,
    40735498,
    2617837225,
    3943577151,
    1913087877,
    83908371,
    2512341634,
    3803740692,
    2075208622,
    213261112,
    2463272603,
    3855990285,
    2094854071,
    198958881,
    2262029012,
    4057260610,
    1759359992,
    534414190,
    2176718541,
    4139329115,
    1873836001,
    414664567,
    2282248934,
    4279200368,
    1711684554,
    285281116,
    2405801727,
    4167216745,
    1634467795,
    376229701,
    2685067896,
    3608007406,
    1308918612,
    956543938,
    2808555105,
    3495958263,
    1231636301,
    1047427035,
    2932959818,
    3654703836,
    1088359270,
    936918000,
    2847714899,
    3736837829,
    1202900863,
    817233897,
    3183342108,
    3401237130,
    1404277552,
    615818150,
    3134207493,
    3453421203,
    1423857449,
    601450431,
    3009837614,
    3294710456,
    1567103746,
    711928724,
    3020668471,
    3272380065,
    1510334235,
    755167117
}
--- From: https://github.com/lancelijade/qqwry.lua/blob/master/crc32.lua
function ____exports.crc32(self, str)
    local count = #str
    local crc = 4294967295
    local i = 1
    while count > 0 do
        local byte = string.byte(str, i)
        local left = crc >> 8
        local crcIndex = (crc & 255 ~ byte) + 1
        local right = CRC32[crcIndex + 1] or 0
        crc = left ~ right
        i = i + 1
        count = count - 1
    end
    crc = crc ~ 4294967295
    return crc
end
return ____exports
 end,
["functions.hex"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__StringReplace = ____lualib.__TS__StringReplace
local ____exports = {}
local hexToRGB, HEX_STRING_LENGTH
local ____log = require("functions.log")
local logError = ____log.logError
function hexToRGB(self, hexString)
    hexString = __TS__StringReplace(hexString, "#", "")
    if #hexString ~= HEX_STRING_LENGTH then
        logError("Hex strings must be of length: " .. tostring(HEX_STRING_LENGTH))
        return {r = 0, g = 0, b = 0}
    end
    local rString = string.sub(hexString, 1, 2)
    local r = tonumber("0x" .. rString)
    if r == nil then
        logError(("Failed to convert `0x" .. rString) .. "` to a number.")
        return {r = 0, g = 0, b = 0}
    end
    local gString = string.sub(hexString, 3, 4)
    local g = tonumber("0x" .. gString)
    if g == nil then
        logError(("Failed to convert `0x" .. gString) .. "` to a number.")
        return {r = 0, g = 0, b = 0}
    end
    local bString = string.sub(hexString, 5, 6)
    local b = tonumber("0x" .. bString)
    if b == nil then
        logError(("Failed to convert `0x" .. bString) .. "` to a number.")
        return {r = 0, g = 0, b = 0}
    end
    return {r = r, g = g, b = b}
end
HEX_STRING_LENGTH = 6
--- Converts a hex string like "#33aa33" to a KColor object.
-- 
-- @param hexString A hex string like "#ffffff" or "ffffff". (The "#" character is optional.)
-- @param alpha Optional. Range is from 0 to 1. Default is 1. (The same as the `Color` constructor.)
function ____exports.hexToColor(self, hexString, alpha)
    if alpha == nil then
        alpha = 1
    end
    local ____hexToRGB_result_0 = hexToRGB(nil, hexString)
    local r = ____hexToRGB_result_0.r
    local g = ____hexToRGB_result_0.g
    local b = ____hexToRGB_result_0.b
    local base = 255
    return Color(r / base, g / base, b / base, alpha)
end
--- Converts a hex string like "#33aa33" to a Color object.
-- 
-- @param hexString A hex string like "#ffffff" or "ffffff". (The "#" character is optional.)
-- @param alpha Range is from 0 to 1. Default is 1.
function ____exports.hexToKColor(self, hexString, alpha)
    if alpha == nil then
        alpha = 1
    end
    local ____hexToRGB_result_1 = hexToRGB(nil, hexString)
    local r = ____hexToRGB_result_1.r
    local g = ____hexToRGB_result_1.g
    local b = ____hexToRGB_result_1.b
    local base = 255
    return KColor(r / base, g / base, b / base, alpha)
end
return ____exports
 end,
["objects.languageNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local LanguageAbbreviation = ____isaac_2Dtypescript_2Ddefinitions.LanguageAbbreviation
____exports.LANGUAGE_NAMES = {
    [LanguageAbbreviation.ENGLISH] = "English",
    [LanguageAbbreviation.JAPANESE] = "Japanese",
    [LanguageAbbreviation.KOREAN] = "Korean",
    [LanguageAbbreviation.CHINESE_SIMPLE] = "Chinese (Simple)",
    [LanguageAbbreviation.RUSSIAN] = "Russian",
    [LanguageAbbreviation.GERMAN] = "German",
    [LanguageAbbreviation.SPANISH] = "Spanish"
}
return ____exports
 end,
["functions.language"] = function(...) 
local ____exports = {}
local ____languageNames = require("objects.languageNames")
local LANGUAGE_NAMES = ____languageNames.LANGUAGE_NAMES
--- Helper function to convert the language abbreviation from `Options.Language` to the "full"
-- language name.
-- 
-- For example, if the current language is set to Korean, `Options.Language` will be set to "kr",
-- and this function will return "Korean".
function ____exports.getLanguageName(self)
    local languageAbbreviation = Options.Language
    return LANGUAGE_NAMES[languageAbbreviation]
end
return ____exports
 end,
["functions.level"] = function(...) 
local ____lualib = require("lualib_bundle")
local Set = ____lualib.Set
local __TS__New = ____lualib.__TS__New
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local DOOR_SLOT_VALUES = ____cachedEnumValues.DOOR_SLOT_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____array = require("functions.array")
local filterMap = ____array.filterMap
local ____levelGrid = require("functions.levelGrid")
local getRoomDescriptorsForType = ____levelGrid.getRoomDescriptorsForType
local isDoorSlotValidAtGridIndexForRedRoom = ____levelGrid.isDoorSlotValidAtGridIndexForRedRoom
local ____rooms = require("functions.rooms")
local getNumRooms = ____rooms.getNumRooms
local getRoomsInsideGrid = ____rooms.getRoomsInsideGrid
--- Helper function to fill every possible level grid square with a red room.
function ____exports.fillLevelWithRedRooms(self)
    local level = game:GetLevel()
    local numRoomsInGrid
    repeat
        do
            local roomsInGrid = getRoomsInsideGrid(nil)
            numRoomsInGrid = #roomsInGrid
            for ____, roomDescriptor in ipairs(roomsInGrid) do
                for ____, doorSlot in ipairs(DOOR_SLOT_VALUES) do
                    if isDoorSlotValidAtGridIndexForRedRoom(nil, doorSlot, roomDescriptor.GridIndex) then
                        level:MakeRedRoomDoor(roomDescriptor.GridIndex, doorSlot)
                    end
                end
            end
        end
    until not (numRoomsInGrid ~= getNumRooms(nil))
end
--- Helper function to get the boss IDs of all of the Boss Rooms on this floor. (This is equivalent
-- to the sub-type of the room data.)
-- 
-- Note that this will only look at Boss Rooms inside of the grid, so e.g. Reverse Emperor card
-- rooms will not count.
function ____exports.getLevelBossIDs(self)
    local roomsInsideGrid = getRoomsInsideGrid(nil)
    return filterMap(
        nil,
        roomsInsideGrid,
        function(____, roomDescriptor) return roomDescriptor.Data ~= nil and roomDescriptor.Data.Type == RoomType.BOSS and roomDescriptor.Data.StageID == StageID.SPECIAL_ROOMS and roomDescriptor.Data.Subtype or nil end
    )
end
--- Helper function to check if the current floor has a Boss Room that matches the boss ID provided.
-- 
-- This function is variadic, meaning that you can pass as many boss IDs as you want to check for.
-- It will return true if one or more of the boss IDs are matched.
function ____exports.levelHasBossID(self, ...)
    local bossIDs = {...}
    local levelBossIDs = ____exports.getLevelBossIDs(nil)
    local levelBossIDsSet = __TS__New(Set, levelBossIDs)
    return __TS__ArraySome(
        bossIDs,
        function(____, bossID) return levelBossIDsSet:has(bossID) end
    )
end
--- Helper function to check to see if the current floor has one or more of a specific room type in
-- it.
-- 
-- This function is variadic, meaning that you can pass as many room types as you want to check for.
-- This function will return true if any of the room types are found.
function ____exports.levelHasRoomType(self, ...)
    local roomDescriptors = getRoomDescriptorsForType(nil, ...)
    return #roomDescriptors > 0
end
return ____exports
 end,
["functions.minimap"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local DisplayFlagZero = ____isaac_2Dtypescript_2Ddefinitions.DisplayFlagZero
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____flag = require("functions.flag")
local addFlag = ____flag.addFlag
local ____roomData = require("functions.roomData")
local getRoomDescriptor = ____roomData.getRoomDescriptor
local getRoomGridIndex = ____roomData.getRoomGridIndex
local ____rooms = require("functions.rooms")
local getRoomsInsideGrid = ____rooms.getRoomsInsideGrid
local ____types = require("functions.types")
local isInteger = ____types.isInteger
local ____utils = require("functions.utils")
local assertDefined = ____utils.assertDefined
--- Helper function to get a particular room's minimap display flags (e.g. whether it is visible and
-- so on).
-- 
-- This function automatically accounts for if MinimapAPI is being used.
-- 
-- @param roomGridIndex Optional. Default is the current room index.
-- @param minimapAPI Optional. If MinimapAPI should be used, if present. Default is true.
function ____exports.getRoomDisplayFlags(self, roomGridIndex, minimapAPI)
    if minimapAPI == nil then
        minimapAPI = true
    end
    if roomGridIndex == nil then
        roomGridIndex = getRoomGridIndex(nil)
    end
    if MinimapAPI == nil or not minimapAPI then
        local roomDescriptor = getRoomDescriptor(nil, roomGridIndex)
        return roomDescriptor.DisplayFlags
    end
    local minimapAPIRoomDescriptor = MinimapAPI:GetRoomByIdx(roomGridIndex)
    assertDefined(
        nil,
        minimapAPIRoomDescriptor,
        "Failed to get the MinimapAPI room descriptor for the room at grid index: " .. tostring(roomGridIndex)
    )
    return minimapAPIRoomDescriptor:GetDisplayFlags()
end
--- Helper function to set the minimap `DisplayFlag` value for every room on the floor at once.
-- 
-- This function automatically calls the `Level.UpdateVisibility` after setting the flags so that
-- the changes will be immediately visible.
-- 
-- This function automatically accounts for if MinimapAPI is being used.
function ____exports.setAllDisplayFlags(self, displayFlags)
    for ____, room in ipairs(getRoomsInsideGrid(nil)) do
        ____exports.setRoomDisplayFlags(nil, room.SafeGridIndex, displayFlags, false)
    end
    if MinimapAPI == nil then
        local level = game:GetLevel()
        level:UpdateVisibility()
    end
end
--- Helper function to set a particular room's minimap display flags (e.g. whether it is visible and
-- so on).
-- 
-- This function automatically accounts for if MinimapAPI is being used.
-- 
-- @param roomGridIndex Set to undefined to use the current room index.
-- @param displayFlags The bit flags value to set. (See the `DisplayFlag` enum.)
-- @param updateVisibility Optional. Whether to call the `Level.UpdateVisibility` method in order to
-- make the changes immediately visible. Default is true. Set this to false
-- if you are doing a bunch of display flag setting and then manually call
-- the `Level.UpdateVisibility` method after you are done.
function ____exports.setRoomDisplayFlags(self, roomGridIndex, displayFlags, updateVisibility)
    if updateVisibility == nil then
        updateVisibility = true
    end
    if roomGridIndex == nil then
        roomGridIndex = getRoomGridIndex(nil)
    end
    if MinimapAPI == nil then
        local roomDescriptor = getRoomDescriptor(nil, roomGridIndex)
        roomDescriptor.DisplayFlags = displayFlags
        if updateVisibility then
            local level = game:GetLevel()
            level:UpdateVisibility()
        end
    else
        local minimapAPIRoomDescriptor = MinimapAPI:GetRoomByIdx(roomGridIndex)
        assertDefined(
            nil,
            minimapAPIRoomDescriptor,
            "Failed to get the MinimapAPI room descriptor for the room at grid index: " .. tostring(roomGridIndex)
        )
        minimapAPIRoomDescriptor:SetDisplayFlags(displayFlags)
    end
end
--- Helper function to add a `DisplayFlag` to a particular room's minimap display flags (e.g. whether
-- it is visible and so on).
-- 
-- This function automatically accounts for if MinimapAPI is being used.
-- 
-- @param roomGridIndex Set to undefined to use the current room index.
-- @param displayFlag The `DisplayFlag` to set. (See the `DisplayFlag` enum.)
-- @param updateVisibility Optional. Whether to call the `Level.UpdateVisibility` method in order to
-- make the changes immediately visible. Default is true.
function ____exports.addRoomDisplayFlag(self, roomGridIndex, displayFlag, updateVisibility)
    if updateVisibility == nil then
        updateVisibility = true
    end
    local oldDisplayFlags = ____exports.getRoomDisplayFlags(nil, roomGridIndex)
    local newDisplayFlags = addFlag(nil, oldDisplayFlags, displayFlag)
    ____exports.setRoomDisplayFlags(nil, roomGridIndex, newDisplayFlags, updateVisibility)
end
--- Helper function to set the value of `DisplayFlag` for every room on the floor to 0.
-- 
-- This function automatically accounts for if MinimapAPI is being used.
-- 
-- This function automatically calls the `Level.UpdateVisibility` after setting the flags so that
-- the changes will be immediately visible.
function ____exports.clearFloorDisplayFlags(self)
    ____exports.setAllDisplayFlags(nil, DisplayFlagZero)
end
--- Helper function to set the value of `DisplayFlag` for a room 0.
-- 
-- This function automatically accounts for if MinimapAPI is being used.
-- 
-- This function automatically calls the `Level.UpdateVisibility` after setting the flags so that
-- the changes will be immediately visible.
-- 
-- Note that if you clear the display flags of a room but then the player travels to the room (or an
-- adjacent room), the room will appear on the minimap again. If you want to permanently hide the
-- room even in this circumstance, use the `hideRoomOnMinimap` helper function instead.
function ____exports.clearRoomDisplayFlags(self, roomGridIndex)
    ____exports.setRoomDisplayFlags(nil, roomGridIndex, DisplayFlagZero)
end
--- Helper function to get the minimap `DisplayFlag` value for every room on the floor. Returns a map
-- that is indexed by the room's safe grid index.
-- 
-- This function automatically accounts for if MinimapAPI is being used.
-- 
-- @param minimapAPI Optional. If MinimapAPI should be used, if present. Default is true.
function ____exports.getFloorDisplayFlags(self, minimapAPI)
    if minimapAPI == nil then
        minimapAPI = true
    end
    local displayFlagsMap = __TS__New(Map)
    for ____, roomDescriptor in ipairs(getRoomsInsideGrid(nil)) do
        local roomGridIndex = roomDescriptor.SafeGridIndex
        local displayFlags = ____exports.getRoomDisplayFlags(nil, roomGridIndex, minimapAPI)
        displayFlagsMap:set(roomGridIndex, displayFlags)
    end
    return displayFlagsMap
end
--- Helper function to hide a specific room on the minimap.
-- 
-- If you want the room to be permanently hidden, you must to call this function on every new room.
-- This is because if the player enters into the room or walks into an adjacent room, the room will
-- reappear on the minimap.
-- 
-- This function automatically accounts for if MinimapAPI is being used.
function ____exports.hideRoomOnMinimap(self, roomGridIndex)
    ____exports.clearRoomDisplayFlags(nil, roomGridIndex)
    if MinimapAPI ~= nil then
        local minimapAPIRoomDescriptor = MinimapAPI:GetRoomByIdx(roomGridIndex)
        assertDefined(
            nil,
            minimapAPIRoomDescriptor,
            "Failed to get the MinimapAPI room descriptor for the room at grid index: " .. tostring(roomGridIndex)
        )
        minimapAPIRoomDescriptor.Hidden = true
    end
end
--- Helper function to check if a given room is visible on the minimap.
-- 
-- @param roomGridIndexOrRoomDescriptor The room to check.
-- @param minimapAPI Optional. Whether MinimapAPI should be used, if present. Default is true.
function ____exports.isRoomVisible(self, roomGridIndexOrRoomDescriptor, minimapAPI)
    if minimapAPI == nil then
        minimapAPI = true
    end
    local roomGridIndex = isInteger(nil, roomGridIndexOrRoomDescriptor) and roomGridIndexOrRoomDescriptor or roomGridIndexOrRoomDescriptor.SafeGridIndex
    local roomDisplayFlags = ____exports.getRoomDisplayFlags(nil, roomGridIndex, minimapAPI)
    return roomDisplayFlags ~= DisplayFlagZero
end
--- Helper function to set the minimap `DisplayFlag` value for multiple rooms at once.
-- 
-- This function automatically calls the `Level.UpdateVisibility` after setting the flags so that
-- the changes will be immediately visible.
-- 
-- This function automatically accounts for if MinimapAPI is being used.
-- 
-- @param displayFlagsMap A map of the display flags that is indexed by the room's safe grid index.
function ____exports.setFloorDisplayFlags(self, displayFlagsMap)
    for ____, ____value in __TS__Iterator(displayFlagsMap) do
        local roomGridIndex = ____value[1]
        local displayFlags = ____value[2]
        ____exports.setRoomDisplayFlags(nil, roomGridIndex, displayFlags, false)
    end
    if MinimapAPI == nil then
        local level = game:GetLevel()
        level:UpdateVisibility()
    end
end
return ____exports
 end,
["functions.modFeatures"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
--- Helper function to instantiate an array of mod features all at once. Use this function if your
-- mod uses the pattern of expressing mod features as `ModFeature` classes.
-- 
-- If your feature classes have `v` variables, then this function will successfully register them
-- with the save data manager.
-- 
-- For example:
-- 
-- ```ts
-- const MOD_FEATURES = [
--   MyFeature1,
--   MyFeature2,
--   MyFeature3,
-- ] as const;
-- initModFeatures(mod, MOD_FEATURES);
-- ```
-- 
-- @param mod The upgraded mod to use.
-- @param modFeatures An array of the feature classes that you have in your mod.
-- @param init Optional. Whether to automatically add the callbacks on the feature. Defaults to
-- true.
-- @returns An array of the instantiated features in the same order that the constructors were
-- passed in. (In most cases, you probably won't need the returned array.)
function ____exports.initModFeatures(self, mod, modFeatures, init)
    if init == nil then
        init = true
    end
    local instantiatedModFeatures = {}
    for ____, modFeature in ipairs(modFeatures) do
        local instantiatedModFeature = __TS__New(modFeature, mod, false)
        instantiatedModFeature:init(init)
        instantiatedModFeatures[#instantiatedModFeatures + 1] = instantiatedModFeature
    end
    return instantiatedModFeatures
end
return ____exports
 end,
["functions.newArray"] = function(...) 
local ____exports = {}
local ____deepCopy = require("functions.deepCopy")
local deepCopy = ____deepCopy.deepCopy
local ____utils = require("functions.utils")
local ____repeat = ____utils["repeat"]
--- Initializes an array with all of the elements containing the specified default value.
-- 
-- The provided default value will be copied with the `deepCopy` function before adding it to the
-- new array. Thus, you can initialize an array of arrays, or an array of maps, and so on. (If the
-- `deepCopy` function was not used, then all of the array elements would just be references to the
-- same underlying data structure.)
-- 
-- For example:
-- 
-- ```ts
-- const arrayWithZeroes = newArray(0, 10); // Has 10 elements of 0.
-- const arrayWithArrays = newArray([0], 20); // Has 20 elements of an array with a 0 in it.
-- ```
function ____exports.newArray(self, defaultValue, size)
    local array = {}
    ____repeat(
        nil,
        size,
        function()
            local copy = deepCopy(nil, defaultValue)
            array[#array + 1] = copy
        end
    )
    return array
end
return ____exports
 end,
["functions.npcDataStructures"] = function(...) 
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local Set = ____lualib.Set
local ____exports = {}
--- Helper function to make using maps with an index of `PtrHash` easier. Use this instead of the
-- `Map.set` method if you have a map of this type.
-- 
-- For example:
-- 
-- ```ts
-- const v = {
--   run: {
--     npcsSpeedBoost: new Map<PtrHash, int>(),
--   },
-- };
-- 
-- function incrementSpeedBoost(npc: EntityNPC) {
--   const oldSpeedBoost = mapGetNPC(v.run.npcsSpeedBoost, npc);
--   const newSpeedBoost = oldSpeedBoost + 0.1;
--   mapSetNPC(v.run.npcsSpeedBoost, npc);
-- }
-- ```
function ____exports.mapSetNPC(self, map, npc, value)
    local ptrHash = GetPtrHash(npc)
    map:set(ptrHash, value)
end
--- Helper function to make using default maps with an index of `PtrHash` easier. Use this instead of
-- the `DefaultMap.getAndSetDefault` method if you have a default map of this type.
-- 
-- For example:
-- 
-- ```ts
-- const v = {
--   run: {
--     npcsSpeedBoost: new DefaultMap<PtrHash, int>(0),
--   },
-- };
-- 
-- function npcUpdate(npc: EntityNPC) {
--   const speedBoost = defaultMapGetNPC(v.run.npcsSpeedBoost, npc);
--   // Do something with the speed boost.
-- }
-- ```
-- 
-- Note that not all NPCs should be stored in a map with a `PtrHash` as an index, so only use this
-- in the situations where that would be okay. (For example, Dark Esau should never be stored in a
-- map like this, because the scope of `PtrHash` is per room and Dark Esau is persistent between
-- rooms.)
function ____exports.defaultMapGetNPC(self, map, npc, ...)
    local ptrHash = GetPtrHash(npc)
    return map:getAndSetDefault(ptrHash, ...)
end
--- Helper function to make using maps with an index of `PtrHash` easier. Use this instead of the
-- `Map.set` method if you have a map of this type.
-- 
-- Since `Map` and `DefaultMap` set values in the same way, this function is simply an alias for the
-- `mapSetNPC` helper function.
function ____exports.defaultMapSetNPC(self, map, npc, value)
    ____exports.mapSetNPC(nil, map, npc, value)
end
--- Helper function to make using maps with an type of `PtrHash` easier. Use this instead of the
-- `Map.delete` method if you have a set of this type.
function ____exports.mapDeleteNPC(self, map, npc)
    local ptrHash = GetPtrHash(npc)
    return map:delete(ptrHash)
end
--- Helper function to make using maps with an index of `PtrHash` easier. Use this instead of the
-- `Map.get` method if you have a map of this type.
-- 
-- For example:
-- 
-- ```ts
-- const v = {
--   run: {
--     npcsSpeedBoost: new Map<PtrHash, int>(),
--   },
-- };
-- 
-- function incrementSpeedBoost(npc: EntityNPC) {
--   const oldSpeedBoost = mapGetNPC(v.run.npcsSpeedBoost, npc);
--   const newSpeedBoost = oldSpeedBoost + 0.1;
--   mapSetNPC(v.run.npcsSpeedBoost, npc);
-- }
-- ```
function ____exports.mapGetNPC(self, map, npc)
    local ptrHash = GetPtrHash(npc)
    return map:get(ptrHash)
end
--- Helper function to make using maps with an index of `PtrHash` easier. Use this instead of the
-- `Map.has` method if you have a map of this type.
function ____exports.mapHasNPC(self, map, npc)
    local ptrHash = GetPtrHash(npc)
    return map:has(ptrHash)
end
--- Helper function to make using sets with an type of `PtrHash` easier. Use this instead of the
-- `Set.add` method if you have a set of this type.
function ____exports.setAddNPC(self, set, npc)
    local ptrHash = GetPtrHash(npc)
    set:add(ptrHash)
end
--- Helper function to make using sets with an type of `PtrHash` easier. Use this instead of the
-- `Set.delete` method if you have a set of this type.
function ____exports.setDeleteNPC(self, set, npc)
    local ptrHash = GetPtrHash(npc)
    return set:delete(ptrHash)
end
--- Helper function to make using sets with an type of `PtrHash` easier. Use this instead of the
-- `Set.has` method if you have a set of this type.
function ____exports.setHasNPC(self, set, npc)
    local ptrHash = GetPtrHash(npc)
    return set:has(ptrHash)
end
return ____exports
 end,
["functions.playerTrinkets"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArraySome = ____lualib.__TS__ArraySome
local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
local TrinketSlot = ____isaac_2Dtypescript_2Ddefinitions.TrinketSlot
local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local TRINKET_SLOT_VALUES = ____cachedEnumValues.TRINKET_SLOT_VALUES
local ____cachedClasses = require("core.cachedClasses")
local itemConfig = ____cachedClasses.itemConfig
local ____playerIndex = require("functions.playerIndex")
local getAllPlayers = ____playerIndex.getAllPlayers
local getPlayers = ____playerIndex.getPlayers
local ____players = require("functions.players")
local isCharacter = ____players.isCharacter
function ____exports.addTrinketCostume(self, player, trinketType)
    local itemConfigTrinket = itemConfig:GetTrinket(trinketType)
    if itemConfigTrinket == nil then
        return
    end
    player:AddCostume(itemConfigTrinket, false)
end
--- Helper function to check to see if any player has a particular trinket.
-- 
-- @param trinketType The trinket type to check for.
-- @param ignoreModifiers If set to true, only counts trinkets the player actually holds and ignores
-- effects granted by other items. Default is false.
function ____exports.anyPlayerHasTrinket(self, trinketType, ignoreModifiers)
    local players = getAllPlayers(nil)
    return __TS__ArraySome(
        players,
        function(____, player) return player:HasTrinket(trinketType, ignoreModifiers) end
    )
end
--- Returns the slot number corresponding to where a trinket can be safely inserted.
-- 
-- For example:
-- 
-- ```ts
-- const player = Isaac.GetPlayer();
-- const trinketSlot = getOpenTrinketSlotNum(player);
-- if (trinketSlot !== undefined) {
--   // They have one or more open trinket slots
--   player.AddTrinket(TrinketType.SWALLOWED_PENNY);
-- }
-- ```
function ____exports.getOpenTrinketSlot(self, player)
    local maxTrinkets = player:GetMaxTrinkets()
    local trinketType1 = player:GetTrinket(TrinketSlot.SLOT_1)
    local trinketType2 = player:GetTrinket(TrinketSlot.SLOT_2)
    if maxTrinkets == 1 then
        return trinketType1 == TrinketType.NULL and 0 or nil
    end
    if maxTrinkets == 2 then
        if trinketType1 == TrinketType.NULL then
            return 0
        end
        return trinketType2 == TrinketType.NULL and 1 or nil
    end
    error("The player has an unknown number of trinket slots: " .. tostring(maxTrinkets))
end
--- Helper function to get all of the trinkets that the player is currently holding. This will not
-- include any smelted trinkets.
function ____exports.getPlayerTrinkets(self, player)
    local trinketTypes = {}
    for ____, trinketSlot in ipairs(TRINKET_SLOT_VALUES) do
        local trinketType = player:GetTrinket(trinketSlot)
        if trinketType ~= TrinketType.NULL then
            trinketTypes[#trinketTypes + 1] = trinketType
        end
    end
    return trinketTypes
end
--- Helper function to get only the players that have a certain trinket.
-- 
-- This function is variadic, meaning that you can supply as many trinket types as you want to check
-- for. It only returns the players that have all of the trinkets.
function ____exports.getPlayersWithTrinket(self, ...)
    local trinketTypes = {...}
    local players = getPlayers(nil)
    return __TS__ArrayFilter(
        players,
        function(____, player) return __TS__ArrayEvery(
            trinketTypes,
            function(____, trinketType) return player:HasTrinket(trinketType) end
        ) end
    )
end
--- Helper function to check to see if the player is holding one or more trinkets.
function ____exports.hasAnyTrinket(self, player)
    local playerTrinketTypes = __TS__ArrayMap(
        TRINKET_SLOT_VALUES,
        function(____, trinketSlot) return player:GetTrinket(trinketSlot) end
    )
    return __TS__ArraySome(
        playerTrinketTypes,
        function(____, trinketType) return trinketType ~= TrinketType.NULL end
    )
end
--- Returns whether the player can hold an additional trinket, beyond what they are currently
-- carrying. This takes into account items that modify the max number of trinkets, like Mom's Purse.
-- 
-- If the player is the Tainted Soul, this always returns false, since that character cannot pick up
-- items. (Only Tainted Forgotten can pick up items.)
function ____exports.hasOpenTrinketSlot(self, player)
    if isCharacter(nil, player, PlayerType.SOUL_B) then
        return false
    end
    local openTrinketSlot = ____exports.getOpenTrinketSlot(nil, player)
    return openTrinketSlot ~= nil
end
--- Helper function to check to see if a player has one or more trinkets.
-- 
-- This function is variadic, meaning that you can supply as many trinket types as you want to check
-- for. Returns true if the player has any of the supplied trinket types.
-- 
-- This function always passes `false` to the `ignoreModifiers` argument.
function ____exports.hasTrinket(self, player, ...)
    local trinketTypes = {...}
    return __TS__ArraySome(
        trinketTypes,
        function(____, trinketType) return player:HasTrinket(trinketType) end
    )
end
--- Helper function to remove all of the held trinkets from a player.
-- 
-- This will not remove any smelted trinkets, unless the player happens to also be holding a trinket
-- that they have smelted. (In that case, both the held and the smelted trinket will be removed.)
function ____exports.removeAllPlayerTrinkets(self, player)
    for ____, trinketSlot in ipairs(TRINKET_SLOT_VALUES) do
        do
            local trinketType = player:GetTrinket(trinketSlot)
            if trinketType == TrinketType.NULL then
                goto __continue25
            end
            local alreadyHasTrinket
            repeat
                do
                    player:TryRemoveTrinket(trinketType)
                    alreadyHasTrinket = player:HasTrinket(trinketType)
                end
            until not alreadyHasTrinket
        end
        ::__continue25::
    end
end
--- Helper function to remove a trinket costume from a player. Use this helper function to avoid
-- having to request the trinket from the item config.
function ____exports.removeTrinketCostume(self, player, trinketType)
    local itemConfigTrinket = itemConfig:GetTrinket(trinketType)
    if itemConfigTrinket == nil then
        return
    end
    player:RemoveCostume(itemConfigTrinket)
end
return ____exports
 end,
["functions.pressurePlate"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PressurePlateState = ____isaac_2Dtypescript_2Ddefinitions.PressurePlateState
local PressurePlateVariant = ____isaac_2Dtypescript_2Ddefinitions.PressurePlateVariant
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____gridEntitiesSpecific = require("functions.gridEntitiesSpecific")
local getPressurePlates = ____gridEntitiesSpecific.getPressurePlates
--- Helper function to check if all of the pressure plates in the room are pushed.
-- 
-- In this context, "pressure plates" refers to the grid entities that you have to press down in
-- order for the room to be cleared. This function ignores other types of pressure plates, such as
-- the ones that you press to get a reward, the ones that you press to start a Greed Mode wave, and
-- so on.
-- 
-- Returns true if there are no pressure plates in the room.
function ____exports.isAllPressurePlatesPushed(self)
    local room = game:GetRoom()
    local hasPressurePlates = room:HasTriggerPressurePlates()
    if not hasPressurePlates then
        return true
    end
    local pressurePlates = getPressurePlates(nil, PressurePlateVariant.PRESSURE_PLATE)
    return __TS__ArrayEvery(
        pressurePlates,
        function(____, pressurePlate) return pressurePlate.State == PressurePlateState.PRESSURE_PLATE_PRESSED end
    )
end
return ____exports
 end,
["functions.seeds"] = function(...) 
local ____exports = {}
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local ____rng = require("functions.rng")
local newRNG = ____rng.newRNG
--- Alias for the `Seeds.GetStartSeedString` method.
function ____exports.getStartSeedString(self)
    local seeds = game:GetSeeds()
    return seeds:GetStartSeedString()
end
--- Helper function to get the next seed value.
-- 
-- This function is useful when you are working with seed values directly over RNG objects.
function ____exports.nextSeed(self, seed)
    local rng = newRNG(nil, seed)
    rng:Next()
    return rng:GetSeed()
end
return ____exports
 end,
["objects.transformationNames"] = function(...) 
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerForm = ____isaac_2Dtypescript_2Ddefinitions.PlayerForm
____exports.TRANSFORMATION_NAMES = {
    [PlayerForm.GUPPY] = "Guppy",
    [PlayerForm.BEELZEBUB] = "Beelzebub",
    [PlayerForm.FUN_GUY] = "Fun Guy",
    [PlayerForm.SERAPHIM] = "Seraphim",
    [PlayerForm.BOB] = "Bob",
    [PlayerForm.SPUN] = "Spun",
    [PlayerForm.YES_MOTHER] = "Yes Mother?",
    [PlayerForm.CONJOINED] = "Conjoined",
    [PlayerForm.LEVIATHAN] = "Leviathan",
    [PlayerForm.OH_CRAP] = "Oh Crap",
    [PlayerForm.BOOKWORM] = "Bookworm",
    [PlayerForm.ADULT] = "Adult",
    [PlayerForm.SPIDER_BABY] = "Spider Baby",
    [PlayerForm.STOMPY] = "Stompy"
}
return ____exports
 end,
["functions.transformations"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local Set = ____lualib.Set
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local ItemConfigTag = ____isaac_2Dtypescript_2Ddefinitions.ItemConfigTag
local PlayerForm = ____isaac_2Dtypescript_2Ddefinitions.PlayerForm
local ____cachedEnumValues = require("arrays.cachedEnumValues")
local PLAYER_FORM_VALUES = ____cachedEnumValues.PLAYER_FORM_VALUES
local ____transformationNames = require("objects.transformationNames")
local TRANSFORMATION_NAMES = ____transformationNames.TRANSFORMATION_NAMES
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
local ____collectibles = require("functions.collectibles")
local getCollectibleTags = ____collectibles.getCollectibleTags
local ____flag = require("functions.flag")
local hasFlag = ____flag.hasFlag
local TRANSFORMATION_TO_TAG_MAP = __TS__New(ReadonlyMap, {
    {PlayerForm.GUPPY, ItemConfigTag.GUPPY},
    {PlayerForm.BEELZEBUB, ItemConfigTag.FLY},
    {PlayerForm.FUN_GUY, ItemConfigTag.MUSHROOM},
    {PlayerForm.SERAPHIM, ItemConfigTag.ANGEL},
    {PlayerForm.BOB, ItemConfigTag.BOB},
    {PlayerForm.SPUN, ItemConfigTag.SYRINGE},
    {PlayerForm.YES_MOTHER, ItemConfigTag.MOM},
    {PlayerForm.CONJOINED, ItemConfigTag.BABY},
    {PlayerForm.LEVIATHAN, ItemConfigTag.DEVIL},
    {PlayerForm.OH_CRAP, ItemConfigTag.POOP},
    {PlayerForm.BOOKWORM, ItemConfigTag.BOOK},
    {PlayerForm.SPIDER_BABY, ItemConfigTag.SPIDER}
})
local TRANSFORMATIONS_THAT_GRANT_FLYING = __TS__New(ReadonlySet, {PlayerForm.GUPPY, PlayerForm.BEELZEBUB, PlayerForm.SERAPHIM, PlayerForm.LEVIATHAN})
--- Returns a set of the player's current transformations.
function ____exports.getPlayerTransformations(self, player)
    local transformations = __TS__New(Set)
    for ____, playerForm in ipairs(PLAYER_FORM_VALUES) do
        if player:HasPlayerForm(playerForm) then
            transformations:add(playerForm)
        end
    end
    return transformations
end
--- Helper function to get a transformation name from a PlayerForm enum.
-- 
-- For example:
-- 
-- ```ts
-- const transformationName = getTransformationName(PlayerForm.LORD_OF_THE_FLIES);
-- // transformationName is "Beelzebub"
-- ```
function ____exports.getTransformationName(self, playerForm)
    return TRANSFORMATION_NAMES[playerForm]
end
--- Returns a set containing all of the transformations that the given collectible types contribute
-- towards.
function ____exports.getTransformationsForCollectibleType(self, collectibleType)
    local itemConfigTags = getCollectibleTags(nil, collectibleType)
    local transformationSet = __TS__New(Set)
    for ____, playerForm in ipairs(PLAYER_FORM_VALUES) do
        do
            local itemConfigTag = TRANSFORMATION_TO_TAG_MAP:get(playerForm)
            if itemConfigTag == nil then
                goto __continue8
            end
            if hasFlag(nil, itemConfigTags, itemConfigTag) then
                transformationSet:add(playerForm)
            end
        end
        ::__continue8::
    end
    return transformationSet
end
function ____exports.hasFlyingTransformation(self, player)
    for ____, playerForm in __TS__Iterator(TRANSFORMATIONS_THAT_GRANT_FLYING) do
        if player:HasPlayerForm(playerForm) then
            return true
        end
    end
    return false
end
function ____exports.isTransformationFlying(self, playerForm)
    return TRANSFORMATIONS_THAT_GRANT_FLYING:has(playerForm)
end
return ____exports
 end,
["maps.transformationNameToPlayerFormMap"] = function(...) 
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
local PlayerForm = ____isaac_2Dtypescript_2Ddefinitions.PlayerForm
local ____ReadonlyMap = require("types.ReadonlyMap")
local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
--- Maps transformation names to the values of the `PlayerForm` enum.
____exports.TRANSFORMATION_NAME_TO_PLAYER_FORM_MAP = __TS__New(ReadonlyMap, {
    {"guppy", PlayerForm.GUPPY},
    {"cat", PlayerForm.GUPPY},
    {"beelzebub", PlayerForm.BEELZEBUB},
    {"fly", PlayerForm.BEELZEBUB},
    {"funGuy", PlayerForm.FUN_GUY},
    {"mushroom", PlayerForm.FUN_GUY},
    {"seraphim", PlayerForm.SERAPHIM},
    {"angel", PlayerForm.SERAPHIM},
    {"bob", PlayerForm.BOB},
    {"poison", PlayerForm.BOB},
    {"spun", PlayerForm.SPUN},
    {"drugs", PlayerForm.SPUN},
    {"needles", PlayerForm.SPUN},
    {"yesMother", PlayerForm.YES_MOTHER},
    {"mother", PlayerForm.YES_MOTHER},
    {"mom", PlayerForm.YES_MOTHER},
    {"conjoined", PlayerForm.CONJOINED},
    {"triple", PlayerForm.CONJOINED},
    {"leviathan", PlayerForm.LEVIATHAN},
    {"devil", PlayerForm.LEVIATHAN},
    {"ohCrap", PlayerForm.OH_CRAP},
    {"crap", PlayerForm.OH_CRAP},
    {"poop", PlayerForm.OH_CRAP},
    {"bookWorm", PlayerForm.BOOKWORM},
    {"adult", PlayerForm.ADULT},
    {"spiderBaby", PlayerForm.SPIDER_BABY},
    {"stompy", PlayerForm.STOMPY}
})
return ____exports
 end,
["objects.colors"] = function(...) 
local ____exports = {}
--- A collection of common colors that can be reused.
-- 
-- Note that if you want to further modify these colors, you should copy them first with the
-- `copyColor` function.
-- 
-- The non-standard colors come from:
-- https://htmlcolorcodes.com/color-names/
____exports.COLORS = {
    Black = Color(0, 0, 0),
    Red = Color(1, 0, 0),
    Green = Color(0, 1, 0),
    Blue = Color(0, 0, 1),
    Yellow = Color(1, 1, 0),
    Cyan = Color(0, 1, 1),
    Magenta = Color(1, 0, 1),
    White = Color(1, 1, 1),
    Brown = Color(0.588, 0.294, 0),
    Gray = Color(0.5, 0.5, 0.5),
    Orange = Color(1, 0.647, 0),
    Purple = Color(0.5, 0, 0.5)
}
return ____exports
 end,
["objects.kColors"] = function(...) 
local ____exports = {}
--- A collection of common colors that can be reused.
-- 
-- Note that if you want to further modify these colors, you should copy them first with the
-- `copyColor` function.
-- 
-- The non-standard colors come from:
-- https://htmlcolorcodes.com/color-names/
____exports.K_COLORS = {
    Black = KColor(0, 0, 0, 1),
    Red = KColor(1, 0, 0, 1),
    Green = KColor(0, 1, 0, 1),
    Blue = KColor(0, 0, 1, 1),
    Yellow = KColor(1, 1, 0, 1),
    Cyan = KColor(0, 1, 1, 1),
    Magenta = KColor(1, 0, 1, 1),
    White = KColor(1, 1, 1, 1),
    Transparent = KColor(0, 0, 0, 0),
    Brown = KColor(0.588, 0.294, 0, 1),
    Gray = KColor(0.5, 0.5, 0.5, 1),
    Orange = KColor(1, 0.647, 0, 1),
    Purple = KColor(0.5, 0, 0.5, 1)
}
return ____exports
 end,
["types.AddSubtract"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.AllButLast"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.CompositionTypeSatisfiesEnum"] = function(...) 
local ____exports = {}
local ObjectiveType = {}
ObjectiveType.FOO = 0
ObjectiveType[ObjectiveType.FOO] = "FOO"
ObjectiveType.BAR = 1
ObjectiveType[ObjectiveType.BAR] = "BAR"
ObjectiveType.BAZ = 2
ObjectiveType[ObjectiveType.BAZ] = "BAZ"
return ____exports
 end,
["types.Decrement"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.NaturalNumbersLessThan"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.ERange"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.HasFunction"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.NaturalNumbersLessThanOrEqualTo"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.IRange"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.Increment"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.StartsWithLowercase"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.LowercaseKeys"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.StartsWithUppercase"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.Tuple"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.TupleKeys"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.TupleToUnion"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.TupleWithLengthBetween"] = function(...) 
local ____exports = {}
local zeroOneTwo = {}
local oneOneTwo = {"1"}
local twoOneTwo = {"1", "2"}
local threeOneTwo = {"1", "2", "3"}
return ____exports
 end,
["types.TupleWithMaxLength"] = function(...) 
local ____exports = {}
local zeroZero = {}
local oneZero = {"1"}
local zeroOne = {}
local oneOne = {"1"}
local twoOne = {"1", "2"}
local zeroTwo = {}
local oneTwo = {"1"}
local twoTwo = {"1", "2"}
local threeTwo = {"1", "2", "3"}
return ____exports
 end,
["types.UnionToIntersection"] = function(...) 
local ____exports = {}
return ____exports
 end,
["types.UppercaseKeys"] = function(...) 
local ____exports = {}
return ____exports
 end,
["index"] = function(...) 
local ____exports = {}
do
    local ____export = require("classes.DefaultMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("classes.ModFeature")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("classes.ModUpgraded")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.cachedClasses")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.constants")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.constantsFirstLast")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.constantsVanilla")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.upgradeMod")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.AmbushType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.CornerType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.HealthType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.ISCFeature")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.LadderSubTypeCustom")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.ModCallbackCustom")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.MysteriousPaperEffect")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.PlayerStat")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.PocketItemType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.RockAltType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.SaveDataKey")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.SerializationType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.SlotDestructionType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.ambush")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.array")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.arrayLua")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.benchmark")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.bitSet128")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.bitwise")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.bombs")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.bosses")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.cards")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.challenges")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.characters")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.charge")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.chargeBar")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.collectibleTag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.collectibles")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.color")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.console")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.curses")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.debugFunctions")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.decorators")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.deepCopy")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.deepCopyTests")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.dimensions")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.direction")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.doors")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.easing")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.effects")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.emptyRoom")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.entities")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.entitiesSpecific")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.entityTypes")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.enums")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.external")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.familiars")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.flag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.frames")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.globals")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.gridEntities")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.gridEntitiesSpecific")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.gridIndex")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.hash")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.hex")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.input")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.isaacAPIClass")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.itemPool")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.jsonHelpers")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.jsonRoom")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.kColor")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.language")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.level")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.levelGrid")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.log")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.logEntities")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.logMisc")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.map")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.math")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.merge")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.mergeTests")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.minimap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.modFeatures")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.newArray")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.nextStage")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.npcDataStructures")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.npcs")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pickupVariants")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pickups")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pickupsSpecific")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pills")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerCenter")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerCollectibles")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerDataStructures")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerEffects")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerHealth")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerIndex")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerTrinkets")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.players")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pocketItems")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.positionVelocity")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pressurePlate")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.projectiles")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.random")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.readOnly")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.render")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.revive")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.rng")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.rockAlt")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomData")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomGrid")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomShape")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomShapeWalls")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomTransition")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.rooms")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.run")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.seeds")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.serialization")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.set")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.slots")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.sort")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.sound")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.spawnCollectible")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.sprites")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.stage")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.stats")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.storyBosses")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.string")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.table")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.tears")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.transformations")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.trinketGive")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.trinkets")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.tstlClass")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.types")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.ui")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.utils")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.vector")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.versusScreen")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.weighted")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.cardNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.characterNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.collectibleNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.pillNameToEffectMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.roomNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.transformationNameToPlayerFormMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.trinketNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("objects.colors")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("objects.kColors")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("types.PickingUpItem")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("types.ReadonlyMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("types.ReadonlySet")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
return ____exports
 end,
["indexLua"] = function(...) 
local ____exports = {}
do
    local ____export = require("classes.DefaultMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("classes.ModFeature")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("classes.ModUpgraded")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.cachedClasses")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.constants")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.constantsFirstLast")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.constantsVanilla")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("core.upgradeMod")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.AmbushType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.CornerType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.HealthType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.ISCFeature")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.LadderSubTypeCustom")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.ModCallbackCustom")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.MysteriousPaperEffect")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.PlayerStat")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.PocketItemType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.RockAltType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.SaveDataKey")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.SerializationType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("enums.SlotDestructionType")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.ambush")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.array")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.arrayLua")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.benchmark")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.bitSet128")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.bitwise")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.bombs")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.bosses")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.cards")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.challenges")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.characters")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.charge")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.chargeBar")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.collectibleTag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.collectibles")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.color")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.console")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.curses")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.debugFunctions")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.decorators")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.deepCopy")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.deepCopyTests")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.dimensions")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.direction")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.doors")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.easing")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.effects")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.emptyRoom")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.entities")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.entitiesSpecific")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.entityTypes")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.enums")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.external")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.familiars")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.flag")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.frames")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.globals")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.gridEntities")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.gridEntitiesSpecific")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.gridIndex")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.hash")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.hex")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.input")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.isaacAPIClass")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.itemPool")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.jsonHelpers")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.jsonRoom")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.kColor")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.language")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.level")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.levelGrid")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.log")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.logEntities")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.logMisc")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.map")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.math")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.merge")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.mergeTests")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.minimap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.modFeatures")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.newArray")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.nextStage")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.npcDataStructures")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.npcs")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pickupVariants")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pickups")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pickupsSpecific")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pills")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerCenter")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerCollectibles")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerDataStructures")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerEffects")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerHealth")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerIndex")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.playerTrinkets")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.players")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pocketItems")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.positionVelocity")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.pressurePlate")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.projectiles")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.random")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.readOnly")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.render")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.revive")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.rng")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.rockAlt")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomData")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomGrid")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomShape")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomShapeWalls")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.roomTransition")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.rooms")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.run")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.seeds")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.serialization")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.set")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.slots")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.sort")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.sound")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.spawnCollectible")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.sprites")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.stage")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.stats")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.storyBosses")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.string")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.table")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.tears")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.transformations")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.trinketGive")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.trinkets")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.tstlClass")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.types")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.ui")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.utils")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.vector")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.versusScreen")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("functions.weighted")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.cardNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.characterNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.collectibleNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.pillNameToEffectMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.roomNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.transformationNameToPlayerFormMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("maps.trinketNameToTypeMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("objects.colors")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("objects.kColors")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("types.PickingUpItem")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("types.ReadonlyMap")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("types.ReadonlySet")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
do
    local ____export = require("lua_modules.isaac-typescript-definitions.dist.index")
    for ____exportKey, ____exportValue in pairs(____export) do
        if ____exportKey ~= "default" then
            ____exports[____exportKey] = ____exportValue
        end
    end
end
return ____exports
 end,
}
return require("indexLua", ...)
