commit 582b925d4abb439abc3b506298381cdcd831d258 Author: Jill "oatmealine" Monoids Date: Wed Nov 3 07:34:38 2021 +0300 init commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..07d2252 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +out \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..6fab7f6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "isaac-typescript-definitions"] + path = isaac-typescript-definitions + url = https://github.com/IsaacScript/isaac-typescript-definitions diff --git a/index.js b/index.js new file mode 100644 index 0000000..e179703 --- /dev/null +++ b/index.js @@ -0,0 +1,152 @@ +const fs = require('fs/promises'); +const path = require('path'); +const { inspect } = require('util'); +const chalk = require('chalk'); + +const declarationsPath = path.resolve(__dirname, './isaac-typescript-definitions/typings/'); +const outPath = path.resolve(__dirname, './out/'); + +function transpile(parsed, indent, prefix) { + let global = false; + indent = indent || 0; + const type = parsed[0]; + const d = parsed[1]; + let n = '\n' + ' '.repeat(indent); // newline + switch (type) { + case 'namespace': + global = true; + case 'interface': + return `---@class ${d.name}\n${global ? '' : '__class_'}${d.name} = {}${n}${d.contents.map(c => transpile(c, indent, `${global ? '' : '__class_'}${d.name}`)).join(n)}\n`; + case 'function': + return `${d.arguments.map(p => `---@param ${p.name.replace('?', '')} ${p.type}${n}`).join('')}---@return ${d.returns}${n}function ${prefix ? prefix + ':' : ''}${d.name}(${d.arguments.map(a => a.name.replace('?', '')).join(', ')}) end`; + case 'const': + return `---@type ${d.type}${n}${prefix ? prefix + '.' : ''}${d.name} = nil`; + case 'enum': + return `${prefix ? prefix + '.' : ''}${d.name} = {${n} ${d.contents.map(c => `${c.name} = ${c.value}`).join(`,${n} `)}${n}}`; + } + + return ''; +} + +/** + * @param {string} code + */ +function parse(code) { + // console.log(code); + + // we're left with code containing "declare" statements + // other code will pass stuff in here recursively, but the declare doesnt _really_ matter + // were gonna end up with an ast of sorts anyways as a result, which we can then use instead of declares + + // sanitize stuff + code = code.split('\n').filter(c => !c.trim().startsWith('//')).join('\n'); + // remove /* */ style comments, for now + code = code.replace(/\/\*(.*?)(?=\*\/)/gs, ''); + + const elements = []; + + // look for interfaces + let interfaceFreeCode = code; + const interface = /interface (\w+) ?{([^}]*)}/g; + while ((match = interface.exec(code)) !== null) { + interfaceFreeCode = interfaceFreeCode.replace(match[0], ''); + elements.push(['interface', {name: match[1], contents: parse(match[2])}]); + } + code = interfaceFreeCode; + + // look for namespaces + let namespaceFreeCode = code; + const namespace = /namespace (\w+) ?{([^}]*)}/g; + while ((match = namespace.exec(code)) !== null) { + namespaceFreeCode = namespaceFreeCode.replace(match[0], ''); + elements.push(['namespace', {name: match[1], contents: parse(match[2])}]); + } + code = namespaceFreeCode; + + // look for functions + let functionFreeCode = code; + const functions = /(function)?\s(\w+)\s*\(([^;]*)\)(\s*:\s*([\w\[\]]+))?/g; // wow this sucks + while ((match = functions.exec(code)) !== null) { + functionFreeCode = functionFreeCode.replace(match[0], ''); + let arguments = match[3].split(',').map(s => { + const split = s.split(':').map(s => s.trim()); + return {type: split[1], name: split[0]} + }).filter(c => c.type && c.name); + elements.push(['function', {name: match[2], arguments: arguments, returns: match[5]}]); + } + code = functionFreeCode; + + // looks for enums + let enumFreeCode = code; + const enums = /enum (\w+) ?{([^}]*)}/g; + while ((match = enums.exec(code)) !== null) { + enumFreeCode = enumFreeCode.replace(match[0], ''); + elements.push(['enum', {name: match[1], contents: match[2].split(',').filter(c => c.split('=').length === 2).map(c => {return {name: c.split('=')[0].trim(), value: c.split('=')[1].trim()}})}]); + } + code = enumFreeCode; + + // looks for constants / properties + let constFreeCode = code; + const consts = /(\w+)\s*:\s*(\w+)/g; + while ((match = consts.exec(code)) !== null) { + constFreeCode = constFreeCode.replace(match[0], ''); + elements.push(['const', {name: match[1], type: match[2]}]); + } + code = constFreeCode; + + return elements; +} + +(async () => { + let timeParsing = 0; + let timeTotal = 0; + + try { + const d = await fs.lstat(outPath) + if (!d.isDirectory()) throw new Error(`${outPath} exists, and isn't a directory!`); + } catch(err) { + if (err.code === 'ENOENT') { + await fs.mkdir(outPath); + } else { + console.error(err); + process.exit(); + } + } + + const files = await fs.readdir(declarationsPath); + for (const f of files) { + const filePath = path.resolve(declarationsPath, f); + + const stat = await fs.lstat(filePath); + if (stat.isFile() && f) { + const file = await fs.readFile(filePath, 'utf8'); + + let startParse = Date.now(); + const parsed = parse(file); + console.log(` parsed ${chalk.magentaBright(parsed.length)} elements from ${chalk.cyanBright(f)}`); + timeParsing += Date.now() - startParse; + + if (parsed.length === 0) { + console.log(`${chalk.redBright('!')} no elements parsed, ${chalk.gray('not writing anything')}`); + continue; + } + + const transpiled = parsed.map(p => transpile(p)).join('\n').trim(); + console.log(` transpiled w/ final length of ${chalk.magentaBright(transpiled.length + ' chars')}`); + timeTotal += Date.now() - startParse; + + if (transpiled.length === 0) { + console.log(`${chalk.redBright('!')} nothing transpiled, ${chalk.gray('not writing anything')}`); + continue; + } + + //console.log(inspect(parsed, false, 10)); + const luaFilename = f.replace('.d.ts', '.lua'); + await fs.writeFile(path.resolve(outPath, luaFilename), '--[[\n' + inspect(parsed, false, null) + '\n]]\n\n' + transpiled); + console.log(` wrote ${chalk.cyanBright(luaFilename)}`); + } + } + + console.log(`\nfinished transpiling in ${chalk.magentaBright(timeTotal + 'ms')} ${chalk.gray(`(${Math.floor(timeParsing/timeTotal * 1000 + 0.5) / 10}% spent parsing)`)}`); + console.log(`check ${chalk.cyanBright(outPath)}`); +})(); \ No newline at end of file diff --git a/isaac-typescript-definitions/.cspell.json b/isaac-typescript-definitions/.cspell.json new file mode 100644 index 0000000..6aac549 --- /dev/null +++ b/isaac-typescript-definitions/.cspell.json @@ -0,0 +1,442 @@ +{ + "version": "0.2", + "words": [ + "abplus", + "actiontrigger", + "adderline", + "adjacentcoords", + "akeldama", + "algiz", + "allownonmain", + "allowwispspawn", + "anims", + "ansuz", + "apollyons", + "armyfly", + "ashpit", + "athame", + "attackfly", + "azazels", + "babys", + "backasswards", + "backsplit", + "baphomet", + "batterycharge", + "batterydischarge", + "beelzeblub", + "berkano", + "bffs", + "bigchest", + "bigspider", + "binky", + "blackhole", + "blackjudas", + "blackpowder", + "blankface", + "bloaty", + "blobby", + "blockbreak", + "bloodbank", + "bloodshoot", + "blub", + "bluebaby", + "bluebabys", + "bluefly", + "bluewomb", + "bnot", + "bogo", + "bombchest", + "bombdrop", + "bomberang", + "bombgagger", + "bombplaced", + "boomfly", + "bossdeath", + "bosspool", + "bossrush", + "brainer", + "brimtech", + "bshl", + "bshr", + "btmills", + "bulletpoint", + "bumbino", + "bumbo", + "burstsplit", + "buttlicker", + "cache", + "cadavra", + "cadetblue", + "cambion", + "camelcase", + "camillo", + "camo", + "cantripped", + "carbattery", + "cardpillused", + "cardtype", + "castleportcullis", + "chdir", + "childs", + "CHUBBER", + "clickety", + "colostomia", + "cooldown", + "coplayer", + "cpad", + "crackwave", + "crafter", + "crossfade", + "customvardata", + "cutscene", + "cutscenes", + "cyclopia", + "daddylonglegs", + "dagaz", + "datagrams", + "dataminer", + "decap", + "derp", + "devilroom", + "diah", + "dimedrop", + "dimepickup", + "dinf", + "dinga", + "dont", + "doorslot", + "doorslots", + "dople", + "doublepack", + "dpad", + "dukie", + "ecoli", + "ehwaz", + "eid's", + "entcoll", + "errorbuzz", + "eternalchest", + "eternalfly", + "evillaugh", + "evis", + "exlax", + "explosivo", + "explossion", + "eyepatch", + "fadein", + "fartigan", + "fartwave", + "fcuk", + "firedeath", + "firedelay", + "fistpound", + "fistuloid", + "flaminghopper", + "forestboss", + "forgotten's", + "friendball", + "gamekid", + "gaper", + "gaper's", + "gascan", + "gello", + "getpeername", + "getsockname", + "gettime", + "giga", + "goldenbomb", + "goldenkey", + "goldentroll", + "gooattach", + "goodeath", + "greedmode", + "gridcoll", + "grident", + "GRIDENTITY", + "gridpivot", + "gridsize", + "gridspawn", + "gridx", + "gridy", + "groundpound", + "grroowl", + "guppys", + "gurdy", + "gurg", + "gurglings", + "haemo", + "haemolacria", + "hagalaz", + "halfsec", + "hauntedchest", + "heartin", + "heartout", + "hellboss", + "hematemesis", + "hematemisis", + "hemoptysis", + "holyroom", + "holywater", + "horf", + "hornfel", + "humbleing", + "hushy", + "hydrobounce", + "hypercoagulation", + "icongroup", + "iconpositioncenter", + "iconpositions", + "isaacdies", + "isaacs", + "isaacscript", + "isdoor", + "itemactivated", + "itempools", + "itemrecharge", + "itemsdropped", + "itemstate", + "iwata", + "jera", + "joinmultiplayer", + "keybind", + "keyfamiliar", + "keypickup", + "killswitch", + "kineti", + "knockback", + "krampus", + "lachryphagy", + "largeiconpositioncenter", + "largeiconpositions", + "larryjr", + "laserring", + "lasershot", + "lavaball", + "lemegeton", + "leprocy", + "lerp", + "lightbolt", + "lockedchest", + "lokii", + "lokis", + "longlegs", + "lost's", + "luadebug", + "luamod", + "luarun", + "luckypenny", + "luckypickup", + "ludovico", + "maggotcharge", + "maggy", + "maggys", + "maxs", + "meatheadshoot", + "meconium", + "megablast", + "megachest", + "membrain", + "menuback", + "menuconfirm", + "menudown", + "menuexit", + "menuleft", + "menult", + "menuright", + "menurt", + "menutab", + "menuup", + "mercurius", + "migan", + "mimicchest", + "minecart", + "miniboss", + "minisaac", + "ministro", + "mockulus", + "modconfig", + "modder", + "momschest", + "monstro", + "monstros", + "montezumas", + "moter", + "mothershadow", + "mrmaw", + "mucormycosis", + "mult", + "necro", + "necronomicon", + "neptunus", + "nickeldrop", + "nickelpickup", + "noanim", + "noannouncer", + "nocostume", + "nokill", + "nopits", + "notchedaxe", + "npcs", + "nullitems", + "oldchest", + "onans", + "orangedots", + "ouroboros", + "outro", + "parasitoid", + "peffect", + "pennydrop", + "pennypickup", + "percs", + "perthro", + "pillcard", + "pilleffect", + "pitsonly", + "playdough", + "playerform", + "playerobjects", + "playeronly", + "playstation", + "pnpify", + "polty", + "polycephalus", + "poofer", + "poopitem", + "poot", + "pooter", + "popout", + "powerup", + "pupula", + "pushable", + "pyro", + "quadsplit", + "quakey", + "questionmark", + "raglich", + "ragling", + "receivefrom", + "redchest", + "reddots", + "redheart", + "redlightning", + "REDSKULL", + "reimplement", + "removeactive", + "respawn", + "respawning", + "robo", + "rockb", + "rockt", + "roid", + "roomshape", + "roomshapes", + "roomtypes", + "roundy", + "samsons", + "sarisia", + "satans", + "saturnus", + "savy", + "schythe", + "screem", + "secretroom", + "Semivisited", + "sendto", + "setpeername", + "settimeout", + "shakey", + "shellgame", + "shoop", + "shootdown", + "shootleft", + "shootright", + "shootup", + "shopitem", + "shotspeed", + "sidewave", + "skinball", + "slotspawn", + "soulhearts", + "specialrooms", + "spiderbaby", + "spikeball", + "spikedchest", + "spindown", + "spitty", + "spity", + "splurt", + "spritesheet", + "spritesheets", + "squeezy", + "stageapi", + "stagetype", + "starflash", + "steamapps", + "stickynickel", + "stompy", + "stonehead", + "stoneshoot", + "sucky", + "summonable", + "summonsound", + "sumptorium", + "superbum", + "supergreed", + "superholy", + "supertroll", + "suplex", + "synthoil", + "tammys", + "tarboy", + "tarotcard", + "tearcolor", + "tearflag", + "tearimpacts", + "technote", + "telepills", + "teleporter", + "teleporting", + "texel", + "textbox", + "theforgotten", + "thelost", + "thesoul", + "throwablebomb", + "thumbsdown", + "thumbsup", + "tinytoma", + "tmtrainer", + "treasurel", + "treasureroom", + "triachnid", + "trisagion", + "tropicamide", + "tstl", + "turdlet", + "turdling", + "turnbull", + "ultragreed", + "ultrapride", + "ultrasecret", + "unregisters", + "userdata", + "vasculitis", + "verysmall", + "vurp", + "waka", + "walkingboil", + "waterthrashing", + "whitepony", + "willo", + "wizoob", + "wofsauge's", + "woodenchest", + "woom", + "wotl", + "xxxxxxxxl", + "yarnpkg", + "ybab", + "zamiel", + "zamiell" + ] +} diff --git a/isaac-typescript-definitions/.eslintrc.js b/isaac-typescript-definitions/.eslintrc.js new file mode 100644 index 0000000..4846e29 --- /dev/null +++ b/isaac-typescript-definitions/.eslintrc.js @@ -0,0 +1,66 @@ +// This is the configuration file for ESLint, the TypeScript linter +// https://eslint.org/docs/user-guide/configuring +module.exports = { + extends: [ + // The linter base is the shared IsaacScript config + // https://github.com/IsaacScript/eslint-config-isaacscript/blob/main/base.js + "eslint-config-isaacscript/base", + ], + + parserOptions: { + // ESLint needs to know about the project's TypeScript settings in order for TypeScript-specific + // things to lint correctly + // We do not point this at "./tsconfig.json" because certain files (such at this file) should be + // linted but not included in the actual project output + project: "./tsconfig.eslint.json", + }, + + rules: { + // Documentation: https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/member-ordering.md + // We want class and interface definitions to be alphabetically ordered so that they match the + // Isaac documentation + "@typescript-eslint/member-ordering": [ + "warn", + { + default: { + order: "alphabetically", + }, + + interfaces: { + memberTypes: ["method", "field"], + order: "alphabetically", + }, + }, + ], + + // Documentation: + // https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/triple-slash-reference.md + // Defined at: + // https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/src/configs/recommended.ts + // ark120202, the author of TypeScriptToLua, recommends using triple-slash directives + "@typescript-eslint/triple-slash-reference": "off", + + // Documentation: + // https://github.com/eslint/eslint/blob/master/docs/rules/no-bitwise.md + // Defined at: + // https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/rules/style.js + // Isaac enums use bitwise operators (e.g. "EntityFlag") + "no-bitwise": "off", + + // Documentation: + // https://eslint.org/docs/rules/no-underscore-dangle + // Defined at: + // https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/rules/style.js + // We keep the Airbnb specification but allow calling functions that overload Lua operators: + // https://moddingofisaac.com/docs/class_vector.html + "no-underscore-dangle": [ + "error", + { + allow: ["__add", "__sub", "__mul", "__div", "__unm", "__len"], + allowAfterThis: false, + allowAfterSuper: false, + enforceInMethodNames: true, + }, + ], + }, +}; diff --git a/isaac-typescript-definitions/.gitattributes b/isaac-typescript-definitions/.gitattributes new file mode 100644 index 0000000..ecbafdd --- /dev/null +++ b/isaac-typescript-definitions/.gitattributes @@ -0,0 +1,2 @@ +# Prevent Windows systems from cloning this repository with "\r\n" line endings +core.autocrlf=false diff --git a/isaac-typescript-definitions/.github/workflows/ci.yml b/isaac-typescript-definitions/.github/workflows/ci.yml new file mode 100644 index 0000000..f8b6f21 --- /dev/null +++ b/isaac-typescript-definitions/.github/workflows/ci.yml @@ -0,0 +1,48 @@ +name: CI + +on: [push, pull_request] + +jobs: + build_and_lint: + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v2 + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + # The default version is 14 + # The ESLint config requires Node 16 to work properly + node-version: '16' + + - name: Retrieve the cached "node_modules" directory (if present) + uses: actions/cache@v2 + id: node-cache + with: + path: node_modules + key: node-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }} + + - name: Install dependencies (if the cached directory was not found) + if: steps.node-cache.outputs.cache-hit != 'true' + run: npm ci + + - name: Test to see if the project compiles + run: bash build.sh + + - name: Perform automated checks + run: bash lint.sh + + discord: + name: Discord Failure Notification + needs: [build_and_lint] + if: always() # This is needed to always run this job, even if the other jobs fail + runs-on: ubuntu-latest + steps: + - uses: technote-space/workflow-conclusion-action@v2 + - if: env.WORKFLOW_CONCLUSION != 'success' && env.WORKFLOW_CONCLUSION != 'cancelled' + uses: sarisia/actions-status-discord@v1 + with: + webhook: ${{ secrets.DISCORD_WEBHOOK }} + status: ${{ env.WORKFLOW_CONCLUSION }} + title: "" diff --git a/isaac-typescript-definitions/.gitignore b/isaac-typescript-definitions/.gitignore new file mode 100644 index 0000000..ac2b9e1 --- /dev/null +++ b/isaac-typescript-definitions/.gitignore @@ -0,0 +1,124 @@ +# ------------------------------ +# GitHub Node.gitignore template +# https://github.com/github/gitignore/blob/master/Node.gitignore +# ------------------------------ + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IDEA +.idea diff --git a/isaac-typescript-definitions/.prettierrc.js b/isaac-typescript-definitions/.prettierrc.js new file mode 100644 index 0000000..937e4be --- /dev/null +++ b/isaac-typescript-definitions/.prettierrc.js @@ -0,0 +1,16 @@ +// This is the configuration file for Prettier, the auto-formatter +// https://prettier.io/docs/en/configuration.html +module.exports = { + // https://prettier.io/docs/en/options.html#trailing-commas + // The default is "es5" - Trailing commas where valid in ES5 (objects, arrays, etc.) + // However, always having trailing commas is objectively better + // The Airbnb style guide agrees: + // https://github.com/airbnb/javascript#commas--dangling + // Prettier itself also acknowledges Nik Graf's blog in their official blog: + // https://prettier.io/blog/2020/03/21/2.0.0.html#change-default-value-for-trailingcomma-to-es5-6963httpsgithubcomprettierprettierpull6963-by-fiskerhttpsgithubcomfisker + // https://medium.com/@nikgraf/why-you-should-enforce-dangling-commas-for-multiline-statements-d034c98e36f8 + // Prettier will change the default in the future: + // https://github.com/prettier/prettier/issues/9369 + trailingComma: "all", + endOfLine: "lf", +}; diff --git a/isaac-typescript-definitions/.vscode/extensions.json b/isaac-typescript-definitions/.vscode/extensions.json new file mode 100644 index 0000000..be93c4f --- /dev/null +++ b/isaac-typescript-definitions/.vscode/extensions.json @@ -0,0 +1,10 @@ +// These are Visual Studio Code extensions that are intended to be used with this particular +// repository +// https://go.microsoft.com/fwlink/?LinkId=827846 +{ + "recommendations": [ + "dbaeumer.vscode-eslint", // The TypeScript linter + "streetsidesoftware.code-spell-checker", // A spell-checker extension based on cspell + "typescript-to-lua.vscode-typescript-to-lua", // The TypeScriptToLua extension + ] +} diff --git a/isaac-typescript-definitions/.vscode/settings.json b/isaac-typescript-definitions/.vscode/settings.json new file mode 100644 index 0000000..da08c6c --- /dev/null +++ b/isaac-typescript-definitions/.vscode/settings.json @@ -0,0 +1,43 @@ +// These are Visual Studio Code settings that should apply to this particular repository +{ + // ---------------- + // Vanilla settings + // ---------------- + + // This matches the Airbnb JavaScript style guide + "editor.rulers": [100], + "editor.tabSize": 2, + + // Linux line endings are used in this project + "files.eol": "\n", + + // Automatically removing all trailing whitespace when saving a file + "files.trimTrailingWhitespace": true, + + // Configure glob patterns for excluding files and folders in full text searches and quick open + "search.exclude": { + "**/dist/**/*.js": true, + }, + + // ----------------------- + // JavaScript / TypeScript + // ----------------------- + + // By default, VSCode will not automatically fill-in function arguments + "javascript.suggest.completeFunctionCalls": true, + "typescript.suggest.completeFunctionCalls": true, + + // Automatically run the formatter when a JavaScript or TypeScript file is saved + "[javascript]": { + "editor.codeActionsOnSave": [ + "source.fixAll.eslint", + ], + "editor.tabSize": 2, + }, + "[typescript]": { + "editor.codeActionsOnSave": [ + "source.fixAll.eslint", + ], + "editor.tabSize": 2, + }, +} diff --git a/isaac-typescript-definitions/LICENSE b/isaac-typescript-definitions/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/isaac-typescript-definitions/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/isaac-typescript-definitions/README.md b/isaac-typescript-definitions/README.md new file mode 100644 index 0000000..17bce27 --- /dev/null +++ b/isaac-typescript-definitions/README.md @@ -0,0 +1,9 @@ +[![npm version](https://img.shields.io/npm/v/isaac-typescript-definitions.svg)](https://www.npmjs.com/package/isaac-typescript-definitions) + +# isaac-typescript-definitions + +These are TypeScript definitions for [The Binding of Isaac: Repentance](https://store.steampowered.com/app/1426300/The_Binding_of_Isaac_Repentance/). + +[IsaacScript](https://isaacscript.github.io/) mods are automatically configured to use these definitions. + +
diff --git a/isaac-typescript-definitions/build.sh b/isaac-typescript-definitions/build.sh new file mode 100755 index 0000000..af7b21e --- /dev/null +++ b/isaac-typescript-definitions/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -e # Exit on any errors + +# Get the directory of this script +# https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +cd "$DIR" +npx tsc --noEmit diff --git a/isaac-typescript-definitions/lint.sh b/isaac-typescript-definitions/lint.sh new file mode 100755 index 0000000..baf78f0 --- /dev/null +++ b/isaac-typescript-definitions/lint.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +set -e # Exit on any errors + +# Get the directory of this script +# https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +# The latest version of some ESLint plugins require Node.js v16 +NODE_VERSION=$(node --version | cut -c 2-3) +if (($NODE_VERSION < 16)); then + echo "error: requires Node.js version 16" + exit 1 +fi + +cd "$DIR" + +# Step 1 - Use ESLint to lint the TypeScript +# Since all ESLint errors are set to warnings, +# we set max warnings to 0 so that warnings will fail in CI +npx eslint --max-warnings 0 typings + +# Step 2 - Spell check every file using cspell +# We use no-progress and no-summary because we want to only output errors +npx cspell --no-progress --no-summary "typings/**/*.ts" +npx cspell --no-progress --no-summary "scripts/**/*.py" + +echo "Success!" diff --git a/isaac-typescript-definitions/package-lock.json b/isaac-typescript-definitions/package-lock.json new file mode 100644 index 0000000..bad79a5 --- /dev/null +++ b/isaac-typescript-definitions/package-lock.json @@ -0,0 +1,7258 @@ +{ + "name": "isaac-typescript-definitions", + "version": "1.0.244", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "isaac-typescript-definitions", + "version": "1.0.244", + "license": "GPL-3.0", + "dependencies": { + "lua-types": "2.11.0" + }, + "devDependencies": { + "isaacscript-lint": "^1.0.63", + "typescript": "^4.4.4" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@cspell/cspell-bundled-dicts": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.12.3.tgz", + "integrity": "sha512-f3kyUHYxyGqNt2DTphpmP8hr38YTL48wr4Dq7pZDbqDjLkerq9T7ufX2CZ2OfydBEdIgduX2UXwiow7IfdwY/A==", + "dev": true, + "dependencies": { + "@cspell/dict-ada": "^1.1.2", + "@cspell/dict-aws": "^1.0.14", + "@cspell/dict-bash": "^1.0.15", + "@cspell/dict-companies": "^1.0.40", + "@cspell/dict-cpp": "^1.1.40", + "@cspell/dict-cryptocurrencies": "^1.0.10", + "@cspell/dict-csharp": "^1.0.11", + "@cspell/dict-css": "^1.0.12", + "@cspell/dict-django": "^1.0.26", + "@cspell/dict-dotnet": "^1.0.31", + "@cspell/dict-elixir": "^1.0.25", + "@cspell/dict-en_us": "^2.1.1", + "@cspell/dict-en-gb": "^1.1.33", + "@cspell/dict-filetypes": "^1.1.8", + "@cspell/dict-fonts": "^1.0.14", + "@cspell/dict-fullstack": "^1.0.38", + "@cspell/dict-golang": "^1.1.24", + "@cspell/dict-haskell": "^1.0.13", + "@cspell/dict-html": "^1.1.9", + "@cspell/dict-html-symbol-entities": "^1.0.23", + "@cspell/dict-java": "^1.0.23", + "@cspell/dict-latex": "^1.0.25", + "@cspell/dict-lorem-ipsum": "^1.0.22", + "@cspell/dict-lua": "^1.0.16", + "@cspell/dict-node": "^1.0.12", + "@cspell/dict-npm": "^1.0.16", + "@cspell/dict-php": "^1.0.24", + "@cspell/dict-powershell": "^1.0.18", + "@cspell/dict-public-licenses": "^1.0.3", + "@cspell/dict-python": "^2.0.3", + "@cspell/dict-ruby": "^1.0.14", + "@cspell/dict-rust": "^1.0.23", + "@cspell/dict-scala": "^1.0.21", + "@cspell/dict-software-terms": "^1.0.47", + "@cspell/dict-typescript": "^1.0.19" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@cspell/cspell-types": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-5.12.3.tgz", + "integrity": "sha512-4l43apk3QGMkpszirKjrRGWmzZVuCyvoa0+kgWCl28dviLKsVonop8liBJaBzjmZbdpe27IKpMrNtj0fOus+fw==", + "dev": true, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@cspell/dict-ada": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-1.1.2.tgz", + "integrity": "sha512-UDrcYcKIVyXDz5mInJabRNQpJoehjBFvja5W+GQyu9pGcx3BS3cAU8mWENstGR0Qc/iFTxB010qwF8F3cHA/aA==", + "dev": true + }, + "node_modules/@cspell/dict-aws": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-1.0.14.tgz", + "integrity": "sha512-K21CfB4ZpKYwwDQiPfic2zJA/uxkbsd4IQGejEvDAhE3z8wBs6g6BwwqdVO767M9NgZqc021yAVpr79N5pWe3w==", + "dev": true + }, + "node_modules/@cspell/dict-bash": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-1.0.15.tgz", + "integrity": "sha512-rY5Bq4RWTgJTioG8vqFbCmnalc/UEM+iBuAZBYvBfT3nU/6SN00Zjyvlh823ir2ODkUryT29CwRYwXcPnuM04w==", + "dev": true + }, + "node_modules/@cspell/dict-companies": { + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-1.0.40.tgz", + "integrity": "sha512-Aw07qiTroqSST2P5joSrC4uOA05zTXzI2wMb+me3q4Davv1D9sCkzXY0TGoC2vzhNv5ooemRi9KATGaBSdU1sw==", + "dev": true + }, + "node_modules/@cspell/dict-cpp": { + "version": "1.1.40", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-1.1.40.tgz", + "integrity": "sha512-sscfB3woNDNj60/yGXAdwNtIRWZ89y35xnIaJVDMk5TPMMpaDvuk0a34iOPIq0g4V+Y8e3RyAg71SH6ADwSjGw==", + "dev": true + }, + "node_modules/@cspell/dict-cryptocurrencies": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-1.0.10.tgz", + "integrity": "sha512-47ABvDJOkaST/rXipNMfNvneHUzASvmL6K/CbOFpYKfsd0x23Jc9k1yaOC7JAm82XSC/8a7+3Yu+Fk2jVJNnsA==", + "dev": true + }, + "node_modules/@cspell/dict-csharp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-1.0.11.tgz", + "integrity": "sha512-nub+ZCiTgmT87O+swI+FIAzNwaZPWUGckJU4GN402wBq420V+F4ZFqNV7dVALJrGaWH7LvADRtJxi6cZVHJKeA==", + "dev": true + }, + "node_modules/@cspell/dict-css": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-1.0.12.tgz", + "integrity": "sha512-K6yuxej7n454O7dwKG6lHacHrAOMZ0PhMEbmV6qH2JH0U4TtWXfBASYugHvXZCDDx1UObpiJP+3tQJiBqfGpHA==", + "dev": true + }, + "node_modules/@cspell/dict-django": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-1.0.26.tgz", + "integrity": "sha512-mn9bd7Et1L2zuibc08GVHTiD2Go3/hdjyX5KLukXDklBkq06r+tb0OtKtf1zKodtFDTIaYekGADhNhA6AnKLkg==", + "dev": true + }, + "node_modules/@cspell/dict-dotnet": { + "version": "1.0.31", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-1.0.31.tgz", + "integrity": "sha512-65yZTMcEdYkNx9sNs18OxcE0zfbZ5VsAZ0KgDvl/1YCkTomxr9vmtnrzFz4+vxfjV4eSuaL1SPRMZODaM7SSTg==", + "dev": true + }, + "node_modules/@cspell/dict-elixir": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-1.0.25.tgz", + "integrity": "sha512-ZmawoBYjM5k+8fNudRMkK+PpHjhyAFAZt2rUu1EGj2rbCvE3Fn2lhRbDjbreN7nWRvcLRTW+xuPXtKP11X0ahQ==", + "dev": true + }, + "node_modules/@cspell/dict-en_us": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-2.1.1.tgz", + "integrity": "sha512-7kHOqve9DVFsb1e/wKME3CZhj48zOqvXNaA1Cd82ZkaHf3aL7pUBx3cxI7Xopj/dcK1ZkhUKh+2nBxPIWIibNg==", + "dev": true + }, + "node_modules/@cspell/dict-en-gb": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz", + "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==", + "dev": true + }, + "node_modules/@cspell/dict-filetypes": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-1.1.8.tgz", + "integrity": "sha512-EllahNkhzvLWo0ptwu0l3oEeAJOQSUpZnDfnKRIh6mJVehuSovNHwA9vrdZ8jBUjuqcfaN2e7c32zN0D/qvWJQ==", + "dev": true + }, + "node_modules/@cspell/dict-fonts": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-1.0.14.tgz", + "integrity": "sha512-VhIX+FVYAnqQrOuoFEtya6+H72J82cIicz9QddgknsTqZQ3dvgp6lmVnsQXPM3EnzA8n1peTGpLDwHzT7ociLA==", + "dev": true + }, + "node_modules/@cspell/dict-fullstack": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-1.0.38.tgz", + "integrity": "sha512-4reajWiUxwWrSyZaWm9e15kaWzjYcZbzlB+CVcxE1+0NqdIoqlEESDhbnrAjKPSq+jspKtes7nQ1CdZEOj1gCA==", + "dev": true + }, + "node_modules/@cspell/dict-golang": { + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-1.1.24.tgz", + "integrity": "sha512-qq3Cjnx2U1jpeWAGJL1GL0ylEhUMqyaR36Xij6Y6Aq4bViCRp+HRRqk0x5/IHHbOrti45h3yy7ii1itRFo+Xkg==", + "dev": true + }, + "node_modules/@cspell/dict-haskell": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-1.0.13.tgz", + "integrity": "sha512-kvl8T84cnYRPpND/P3D86P6WRSqebsbk0FnMfy27zo15L5MLAb3d3MOiT1kW3vEWfQgzUD7uddX/vUiuroQ8TA==", + "dev": true + }, + "node_modules/@cspell/dict-html": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-1.1.9.tgz", + "integrity": "sha512-vvnYia0tyIS5Fdoz+gEQm77MGZZE66kOJjuNpIYyRHCXFAhWdYz3SmkRm6YKJSWSvuO+WBJYTKDvkOxSh3Fx/w==", + "dev": true + }, + "node_modules/@cspell/dict-html-symbol-entities": { + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-1.0.23.tgz", + "integrity": "sha512-PV0UBgcBFbBLf/m1wfkVMM8w96kvfHoiCGLWO6BR3Q9v70IXoE4ae0+T+f0CkxcEkacMqEQk/I7vuE9MzrjaNw==", + "dev": true + }, + "node_modules/@cspell/dict-java": { + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-1.0.23.tgz", + "integrity": "sha512-LcOg9srYLDoNGd8n3kbfDBlZD+LOC9IVcnFCdua1b/luCHNVmlgBx7e677qPu7olpMYOD5TQIVW2OmM1+/6MFA==", + "dev": true + }, + "node_modules/@cspell/dict-latex": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-1.0.25.tgz", + "integrity": "sha512-cEgg91Migqcp1SdVV7dUeMxbPDhxdNo6Fgq2eygAXQjIOFK520FFvh/qxyBvW90qdZbIRoU2AJpchyHfGuwZFA==", + "dev": true + }, + "node_modules/@cspell/dict-lorem-ipsum": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-1.0.22.tgz", + "integrity": "sha512-yqzspR+2ADeAGUxLTfZ4pXvPl7FmkENMRcGDECmddkOiuEwBCWMZdMP5fng9B0Q6j91hQ8w9CLvJKBz10TqNYg==", + "dev": true + }, + "node_modules/@cspell/dict-lua": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-1.0.16.tgz", + "integrity": "sha512-YiHDt8kmHJ8nSBy0tHzaxiuitYp+oJ66ffCYuFWTNB3//Y0SI4OGHU3omLsQVeXIfCeVrO4DrVvRDoCls9B5zQ==", + "dev": true + }, + "node_modules/@cspell/dict-node": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-1.0.12.tgz", + "integrity": "sha512-RPNn/7CSkflAWk0sbSoOkg0ORrgBARUjOW3QjB11KwV1gSu8f5W/ij/S50uIXtlrfoBLqd4OyE04jyON+g/Xfg==", + "dev": true + }, + "node_modules/@cspell/dict-npm": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-1.0.16.tgz", + "integrity": "sha512-RwkuZGcYBxL3Yux3cSG/IOWGlQ1e9HLCpHeyMtTVGYKAIkFAVUnGrz20l16/Q7zUG7IEktBz5O42kAozrEnqMQ==", + "dev": true + }, + "node_modules/@cspell/dict-php": { + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-1.0.24.tgz", + "integrity": "sha512-vHCqETX1idT9tN1plkxUFnXMIHjbbrNOINZh1PYSvVlBrOdahSaL/g6dOJZC5QTaaidoU4WXUlgnNb/7JN4Plg==", + "dev": true + }, + "node_modules/@cspell/dict-powershell": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-1.0.18.tgz", + "integrity": "sha512-LAfCJBy1hga8/KI/IpAg/GrnoP+b4SbNGdiXiXrejeZ7ZTVfj4qYsTCkZ2p7eYUu92FLyJT4jGex0fGZn/PtVw==", + "dev": true + }, + "node_modules/@cspell/dict-public-licenses": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-1.0.3.tgz", + "integrity": "sha512-sXjxOHJ9Q4rZvE1UbwpwJQ8EXO3fadKBjJIWmz0z+dZAbvTrmz5Ln1Ef9ruJvLPfwAps8m3TCV6Diz60RAQqHg==", + "dev": true + }, + "node_modules/@cspell/dict-python": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-2.0.3.tgz", + "integrity": "sha512-b15Dk/nDzeB5mbTSXx4RGKgmM9AW5BpaHyZoUZNUOdPfQbcd02hVblro/MXMw45SvQ3Wr/VFJx32skwuRkvFPg==", + "dev": true + }, + "node_modules/@cspell/dict-ruby": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-1.0.14.tgz", + "integrity": "sha512-XHBGN4U1y9rjRuqrCA+3yIm2TCdhwwHXpOEcWkNeyXm8K03yPnIrKFS+kap8GTTrLpfNDuFsrmkkQTa7ssXLRA==", + "dev": true + }, + "node_modules/@cspell/dict-rust": { + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-1.0.23.tgz", + "integrity": "sha512-lR4boDzs79YD6+30mmiSGAMMdwh7HTBAPUFSB0obR3Kidibfc3GZ+MHWZXay5dxZ4nBKM06vyjtanF9VJ8q1Iw==", + "dev": true + }, + "node_modules/@cspell/dict-scala": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-1.0.21.tgz", + "integrity": "sha512-5V/R7PRbbminTpPS3ywgdAalI9BHzcEjEj9ug4kWYvBIGwSnS7T6QCFCiu+e9LvEGUqQC+NHgLY4zs1NaBj2vA==", + "dev": true + }, + "node_modules/@cspell/dict-software-terms": { + "version": "1.0.47", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-1.0.47.tgz", + "integrity": "sha512-q7cPUaZ3KYtebHpUr/kQXEOIbtJbii069ubXE1eWHWnAYrJZOGFc0W4Sau0ZjeY7cdOXWeYZ3hzcW8XNtPkQrw==", + "dev": true + }, + "node_modules/@cspell/dict-typescript": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-1.0.19.tgz", + "integrity": "sha512-qmJApzoVskDeJnLZzZMaafEDGbEg5Elt4c3Mpg49SWzIHm1N4VXCp5CcFfHsOinJ30dGrs3ARAJGJZIw56kK6A==", + "dev": true + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.8.tgz", + "integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==", + "dev": true, + "dependencies": { + "comment-parser": "1.2.4", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "1.1.1" + }, + "engines": { + "node": "^12 || ^14 || ^16" + } + }, + "node_modules/@es-joy/jsdoccomment/node_modules/jsdoc-type-pratt-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", + "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.10.1.tgz", + "integrity": "sha512-rKN/VtZUUlW4M+6vjLFSaFc1Z9sK+1hh0832ucPtPkXqOw/mSWE80Lau4z2zTPNTqtxAjfZbvKpQcEwJy0KIEg==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.5", + "minimatch": "^3.0.4", + "mkdirp": "^1.0.4", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", + "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/clear-module": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.1.tgz", + "integrity": "sha512-ng0E7LeODcT3QkazOckzZqbca+JByQy/Q2Z6qO24YsTp+pLxCfohGz2gJYJqZS0CWTX3LEUiHOqe5KlYeUbEMw==", + "dev": true, + "dependencies": { + "parent-module": "^2.0.0", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clear-module/node_modules/parent-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", + "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", + "dev": true, + "dependencies": { + "callsites": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clear-module/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/code-block-writer": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz", + "integrity": "sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.2.0.tgz", + "integrity": "sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/comment-json": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.1.1.tgz", + "integrity": "sha512-v8gmtPvxhBlhdRBLwdHSjGy9BgA23t9H1FctdQKyUrErPjSrJcdDMqBq9B4Irtm7w3TNYLQJNH6ARKnpyag1sA==", + "dev": true, + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.2", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/comment-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", + "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cspell": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-5.12.3.tgz", + "integrity": "sha512-lPyWZHfdQh+xjUZDAQC0gnpjglMu2AEfxBWlziTm3XuYuPGTvNJQSUrkMcH180tA3fkj8q2XFwfxHkXXAxm68w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "commander": "^8.2.0", + "comment-json": "^4.1.1", + "cspell-gitignore": "^5.12.3", + "cspell-glob": "^5.12.3", + "cspell-lib": "^5.12.3", + "fast-json-stable-stringify": "^2.1.0", + "file-entry-cache": "^6.0.1", + "fs-extra": "^10.0.0", + "get-stdin": "^8.0.0", + "glob": "^7.2.0", + "imurmurhash": "^0.1.4", + "strip-ansi": "^6.0.1", + "vscode-uri": "^3.0.2" + }, + "bin": { + "cspell": "bin.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "funding": { + "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" + } + }, + "node_modules/cspell-gitignore": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-5.12.3.tgz", + "integrity": "sha512-oPqY6oCVNwFRqcE0FiWNPsyv0EjWiK2N66en6HDZR+pXLZ1CBh8PHcUbRAGt+XHckm27zxbl/sDCKd2m+5yyIA==", + "dev": true, + "dependencies": { + "cspell-glob": "^5.12.3", + "find-up": "^5.0.0" + }, + "bin": { + "cspell-gitignore": "bin.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/cspell-glob": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-5.12.3.tgz", + "integrity": "sha512-2ZgzHr01Blch1I1C3jkzb3IIEE7peoFDDAM+MONQdf8JugWrexZsQ3A6nNUuUgtHZYbJC01ZKzB1JunmE84caA==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/cspell-io": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-5.12.3.tgz", + "integrity": "sha512-YqIsDPWj4OKyRYDZyZ9InvYBSGJAYbq/OMzCtJ1vCpgzGdm+7pWQkonGZMThPDW33EsSE8GPaT/XTGZbqZuDoA==", + "dev": true, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/cspell-lib": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-5.12.3.tgz", + "integrity": "sha512-wiS3X3inzkwr2d6UojVLjzGFxwhnE+HoQYg7cDyC2qqK1Q++36c5bHJGE8564lsVedeAMVbHh81bP7hibg/yUw==", + "dev": true, + "dependencies": { + "@cspell/cspell-bundled-dicts": "^5.12.3", + "@cspell/cspell-types": "^5.12.3", + "clear-module": "^4.1.1", + "comment-json": "^4.1.1", + "configstore": "^5.0.1", + "cosmiconfig": "^7.0.1", + "cspell-glob": "^5.12.3", + "cspell-io": "^5.12.3", + "cspell-trie-lib": "^5.12.3", + "find-up": "^5.0.0", + "fs-extra": "^10.0.0", + "gensequence": "^3.1.1", + "import-fresh": "^3.3.0", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0", + "vscode-uri": "^3.0.2" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/cspell-lib/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cspell-trie-lib": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-5.12.3.tgz", + "integrity": "sha512-kck/fUcsBeskuHPFSW4tn4yseDWCDTSaXwxTB+G129anzk0w7mz4LliBBfoD8AHo+D102N7nWmcKXxwPUxAXUQ==", + "dev": true, + "dependencies": { + "fs-extra": "^10.0.0", + "gensequence": "^3.1.1" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", + "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-string": "^1.0.7", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", + "eslint-plugin-import": "^2.22.1" + } + }, + "node_modules/eslint-config-airbnb-typescript": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-14.0.1.tgz", + "integrity": "sha512-tF4GwC3sRrw8kEj4/yxX8F7AcLzj/1IESBnsCiFMplzYmxre459qm2z9DFkCpqBVQFSH6j2K4+VKVteX4m0GsQ==", + "dev": true, + "dependencies": { + "eslint-config-airbnb-base": "14.2.1" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.29.3", + "@typescript-eslint/parser": "^4.29.3" + } + }, + "node_modules/eslint-config-isaacscript": { + "version": "1.0.50", + "resolved": "https://registry.npmjs.org/eslint-config-isaacscript/-/eslint-config-isaacscript-1.0.50.tgz", + "integrity": "sha512-esSW8K9QPusyll+AaJVJpO5AVFEqnUUAj7DaQU/2vlqyoGyW+lRbkEGZSLLZy5TPFMG4iOTwpCtfOwAz9f7Klw==", + "dev": true + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", + "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "pkg-dir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-eqeqeq-fix": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-eqeqeq-fix/-/eslint-plugin-eqeqeq-fix-1.0.3.tgz", + "integrity": "sha512-P1rvtn3iyMJGmF8zU6Q5+boNhYr+c+L4V3lLNGjNornLdZgXScekItxpxZdwKRXpZI30JmszVBH8U4hRj3Ly/Q==", + "dev": true + }, + "node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "engines": { + "node": ">=6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-eslint-comments/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.24.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", + "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.6.2", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.6.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.4", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-plugin-import/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "36.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.1.tgz", + "integrity": "sha512-nuLDvH1EJaKx0PCa9oeQIxH6pACIhZd1gkalTUxZbaxxwokjs7TplqY0Q8Ew3CoZaf5aowm0g/Z3JGHCatt+gQ==", + "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "0.10.8", + "comment-parser": "1.2.4", + "debug": "^4.3.2", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "^1.1.1", + "lodash": "^4.17.21", + "regextras": "^0.8.0", + "semver": "^7.3.5", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": "^12 || ^14 || ^16" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/eslint-plugin-no-implicit-map-set-loops": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-implicit-map-set-loops/-/eslint-plugin-no-implicit-map-set-loops-1.0.3.tgz", + "integrity": "sha512-j0iPXg44VL8QFK1Qp2wkD3j8xfUV28e/MwmlzTyhcRJ+ZltNbSZwqWF1o2bws6PClBaUN6aFoj/k0eKEv/gS0w==", + "dev": true + }, + "node_modules/eslint-plugin-no-template-curly-in-string-fix": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-template-curly-in-string-fix/-/eslint-plugin-no-template-curly-in-string-fix-1.0.4.tgz", + "integrity": "sha512-IkK68K7S8dvJeGt6/w9EOx1ZaHqELsaJWJhD1KkxNQxAkCCEulkanY7nqjUI2W8etNWP3aRjwoYs/qldZwjz5g==", + "dev": true + }, + "node_modules/eslint-plugin-no-void-return-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-void-return-type/-/eslint-plugin-no-void-return-type-1.0.2.tgz", + "integrity": "sha512-V3+aiY2LRMvBh/TjFMAzh3LW91Gzi9sTrCYM7HTvJ/+KeHHCrcrIYwkPbnsE3ty9NLmXjk70KcGyODwR87O9Dw==", + "dev": true + }, + "node_modules/eslint-plugin-only-warn": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.3.tgz", + "integrity": "sha512-XQOX/TfLoLw6h8ky51d29uUjXRTQHqBGXPylDEmy5fe/w7LIOnp8MA24b1OSMEn9BQoKow1q3g1kLe5/9uBTvw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensequence": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-3.1.1.tgz", + "integrity": "sha512-ys3h0hiteRwmY6BsvSttPmkhC0vEQHPJduANBRtH/dlDPZ0UBIb/dXy80IcckXyuQ6LKg+PloRqvGER9IS7F7g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/isaacscript-lint": { + "version": "1.0.63", + "resolved": "https://registry.npmjs.org/isaacscript-lint/-/isaacscript-lint-1.0.63.tgz", + "integrity": "sha512-9e+xmn5yCXQp2b2ysMpNDgPKXHEpIBKsgy1nudzv5Az7x1AikgYyKLPzVqX4W8Dkd/63xpr6eDk60riZAm4Wdg==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^4.31.2", + "@typescript-eslint/parser": "^4.31.2", + "cspell": "^5.12.3", + "eslint": "^7.32.0", + "eslint-config-airbnb-base": "^14.2.1", + "eslint-config-airbnb-typescript": "^14.0.1", + "eslint-config-isaacscript": "^1.0.50", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-eqeqeq-fix": "^1.0.3", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-import": "^2.24.2", + "eslint-plugin-jsdoc": "^36.1.1", + "eslint-plugin-no-implicit-map-set-loops": "^1.0.3", + "eslint-plugin-no-template-curly-in-string-fix": "^1.0.4", + "eslint-plugin-no-void-return-type": "^1.0.2", + "eslint-plugin-only-warn": "^1.0.3", + "eslint-plugin-prettier": "^4.0.0", + "isaacscript-tsconfig": "^1.1.4", + "prettier": "^2.4.1", + "prettier-plugin-organize-imports": "^2.3.4", + "ts-prune": "^0.10.1" + }, + "peerDependencies": { + "typescript": "^4.4.3" + } + }, + "node_modules/isaacscript-tsconfig": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/isaacscript-tsconfig/-/isaacscript-tsconfig-1.1.4.tgz", + "integrity": "sha512-U7PxqL7sg2Tfx0uTfKH+teISkIGrVoMRbO2a9zmta6i++8ulm9zuM4SknnXkhXfgJ8fozGt70fsUkGIPEOsJlw==", + "dev": true, + "dependencies": { + "@tsconfig/node16": "^1.0.1" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.2.0.tgz", + "integrity": "sha512-4STjeF14jp4bqha44nKMY1OUI6d2/g6uclHWUCZ7B4DoLzaB5bmpTkQrpqU+vSVzMD0LsKAOskcnI3I3VfIpmg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lua-types": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/lua-types/-/lua-types-2.11.0.tgz", + "integrity": "sha512-J/8qHrOjkZuPBDhnuAg0DWoaJEImqXNzgEnUigCTVrSVCcchM5Y5zpcI3aWAZPhuZlb0QKC/f3nc7VGmZmBg7w==", + "peerDependencies": { + "typescript-to-lua": "^1.0.0" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prettier-plugin-organize-imports": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-2.3.4.tgz", + "integrity": "sha512-R8o23sf5iVL/U71h9SFUdhdOEPsi3nm42FD/oDYIZ2PQa4TNWWuWecxln6jlIQzpZTDMUeO1NicJP6lLn2TtRw==", + "dev": true, + "peerDependencies": { + "prettier": ">=2.0", + "typescript": ">=2.9" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/regextras": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", + "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", + "dev": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/true-myth": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/true-myth/-/true-myth-4.1.1.tgz", + "integrity": "sha512-rqy30BSpxPznbbTcAcci90oZ1YR4DqvKcNXNerG5gQBU2v4jk0cygheiul5J6ExIMrgDVuanv/MkGfqZbKrNNg==", + "dev": true, + "engines": { + "node": "10.* || >= 12.*" + } + }, + "node_modules/ts-morph": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-11.0.3.tgz", + "integrity": "sha512-ymuPkndv9rzqTLiHWMkVrFXWcN4nBiBGhRP/kTC9F5amAAl7BNLfyrsTzMD1o9A0zishKoF1KQT/0yyFhJnPgA==", + "dev": true, + "dependencies": { + "@ts-morph/common": "~0.10.1", + "code-block-writer": "^10.1.1" + } + }, + "node_modules/ts-prune": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ts-prune/-/ts-prune-0.10.1.tgz", + "integrity": "sha512-s40MIEt7kGzZHuC8CwoSUY8UuaEVVSxGydIffYvbdG8ZV5I5vWcC5lIGxqr9JlIJJrENeNuJ0rfVgzWTGlgugQ==", + "dev": true, + "dependencies": { + "commander": "^6.2.1", + "cosmiconfig": "^7.0.1", + "json5": "^2.1.3", + "lodash": "^4.17.21", + "true-myth": "^4.1.0", + "ts-morph": "^11.0.2" + }, + "bin": { + "ts-prune": "lib/index.js" + } + }, + "node_modules/ts-prune/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", + "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typescript-to-lua": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typescript-to-lua/-/typescript-to-lua-1.0.1.tgz", + "integrity": "sha512-j5mb+8HgUUY8hhAKoNy6KUMeamEN1fsTtMvSbPaxmVkWw40pHdLi3umsQG+Qo7wM6IK+RQffFxbIWEjleF+xpw==", + "peer": true, + "dependencies": { + "enhanced-resolve": "^5.8.2", + "resolve": "^1.15.1", + "source-map": "^0.7.3", + "typescript": "~4.3.5" + }, + "bin": { + "tstl": "dist/tstl.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/typescript-to-lua/node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vscode-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.2.tgz", + "integrity": "sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@cspell/cspell-bundled-dicts": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.12.3.tgz", + "integrity": "sha512-f3kyUHYxyGqNt2DTphpmP8hr38YTL48wr4Dq7pZDbqDjLkerq9T7ufX2CZ2OfydBEdIgduX2UXwiow7IfdwY/A==", + "dev": true, + "requires": { + "@cspell/dict-ada": "^1.1.2", + "@cspell/dict-aws": "^1.0.14", + "@cspell/dict-bash": "^1.0.15", + "@cspell/dict-companies": "^1.0.40", + "@cspell/dict-cpp": "^1.1.40", + "@cspell/dict-cryptocurrencies": "^1.0.10", + "@cspell/dict-csharp": "^1.0.11", + "@cspell/dict-css": "^1.0.12", + "@cspell/dict-django": "^1.0.26", + "@cspell/dict-dotnet": "^1.0.31", + "@cspell/dict-elixir": "^1.0.25", + "@cspell/dict-en_us": "^2.1.1", + "@cspell/dict-en-gb": "^1.1.33", + "@cspell/dict-filetypes": "^1.1.8", + "@cspell/dict-fonts": "^1.0.14", + "@cspell/dict-fullstack": "^1.0.38", + "@cspell/dict-golang": "^1.1.24", + "@cspell/dict-haskell": "^1.0.13", + "@cspell/dict-html": "^1.1.9", + "@cspell/dict-html-symbol-entities": "^1.0.23", + "@cspell/dict-java": "^1.0.23", + "@cspell/dict-latex": "^1.0.25", + "@cspell/dict-lorem-ipsum": "^1.0.22", + "@cspell/dict-lua": "^1.0.16", + "@cspell/dict-node": "^1.0.12", + "@cspell/dict-npm": "^1.0.16", + "@cspell/dict-php": "^1.0.24", + "@cspell/dict-powershell": "^1.0.18", + "@cspell/dict-public-licenses": "^1.0.3", + "@cspell/dict-python": "^2.0.3", + "@cspell/dict-ruby": "^1.0.14", + "@cspell/dict-rust": "^1.0.23", + "@cspell/dict-scala": "^1.0.21", + "@cspell/dict-software-terms": "^1.0.47", + "@cspell/dict-typescript": "^1.0.19" + } + }, + "@cspell/cspell-types": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-5.12.3.tgz", + "integrity": "sha512-4l43apk3QGMkpszirKjrRGWmzZVuCyvoa0+kgWCl28dviLKsVonop8liBJaBzjmZbdpe27IKpMrNtj0fOus+fw==", + "dev": true + }, + "@cspell/dict-ada": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-1.1.2.tgz", + "integrity": "sha512-UDrcYcKIVyXDz5mInJabRNQpJoehjBFvja5W+GQyu9pGcx3BS3cAU8mWENstGR0Qc/iFTxB010qwF8F3cHA/aA==", + "dev": true + }, + "@cspell/dict-aws": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-1.0.14.tgz", + "integrity": "sha512-K21CfB4ZpKYwwDQiPfic2zJA/uxkbsd4IQGejEvDAhE3z8wBs6g6BwwqdVO767M9NgZqc021yAVpr79N5pWe3w==", + "dev": true + }, + "@cspell/dict-bash": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-1.0.15.tgz", + "integrity": "sha512-rY5Bq4RWTgJTioG8vqFbCmnalc/UEM+iBuAZBYvBfT3nU/6SN00Zjyvlh823ir2ODkUryT29CwRYwXcPnuM04w==", + "dev": true + }, + "@cspell/dict-companies": { + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-1.0.40.tgz", + "integrity": "sha512-Aw07qiTroqSST2P5joSrC4uOA05zTXzI2wMb+me3q4Davv1D9sCkzXY0TGoC2vzhNv5ooemRi9KATGaBSdU1sw==", + "dev": true + }, + "@cspell/dict-cpp": { + "version": "1.1.40", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-1.1.40.tgz", + "integrity": "sha512-sscfB3woNDNj60/yGXAdwNtIRWZ89y35xnIaJVDMk5TPMMpaDvuk0a34iOPIq0g4V+Y8e3RyAg71SH6ADwSjGw==", + "dev": true + }, + "@cspell/dict-cryptocurrencies": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-1.0.10.tgz", + "integrity": "sha512-47ABvDJOkaST/rXipNMfNvneHUzASvmL6K/CbOFpYKfsd0x23Jc9k1yaOC7JAm82XSC/8a7+3Yu+Fk2jVJNnsA==", + "dev": true + }, + "@cspell/dict-csharp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-1.0.11.tgz", + "integrity": "sha512-nub+ZCiTgmT87O+swI+FIAzNwaZPWUGckJU4GN402wBq420V+F4ZFqNV7dVALJrGaWH7LvADRtJxi6cZVHJKeA==", + "dev": true + }, + "@cspell/dict-css": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-1.0.12.tgz", + "integrity": "sha512-K6yuxej7n454O7dwKG6lHacHrAOMZ0PhMEbmV6qH2JH0U4TtWXfBASYugHvXZCDDx1UObpiJP+3tQJiBqfGpHA==", + "dev": true + }, + "@cspell/dict-django": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-1.0.26.tgz", + "integrity": "sha512-mn9bd7Et1L2zuibc08GVHTiD2Go3/hdjyX5KLukXDklBkq06r+tb0OtKtf1zKodtFDTIaYekGADhNhA6AnKLkg==", + "dev": true + }, + "@cspell/dict-dotnet": { + "version": "1.0.31", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-1.0.31.tgz", + "integrity": "sha512-65yZTMcEdYkNx9sNs18OxcE0zfbZ5VsAZ0KgDvl/1YCkTomxr9vmtnrzFz4+vxfjV4eSuaL1SPRMZODaM7SSTg==", + "dev": true + }, + "@cspell/dict-elixir": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-1.0.25.tgz", + "integrity": "sha512-ZmawoBYjM5k+8fNudRMkK+PpHjhyAFAZt2rUu1EGj2rbCvE3Fn2lhRbDjbreN7nWRvcLRTW+xuPXtKP11X0ahQ==", + "dev": true + }, + "@cspell/dict-en_us": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-2.1.1.tgz", + "integrity": "sha512-7kHOqve9DVFsb1e/wKME3CZhj48zOqvXNaA1Cd82ZkaHf3aL7pUBx3cxI7Xopj/dcK1ZkhUKh+2nBxPIWIibNg==", + "dev": true + }, + "@cspell/dict-en-gb": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz", + "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==", + "dev": true + }, + "@cspell/dict-filetypes": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-1.1.8.tgz", + "integrity": "sha512-EllahNkhzvLWo0ptwu0l3oEeAJOQSUpZnDfnKRIh6mJVehuSovNHwA9vrdZ8jBUjuqcfaN2e7c32zN0D/qvWJQ==", + "dev": true + }, + "@cspell/dict-fonts": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-1.0.14.tgz", + "integrity": "sha512-VhIX+FVYAnqQrOuoFEtya6+H72J82cIicz9QddgknsTqZQ3dvgp6lmVnsQXPM3EnzA8n1peTGpLDwHzT7ociLA==", + "dev": true + }, + "@cspell/dict-fullstack": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-1.0.38.tgz", + "integrity": "sha512-4reajWiUxwWrSyZaWm9e15kaWzjYcZbzlB+CVcxE1+0NqdIoqlEESDhbnrAjKPSq+jspKtes7nQ1CdZEOj1gCA==", + "dev": true + }, + "@cspell/dict-golang": { + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-1.1.24.tgz", + "integrity": "sha512-qq3Cjnx2U1jpeWAGJL1GL0ylEhUMqyaR36Xij6Y6Aq4bViCRp+HRRqk0x5/IHHbOrti45h3yy7ii1itRFo+Xkg==", + "dev": true + }, + "@cspell/dict-haskell": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-1.0.13.tgz", + "integrity": "sha512-kvl8T84cnYRPpND/P3D86P6WRSqebsbk0FnMfy27zo15L5MLAb3d3MOiT1kW3vEWfQgzUD7uddX/vUiuroQ8TA==", + "dev": true + }, + "@cspell/dict-html": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-1.1.9.tgz", + "integrity": "sha512-vvnYia0tyIS5Fdoz+gEQm77MGZZE66kOJjuNpIYyRHCXFAhWdYz3SmkRm6YKJSWSvuO+WBJYTKDvkOxSh3Fx/w==", + "dev": true + }, + "@cspell/dict-html-symbol-entities": { + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-1.0.23.tgz", + "integrity": "sha512-PV0UBgcBFbBLf/m1wfkVMM8w96kvfHoiCGLWO6BR3Q9v70IXoE4ae0+T+f0CkxcEkacMqEQk/I7vuE9MzrjaNw==", + "dev": true + }, + "@cspell/dict-java": { + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-1.0.23.tgz", + "integrity": "sha512-LcOg9srYLDoNGd8n3kbfDBlZD+LOC9IVcnFCdua1b/luCHNVmlgBx7e677qPu7olpMYOD5TQIVW2OmM1+/6MFA==", + "dev": true + }, + "@cspell/dict-latex": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-1.0.25.tgz", + "integrity": "sha512-cEgg91Migqcp1SdVV7dUeMxbPDhxdNo6Fgq2eygAXQjIOFK520FFvh/qxyBvW90qdZbIRoU2AJpchyHfGuwZFA==", + "dev": true + }, + "@cspell/dict-lorem-ipsum": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-1.0.22.tgz", + "integrity": "sha512-yqzspR+2ADeAGUxLTfZ4pXvPl7FmkENMRcGDECmddkOiuEwBCWMZdMP5fng9B0Q6j91hQ8w9CLvJKBz10TqNYg==", + "dev": true + }, + "@cspell/dict-lua": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-1.0.16.tgz", + "integrity": "sha512-YiHDt8kmHJ8nSBy0tHzaxiuitYp+oJ66ffCYuFWTNB3//Y0SI4OGHU3omLsQVeXIfCeVrO4DrVvRDoCls9B5zQ==", + "dev": true + }, + "@cspell/dict-node": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-1.0.12.tgz", + "integrity": "sha512-RPNn/7CSkflAWk0sbSoOkg0ORrgBARUjOW3QjB11KwV1gSu8f5W/ij/S50uIXtlrfoBLqd4OyE04jyON+g/Xfg==", + "dev": true + }, + "@cspell/dict-npm": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-1.0.16.tgz", + "integrity": "sha512-RwkuZGcYBxL3Yux3cSG/IOWGlQ1e9HLCpHeyMtTVGYKAIkFAVUnGrz20l16/Q7zUG7IEktBz5O42kAozrEnqMQ==", + "dev": true + }, + "@cspell/dict-php": { + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-1.0.24.tgz", + "integrity": "sha512-vHCqETX1idT9tN1plkxUFnXMIHjbbrNOINZh1PYSvVlBrOdahSaL/g6dOJZC5QTaaidoU4WXUlgnNb/7JN4Plg==", + "dev": true + }, + "@cspell/dict-powershell": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-1.0.18.tgz", + "integrity": "sha512-LAfCJBy1hga8/KI/IpAg/GrnoP+b4SbNGdiXiXrejeZ7ZTVfj4qYsTCkZ2p7eYUu92FLyJT4jGex0fGZn/PtVw==", + "dev": true + }, + "@cspell/dict-public-licenses": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-1.0.3.tgz", + "integrity": "sha512-sXjxOHJ9Q4rZvE1UbwpwJQ8EXO3fadKBjJIWmz0z+dZAbvTrmz5Ln1Ef9ruJvLPfwAps8m3TCV6Diz60RAQqHg==", + "dev": true + }, + "@cspell/dict-python": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-2.0.3.tgz", + "integrity": "sha512-b15Dk/nDzeB5mbTSXx4RGKgmM9AW5BpaHyZoUZNUOdPfQbcd02hVblro/MXMw45SvQ3Wr/VFJx32skwuRkvFPg==", + "dev": true + }, + "@cspell/dict-ruby": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-1.0.14.tgz", + "integrity": "sha512-XHBGN4U1y9rjRuqrCA+3yIm2TCdhwwHXpOEcWkNeyXm8K03yPnIrKFS+kap8GTTrLpfNDuFsrmkkQTa7ssXLRA==", + "dev": true + }, + "@cspell/dict-rust": { + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-1.0.23.tgz", + "integrity": "sha512-lR4boDzs79YD6+30mmiSGAMMdwh7HTBAPUFSB0obR3Kidibfc3GZ+MHWZXay5dxZ4nBKM06vyjtanF9VJ8q1Iw==", + "dev": true + }, + "@cspell/dict-scala": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-1.0.21.tgz", + "integrity": "sha512-5V/R7PRbbminTpPS3ywgdAalI9BHzcEjEj9ug4kWYvBIGwSnS7T6QCFCiu+e9LvEGUqQC+NHgLY4zs1NaBj2vA==", + "dev": true + }, + "@cspell/dict-software-terms": { + "version": "1.0.47", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-1.0.47.tgz", + "integrity": "sha512-q7cPUaZ3KYtebHpUr/kQXEOIbtJbii069ubXE1eWHWnAYrJZOGFc0W4Sau0ZjeY7cdOXWeYZ3hzcW8XNtPkQrw==", + "dev": true + }, + "@cspell/dict-typescript": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-1.0.19.tgz", + "integrity": "sha512-qmJApzoVskDeJnLZzZMaafEDGbEg5Elt4c3Mpg49SWzIHm1N4VXCp5CcFfHsOinJ30dGrs3ARAJGJZIw56kK6A==", + "dev": true + }, + "@es-joy/jsdoccomment": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.8.tgz", + "integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==", + "dev": true, + "requires": { + "comment-parser": "1.2.4", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "1.1.1" + }, + "dependencies": { + "jsdoc-type-pratt-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", + "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", + "dev": true + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@ts-morph/common": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.10.1.tgz", + "integrity": "sha512-rKN/VtZUUlW4M+6vjLFSaFc1Z9sK+1hh0832ucPtPkXqOw/mSWE80Lau4z2zTPNTqtxAjfZbvKpQcEwJy0KIEg==", + "dev": true, + "requires": { + "fast-glob": "^3.2.5", + "minimatch": "^3.0.4", + "mkdirp": "^1.0.4", + "path-browserify": "^1.0.1" + } + }, + "@tsconfig/node16": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", + "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, + "array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "clear-module": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.1.tgz", + "integrity": "sha512-ng0E7LeODcT3QkazOckzZqbca+JByQy/Q2Z6qO24YsTp+pLxCfohGz2gJYJqZS0CWTX3LEUiHOqe5KlYeUbEMw==", + "dev": true, + "requires": { + "parent-module": "^2.0.0", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "parent-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", + "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", + "dev": true, + "requires": { + "callsites": "^3.1.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "code-block-writer": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz", + "integrity": "sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.2.0.tgz", + "integrity": "sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==", + "dev": true + }, + "comment-json": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.1.1.tgz", + "integrity": "sha512-v8gmtPvxhBlhdRBLwdHSjGy9BgA23t9H1FctdQKyUrErPjSrJcdDMqBq9B4Irtm7w3TNYLQJNH6ARKnpyag1sA==", + "dev": true, + "requires": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.2", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + } + }, + "comment-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", + "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "cspell": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-5.12.3.tgz", + "integrity": "sha512-lPyWZHfdQh+xjUZDAQC0gnpjglMu2AEfxBWlziTm3XuYuPGTvNJQSUrkMcH180tA3fkj8q2XFwfxHkXXAxm68w==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "commander": "^8.2.0", + "comment-json": "^4.1.1", + "cspell-gitignore": "^5.12.3", + "cspell-glob": "^5.12.3", + "cspell-lib": "^5.12.3", + "fast-json-stable-stringify": "^2.1.0", + "file-entry-cache": "^6.0.1", + "fs-extra": "^10.0.0", + "get-stdin": "^8.0.0", + "glob": "^7.2.0", + "imurmurhash": "^0.1.4", + "strip-ansi": "^6.0.1", + "vscode-uri": "^3.0.2" + } + }, + "cspell-gitignore": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-5.12.3.tgz", + "integrity": "sha512-oPqY6oCVNwFRqcE0FiWNPsyv0EjWiK2N66en6HDZR+pXLZ1CBh8PHcUbRAGt+XHckm27zxbl/sDCKd2m+5yyIA==", + "dev": true, + "requires": { + "cspell-glob": "^5.12.3", + "find-up": "^5.0.0" + } + }, + "cspell-glob": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-5.12.3.tgz", + "integrity": "sha512-2ZgzHr01Blch1I1C3jkzb3IIEE7peoFDDAM+MONQdf8JugWrexZsQ3A6nNUuUgtHZYbJC01ZKzB1JunmE84caA==", + "dev": true, + "requires": { + "micromatch": "^4.0.4" + } + }, + "cspell-io": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-5.12.3.tgz", + "integrity": "sha512-YqIsDPWj4OKyRYDZyZ9InvYBSGJAYbq/OMzCtJ1vCpgzGdm+7pWQkonGZMThPDW33EsSE8GPaT/XTGZbqZuDoA==", + "dev": true + }, + "cspell-lib": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-5.12.3.tgz", + "integrity": "sha512-wiS3X3inzkwr2d6UojVLjzGFxwhnE+HoQYg7cDyC2qqK1Q++36c5bHJGE8564lsVedeAMVbHh81bP7hibg/yUw==", + "dev": true, + "requires": { + "@cspell/cspell-bundled-dicts": "^5.12.3", + "@cspell/cspell-types": "^5.12.3", + "clear-module": "^4.1.1", + "comment-json": "^4.1.1", + "configstore": "^5.0.1", + "cosmiconfig": "^7.0.1", + "cspell-glob": "^5.12.3", + "cspell-io": "^5.12.3", + "cspell-trie-lib": "^5.12.3", + "find-up": "^5.0.0", + "fs-extra": "^10.0.0", + "gensequence": "^3.1.1", + "import-fresh": "^3.3.0", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0", + "vscode-uri": "^3.0.2" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "cspell-trie-lib": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-5.12.3.tgz", + "integrity": "sha512-kck/fUcsBeskuHPFSW4tn4yseDWCDTSaXwxTB+G129anzk0w7mz4LliBBfoD8AHo+D102N7nWmcKXxwPUxAXUQ==", + "dev": true, + "requires": { + "fs-extra": "^10.0.0", + "gensequence": "^3.1.1" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", + "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-string": "^1.0.7", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-config-airbnb-typescript": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-14.0.1.tgz", + "integrity": "sha512-tF4GwC3sRrw8kEj4/yxX8F7AcLzj/1IESBnsCiFMplzYmxre459qm2z9DFkCpqBVQFSH6j2K4+VKVteX4m0GsQ==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "14.2.1" + } + }, + "eslint-config-isaacscript": { + "version": "1.0.50", + "resolved": "https://registry.npmjs.org/eslint-config-isaacscript/-/eslint-config-isaacscript-1.0.50.tgz", + "integrity": "sha512-esSW8K9QPusyll+AaJVJpO5AVFEqnUUAj7DaQU/2vlqyoGyW+lRbkEGZSLLZy5TPFMG4iOTwpCtfOwAz9f7Klw==", + "dev": true + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", + "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-eqeqeq-fix": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-eqeqeq-fix/-/eslint-plugin-eqeqeq-fix-1.0.3.tgz", + "integrity": "sha512-P1rvtn3iyMJGmF8zU6Q5+boNhYr+c+L4V3lLNGjNornLdZgXScekItxpxZdwKRXpZI30JmszVBH8U4hRj3Ly/Q==", + "dev": true + }, + "eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.24.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", + "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.6.2", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.6.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.4", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "eslint-plugin-jsdoc": { + "version": "36.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.1.tgz", + "integrity": "sha512-nuLDvH1EJaKx0PCa9oeQIxH6pACIhZd1gkalTUxZbaxxwokjs7TplqY0Q8Ew3CoZaf5aowm0g/Z3JGHCatt+gQ==", + "dev": true, + "requires": { + "@es-joy/jsdoccomment": "0.10.8", + "comment-parser": "1.2.4", + "debug": "^4.3.2", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "^1.1.1", + "lodash": "^4.17.21", + "regextras": "^0.8.0", + "semver": "^7.3.5", + "spdx-expression-parse": "^3.0.1" + } + }, + "eslint-plugin-no-implicit-map-set-loops": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-implicit-map-set-loops/-/eslint-plugin-no-implicit-map-set-loops-1.0.3.tgz", + "integrity": "sha512-j0iPXg44VL8QFK1Qp2wkD3j8xfUV28e/MwmlzTyhcRJ+ZltNbSZwqWF1o2bws6PClBaUN6aFoj/k0eKEv/gS0w==", + "dev": true + }, + "eslint-plugin-no-template-curly-in-string-fix": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-template-curly-in-string-fix/-/eslint-plugin-no-template-curly-in-string-fix-1.0.4.tgz", + "integrity": "sha512-IkK68K7S8dvJeGt6/w9EOx1ZaHqELsaJWJhD1KkxNQxAkCCEulkanY7nqjUI2W8etNWP3aRjwoYs/qldZwjz5g==", + "dev": true + }, + "eslint-plugin-no-void-return-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-void-return-type/-/eslint-plugin-no-void-return-type-1.0.2.tgz", + "integrity": "sha512-V3+aiY2LRMvBh/TjFMAzh3LW91Gzi9sTrCYM7HTvJ/+KeHHCrcrIYwkPbnsE3ty9NLmXjk70KcGyODwR87O9Dw==", + "dev": true + }, + "eslint-plugin-only-warn": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.3.tgz", + "integrity": "sha512-XQOX/TfLoLw6h8ky51d29uUjXRTQHqBGXPylDEmy5fe/w7LIOnp8MA24b1OSMEn9BQoKow1q3g1kLe5/9uBTvw==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensequence": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-3.1.1.tgz", + "integrity": "sha512-ys3h0hiteRwmY6BsvSttPmkhC0vEQHPJduANBRtH/dlDPZ0UBIb/dXy80IcckXyuQ6LKg+PloRqvGER9IS7F7g==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isaacscript-lint": { + "version": "1.0.63", + "resolved": "https://registry.npmjs.org/isaacscript-lint/-/isaacscript-lint-1.0.63.tgz", + "integrity": "sha512-9e+xmn5yCXQp2b2ysMpNDgPKXHEpIBKsgy1nudzv5Az7x1AikgYyKLPzVqX4W8Dkd/63xpr6eDk60riZAm4Wdg==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^4.31.2", + "@typescript-eslint/parser": "^4.31.2", + "cspell": "^5.12.3", + "eslint": "^7.32.0", + "eslint-config-airbnb-base": "^14.2.1", + "eslint-config-airbnb-typescript": "^14.0.1", + "eslint-config-isaacscript": "^1.0.50", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-eqeqeq-fix": "^1.0.3", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-import": "^2.24.2", + "eslint-plugin-jsdoc": "^36.1.1", + "eslint-plugin-no-implicit-map-set-loops": "^1.0.3", + "eslint-plugin-no-template-curly-in-string-fix": "^1.0.4", + "eslint-plugin-no-void-return-type": "^1.0.2", + "eslint-plugin-only-warn": "^1.0.3", + "eslint-plugin-prettier": "^4.0.0", + "isaacscript-tsconfig": "^1.1.4", + "prettier": "^2.4.1", + "prettier-plugin-organize-imports": "^2.3.4", + "ts-prune": "^0.10.1" + } + }, + "isaacscript-tsconfig": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/isaacscript-tsconfig/-/isaacscript-tsconfig-1.1.4.tgz", + "integrity": "sha512-U7PxqL7sg2Tfx0uTfKH+teISkIGrVoMRbO2a9zmta6i++8ulm9zuM4SknnXkhXfgJ8fozGt70fsUkGIPEOsJlw==", + "dev": true, + "requires": { + "@tsconfig/node16": "^1.0.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsdoc-type-pratt-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.2.0.tgz", + "integrity": "sha512-4STjeF14jp4bqha44nKMY1OUI6d2/g6uclHWUCZ7B4DoLzaB5bmpTkQrpqU+vSVzMD0LsKAOskcnI3I3VfIpmg==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "lua-types": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/lua-types/-/lua-types-2.11.0.tgz", + "integrity": "sha512-J/8qHrOjkZuPBDhnuAg0DWoaJEImqXNzgEnUigCTVrSVCcchM5Y5zpcI3aWAZPhuZlb0QKC/f3nc7VGmZmBg7w==", + "requires": {} + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "prettier-plugin-organize-imports": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-2.3.4.tgz", + "integrity": "sha512-R8o23sf5iVL/U71h9SFUdhdOEPsi3nm42FD/oDYIZ2PQa4TNWWuWecxln6jlIQzpZTDMUeO1NicJP6lLn2TtRw==", + "dev": true, + "requires": {} + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "regextras": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", + "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "peer": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + } + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "peer": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "true-myth": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/true-myth/-/true-myth-4.1.1.tgz", + "integrity": "sha512-rqy30BSpxPznbbTcAcci90oZ1YR4DqvKcNXNerG5gQBU2v4jk0cygheiul5J6ExIMrgDVuanv/MkGfqZbKrNNg==", + "dev": true + }, + "ts-morph": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-11.0.3.tgz", + "integrity": "sha512-ymuPkndv9rzqTLiHWMkVrFXWcN4nBiBGhRP/kTC9F5amAAl7BNLfyrsTzMD1o9A0zishKoF1KQT/0yyFhJnPgA==", + "dev": true, + "requires": { + "@ts-morph/common": "~0.10.1", + "code-block-writer": "^10.1.1" + } + }, + "ts-prune": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ts-prune/-/ts-prune-0.10.1.tgz", + "integrity": "sha512-s40MIEt7kGzZHuC8CwoSUY8UuaEVVSxGydIffYvbdG8ZV5I5vWcC5lIGxqr9JlIJJrENeNuJ0rfVgzWTGlgugQ==", + "dev": true, + "requires": { + "commander": "^6.2.1", + "cosmiconfig": "^7.0.1", + "json5": "^2.1.3", + "lodash": "^4.17.21", + "true-myth": "^4.1.0", + "ts-morph": "^11.0.2" + }, + "dependencies": { + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", + "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true + }, + "typescript-to-lua": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typescript-to-lua/-/typescript-to-lua-1.0.1.tgz", + "integrity": "sha512-j5mb+8HgUUY8hhAKoNy6KUMeamEN1fsTtMvSbPaxmVkWw40pHdLi3umsQG+Qo7wM6IK+RQffFxbIWEjleF+xpw==", + "peer": true, + "requires": { + "enhanced-resolve": "^5.8.2", + "resolve": "^1.15.1", + "source-map": "^0.7.3", + "typescript": "~4.3.5" + }, + "dependencies": { + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "peer": true + } + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vscode-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.2.tgz", + "integrity": "sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/isaac-typescript-definitions/package.json b/isaac-typescript-definitions/package.json new file mode 100644 index 0000000..7379fa6 --- /dev/null +++ b/isaac-typescript-definitions/package.json @@ -0,0 +1,29 @@ +{ + "name": "isaac-typescript-definitions", + "version": "1.0.244", + "description": "TypeScript definitions for The Binding of Isaac: Repentance", + "keywords": [ + "isaac", + "rebirth", + "afterbirth", + "repentance" + ], + "homepage": "https://github.com/IsaacScript/isaac-typescript-definitions#readme", + "bugs": { + "url": "https://github.com/IsaacScript/isaac-typescript-definitions/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/IsaacScript/isaac-typescript-definitions.git" + }, + "license": "GPL-3.0", + "author": "Zamiell", + "types": "typings/index.d.ts", + "dependencies": { + "lua-types": "2.11.0" + }, + "devDependencies": { + "isaacscript-lint": "^1.0.63", + "typescript": "^4.4.4" + } +} diff --git a/isaac-typescript-definitions/publish.sh b/isaac-typescript-definitions/publish.sh new file mode 100755 index 0000000..e871276 --- /dev/null +++ b/isaac-typescript-definitions/publish.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +set -e # Exit on any errors + +# Get the directory of this script +# https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +cd "$DIR" +pip install publish-npm --upgrade --quiet +publish-npm "$@" diff --git a/isaac-typescript-definitions/scripts/enums.lua b/isaac-typescript-definitions/scripts/enums.lua new file mode 100644 index 0000000..4b5749f --- /dev/null +++ b/isaac-typescript-definitions/scripts/enums.lua @@ -0,0 +1,4646 @@ +ModCallbacks = { + MC_NPC_UPDATE = 0, -- Callback is a method that takes (EntityNPC). Called after an NPC is updated. When adding callback, specify an EntityType so it is only called for entities of that type. + MC_POST_UPDATE = 1, -- Callback is a method with no arguments. Called after game update. + MC_POST_RENDER = 2, -- Callback is a method with no arguments. Called after game render. + MC_USE_ITEM = 3, -- Callback is a method that takes (CollectibleType, RNG). Return true to show the "use item" animation, otherwise false. Called when a custom active item is used, after discharging it. When adding callback, specify a CollectibleType to only respond to one custom active. The item RNG allows for the item's random events to be seeded. + MC_POST_PEFFECT_UPDATE = 4, -- Callback is a method that takes (EntityPlayer). Called for each player, each frame, after the player evaluates the effects of items that must be constantly evaluated. + MC_USE_CARD = 5, -- Callback is a method that takes (Card). Called when a custom card is used. When adding callback, specify a Card ID to only respond to one card type. + MC_FAMILIAR_UPDATE = 6, -- Callback is a method that takes (Entity_Familiar). Called every frame for each custom familiar. When adding callback, specify a Variant to restrict calls to a specific familiar. + MC_FAMILIAR_INIT = 7, -- Callback is a method that takes (Entity_Familiar). Called just after a custom familiar is initialized. When adding callback, specify a Variant to restrict calls to a specific familiar. + + -- Callback is a method that takes (EntityPlayer, CacheFlag). + -- Called one or more times when a player's stats must be re-evaluated, such as after picking up an item, using certain pills, manually calling EvaluateItems on EntityPlayer. + -- Use this to let custom items change the player's stats, familiars, flying, weapons, etc. + -- Items tell the game which stats they affect using cache values in items.xml. Then the callback should respond to the CacheFlag by setting the corresponding player stat. + -- Other items' stat modifiers, multipliers, etc are applied before this callback is called. + MC_EVALUATE_CACHE = 8, + + MC_POST_PLAYER_INIT = 9, -- Callback is a method that takes (EntityPlayer). Called after the player is initialized. + MC_USE_PILL = 10, -- Callback is a method that takes (PillEffect). Called when a custom pill is used. When adding callback, specify a PillEffect ID to only respond to one pill effect. + + -- Callback is a method that takes (TookDamage : Entity, DamageAmount : number, DamageFlag : number (bit flags from DamageFlag enumeration), DamageSource : EntityRef, DamageCountdownFrames : number). + -- Return true or nil if the entity or player should sustain the damage, otherwise false to ignore it. + -- If the entity is an EntityPlayer, the DamageAmount is the integer number of half-hearts of damage that the player will take. Otherwise, DamageAmount is a number of hit points. + -- Called before new damage is applied. A DAMAGE_COUNTDOWN flag means the entity will ignore any other DAMAGE_COUNTDOWN hits for the duration specified. + -- When adding callback, specify an EntityType to respond to only damage taken by that entity type. + MC_ENTITY_TAKE_DMG = 11, + MC_POST_CURSE_EVAL = 12, -- Callback is a method that takes (integer Curses). Curses is a bitmask containing current curses. Called after Level applied it's curses. Returns the new curse bitmask. Use Isaac.GetCurseIdByName to get a custom curse + + -- Callback that takes (Entity, InputHook, ButtonAction). It is called when game/game entities wants to read action input. + -- Entity can be nil if the input is read not from an entity Class. InputHook and ButtonActions are enumerations. Return nil if you don't want to overwrite the input or value otherwise. + -- Return value can be bool if it's a Is__ hook or float if it's an Get__Value hook. Float values should be in range of 0.0 and 1.0 + MC_INPUT_ACTION = 13, + MC_LEVEL_GENERATOR = 14, -- WIP, isn't active atm + MC_POST_GAME_STARTED = 15, -- (bool) - It's started from a savestate + MC_POST_GAME_END = 16, -- (bool) - Gameover + MC_PRE_GAME_EXIT = 17, -- (bool) - ShouldSave + MC_POST_NEW_LEVEL = 18, -- This triggers after new room! + MC_POST_NEW_ROOM = 19, + MC_GET_CARD = 20, -- (RNG& rng, integer CurrentCard, bool Playing, bool Runes, bool OnlyRunes) - This is used for Card Pools. Because not all cards have the same chance to spawn, use RNG for seeded random and return your card id (if you don't want to change the current card, return CurrentCard or nil). If desired Playing (can include playing cards), Runes (can include runes), OnlyRunes (only return runes) filter can be used to make your selection. + MC_GET_SHADER_PARAMS = 21, -- (string shaderName) - returns a table containing a key -> value pair for custom shader parameters + MC_EXECUTE_CMD = 22, -- (string cmd, string params) - returns a string separated by \n (newline) per output line + + MC_PRE_USE_ITEM = 23, -- (CollectibleType ItemId, RNG& ItemRng) - return true if the item can't be used / processed inside the script, other values or no value will continue the routine + MC_PRE_ENTITY_SPAWN = 24, -- (EntityType Type, integer Variant, integer SubType, const Vector2 Position, const Vector2 Velocity, const Entity Spawner, integer Seed), optional return - an array table with new values { Type, Variant, Subtype, Seed } + MC_POST_FAMILIAR_RENDER = 25, -- (EntityFamiliar Fam, Vector Offset) + MC_PRE_FAMILIAR_COLLISION = 26, -- (EntityFamiliar Fam, Entity Collider, boolean Low), returns true/false to ignore collision code (true to respond to collision, false to not), or nil to continue the internal code. + MC_POST_NPC_INIT = 27, -- (EntityNPC NPC) + MC_POST_NPC_RENDER = 28, -- (EntityNPC NPC, Vector Offset) + MC_POST_NPC_DEATH = 29, -- (EntityNPC NPC) + MC_PRE_NPC_COLLISION = 30, -- (EntityNPC NPC, Entity Collider, boolean Low), returns true/false to ignore collision code (true to respond to collision, false to not), or nil to continue the internal code. + MC_POST_PLAYER_UPDATE = 31, -- (EntityPlayer Player) + MC_POST_PLAYER_RENDER = 32, -- (EntityPlayer Player, Vector Offset) + MC_PRE_PLAYER_COLLISION = 33, -- (EntityPlayer Player, Entity Collider, boolean Low), returns true/false to ignore collision code (true to respond to collision, false to not), or nil to continue the internal code. + MC_POST_PICKUP_INIT = 34, -- (EntityPickup Pickup) + MC_POST_PICKUP_UPDATE = 35, -- (EntityPickup Pickup) + MC_POST_PICKUP_RENDER = 36, -- (EntityPickup Pickup, Vector Offset) + MC_POST_PICKUP_SELECTION = 37, -- (EntityPickup Pickup, integer Variant, integer Subtype), return nil or an array table with new Variant and Subtype - return { Variant, Subtype } + MC_PRE_PICKUP_COLLISION = 38, -- (EntityPickup Pickup, Entity Collider, boolean Low), returns true/false to ignore collision code (true to respond to collision, false to not), or nil to continue the internal code. + MC_POST_TEAR_INIT = 39, -- (EntityTear Pickup) + MC_POST_TEAR_UPDATE = 40, -- (EntityTear Pickup) + MC_POST_TEAR_RENDER = 41, -- (EntityTear Pickup, Vector Offset) + MC_PRE_TEAR_COLLISION = 42, -- (EntityTear Tear, Entity Collider, boolean Low), returns true/false to ignore collision code (true to respond to collision, false to not), or nil to continue the internal code. + MC_POST_PROJECTILE_INIT = 43, -- (EntityProjectile Projectile) + MC_POST_PROJECTILE_UPDATE = 44, -- (EntityProjectile Projectile) + MC_POST_PROJECTILE_RENDER = 45, -- (EntityProjectile Projectile, Vector Offset) + MC_PRE_PROJECTILE_COLLISION = 46, -- (EntityProjectile Projectile, Entity Collider, boolean Low), returns true/false to ignore collision code (true to respond to collision, false to not), or nil to continue the internal code. + MC_POST_LASER_INIT = 47, -- (EntityLaser Laser) + MC_POST_LASER_UPDATE = 48, -- (EntityLaser Laser) + MC_POST_LASER_RENDER = 49, -- (EntityLaser Laser, Vector Offset) + MC_POST_KNIFE_INIT = 50, -- (EntityKnife Knife) + MC_POST_KNIFE_UPDATE = 51, -- (EntityKnife Knife) + MC_POST_KNIFE_RENDER = 52, -- (EntityKnife Knife, Vector Offset) + MC_PRE_KNIFE_COLLISION = 53, -- (EntityKnife Knife, Entity Collider, boolean Low), returns true/false to ignore collision code (true to respond to collision, false to not), or nil to continue the internal code. + MC_POST_EFFECT_INIT = 54, -- (EntityEffect Effect) + MC_POST_EFFECT_UPDATE = 55, -- (EntityEffect Effect) + MC_POST_EFFECT_RENDER = 56, -- (EntityEffect Effect, Vector Offset) + MC_POST_BOMB_INIT = 57, -- (EntityBomb Bomb) + MC_POST_BOMB_UPDATE = 58, -- (EntityBomb Bomb) + MC_POST_BOMB_RENDER = 59, -- (EntityBomb Bomb, Vector Offset) + MC_PRE_BOMB_COLLISION = 60, -- (EntityBomb Bomb, Entity Collider, boolean Low), returns true/false to ignore collision code (true to respond to collision, false to not), or nil to continue the internal code. + MC_POST_FIRE_TEAR = 61, -- (EntityTear Tear) + MC_PRE_GET_COLLECTIBLE = 62, -- (integer PoolType, boolean Decrease, integer Seed), evaluates before special events + MC_POST_GET_COLLECTIBLE = 63, -- (CollectibleType SelectedCollectible, integer PoolType, boolean Decrease, integer Seed) + MC_GET_PILL_COLOR = 64, -- (PillColor SelectedPill, integer Seed) + MC_GET_PILL_EFFECT = 65, -- (PillEffect SelectedPillEffect, PillColor PillColor) + MC_GET_TRINKET = 66, -- (TrinketType SelectedTrinket, RNG& TrinketRNG) + MC_POST_ENTITY_REMOVE = 67, -- (Entity Ent) + MC_POST_ENTITY_KILL = 68, -- (Entity Ent) + MC_PRE_NPC_UPDATE = 69, -- (EntityNPC NPC), returns true if the internal ai should be ignored, false or nil/nothing otherwise + MC_PRE_SPAWN_CLEAN_AWARD = 70, -- (RNG& Rng, Vector SpawnPos), returns true if the spawn routine should be ignored, false or nil/nothing otherwise + MC_PRE_ROOM_ENTITY_SPAWN = 71 -- (EntityType Type, integer Variant, integer SubType, integer GridIndex, integer Seed) - This is called when entering a new room, before spawning entities which are part its layout. Grid entities will also trigger this callback and their type will the same as the type used by the gridspawn command. Because of this, effects are assigned the type 999 instead of 1000 in this callback. Optional return: an array table with new values { Type, Variant, Subtype }. Returning a table will override any replacements that might naturally occur i.e. enemy variants. +} + +EntityType = { + ENTITY_NULL = 0, + ENTITY_PLAYER = 1, -- 1 player + ENTITY_TEAR = 2, -- 2 tear projectile + ENTITY_FAMILIAR = 3, -- 3 familiar + ENTITY_BOMBDROP = 4, -- 4 bomb drop + ENTITY_PICKUP = 5, -- 5 pickup item + ENTITY_SLOT = 6, -- 6 slot machine + ENTITY_LASER = 7, -- 7 laser beam + ENTITY_KNIFE = 8, -- 8 mom's knife + ENTITY_PROJECTILE = 9, -- 9 blood projectile + ENTITY_GAPER = 10, -- 10 enemy: Gaper + ENTITY_GUSHER = 11, -- 11 enemy: Gusher + ENTITY_HORF = 12, -- 12 enemy: Horf + ENTITY_FLY = 13, -- 13 enemy: Fly + ENTITY_POOTER = 14, -- 14 enemy: Pooter + ENTITY_CLOTTY = 15, -- 15 enemy: Clotty + ENTITY_MULLIGAN = 16, -- 16 enemy: Mulligan + ENTITY_SHOPKEEPER = 17, + ENTITY_ATTACKFLY = 18, -- 18 enemy: Attack Fly + ENTITY_LARRYJR = 19, -- 19 boss: Larry Jr./Hollow + ENTITY_MONSTRO = 20, -- 20 boss: Monstro + ENTITY_MAGGOT = 21, + ENTITY_HIVE = 22, + ENTITY_CHARGER = 23, + ENTITY_GLOBIN = 24, + ENTITY_BOOMFLY = 25, + ENTITY_MAW = 26, + ENTITY_HOST = 27, + ENTITY_CHUB = 28, + ENTITY_HOPPER = 29, -- 29 enemy: Hopper + ENTITY_BOIL = 30, -- 30 enemy: Boil, variants: 1 - Gut, 2 - Sack + ENTITY_SPITY = 31, + ENTITY_BRAIN = 32, + ENTITY_FIREPLACE = 33, + ENTITY_LEAPER = 34, + ENTITY_MRMAW = 35, + ENTITY_GURDY = 36, + ENTITY_BABY = 38, + ENTITY_VIS = 39, + ENTITY_GUTS = 40, + ENTITY_KNIGHT = 41, + ENTITY_STONEHEAD = 42, + ENTITY_MONSTRO2 = 43, + ENTITY_POKY = 44, + ENTITY_MOM = 45, + ENTITY_SLOTH = 46, -- 46 miniboss: Sloth + ENTITY_LUST = 47, -- 47 miniboss: Lust + ENTITY_WRATH = 48, -- 48 miniboss: Wrath + ENTITY_GLUTTONY = 49, -- 49 miniboss: Gluttony + ENTITY_GREED = 50, -- 50 miniboss: Greed + ENTITY_ENVY = 51, -- 51 miniboss: Envy + ENTITY_PRIDE = 52, -- 52 miniboss: Pride + ENTITY_DOPLE = 53, + ENTITY_FLAMINGHOPPER = 54, -- 54 enemy: Flaming Hopper + ENTITY_LEECH = 55, + ENTITY_LUMP = 56, + ENTITY_MEMBRAIN = 57, -- 57 enemy: Membrain and Mama Guts + ENTITY_PARA_BITE = 58, + ENTITY_FRED = 59, + ENTITY_EYE = 60, + ENTITY_SUCKER = 61, -- 61 enemy: Sucker + ENTITY_PIN = 62, -- 62 boss: Pin + ENTITY_FAMINE = 63, + ENTITY_PESTILENCE = 64, + ENTITY_WAR = 65, -- variant 1: Conquest + ENTITY_DEATH = 66, + ENTITY_DUKE = 67, -- 67 boss: Duke of Flies/Husk + ENTITY_PEEP = 68, + ENTITY_LOKI = 69, + ENTITY_FISTULA_BIG = 71, + ENTITY_FISTULA_MEDIUM = 72, + ENTITY_FISTULA_SMALL = 73, + ENTITY_BLASTOCYST_BIG = 74, -- 74 boss: Blastocyst + ENTITY_BLASTOCYST_MEDIUM = 75, + ENTITY_BLASTOCYST_SMALL = 76, + ENTITY_EMBRYO = 77, + ENTITY_MOMS_HEART = 78, + ENTITY_GEMINI = 79, -- 79 boss: Gemini + ENTITY_MOTER = 80, -- 80 enemy: Moter + ENTITY_FALLEN = 81, -- variant 1: Krampus + ENTITY_HEADLESS_HORSEMAN = 82, -- Headless Horseman + ENTITY_HORSEMAN_HEAD = 83, -- Head for Headless Horseman + ENTITY_SATAN = 84, + ENTITY_SPIDER = 85, -- 85 enemy: Spider + ENTITY_KEEPER = 86, + ENTITY_GURGLE = 87, + ENTITY_WALKINGBOIL = 88, -- ai for WalkingBoil, WalkingGut and WalkingSack + ENTITY_BUTTLICKER = 89, + ENTITY_HANGER = 90, -- 90 enemy: Hanger + ENTITY_SWARMER = 91, + ENTITY_HEART = 92, + ENTITY_MASK = 93, + ENTITY_BIGSPIDER = 94, + ENTITY_ETERNALFLY = 96, -- 96 enemy: Eternal Fly + ENTITY_MASK_OF_INFAMY = 97, + ENTITY_HEART_OF_INFAMY = 98, + ENTITY_GURDY_JR = 99, -- 99 enemy: Gurdy Jr. + ENTITY_WIDOW = 100, + ENTITY_DADDYLONGLEGS = 101, + ENTITY_ISAAC = 102, + + -- Rebirth enemies + ENTITY_STONE_EYE = 201, + ENTITY_CONSTANT_STONE_SHOOTER = 202, + ENTITY_BRIMSTONE_HEAD = 203, + ENTITY_MOBILE_HOST = 204, + ENTITY_NEST = 205, + ENTITY_BABY_LONG_LEGS = 206, + ENTITY_CRAZY_LONG_LEGS = 207, + ENTITY_FATTY = 208, + ENTITY_FAT_SACK = 209, + ENTITY_BLUBBER = 210, + ENTITY_HALF_SACK = 211, + ENTITY_DEATHS_HEAD = 212, + ENTITY_MOMS_HAND = 213, + ENTITY_FLY_L2 = 214, + ENTITY_SPIDER_L2 = 215, + ENTITY_SWINGER = 216, + ENTITY_DIP = 217, + ENTITY_WALL_HUGGER = 218, + ENTITY_WIZOOB = 219, + ENTITY_SQUIRT = 220, + ENTITY_COD_WORM = 221, + ENTITY_RING_OF_FLIES = 222, + ENTITY_DINGA = 223, + ENTITY_OOB = 224, + ENTITY_BLACK_MAW = 225, + ENTITY_SKINNY = 226, + ENTITY_BONY = 227, + ENTITY_HOMUNCULUS = 228, + ENTITY_TUMOR = 229, + ENTITY_CAMILLO_JR = 230, + ENTITY_NERVE_ENDING = 231, + ENTITY_SKINBALL = 232, + ENTITY_MOM_HEAD = 233, + ENTITY_ONE_TOOTH = 234, + ENTITY_GAPING_MAW = 235, + ENTITY_BROKEN_GAPING_MAW = 236, + ENTITY_GURGLING = 237, + ENTITY_SPLASHER = 238, + ENTITY_GRUB = 239, + ENTITY_WALL_CREEP = 240, + ENTITY_RAGE_CREEP = 241, + ENTITY_BLIND_CREEP = 242, + ENTITY_CONJOINED_SPITTY = 243, + ENTITY_ROUND_WORM = 244, + ENTITY_POOP = 245, + ENTITY_RAGLING = 246, + ENTITY_FLESH_MOBILE_HOST = 247, + ENTITY_PSY_HORF = 248, + ENTITY_FULL_FLY = 249, + ENTITY_TICKING_SPIDER = 250, + ENTITY_BEGOTTEN = 251, + ENTITY_NULLS = 252, + ENTITY_PSY_TUMOR = 253, + ENTITY_FLOATING_KNIGHT = 254, + ENTITY_NIGHT_CRAWLER = 255, + --Afterbirth + ENTITY_DART_FLY = 256, + ENTITY_CONJOINED_FATTY = 257, + ENTITY_FAT_BAT = 258, + ENTITY_IMP = 259, + + --Rebirth bosses + ENTITY_THE_HAUNT = 260, + ENTITY_DINGLE = 261, + ENTITY_MEGA_MAW = 262, + ENTITY_GATE = 263, + ENTITY_MEGA_FATTY = 264, + ENTITY_CAGE = 265, + ENTITY_MAMA_GURDY = 266, + ENTITY_DARK_ONE = 267, + ENTITY_ADVERSARY = 268, + ENTITY_POLYCEPHALUS = 269, + ENTITY_MR_FRED = 270, + ENTITY_URIEL = 271, + ENTITY_GABRIEL = 272, + ENTITY_THE_LAMB = 273, + ENTITY_MEGA_SATAN = 274, + ENTITY_MEGA_SATAN_2 = 275, + + --Afterbirth #2 + ENTITY_ROUNDY = 276, + ENTITY_BLACK_BONY = 277, + ENTITY_BLACK_GLOBIN = 278, + ENTITY_BLACK_GLOBIN_HEAD = 279, + ENTITY_BLACK_GLOBIN_BODY = 280, + ENTITY_SWARM = 281, + ENTITY_MEGA_CLOTTY = 282, + ENTITY_BONE_KNIGHT = 283, + ENTITY_CYCLOPIA = 284, + ENTITY_RED_GHOST = 285, + ENTITY_FLESH_DEATHS_HEAD = 286, + ENTITY_MOMS_DEAD_HAND = 287, + ENTITY_DUKIE = 288, + ENTITY_ULCER = 289, + ENTITY_MEATBALL = 290, + ENTITY_PITFALL = 291, + ENTITY_MOVABLE_TNT = 292, + ENTITY_ULTRA_COIN = 293, + ENTITY_ULTRA_DOOR = 294, + ENTITY_CORN_MINE = 295, + ENTITY_HUSH_FLY = 296, + ENTITY_HUSH_GAPER = 297, + ENTITY_HUSH_BOIL = 298, + ENTITY_GREED_GAPER = 299, + ENTITY_MUSHROOM = 300, + ENTITY_POISON_MIND = 301, + ENTITY_STONEY = 302, + ENTITY_BLISTER = 303, + ENTITY_THE_THING = 304, + ENTITY_MINISTRO = 305, + ENTITY_PORTAL = 306, + + -- Booster enemies + ENTITY_TARBOY = 307, + ENTITY_FISTULOID = 308, + ENTITY_GUSH = 309, + ENTITY_LEPER = 310, + + -- Afterbirth bosses + ENTITY_STAIN = 401, + ENTITY_BROWNIE = 402, + ENTITY_FORSAKEN = 403, + ENTITY_LITTLE_HORN = 404, + ENTITY_RAG_MAN = 405, + ENTITY_ULTRA_GREED = 406, + ENTITY_HUSH = 407, + ENTITY_HUSH_SKINLESS = 408, + ENTITY_RAG_MEGA = 409, + ENTITY_SISTERS_VIS = 410, + ENTITY_BIG_HORN = 411, + ENTITY_DELIRIUM = 412, + ENTITY_MATRIARCH = 413, + + -- Repentance + ENTITY_BONE_WORM = 801, + ENTITY_BLOOD_PUPPY = 802, + + ENTITY_QUAKE_GRIMACE = 804, + ENTITY_BISHOP = 805, + ENTITY_BUBBLES = 806, + ENTITY_WRAITH = 807, + ENTITY_WILLO = 808, + ENTITY_BOMB_GRIMACE = 809, + ENTITY_SMALL_LEECH = 810, + ENTITY_DEEP_GAPER = 811, + ENTITY_SUB_HORF = 812, + ENTITY_BLURB = 813, + ENTITY_STRIDER = 814, + ENTITY_FISSURE = 815, + ENTITY_POLTY = 816, + ENTITY_PREY = 817, + ENTITY_ROCK_SPIDER = 818, + ENTITY_FLY_BOMB = 819, + ENTITY_DANNY = 820, + ENTITY_BLASTER = 821, + ENTITY_BOUNCER = 822, + ENTITY_QUAKEY = 823, + ENTITY_GYRO = 824, + ENTITY_FIRE_WORM = 825, + ENTITY_HARDY = 826, + ENTITY_FACELESS = 827, + ENTITY_NECRO = 828, + ENTITY_MOLE = 829, + ENTITY_BIG_BONY = 830, + ENTITY_GUTTED_FATTY = 831, + ENTITY_EXORCIST = 832, + ENTITY_CANDLER = 833, + ENTITY_WHIPPER = 834, + ENTITY_PEEPER_FATTY = 835, + ENTITY_VIS_VERSA = 836, + ENTITY_HENRY = 837, + ENTITY_WILLO_L2 = 838, + + ENTITY_PON = 840, + ENTITY_REVENANT = 841, + + + ENTITY_BOMBGAGGER = 844, + ENTITY_GAPER_L2 = 850, + ENTITY_TWITCHY = 851, + ENTITY_SPIKEBALL = 852, + ENTITY_SMALL_MAGGOT = 853, + ENTITY_ADULT_LEECH = 854, + ENTITY_CHARGER_L2 = 855, + ENTITY_GASBAG = 856, + ENTITY_COHORT = 857, + + ENTITY_FLOATING_HOST = 859, + ENTITY_UNBORN = 860, + ENTITY_PUSTULE = 861, + ENTITY_CYST = 862, + ENTITY_MORNINGSTAR = 863, + ENTITY_MOCKULUS = 864, + ENTITY_EVIS = 865, + ENTITY_DARK_ESAU = 866, + ENTITY_MOTHERS_SHADOW = 867, + ENTITY_ARMYFLY = 868, + ENTITY_MIGRAINE = 869, + ENTITY_DRIP = 870, + ENTITY_SPLURT = 871, + ENTITY_CLOGGY = 872, + ENTITY_FLY_TRAP = 873, + ENTITY_FARTIGAN = 874, + ENTITY_POOT_MINE = 875, + ENTITY_DUMP = 876, + ENTITY_GRUDGE = 877, + ENTITY_BUTT_SLICKER = 878, + ENTITY_BLOATY = 879, + ENTITY_FLESH_MAIDEN = 880, + ENTITY_NEEDLE = 881, + ENTITY_DUST = 882, + ENTITY_BABY_BEGOTTEN = 883, + ENTITY_SWARM_SPIDER = 884, + ENTITY_CULTIST = 885, + ENTITY_VIS_FATTY = 886, + ENTITY_DUSTY_DEATHS_HEAD = 887, + ENTITY_SHADY = 888, + ENTITY_CLICKETY_CLACK = 889, + ENTITY_MAZE_ROAMER = 890, + ENTITY_GOAT = 891, + ENTITY_POOFER = 892, + ENTITY_BALL_AND_CHAIN = 893, + + ENTITY_REAP_CREEP = 900, + ENTITY_LIL_BLUB = 901, + ENTITY_RAINMAKER = 902, + ENTITY_VISAGE = 903, + ENTITY_SIREN = 904, + ENTITY_HERETIC = 905, + ENTITY_HORNFEL = 906, + ENTITY_GIDEON = 907, + ENTITY_BABY_PLUM = 908, + ENTITY_SCOURGE = 909, + ENTITY_CHIMERA = 910, + ENTITY_ROTGUT = 911, + ENTITY_MOTHER = 912, + ENTITY_MIN_MIN = 913, + ENTITY_CLOG = 914, + ENTITY_SINGE = 915, + ENTITY_BUMBINO = 916, + ENTITY_COLOSTOMIA = 917, + ENTITY_TURDLET = 918, + ENTITY_RAGLICH = 919, -- currently unused + ENTITY_HORNY_BOYS = 920, + ENTITY_CLUTCH = 921, -- currently unused + ENTITY_CADAVRA = 922, -- currently unused + ENTITY_DOGMA = 950, + ENTITY_BEAST = 951, + ENTITY_GENERIC_PROP = 960, + ENTITY_FROZEN_ENEMY = 963, + ENTITY_DUMMY = 964, + ENTITY_MINECART = 965, + ENTITY_SIREN_HELPER = 966, + ENTITY_HORNFEL_DOOR = 967, + ENTITY_TRIGGER_OUTPUT = 969, + ENTITY_ENVIRONMENT = 970, + + ENTITY_EFFECT = 1000, -- 1000 special effects + ENTITY_TEXT = 9001 +} + +GridEntityType = { + GRID_NULL = 0, + GRID_DECORATION = 1, + GRID_ROCK = 2, + GRID_ROCKB = 3, + GRID_ROCKT = 4, + GRID_ROCK_BOMB = 5, + GRID_ROCK_ALT = 6, + GRID_PIT = 7, + GRID_SPIKES = 8, + GRID_SPIKES_ONOFF = 9, + GRID_SPIDERWEB = 10, + GRID_LOCK = 11, + GRID_TNT = 12, + GRID_FIREPLACE = 13, -- not used! + GRID_POOP = 14, + GRID_WALL = 15, + GRID_DOOR = 16, + GRID_TRAPDOOR = 17, + GRID_STAIRS = 18, + GRID_GRAVITY = 19, + GRID_PRESSURE_PLATE = 20, + GRID_STATUE = 21, + GRID_ROCK_SS = 22, + + -- Repentance + GRID_TELEPORTER = 23, + GRID_PILLAR = 24, + GRID_ROCK_SPIKED = 25, + GRID_ROCK_ALT2 = 26, -- special skull in Depths 2 + GRID_ROCK_GOLD = 27, +} + +EffectVariant = { + EFFECT_NULL = 0, + BOMB_EXPLOSION = 1, + BLOOD_EXPLOSION = 2, + FLY_EXPLOSION = 3, + ROCK_PARTICLE = 4, + BLOOD_PARTICLE = 5, + DEVIL = 6, + BLOOD_SPLAT = 7, + LADDER = 8, + ANGEL = 9, + BLUE_FLAME = 10, + BULLET_POOF = 11, + TEAR_POOF_A = 12, + TEAR_POOF_B = 13, + RIPPLE_POOF = 14, + CROSS_POOF = 14, -- AB+ backwards compatibility + POOF01 = 15, + POOF02 = 16, + POOF04 = 17, + BOMB_CRATER = 18, + CRACK_THE_SKY = 19, + SCYTHE_BREAK = 20, + TINY_BUG = 21, + CREEP_RED = 22, + CREEP_GREEN = 23, + CREEP_YELLOW = 24, + CREEP_WHITE = 25, + CREEP_BLACK = 26, + WOOD_PARTICLE = 27, + MONSTROS_TOOTH = 28, + MOM_FOOT_STOMP = 29, + TARGET = 30, + ROCKET = 31, + PLAYER_CREEP_LEMON_MISHAP = 32, + TINY_FLY = 33, + FART = 34, + TOOTH_PARTICLE = 35, + XRAY_WALL = 36, + PLAYER_CREEP_HOLYWATER = 37, + SPIDER_EXPLOSION = 38, + HEAVEN_LIGHT_DOOR = 39, + STARFLASH = 40, + WATER_DROPLET = 41, + BLOOD_GUSH = 42, + POOP_EXPLOSION = 43, + PLAYER_CREEP_WHITE = 44, + PLAYER_CREEP_BLACK = 45, + PLAYER_CREEP_RED = 46, + TRINITY_SHIELD = 47, + BATTERY = 48, + HEART = 49, + LASER_IMPACT = 50, + HOT_BOMB_FIRE = 51, + RED_CANDLE_FLAME = 52, + PLAYER_CREEP_GREEN = 53, + PLAYER_CREEP_HOLYWATER_TRAIL = 54, + SPIKE = 55, + CREEP_BROWN = 56, + PULLING_EFFECT = 57, + POOP_PARTICLE = 58, + DUST_CLOUD = 59, + BOOMERANG = 60, + SHOCKWAVE = 61, + ROCK_EXPLOSION = 62, + WORM = 63, + BEETLE = 64, + WISP = 65, + EMBER_PARTICLE = 66, + SHOCKWAVE_DIRECTIONAL = 67, + WALL_BUG = 68, + BUTTERFLY = 69, + BLOOD_DROP = 70, + BRIMSTONE_SWIRL = 71, + CRACKWAVE = 72, + SHOCKWAVE_RANDOM = 73, + ISAACS_CARPET = 74, + BAR_PARTICLE = 75, + DICE_FLOOR = 76, + LARGE_BLOOD_EXPLOSION = 77, + PLAYER_CREEP_LEMON_PARTY = 78, + TEAR_POOF_SMALL = 79, + TEAR_POOF_VERYSMALL = 80, + FRIEND_BALL = 81, + WOMB_TELEPORT = 82, + SPEAR_OF_DESTINY = 83, + EVIL_EYE = 84, + DIAMOND_PARTICLE = 85, + NAIL_PARTICLE = 86, + FALLING_EMBER = 87, + DARK_BALL_SMOKE_PARTICLE = 88, + ULTRA_GREED_FOOTPRINT = 89, + PLAYER_CREEP_PUDDLE_MILK = 90, + MOMS_HAND = 91, + PLAYER_CREEP_BLACKPOWDER = 92, + PENTAGRAM_BLACKPOWDER = 93, + CREEP_SLIPPERY_BROWN = 94, + GOLD_PARTICLE = 95, + HUSH_LASER = 96, + IMPACT = 97, + COIN_PARTICLE = 98, + WATER_SPLASH = 99, + HUSH_ASHES = 100, + HUSH_LASER_UP = 101, + BULLET_POOF_HUSH = 102, + ULTRA_GREED_BLING = 103, + FIREWORKS = 104, + BROWN_CLOUD = 105, + FART_RING = 106, + BLACK_HOLE = 107, + MR_ME = 108, + DEATH_SKULL = 109, + ENEMY_BRIMSTONE_SWIRL = 110, + HAEMO_TRAIL = 111, + HALLOWED_GROUND = 112, + BRIMSTONE_BALL = 113, + FORGOTTEN_CHAIN = 114, + BROKEN_SHOVEL_SHADOW = 115, + DIRT_PATCH = 116, + FORGOTTEN_SOUL = 117, + SMALL_ROCKET = 118, + + -- Repentance + TIMER = 119, + SPAWNER = 120, + LIGHT = 121, + BIG_HORN_HOLE_HELPER = 122, + HALO = 123, + TAR_BUBBLE = 124, + BIG_HORN_HAND = 125, + TECH_DOT = 126, + MAMA_MEGA_EXPLOSION = 127, + OPTION_LINE = 128, -- unused + + LEECH_EXPLOSION = 130, + MAGGOT_EXPLOSION = 131, + BIG_SPLASH = 132, + WATER_RIPPLE = 133, + PEDESTAL_RIPPLE = 134, + RAIN_DROP = 135, + GRID_ENTITY_PROJECTILE_HELPER = 136, + WORMWOOD_HOLE = 137, + MIST = 138, + TRAPDOOR_COVER = 139, + BACKDROP_DECORATION = 140, + SMOKE_CLOUD = 141, + WHIRLPOOL = 142, + FARTWAVE = 143, + ENEMY_GHOST = 144, + ROCK_POOF = 145, + DIRT_PILE = 146, + FIRE_JET = 147, + FIRE_WAVE = 148, + BIG_ROCK_EXPLOSION = 149, + BIG_CRACKWAVE = 150, + BIG_ATTRACT = 151, + HORNFEL_ROOM_CONTROLLER = 152, + OCCULT_TARGET = 153, + DOOR_OUTLINE = 154, + CREEP_SLIPPERY_BROWN_GROWING = 155, + TALL_LADDER = 156, + WILLO_SPAWNER = 157, + TADPOLE = 158, + LIL_GHOST = 159, + BISHOP_SHIELD = 160, + PORTAL_TELEPORT = 161, + HERETIC_PENTAGRAM = 162, + CHAIN_GIB = 163, + SIREN_RING = 164, + CHARM_EFFECT = 165, + SPRITE_TRAIL = 166, + CHAIN_LIGHTNING = 167, + COLOSTOMIA_PUDDLE = 168, + CREEP_STATIC = 169, + DOGMA_DEBRIS = 170, + DOGMA_BLACKHOLE = 171, + DOGMA_ORB = 172, + CRACKED_ORB_POOF = 173, + SHOP_SPIKES = 174, + KINETI_BEAM = 175, + CLEAVER_SLASH = 176, + REVERSE_EXPLOSION = 177, + URN_OF_SOULS = 178, + ENEMY_SOUL = 179, + RIFT = 180, + LAVA_SPAWNER = 181, + BIG_KNIFE = 182, + MOTHER_SHOCKWAVE = 183, + WORM_FRIEND_SNARE = 184, + REDEMPTION = 185, + HUNGRY_SOUL = 186, + EXPLOSION_WAVE = 187, + DIVINE_INTERVENTION = 188, + PURGATORY = 189, + MOTHER_TRACER = 190, + PICKUP_GHOST = 191, + FISSURE_SPAWNER = 192, + ANIMA_CHAIN = 193, + DARK_SNARE = 194, + CREEP_LIQUID_POOP = 195, + GROUND_GLOW = 196, + DEAD_BIRD = 197, + GENERIC_TRACER = 198, + ULTRA_DEATH_SCYTHE = 199, +} + +PickupVariant = { + PICKUP_NULL = 0, + PICKUP_HEART = 10, + PICKUP_COIN = 20, + PICKUP_KEY = 30, + PICKUP_BOMB = 40, + PICKUP_THROWABLEBOMB = 41, + PICKUP_POOP = 42, + PICKUP_CHEST = 50, + PICKUP_BOMBCHEST = 51, + PICKUP_SPIKEDCHEST = 52, + PICKUP_ETERNALCHEST = 53, + PICKUP_MIMICCHEST = 54, + PICKUP_OLDCHEST = 55, + PICKUP_WOODENCHEST = 56, + PICKUP_MEGACHEST = 57, + PICKUP_HAUNTEDCHEST = 58, + PICKUP_LOCKEDCHEST = 60, + PICKUP_GRAB_BAG = 69, + PICKUP_PILL = 70, + PICKUP_LIL_BATTERY = 90, + PICKUP_COLLECTIBLE = 100, + PICKUP_SHOPITEM = 150, + PICKUP_TAROTCARD = 300, + PICKUP_BIGCHEST = 340, + PICKUP_TRINKET = 350, + PICKUP_REDCHEST = 360, + PICKUP_TROPHY = 370, + PICKUP_BED = 380, + PICKUP_MOMSCHEST = 390, +} + +HeartSubType = { + HEART_FULL = 1, + HEART_HALF = 2, + HEART_SOUL = 3, + HEART_ETERNAL = 4, + HEART_DOUBLEPACK = 5, + HEART_BLACK = 6, + HEART_GOLDEN = 7, + HEART_HALF_SOUL = 8, + HEART_SCARED = 9, + HEART_BLENDED = 10, + HEART_BONE = 11, + HEART_ROTTEN = 12, +} + +CoinSubType = { + COIN_PENNY = 1, + COIN_NICKEL = 2, + COIN_DIME = 3, + COIN_DOUBLEPACK = 4, + COIN_LUCKYPENNY = 5, + COIN_STICKYNICKEL = 6, + COIN_GOLDEN = 7, +} + +KeySubType = { + KEY_NORMAL = 1, + KEY_GOLDEN = 2, + KEY_DOUBLEPACK = 3, + KEY_CHARGED = 4, +} + +BatterySubType = { + BATTERY_NORMAL = 1, + BATTERY_MICRO = 2, + BATTERY_MEGA = 3, + BATTERY_GOLDEN = 4, +} + +SackSubType = { + SACK_NORMAL = 1, + SACK_BLACK = 2, +} + +ChestSubType = { + CHEST_OPENED = 0, + CHEST_CLOSED = 1 +} + +BombSubType = { + BOMB_NORMAL = 1, + BOMB_DOUBLEPACK = 2, + BOMB_TROLL = 3, + BOMB_GOLDEN = 4, + BOMB_SUPERTROLL = 5, + BOMB_GOLDENTROLL = 6, + BOMB_GIGA = 7, +} + +BedSubType = { + BED_ISAAC = 0, + BED_MOM = 1, +} + +PickupPrice = { + PRICE_ONE_HEART = -1, + PRICE_TWO_HEARTS = -2, + PRICE_THREE_SOULHEARTS = -3, + PRICE_ONE_HEART_AND_TWO_SOULHEARTS = -4, + PRICE_SPIKES = -5, + PRICE_SOUL = -6, + PRICE_FREE = -1000, +} + +PoopPickupSubType = { + POOP_SMALL = 0, + POOP_BIG = 1, +} + +Challenge = { + CHALLENGE_NULL = 0, + CHALLENGE_PITCH_BLACK = 1, + CHALLENGE_HIGH_BROW = 2, + CHALLENGE_HEAD_TRAUMA = 3, + CHALLENGE_DARKNESS_FALLS = 4, + CHALLENGE_THE_TANK = 5, + CHALLENGE_SOLAR_SYSTEM = 6, + CHALLENGE_SUICIDE_KING = 7, + CHALLENGE_CAT_GOT_YOUR_TONGUE = 8, + CHALLENGE_DEMO_MAN = 9, + CHALLENGE_CURSED = 10, + CHALLENGE_GLASS_CANNON = 11, + CHALLENGE_WHEN_LIFE_GIVES_LEMONS = 12, + CHALLENGE_BEANS = 13, + CHALLENGE_ITS_IN_THE_CARDS = 14, + CHALLENGE_SLOW_ROLL = 15, + CHALLENGE_COMPUTER_SAVY = 16, + CHALLENGE_WAKA_WAKA = 17, + CHALLENGE_THE_HOST = 18, + CHALLENGE_THE_FAMILY_MAN = 19, + CHALLENGE_PURIST = 20, + CHALLENGE_XXXXXXXXL = 21, + CHALLENGE_SPEED = 22, + CHALLENGE_BLUE_BOMBER = 23, + CHALLENGE_PAY_TO_PLAY = 24, + CHALLENGE_HAVE_A_HEART = 25, + CHALLENGE_I_RULE = 26, + CHALLENGE_BRAINS = 27, + CHALLENGE_PRIDE_DAY = 28, + CHALLENGE_ONANS_STREAK = 29, + CHALLENGE_GUARDIAN = 30, + CHALLENGE_BACKASSWARDS = 31, + CHALLENGE_APRILS_FOOL = 32, + CHALLENGE_POKEY_MANS = 33, + CHALLENGE_ULTRA_HARD = 34, + CHALLENGE_PONG = 35, + --NUM_CHALLENGES = 36 + + -- Repentance + CHALLENGE_SCAT_MAN = 36, + CHALLENGE_BLOODY_MARY = 37, + CHALLENGE_BAPTISM_BY_FIRE = 38, + CHALLENGE_ISAACS_AWAKENING = 39, + CHALLENGE_SEEING_DOUBLE = 40, + CHALLENGE_PICA_RUN = 41, + CHALLENGE_HOT_POTATO = 42, + CHALLENGE_CANTRIPPED = 43, + CHALLENGE_RED_REDEMPTION = 44, + CHALLENGE_DELETE_THIS = 45, + NUM_CHALLENGES = 46 +} + +BombVariant = { + BOMB_NORMAL = 0, + BOMB_BIG = 1, + BOMB_DECOY = 2, + BOMB_TROLL = 3, + BOMB_SUPERTROLL = 4, + BOMB_POISON = 5, + BOMB_POISON_BIG = 6, + BOMB_SAD = 7, + BOMB_HOT = 8, + BOMB_BUTT = 9, + BOMB_MR_MEGA = 10, + BOMB_BOBBY = 11, + BOMB_GLITTER = 12, + BOMB_THROWABLE = 13, + BOMB_SMALL = 14, + BOMB_BRIMSTONE = 15, + BOMB_SAD_BLOOD = 16, + BOMB_GIGA = 17, + BOMB_GOLDENTROLL = 18, + BOMB_ROCKET = 19, + BOMB_ROCKET_GIGA = 20, +} + +CacheFlag = { + CACHE_DAMAGE = 0x1, + CACHE_FIREDELAY = 0x2, + CACHE_SHOTSPEED = 0x4, + CACHE_RANGE = 0x8, + CACHE_SPEED = 0x10, + CACHE_TEARFLAG = 0x20, + CACHE_TEARCOLOR = 0x40, + CACHE_FLYING = 0x80, + CACHE_WEAPON = 0x100, + CACHE_FAMILIARS = 0x200, + CACHE_LUCK = 0x400, + CACHE_SIZE = 0x800, -- invalidates player size + CACHE_COLOR = 0x1000, -- invalidates player color + CACHE_PICKUP_VISION = 0x2000, -- invalidates effects that predict pickup drops (i.e. Guppy's Eye) + + CACHE_ALL = 0xFFFF, + + CACHE_TWIN_SYNC = 0x80000000, -- special cache flag used when syncing Jacob and Esau's speed +} + +NpcState = { + STATE_INIT = 0, + STATE_APPEAR = 1, + STATE_APPEAR_CUSTOM = 2, + STATE_IDLE = 3, + STATE_MOVE = 4, + STATE_SUICIDE = 5, + STATE_JUMP = 6, + STATE_STOMP = 7, + STATE_ATTACK = 8, + STATE_ATTACK2 = 9, + STATE_ATTACK3 = 10, + STATE_ATTACK4 = 11, + STATE_SUMMON = 12, + STATE_SUMMON2 = 13, + STATE_SUMMON3 = 14, + STATE_SPECIAL = 15, + STATE_UNIQUE_DEATH = 16, + STATE_DEATH = 17 +} + +EntityGridCollisionClass = { + GRIDCOLL_NONE = 0, + GRIDCOLL_WALLS_X = 1, -- only collide with vertical walls + GRIDCOLL_WALLS_Y = 2, -- only collide with horizontal walls + GRIDCOLL_WALLS = 3, -- only collide with walls + GRIDCOLL_BULLET = 4, -- detect collision with solids (no pits), don't correct position + GRIDCOLL_GROUND = 5, -- collide with all grid entities (rocks, pits, ..), correct position + GRIDCOLL_NOPITS = 6, -- collide with all grid entities except pits and correct position + GRIDCOLL_PITSONLY = 7, -- moving inside a pit, collide with everything else, correct position +} + +EntityCollisionClass = { + ENTCOLL_NONE = 0, -- no collision with other entities + ENTCOLL_PLAYERONLY = 1, -- collide with player only + ENTCOLL_PLAYEROBJECTS = 2, -- collide with player, tears, familiars, .. + ENTCOLL_ENEMIES = 3, -- collide with enemies + ENTCOLL_ALL = 4 -- collide with everything +} + +EntityFlag = { + FLAG_NO_STATUS_EFFECTS = 1, -- prevent freeze/poison/slow/charm/confusion/fear/burn + FLAG_NO_INTERPOLATE = 1<<1, -- do not interpolate position + FLAG_APPEAR = 1<<2, -- play appear animation after Init + FLAG_RENDER_FLOOR = 1<<3, -- will be rendered to floor texture + FLAG_NO_TARGET = 1<<4, -- will not be a target of NPCs or familiars + FLAG_FREEZE = 1<<5, -- freezing effect + FLAG_POISON = 1<<6, -- poison effect + FLAG_SLOW = 1<<7, -- slowing (velocity) + FLAG_CHARM = 1<<8, -- Charmed + FLAG_CONFUSION = 1<<9, -- Confused + FLAG_MIDAS_FREEZE = 1<<10, -- Midas frozen + FLAG_FEAR = 1<<11, -- Fleeing in Fear (like Mom's Pad) + FLAG_BURN = 1<<12, -- Caused by Fire Mind tears, works like poison except with Red color effect. + FLAG_RENDER_WALL = 1<<13, -- will be rendered to wall texture + FLAG_INTERPOLATION_UPDATE = 1<<14, -- entity is updating at 60 fps, and this is an odd frame + FLAG_APPLY_GRAVITY = 1<<15, -- In sidescrolling room, this indicates that we're in a gravity zone. + FLAG_NO_BLOOD_SPLASH = 1<<16, + FLAG_NO_REMOVE_ON_TEX_RENDER = 1<<17, -- for FLAG_RENDER_FLOOR and FLAG_RENDER_WALL + FLAG_NO_DEATH_TRIGGER = 1<<18, + + -- NOTE: Those next flags share the same bit but have a different meaning depending on entity type + FLAG_NO_SPIKE_DAMAGE = 1<<19, -- EntityNPC: shouldn't take any damage from spikes + FLAG_LASER_POP = 1<<19, -- EntityTear: Pop tear fired by a laser, should decelerate very quickly for the first few frames + FLAG_ITEM_SHOULD_DUPLICATE = 1<<19, -- EntityPickup: item pedestal affected by Damocles, will be duplicated at the end of the current frame + + FLAG_BOSSDEATH_TRIGGERED = 1<<20, + FLAG_DONT_OVERWRITE = 1<<21, -- Used in entityfactory to not remove this entity if there is no space left for new entity + FLAG_SPAWN_STICKY_SPIDERS = 1<<22, -- Used by Sticky bombs to generate spiders on death + FLAG_SPAWN_BLACK_HP = 1<<23, -- Used by black hp drop tear flag to drop a black hp on enemy death + FLAG_SHRINK = 1<<24, -- God's flesh effect + FLAG_NO_FLASH_ON_DAMAGE = 1<<25, -- Entity will not flash red when damaged + FLAG_NO_KNOCKBACK = 1<<26, -- Bombs and farts have no knockback effects + FLAG_SLIPPERY_PHYSICS = 1<<27, -- Standing on a slippery surface + FLAG_ADD_JAR_FLY = 1<<28, -- Adds a fly to the jar when killed + FLAG_FRIENDLY = 1<<29, -- Charmed and m_CharmCountdown<0 + FLAG_NO_PHYSICS_KNOCKBACK = 1<<30, -- No knockback from general collisions + FLAG_DONT_COUNT_BOSS_HP = 1<<31, -- Do not count boss hp + FLAG_NO_SPRITE_UPDATE = 1<<32, -- Do not update sprite animation + FLAG_CONTAGIOUS = 1<<33, -- Used for Contagious item (if the enemy is infected) + FLAG_BLEED_OUT = 1<<34, -- Used for Mom's Razor + FLAG_HIDE_HP_BAR = 1<<35, -- Added for Ultra Greed so his HP can be hidden after he "dies" since his entity sticks around + FLAG_NO_DAMAGE_BLINK = 1<<36, -- Player was given a short period of invulnerability by something other than damage, don't blink + FLAG_PERSISTENT = 1<<37, -- Entity persists between rooms + + FLAG_BACKDROP_DETAIL = 1<<38, -- Was spawned as a backdrop decoration, should be deleted if the current backdrop changes (due to Delirium) + FLAG_AMBUSH = 1<<39, -- Enemy was spawned by some sort of ambush (Greed Mode, challenge rooms), don't collide with the player for a few frames + FLAG_GLITCH = 1<<40, -- Glitched out, has different effects depending on the entity + FLAG_SPIN = 1<<41, -- Used by Spin to Win, causes a familiar to rapidly spin around its owner + FLAG_NO_REWARD = 1<<42, -- Doesn't spawn any kind of reward on death + FLAG_REDUCE_GIBS = 1<<43, -- Spawn less gibs on death + FLAG_TRANSITION_UPDATE = 1<<44, -- Updates during room/stage transitions + FLAG_NO_PLAYER_CONTROL = 1<<45, -- Cannot be controlled by players + FLAG_NO_QUERY = 1<<46, -- Hide from query results + FLAG_KNOCKED_BACK = 1<<47, -- Strong knockback: Forcefy moved in a specified direction for a short duration + FLAG_APPLY_IMPACT_DAMAGE = 1<<48, -- Inflicts damage upon colliding with enemies, takes damage when colliding with walls + FLAG_ICE_FROZEN = 1<<49, -- Frozen solid + FLAG_ICE = 1<<50, -- Flagged to become frozen on death + FLAG_MAGNETIZED = 1<<51, -- Magnetized: Attracts nearby enemies, projectiles and pickups + FLAG_BAITED = 1<<52, -- Baited: Is targeted by nearby enemies + FLAG_KILLSWITCH = 1<<53, -- Killed by a killswitch + FLAG_WEAKNESS = 1<<54, -- Weakness effect from Reverse Strength + FLAG_EXTRA_GORE = 1<<55, -- Spawns more gibs on death + FLAG_BRIMSTONE_MARKED = 1<<56, -- Marked by Azazel B, takes extra damage from Brimstone attacks + FLAG_HELD = 1<<57, -- Picked up by a player + FLAG_THROWN = 1<<58, -- Thrown by a player + FLAG_FRIENDLY_BALL = 1<<59, -- Used to detect enemies spawned by Friendly Ball +} + +DamageFlag = { + DAMAGE_NOKILL = 1, -- damage can not kill the receiver + DAMAGE_FIRE = 1<<1, -- source is some sort of fire (ie. fireplace) + DAMAGE_EXPLOSION = 1<<2, -- damage comes from an explosion + DAMAGE_LASER = 1<<3, -- damage comes from laser + DAMAGE_ACID = 1<<4, -- damage comes from acid, e.g. blood acid + DAMAGE_RED_HEARTS = 1<<5, -- damage affects only red hearts if > 1 (ex: razor) + DAMAGE_COUNTDOWN = 1<<6, -- damage from unicorn horn, the nail, game kid that has cooldown + DAMAGE_SPIKES = 1<<7, -- damage from spikes + DAMAGE_CLONES = 1<<8, -- damage is done by clones when they took damage, avoid infinite loops + DAMAGE_POOP = 1<<9, -- damage from red poop + DAMAGE_DEVIL = 1<<10, -- damage comes from devil room deal + DAMAGE_ISSAC_HEART = 1<<11, -- Indicates the damage has been redirected from Isaac's Heart familiar + DAMAGE_TNT = 1<<12, -- damage comes from a TNT barrel + DAMAGE_INVINCIBLE = 1<<13, -- damages even if invincible (currently only for player). Used on IV Bag. + DAMAGE_SPAWN_FLY = 1<<14, -- creates a fly when damage is applied + DAMAGE_POISON_BURN = 1<<15, -- damage comes from POISON/BURN flags + DAMAGE_CURSED_DOOR = 1<<16, -- damage comes from a cursed door + DAMAGE_TIMER = 1<<17, -- damage comes from the passage of time (used for player damage by time limited special seeds) + DAMAGE_IV_BAG = 1<<18, -- damage from using the IV Bag + DAMAGE_PITFALL = 1<<19, -- damage comes from the passage of time (used for player damage by time limited special seeds) + DAMAGE_CHEST = 1<<20, -- damage comes from spiked chest + DAMAGE_FAKE = 1<<21, -- fake damage that should trigger player's damage effects. + DAMAGE_BOOGER = 1<<22, -- damage from booger tear + DAMAGE_SPAWN_BLACK_HEART = 1<<23, -- should drop a black heart if damage is lethal + DAMAGE_CRUSH = 1<<24, -- damage comes from a strong impact (Mom's foot, rock spikes, rock tears) + DAMAGE_NO_MODIFIERS = 1<<25, -- ignore damage modifiers (such as doubled damage from the Womb and later floors or reduced damage from the Wafer) + DAMAGE_SPAWN_RED_HEART = 1<<26, -- should drop a red heart if damage is lethal + DAMAGE_SPAWN_COIN = 1<<27, -- should drop a coin if damage is lethal + DAMAGE_NO_PENALTIES = 1<<28, -- damage shouldn't apply any penalties (such as devil deal chance) + DAMAGE_SPAWN_TEMP_HEART = 1<<29, -- should drop a half red heart that quickly despawns if damage is lethal + DAMAGE_IGNORE_ARMOR = 1<<30, -- damage ignores boss armor + DAMAGE_SPAWN_CARD = 1<<31, -- should drop a card if damage is lethal + DAMAGE_SPAWN_RUNE = 1<<32, -- should drop a rune if damage is lethal +} + +SortingLayer = { + SORTING_BACKGROUND = 0, -- Background level, behind grid entities (creep, pitfalls) + SORTING_DOOR = 1, -- Used by door Xray animation + SORTING_NORMAL = 2 -- Uses Y position to determine Z sorting +} + +FamiliarVariant = { + FAMILIAR_NULL = 0, + BROTHER_BOBBY = 1, + DEMON_BABY = 2, + LITTLE_CHUBBY = 3, + LITTLE_GISH = 4, + LITTLE_STEVEN = 5, + ROBO_BABY = 6, + SISTER_MAGGY = 7, + ABEL = 8, + GHOST_BABY = 9, + HARLEQUIN_BABY = 10, + RAINBOW_BABY = 11, + ISAACS_HEAD = 12, + BLUE_BABY_SOUL = 13, + DEAD_BIRD = 14, + EVES_BIRD_FOOT = 15, + DADDY_LONGLEGS = 16, + PEEPER = 17, + BOMB_BAG = 20, + SACK_OF_PENNIES = 21, + LITTLE_CHAD = 22, + RELIC = 23, + BUM_FRIEND = 24, + HOLY_WATER = 25, + KEY_PIECE_1 = 26, + KEY_PIECE_2 = 27, + KEY_FULL = 28, + FOREVER_ALONE = 30, + DISTANT_ADMIRATION = 31, + GUARDIAN_ANGEL = 32, + FLY_ORBITAL = 33, + SACRIFICIAL_DAGGER = 35, + DEAD_CAT = 40, + ONE_UP = 41, + GUPPYS_HAIRBALL = 42, + BLUE_FLY = 43, + CUBE_OF_MEAT_1 = 44, + CUBE_OF_MEAT_2 = 45, + CUBE_OF_MEAT_3 = 46, + CUBE_OF_MEAT_4 = 47, + ISAACS_BODY = 48, + SMART_FLY = 50, + DRY_BABY = 51, + JUICY_SACK = 52, + ROBO_BABY_2 = 53, + ROTTEN_BABY = 54, + HEADLESS_BABY = 55, + LEECH = 56, + MYSTERY_SACK = 57, + BBF = 58, + BOBS_BRAIN = 59, + BEST_BUD = 60, + LIL_BRIMSTONE = 61, + ISAACS_HEART = 62, + LIL_HAUNT = 63, + DARK_BUM = 64, + BIG_FAN = 65, + SISSY_LONGLEGS = 66, + PUNCHING_BAG = 67, + GUILLOTINE = 68, + BALL_OF_BANDAGES_1 = 69, + BALL_OF_BANDAGES_2 = 70, + BALL_OF_BANDAGES_3 = 71, + BALL_OF_BANDAGES_4 = 72, + BLUE_SPIDER = 73, + MONGO_BABY = 74, + SAMSONS_CHAINS = 75, + CAINS_OTHER_EYE = 76, + BLUEBABYS_ONLY_FRIEND = 77, + SCISSORS = 78, + GEMINI = 79, + INCUBUS = 80, + FATES_REWARD = 81, + LIL_CHEST = 82, + SWORN_PROTECTOR = 83, + FRIEND_ZONE = 84, + LOST_FLY = 85, + CHARGED_BABY = 86, + LIL_GURDY = 87, + BUMBO = 88, + CENSER = 89, + KEY_BUM = 90, + RUNE_BAG = 91, + SERAPHIM = 92, + GB_BUG = 93, + SPIDER_MOD = 94, + FARTING_BABY = 95, + SUCCUBUS = 96, + LIL_LOKI = 97, + OBSESSED_FAN = 98, + PAPA_FLY = 99, + MILK = 100, + MULTIDIMENSIONAL_BABY = 101, + SUPER_BUM = 102, + TONSIL = 103, + BIG_CHUBBY = 104, + DEPRESSION = 105, + SHADE = 106, + HUSHY = 107, + LIL_MONSTRO = 108, + KING_BABY = 109, + FINGER = 110, + YO_LISTEN = 111, + ACID_BABY = 112, + SPIDER_BABY = 113, + SACK_OF_SACKS = 114, + BROWN_NUGGET_POOTER = 115, + BLOODSHOT_EYE = 116, + MOMS_RAZOR = 117, + + -- Booster Pack #1 + ANGRY_FLY = 118, + BUDDY_IN_A_BOX = 119, + SPRINKLER = 120, + + -- Booster Pack #2 + LEPROSY = 121, + + -- Booster Pack #3 + LIL_HARBINGERS = 122, + ANGELIC_PRISM = 123, + + -- Booster Pack #5 + MYSTERY_EGG = 124, + LIL_SPEWER = 125, + SLIPPED_RIB = 126, + POINTY_RIB = 127, + BONE_ORBITAL = 128, + HALLOWED_GROUND = 129, + JAW_BONE = 130, + + -- Repentance + INTRUDER = 200, + DIP = 201, + DAMOCLES = 202, + BLOOD_OATH = 203, + PSY_FLY = 204, + MENORAH = 205, + WISP = 206, + PEEPER_2 = 207, + BOILED_BABY = 208, + FREEZER_BABY = 209, + BIRD_CAGE = 210, + LOST_SOUL = 211, + LIL_DUMPY = 212, + KNIFE_PIECE_1 = 213, + KNIFE_PIECE_2 = 214, + + TINYTOMA = 216, + TINYTOMA_2 = 217, + BOT_FLY = 218, + + SIREN_MINION = 220, + PASCHAL_CANDLE = 221, + STITCHES = 222, + KNIFE_FULL = 223, + BABY_PLUM = 224, + FRUITY_PLUM = 225, + SPIN_TO_WIN = 226, + + MINISAAC = 228, + SWARM_FLY_ORBITAL = 229, + LIL_ABADDON = 230, + ABYSS_LOCUST = 231, + LIL_PORTAL = 232, + WORM_FRIEND = 233, + BONE_SPUR = 234, + TWISTED_BABY = 235, + STAR_OF_BETHLEHEM = 236, + ITEM_WISP = 237, + BLOOD_BABY = 238, + CUBE_BABY = 239, + UMBILICAL_BABY = 240, + BLOOD_PUPPY = 241, + VANISHING_TWIN = 242, + DECAP_ATTACK = 243, + + FORGOTTEN_BODY = 900, +} + +LocustSubtypes = { + LOCUST_OF_WRATH = 1, + LOCUST_OF_PESTILENCE = 2, + LOCUST_OF_FAMINE = 3, + LOCUST_OF_DEATH = 4, + LOCUST_OF_CONQUEST = 5 +} + +ItemType = { + ITEM_NULL = 0, + ITEM_PASSIVE = 1, + ITEM_TRINKET = 2, + ITEM_ACTIVE = 3, + ITEM_FAMILIAR = 4 +} + +NullItemID = { + ID_NULL = - 1, + ID_EXPLOSIVE_DIARRHEA = 0, + ID_PUBERTY = 1, + ID_I_FOUND_PILLS = 2, + ID_LORD_OF_THE_FLIES = 3, + ID_STATUE = 4, + ID_GUPPY = 5, + ID_WIZARD = 6, + ID_MAGDALENE = 7, + ID_CAIN = 8, + ID_JUDAS = 9, + ID_EVE = 10, + ID_AZAZEL = 11, + ID_EDEN = 12, + ID_SAMSON = 13, + ID_BLINDFOLD = 14, + ID_BLANKFACE = 15, + ID_CHRISTMAS = 16, + ID_PURITY_GLOW = 17, + ID_EMPTY_VESSEL = 18, + ID_MAW_MARK = 19, + ID_MUSHROOM = 20, + ID_ANGEL = 21, + ID_BOB = 22, + ID_DRUGS = 23, + ID_MOM = 24, + ID_BABY = 25, + ID_EVIL_ANGEL = 26, + ID_POOP = 27, + ID_RELAX = 28, + ID_OVERDOSE = 29, + ID_BOOMERANG = 30, + ID_MEGABLAST = 31, + ID_LAZARUS = 32, + ID_LAZARUS2 = 33, + ID_LILITH = 34, + ID_IWATA = 35, + ID_APOLLYON = 36, + ID_BOOKWORM = 37, + ID_ADULTHOOD = 38, + ID_SPIDERBABY = 39, + ID_BATWING_WINGS = 40, + ID_HUGE_GROWTH = 41, + ID_ERA_WALK = 42, + ID_SACRIFICIAL_ALTAR = 43, + ID_FORGOTTEN = 44, + + -- Repentance + ID_BRIMSTONE2 = 45, + ID_HOLY_CARD = 46, + ID_KEEPER = 47, + + ID_SPIN_TO_WIN = 50, + ID_BETHANY = 51, + ID_JACOB = 52, + ID_ESAU = 53, + ID_BLOOD_OATH = 54, + ID_INTRUDER = 55, + ID_SOL = 56, + ID_IT_HURTS = 57, + ID_MARS = 58, + ID_TOOTH_AND_NAIL = 59, + ID_REVERSE_MAGICIAN = 60, + ID_REVERSE_HIGH_PRIESTESS = 61, + ID_REVERSE_EMPRESS = 62, + ID_REVERSE_CHARIOT = 63, + ID_REVERSE_STRENGTH = 64, + ID_REVERSE_HANGED_MAN = 65, + ID_REVERSE_SUN = 66, + ID_REVERSE_DEVIL = 67, + ID_REVERSE_CHARIOT_ALT = 68, + ID_REVERSE_TEMPERANCE = 69, + ID_REVERSE_STARS = 70, + ID_WAVY_CAP_1 = 71, + ID_WAVY_CAP_2 = 72, + ID_WAVY_CAP_3 = 73, + ID_LUNA = 74, + ID_JUPITER_BODY = 75, + ID_JUPITER_BODY_ANGEL = 76, + ID_JUPITER_BODY_PONY = 77, + ID_JUPITER_BODY_WHITEPONY = 78, + ID_ISAAC_B = 79, + ID_MAGDALENE_B = 80, + ID_CAIN_B = 81, + ID_JUDAS_B = 82, + ID_BLUEBABY_B = 83, + ID_EVE_B = 84, + ID_SAMSON_B = 85, + ID_AZAZEL_B = 86, + ID_LAZARUS_B = 87, + ID_EDEN_B = 88, + ID_LOST_B = 89, + ID_LILITH_B = 90, + ID_KEEPER_B = 91, + ID_APOLLYON_B = 92, + ID_FORGOTTEN_B = 93, + ID_BETHANY_B = 94, + ID_JACOB_B = 95, + ID_AZAZELS_RAGE_1 = 96, + ID_AZAZELS_RAGE_2 = 97, + ID_AZAZELS_RAGE_3 = 98, + ID_AZAZELS_RAGE_4 = 99, + ID_ESAU_JR = 100, + ID_SPIRIT_SHACKLES_SOUL = 101, + ID_SPIRIT_SHACKLES_DISABLED = 102, + ID_BERSERK_SAMSON = 103, + ID_LAZARUS2_B = 104, + ID_SOUL_B = 105, + ID_FORGOTTEN_BOMB = 106, + ID_EXTRA_BIG_FAN = 107, + ID_JACOB2_B = 108, + ID_JACOBS_CURSE = 109, + ID_BLOODY_BABYLON = 110, + ID_DARK_ARTS = 111, + ID_LOST_CURSE = 112, + ID_LAZARUS_SOUL_REVIVE = 113, + ID_SOUL_MAGDALENE = 114, + ID_SOUL_BLUEBABY = 115, + ID_MIRROR_DEATH = 116, + ID_HEMOPTYSIS = 117, + ID_I_FOUND_HORSE_PILLS = 118, + ID_HORSE_PUBERTY = 119, + ID_SOUL_FORGOTTEN = 120, + ID_SOUL_JACOB = 121, + NUM_NULLITEMS = 122 +} + +WeaponType = { + WEAPON_TEARS = 1, + WEAPON_BRIMSTONE = 2, + WEAPON_LASER = 3, + WEAPON_KNIFE = 4, + WEAPON_BOMBS = 5, + WEAPON_ROCKETS = 6, + WEAPON_MONSTROS_LUNGS = 7, + WEAPON_LUDOVICO_TECHNIQUE = 8, + WEAPON_TECH_X = 9, + WEAPON_BONE = 10, + WEAPON_NOTCHED_AXE = 11, -- Notched Axe + WEAPON_URN_OF_SOULS = 12, -- Urn of Souls + WEAPON_SPIRIT_SWORD = 13, -- Spirit Sword + WEAPON_FETUS = 14, -- (currently unused) + WEAPON_UMBILICAL_WHIP = 15, -- Fetus whip + NUM_WEAPON_TYPES = 16 +} + +PlayerSpriteLayer = { + SPRITE_GLOW = 0, + SPRITE_BODY = 1, + SPRITE_BODY0 = 2, + SPRITE_BODY1 = 3, + SPRITE_HEAD = 4, + SPRITE_HEAD0 = 5, + SPRITE_HEAD1 = 6, + SPRITE_HEAD2 = 7, + SPRITE_HEAD3 = 8, + SPRITE_HEAD4 = 9, + SPRITE_HEAD5 = 10, + SPRITE_TOP0 = 11, + SPRITE_EXTRA = 12, + SPRITE_GHOST = 13, + SPRITE_BACK = 14, + NUM_SPRITE_LAYERS = 15 +} + +BabySubType = { + BABY_UNASSIGNED = - 1, + BABY_SPIDER = 0, + BABY_LOVE = 1, + BABY_BLOAT = 2, + BABY_WATER = 3, + BABY_PSY = 4, + BABY_CURSED = 5, + BABY_TROLL = 6, + BABY_YBAB = 7, + BABY_COCKEYED = 8, + BABY_HOST = 9, + BABY_LOST = 10, + BABY_CUTE = 11, + BABY_CROW = 12, + BABY_SHADOW = 13, + BABY_GLASS = 14, + BABY_GOLD = 15, + BABY_CY = 16, + BABY_BEAN = 17, + BABY_MAG = 18, + BABY_WRATH = 19, + BABY_WRAPPED = 20, + BABY_BEGOTTEN = 21, + BABY_DEAD = 22, + BABY_FIGHTING = 23, + BABY_0 = 24, + BABY_GLITCH = 25, + BABY_MAGNET = 26, + BABY_BLACK = 27, + BABY_RED = 28, + BABY_WHITE = 29, + BABY_BLUE = 30, + BABY_RAGE = 31, + BABY_CRY = 32, + BABY_YELLOW = 33, + BABY_LONG = 34, + BABY_GREEN = 35, + BABY_LIL = 36, + BABY_BIG = 37, + BABY_BROWN = 38, + BABY_NOOSE = 39, + BABY_HIVE = 40, + BABY_BUDDY = 41, + BABY_COLORFUL = 42, + BABY_WHORE = 43, + BABY_CRACKED = 44, + BABY_DRIPPING = 45, + BABY_BLINDING = 46, + BABY_SUCKY = 47, + BABY_DARK = 48, + BABY_PICKY = 49, + BABY_REVENGE = 50, + BABY_BELIAL = 51, + BABY_SALE = 52, + BABY_GOAT = 53, + BABY_SUPER_GREED = 54, + BABY_MORT = 55, + BABY_APOLLYON = 56, + BABY_BONE = 57, + BABY_BOUND = 58, + --BABY_BASIC = 59 + + -- Repentance + BABY_FOUND_SOUL = 59, + BABY_LOST_WHITE = 60, + BABY_LOST_BLACK = 61, + BABY_LOST_BLUE = 62, + BABY_LOST_GREY = 63, + BABY_WISP = 64, + BABY_DOUBLE = 65, + BABY_GLOWING = 66, + BABY_ILLUSION = 67, + BABY_HOPE = 68, + BABY_SOLOMON_A = 69, + BABY_SOLOMON_B = 70, + BABY_BASIC = 71 +} + +LaserOffset = { + LASER_TECH1_OFFSET = 0, + LASER_TECH2_OFFSET = 1, + LASER_TECH5_OFFSET = 2, + LASER_SHOOP_OFFSET = 3, + LASER_BRIMSTONE_OFFSET = 4, + LASER_MOMS_EYE_OFFSET = 5, + LASER_TRACTOR_BEAM_OFFSET = 6 +} + +ActionTriggers = { + ACTIONTRIGGER_NONE = 0, + ACTIONTRIGGER_BOMBPLACED = 1, + ACTIONTRIGGER_MOVED = 1 << 1, + ACTIONTRIGGER_SHOOTING = 1 << 2, + ACTIONTRIGGER_CARDPILLUSED = 1 << 3, + ACTIONTRIGGER_ITEMACTIVATED = 1 << 4, + ACTIONTRIGGER_ITEMSDROPPED = 1 << 5 +} + +GridCollisionClass = { + COLLISION_NONE = 0, + COLLISION_PIT = 1, + COLLISION_OBJECT = 2, + COLLISION_SOLID = 3, + COLLISION_WALL = 4, + COLLISION_WALL_EXCEPT_PLAYER = 5 +} + +Direction = { + NO_DIRECTION = -1, + LEFT = 0, + UP = 1, + RIGHT = 2, + DOWN = 3 +} + +LevelStage = { + STAGE_NULL = 0, + STAGE1_1 = 1, + STAGE1_2 = 2, + STAGE2_1 = 3, + STAGE2_2 = 4, + STAGE3_1 = 5, + STAGE3_2 = 6, + STAGE4_1 = 7, + STAGE4_2 = 8, + STAGE4_3 = 9, + STAGE5 = 10, + STAGE6 = 11, + STAGE7 = 12, + STAGE8 = 13, -- Home + NUM_STAGES = 14, + + STAGE1_GREED = 1, + STAGE2_GREED = 2, + STAGE3_GREED = 3, + STAGE4_GREED = 4, + STAGE5_GREED = 5, + STAGE6_GREED = 6, + STAGE7_GREED = 7, + + NUM_BACKWARDS_STAGES = 7, -- Save stages up to Mausoleum II for the Ascent (7 stages) +} + +StageType = { + STAGETYPE_ORIGINAL = 0, + STAGETYPE_WOTL = 1, + STAGETYPE_AFTERBIRTH = 2, + STAGETYPE_GREEDMODE = 3, -- deprecated, Greed Mode no longer has its own stages + STAGETYPE_REPENTANCE = 4, + STAGETYPE_REPENTANCE_B = 5, +} + +RoomType = { + ROOM_NULL = 0, + ROOM_DEFAULT = 1, + ROOM_SHOP = 2, + ROOM_ERROR = 3, + ROOM_TREASURE = 4, + ROOM_BOSS = 5, + ROOM_MINIBOSS = 6, + ROOM_SECRET = 7, + ROOM_SUPERSECRET = 8, + ROOM_ARCADE = 9, + ROOM_CURSE = 10, + ROOM_CHALLENGE = 11, + ROOM_LIBRARY = 12, + ROOM_SACRIFICE = 13, + ROOM_DEVIL = 14, + ROOM_ANGEL = 15, + ROOM_DUNGEON = 16, + ROOM_BOSSRUSH = 17, + ROOM_ISAACS = 18, + ROOM_BARREN = 19, + ROOM_CHEST = 20, + ROOM_DICE = 21, + ROOM_BLACK_MARKET = 22, + ROOM_GREED_EXIT = 23, + --NUM_ROOMTYPES = 24 + + -- Repentance + ROOM_PLANETARIUM = 24, + ROOM_TELEPORTER = 25, -- Mausoleum teleporter entrance, currently unused + ROOM_TELEPORTER_EXIT = 26, -- Mausoleum teleporter exit, currently unused + ROOM_SECRET_EXIT, -- Trapdoor room to the alt path floors + ROOM_BLUE, -- Blue Womb rooms spawned by Blue Key + ROOM_ULTRASECRET = 29, -- Red secret rooms + NUM_ROOMTYPES = 30 +} + +RoomShape = { + ROOMSHAPE_1x1 = 1, + ROOMSHAPE_IH = 2, + ROOMSHAPE_IV = 3, + ROOMSHAPE_1x2 = 4, + ROOMSHAPE_IIV = 5, + ROOMSHAPE_2x1 = 6, + ROOMSHAPE_IIH = 7, + ROOMSHAPE_2x2 = 8, + ROOMSHAPE_LTL = 9, + ROOMSHAPE_LTR = 10, + ROOMSHAPE_LBL = 11, + ROOMSHAPE_LBR = 12, + NUM_ROOMSHAPES = 13 +} + +DoorSlot = { + NO_DOOR_SLOT = - 1, + LEFT0 = 0, + UP0 = 1, + RIGHT0 = 2, + DOWN0 = 3, + LEFT1 = 4, + UP1 = 5, + RIGHT1 = 6, + DOWN1 = 7, + NUM_DOOR_SLOTS = 8 +} + +LevelCurse = { + CURSE_NONE = 0, + CURSE_OF_DARKNESS = 1, + CURSE_OF_LABYRINTH = 1 << 1, + CURSE_OF_THE_LOST = 1 << 2, + CURSE_OF_THE_UNKNOWN = 1 << 3, + CURSE_OF_THE_CURSED = 1 << 4, + CURSE_OF_MAZE = 1 << 5, + CURSE_OF_BLIND = 1 << 6, + CURSE_OF_GIANT = 1 << 7, -- Less rooms, all rooms are large and generated by merging existing rooms together (currently unused) + NUM_CURSES = 9 +} + +PlayerType = { + PLAYER_POSSESSOR = -1, + + PLAYER_ISAAC = 0, + PLAYER_MAGDALENA = 1, + PLAYER_CAIN = 2, + PLAYER_JUDAS = 3, + PLAYER_XXX = 4, + PLAYER_EVE = 5, + PLAYER_SAMSON = 6, + PLAYER_AZAZEL = 7, + PLAYER_LAZARUS = 8, + PLAYER_EDEN = 9, + PLAYER_THELOST = 10, + PLAYER_LAZARUS2 = 11, + PLAYER_BLACKJUDAS = 12, + PLAYER_LILITH = 13, + PLAYER_KEEPER = 14, + PLAYER_APOLLYON = 15, + PLAYER_THEFORGOTTEN = 16, + PLAYER_THESOUL = 17, + --NUM_PLAYER_TYPES = 18 + + -- Repentance + PLAYER_BETHANY = 18, + PLAYER_JACOB = 19, + PLAYER_ESAU = 20, + PLAYER_ISAAC_B = 21, + PLAYER_MAGDALENA_B = 22, + PLAYER_CAIN_B = 23, + PLAYER_JUDAS_B = 24, + PLAYER_XXX_B = 25, + PLAYER_EVE_B = 26, + PLAYER_SAMSON_B = 27, + PLAYER_AZAZEL_B = 28, + PLAYER_LAZARUS_B = 29, + PLAYER_EDEN_B = 30, + PLAYER_THELOST_B = 31, + PLAYER_LILITH_B = 32, + PLAYER_KEEPER_B = 33, + PLAYER_APOLLYON_B = 34, + PLAYER_THEFORGOTTEN_B = 35, + PLAYER_BETHANY_B = 36, + PLAYER_JACOB_B = 37, + PLAYER_LAZARUS2_B = 38, + PLAYER_JACOB2_B = 39, + PLAYER_THESOUL_B = 40, + NUM_PLAYER_TYPES = 41 +} + +PlayerForm = { + PLAYERFORM_GUPPY = 0, + PLAYERFORM_LORD_OF_THE_FLIES = 1, + PLAYERFORM_MUSHROOM = 2, + PLAYERFORM_ANGEL = 3, + PLAYERFORM_BOB = 4, + PLAYERFORM_DRUGS = 5, + PLAYERFORM_MOM = 6, + PLAYERFORM_BABY = 7, + PLAYERFORM_EVIL_ANGEL = 8, + PLAYERFORM_POOP = 9, + PLAYERFORM_BOOK_WORM = 10, + PLAYERFORM_ADULTHOOD = 11, + PLAYERFORM_SPIDERBABY = 12, + PLAYERFORM_STOMPY = 13, + PLAYERFORM_FLIGHT = 14, -- AB+, unused + NUM_PLAYER_FORMS = 15 +} + +PillColor = { + PILL_NULL = 0, + PILL_BLUE_BLUE = 1, + PILL_WHITE_BLUE = 2, + PILL_ORANGE_ORANGE = 3, + PILL_WHITE_WHITE = 4, + PILL_REDDOTS_RED = 5, + PILL_PINK_RED = 6, + PILL_BLUE_CADETBLUE = 7, + PILL_YELLOW_ORANGE = 8, + PILL_ORANGEDOTS_WHITE = 9, + PILL_WHITE_AZURE = 10, + PILL_BLACK_YELLOW = 11, + PILL_WHITE_BLACK = 12, + PILL_WHITE_YELLOW = 13, + --NUM_PILLS = 14 + + NUM_STANDARD_PILLS = 14, + PILL_GOLD = 14, + NUM_PILLS = 15, + PILL_GIANT_FLAG = 0x800, + PILL_COLOR_MASK = 0x7ff, +} + +Music = { + MUSIC_NULL = 0, + MUSIC_BASEMENT = 1, + MUSIC_CAVES = 2, + MUSIC_DEPTHS = 3, + MUSIC_CELLAR = 4, + MUSIC_CATACOMBS = 5, + MUSIC_NECROPOLIS = 6, + MUSIC_WOMB_UTERO = 7, + MUSIC_GAME_OVER = 8, + MUSIC_BOSS = 9, + MUSIC_CATHEDRAL = 10, + MUSIC_SHEOL = 11, + MUSIC_DARK_ROOM = 12, + MUSIC_CHEST = 13, + MUSIC_BURNING_BASEMENT = 14, + MUSIC_FLOODED_CAVES = 15, + MUSIC_DANK_DEPTHS = 16, + MUSIC_SCARRED_WOMB = 17, + MUSIC_BLUE_WOMB = 18, + MUSIC_UTERO = 19, + MUSIC_MOM_BOSS = 20, + MUSIC_MOMS_HEART_BOSS = 21, + MUSIC_ISAAC_BOSS = 22, + MUSIC_SATAN_BOSS = 23, + MUSIC_DARKROOM_BOSS = 24, + MUSIC_BLUEBABY_BOSS = 25, + MUSIC_BOSS2 = 26, + MUSIC_HUSH_BOSS = 27, + MUSIC_ULTRAGREED_BOSS = 28, + MUSIC_LIBRARY_ROOM = 30, + MUSIC_SECRET_ROOM = 31, + MUSIC_SECRET_ROOM2 = 32, + MUSIC_DEVIL_ROOM = 33, + MUSIC_ANGEL_ROOM = 34, + MUSIC_SHOP_ROOM = 35, + MUSIC_ARCADE_ROOM = 36, + MUSIC_BOSS_OVER = 37, + MUSIC_CHALLENGE_FIGHT = 38, + MUSIC_BOSS_RUSH = 39, + MUSIC_JINGLE_BOSS_RUSH_OUTRO = 40, + MUSIC_BOSS3 = 41, + MUSIC_JINGLE_BOSS_OVER3 = 42, + MUSIC_MOTHER_BOSS = 43, + MUSIC_DOGMA_BOSS = 44, + MUSIC_BEAST_BOSS = 45, + MUSIC_JINGLE_MOTHER_OVER = 47, + MUSIC_JINGLE_DOGMA_OVER = 48, + MUSIC_JINGLE_BEAST_OVER = 49, + MUSIC_PLANETARIUM = 50, + MUSIC_SECRET_ROOM_ALT_ALT = 51, + MUSIC_BOSS_OVER_TWISTED = 52, + MUSIC_CREDITS = 60, + MUSIC_TITLE = 61, + MUSIC_TITLE_AFTERBIRTH = 62, + MUSIC_TITLE_REPENTANCE = 63, + MUSIC_JINGLE_GAME_START_ALT = 64, + MUSIC_JINGLE_NIGHTMARE_ALT = 65, + MUSIC_MOTHERS_SHADOW_INTRO = 66, + MUSIC_DOGMA_INTRO = 67, + MUSIC_STRANGE_DOOR_JINGLE = 68, + MUSIC_DARK_CLOSET = 69, + MUSIC_CREDITS_ALT = 70, + MUSIC_CREDITS_ALT_FINAL = 71, + MUSIC_JINGLE_BOSS = 81, + MUSIC_JINGLE_BOSS_OVER = 83, + MUSIC_JINGLE_HOLYROOM_FIND = 84, + MUSIC_JINGLE_SECRETROOM_FIND = 85, + MUSIC_JINGLE_TREASUREROOM_ENTRY_0 = 87, + MUSIC_JINGLE_TREASUREROOM_ENTRY_1 = 88, + MUSIC_JINGLE_TREASUREROOM_ENTRY_2 = 89, + MUSIC_JINGLE_TREASUREROOM_ENTRY_3 = 90, + MUSIC_JINGLE_CHALLENGE_ENTRY = 91, + MUSIC_JINGLE_CHALLENGE_OUTRO = 92, + MUSIC_JINGLE_GAME_OVER = 93, + MUSIC_JINGLE_DEVILROOM_FIND = 94, + MUSIC_JINGLE_GAME_START = 95, + MUSIC_JINGLE_NIGHTMARE = 96, + MUSIC_JINGLE_BOSS_OVER2 = 97, + MUSIC_JINGLE_HUSH_OVER = 98, + MUSIC_INTRO_VOICEOVER = 100, + MUSIC_EPILOGUE_VOICEOVER = 101, + MUSIC_VOID = 102, + MUSIC_VOID_BOSS = 103, + MUSIC_DOWNPOUR = 104, + MUSIC_MINES = 105, + MUSIC_MAUSOLEUM = 106, + MUSIC_CORPSE = 107, + MUSIC_DROSS = 108, + MUSIC_ASHPIT = 109, + MUSIC_GEHENNA = 110, + MUSIC_MORTIS = 111, -- unused + MUSIC_ISAACS_HOUSE = 112, + MUSIC_FINAL_VOICEOVER = 113, + MUSIC_DOWNPOUR_REVERSE = 114, + MUSIC_DROSS_REVERSE = 115, + MUSIC_MINESHAFT_AMBIENT = 116, + MUSIC_MINESHAFT_ESCAPE = 117, + MUSIC_REVERSE_GENESIS = 118, + NUM_MUSIC = 119 +} + +SoundEffect = { + SOUND_NULL = 0, + SOUND_1UP = 1, + SOUND_BIRD_FLAP = 2, + SOUND_BLOBBY_WIGGLE = 3, + SOUND_INSECT_SWARM_LOOP = 4, + SOUND_BLOOD_LASER = 5, + SOUND_BLOOD_LASER_SMALL = 6, -- new + SOUND_BLOOD_LASER_LARGE = 7, + SOUND_BOOK_PAGE_TURN_12 = 8, + SOUND_BOSS_BUG_HISS = 9, + SOUND_BLOOD_LASER_LARGER = 10, -- new + SOUND_BOSS_GURGLE_ROAR = 11, + SOUND_BOSS_LITE_GURGLE = 12, + SOUND_BOSS_LITE_HISS = 13, + SOUND_BOSS_LITE_ROAR = 14, + SOUND_BOSS_LITE_SLOPPY_ROAR = 15, + SOUND_BOSS_SPIT_BLOB_BARF = 16, + SOUND_PAPER_IN = 17, -- new + SOUND_PAPER_OUT = 18, -- new + SOUND_CHEST_DROP = 21, + SOUND_CHEST_OPEN = 22, + SOUND_CHOIR_UNLOCK = 23, + SOUND_COIN_SLOT = 24, + SOUND_CUTE_GRUNT = 25, + SOUND_DEATH_BURST_BONE = 27, -- new + SOUND_DEATH_BURST_LARGE = 28, + SOUND_DEATH_REVERSE = 29, -- new + SOUND_DEATH_BURST_SMALL = 30, + SOUND_DEATH_CARD = 33, + SOUND_DEVIL_CARD = 34, + SOUND_DOOR_HEAVY_CLOSE = 35, + SOUND_DOOR_HEAVY_OPEN = 36, + SOUND_FART = 37, + SOUND_FETUS_JUMP = 38, + SOUND_FETUS_LAND = 40, + SOUND_FIREDEATH_HISS = 43, + SOUND_FLOATY_BABY_ROAR = 44, + SOUND_COIN_INSERT = 45, -- new + SOUND_METAL_DOOR_CLOSE = 46, -- new + SOUND_METAL_DOOR_OPEN = 47, -- new + SOUND_FORESTBOSS_STOMPS = 48, + SOUND_SCYTHE_BREAK = 49, -- new + SOUND_STONE_WALKER = 50, -- new + SOUND_GASCAN_POUR = 51, + SOUND_HELLBOSS_GROUNDPOUND = 52, + SOUND_GLASS_BREAK = 53, -- new + SOUND_HOLY = 54, + SOUND_ISAAC_HURT_GRUNT = 55, + SOUND_CHILD_HAPPY_ROAR_SHORT = 56, + SOUND_CHILD_ANGRY_ROAR = 57, + SOUND_KEYPICKUP_GAUNTLET = 58, + SOUND_KEY_DROP0 = 59, + SOUND_BABY_HURT = 60, + SOUND_MAGGOT_BURST_OUT = 64, + SOUND_MAGGOT_ENTER_GROUND = 66, + SOUND_MEAT_FEET_SLOW0 = 68, + SOUND_MEAT_IMPACTS = 69, + SOUND_MEAT_IMPACTS_OLD = 70, + SOUND_MEAT_JUMPS = 72, + SOUND_MEATY_DEATHS = 77, + SOUND_POT_BREAK_2 = 78, -- new + SOUND_MUSHROOM_POOF_2 = 79, -- new + SOUND_BLACK_POOF = 80, -- new + SOUND_STATIC = 81, -- new + SOUND_MOM_VOX_DEATH = 82, + SOUND_MOM_VOX_EVILLAUGH = 84, + SOUND_MOM_VOX_FILTERED_DEATH_1 = 85, + SOUND_MOM_VOX_FILTERED_EVILLAUGH = 86, + SOUND_MOM_VOX_FILTERED_HURT = 87, + SOUND_MOM_VOX_FILTERED_ISAAC = 90, + SOUND_MOM_VOX_GRUNT = 93, + SOUND_MOM_VOX_HURT = 97, + SOUND_MOM_VOX_ISAAC = 101, + SOUND_MONSTER_GRUNT_0 = 104, + SOUND_MONSTER_GRUNT_1 = 106, + SOUND_MONSTER_GRUNT_2 = 108, + SOUND_MONSTER_GRUNT_4 = 112, + SOUND_MONSTER_GRUNT_5 = 114, + SOUND_MONSTER_ROAR_0 = 115, + SOUND_MONSTER_ROAR_1 = 116, + SOUND_MONSTER_ROAR_2 = 117, + SOUND_MONSTER_ROAR_3 = 118, + SOUND_MONSTER_YELL_A = 119, + SOUND_MONSTER_YELL_B = 122, + SOUND_POWERUP1 = 128, + SOUND_POWERUP2 = 129, + SOUND_POWERUP3 = 130, + SOUND_POWERUP_SPEWER = 132, + SOUND_REDLIGHTNING_ZAP = 133, + SOUND_REDLIGHTNING_ZAP_WEAK = 134, -- new + SOUND_REDLIGHTNING_ZAP_STRONG = 135, -- new + SOUND_REDLIGHTNING_ZAP_BURST = 136, -- new + SOUND_ROCK_CRUMBLE = 137, + SOUND_POT_BREAK = 138, + SOUND_MUSHROOM_POOF = 139, + SOUND_ROCKET_BLAST_DEATH = 141, + SOUND_SMB_LARGE_CHEWS_4 = 142, + SOUND_SCARED_WHIMPER = 143, + SOUND_SHAKEY_KID_ROAR = 146, + SOUND_SINK_DRAIN_GURGLE = 149, + SOUND_TEARIMPACTS = 150, + SOUND_TEARS_FIRE = 153, + SOUND_UNLOCK00 = 156, + SOUND_VAMP_GULP = 157, + SOUND_WHEEZY_COUGH = 158, + SOUND_SPIDER_COUGH = 159, + SOUND_PORTAL_OPEN = 160, + SOUND_PORTAL_LOOP = 161, + SOUND_PORTAL_SPAWN = 162, + SOUND_TAR_LOOP = 163, + SOUND_ZOMBIE_WALKER_KID = 165, + SOUND_ANIMAL_SQUISH = 166, + SOUND_ANGRY_GURGLE = 167, + SOUND_BAND_AID_PICK_UP = 169, + SOUND_BATTERYCHARGE = 170, + SOUND_BEEP = 171, + SOUND_LIGHTBOLT = 172, -- new + SOUND_LIGHTBOLT_CHARGE = 173, -- new + SOUND_BLOODBANK_TOUCHED = 174, + SOUND_BLOODBANK_SPAWN = 175, + SOUND_BLOODSHOOT = 178, + SOUND_BOIL_HATCH = 181, + SOUND_BOSS1_EXPLOSIONS = 182, + SOUND_EXPLOSION_WEAK = 183, -- new + SOUND_EXPLOSION_STRONG = 184, -- new + SOUND_BOSS2_BUBBLES = 185, + SOUND_EXPLOSION_DEBRIS = 186, -- new + SOUND_BOSS2INTRO_ERRORBUZZ = 187, + SOUND_CASTLEPORTCULLIS = 190, + SOUND_CHARACTER_SELECT_LEFT = 194, + SOUND_CHARACTER_SELECT_RIGHT = 195, + SOUND_DERP = 197, + SOUND_DIMEDROP = 198, + SOUND_DIMEPICKUP = 199, + SOUND_LUCKYPICKUP = 200, + SOUND_FETUS_FEET = 201, + SOUND_GOLDENKEY = 204, + SOUND_GOOATTACH0 = 205, + SOUND_GOODEATH = 207, + SOUND_HAND_LASERS = 211, + SOUND_HEARTIN = 212, + SOUND_HEARTOUT = 213, + SOUND_HELL_PORTAL1 = 214, + SOUND_HELL_PORTAL2 = 215, + SOUND_ISAACDIES = 217, + SOUND_ITEMRECHARGE = 218, + SOUND_KISS_LIPS1 = 219, + SOUND_LEECH = 221, + SOUND_MAGGOTCHARGE = 224, + SOUND_MEATHEADSHOOT = 226, + SOUND_METAL_BLOCKBREAK = 229, + SOUND_NICKELDROP = 231, + SOUND_NICKELPICKUP = 232, + SOUND_PENNYDROP = 233, + SOUND_PENNYPICKUP = 234, + SOUND_PLOP = 237, + SOUND_SATAN_APPEAR = 238, + SOUND_SATAN_BLAST = 239, + SOUND_SATAN_CHARGE_UP = 240, + SOUND_SATAN_GROW = 241, + SOUND_SATAN_HURT = 242, + SOUND_SATAN_RISE_UP = 243, + SOUND_SATAN_SPIT = 245, + SOUND_SATAN_STOMP = 246, + SOUND_SCAMPER = 249, + SOUND_SHELLGAME = 252, + SOUND_SLOTSPAWN = 255, + SOUND_SPLATTER = 258, + SOUND_STEAM_HALFSEC = 261, + SOUND_STONESHOOT = 262, + SOUND_WEIRD_WORM_SPIT = 263, + SOUND_SUMMONSOUND = 265, + SOUND_SUPERHOLY = 266, + SOUND_THUMBS_DOWN = 267, + SOUND_THUMBSUP = 268, + SOUND_FIRE_BURN = 269, + SOUND_HAPPY_RAINBOW = 270, + SOUND_LASERRING = 271, -- new (ab) + SOUND_LASERRING_WEAK = 272, -- new (ab) + SOUND_LASERRING_STRONG = 273, -- new (ab) + SOUND_CASH_REGISTER = 274, -- new (ab+) + + SOUND_ANGEL_WING = 275, + SOUND_ANGEL_BEAM = 276, + SOUND_HOLY_MANTLE = 277, + + SOUND_MEGA_BLAST_START = 278, + SOUND_MEGA_BLAST_LOOP = 279, + SOUND_MEGA_BLAST_END = 280, + + SOUND_BLOOD_LASER_LOOP = 281, + + SOUND_MENU_SCROLL = 282, + SOUND_MENU_NOTE_APPEAR = 283, + SOUND_MENU_NOTE_HIDE = 284, + SOUND_MENU_CHARACTER_SELECT = 285, + SOUND_SUMMON_POOF = 286, + + SOUND_BOO_MAD = 300, + SOUND_FART_GURG = 301, + SOUND_FAT_GRUNT = 302, + SOUND_FAT_WIGGLE = 303, + SOUND_FIRE_RUSH = 304, + SOUND_GHOST_ROAR = 305, + SOUND_GHOST_SHOOT = 306, + SOUND_GRROOWL = 307, + SOUND_GURG_BARF = 308, + SOUND_INHALE = 309, + SOUND_LOW_INHALE = 310, + SOUND_MEGA_PUKE = 311, + SOUND_MOUTH_FULL = 312, + SOUND_MULTI_SCREAM = 313, + SOUND_SKIN_PULL = 314, + SOUND_WHISTLE = 315, + SOUND_DEVILROOM_DEAL = 316, + SOUND_SPIDER_SPIT_ROAR = 317, + SOUND_WORM_SPIT = 318, + SOUND_LITTLE_SPIT = 319, + SOUND_SATAN_ROOM_APPEAR = 320, + SOUND_HEARTBEAT = 321, + SOUND_HEARTBEAT_FASTER = 322, + SOUND_HEARTBEAT_FASTEST = 323, + + SOUND_48_HR_ENERGY = 324, + SOUND_ALGIZ = 325, + SOUND_AMNESIA = 326, + SOUND_ANZUS = 327, + SOUND_BAD_GAS = 328, + SOUND_BAD_TRIP = 329, + SOUND_BALLS_OF_STEEL = 330, + SOUND_BERKANO = 331, + SOUND_BOMBS_ARE_KEY = 332, + SOUND_CARD_VS_HUMAN = 333, + SOUND_CHAOS_CARD = 334, + SOUND_CREDIT_CARD = 335, + SOUND_DAGAZ = 336, + SOUND_DEATH = 337, + SOUND_EHWAZ = 338, + SOUND_EXPLOSIVE_DIAH = 339, + SOUND_FULL_HP = 340, + SOUND_HAGALAZ = 341, + SOUND_HP_DOWN = 342, + SOUND_HP_UP = 343, + SOUND_HEMATEMISIS = 344, + SOUND_I_FOUND_PILLS = 345, + SOUND_JERA = 346, + SOUND_JOKER = 347, + SOUND_JUDGEMENT = 348, + SOUND_JUSTICE = 349, + SOUND_LEMON_PARTY = 350, + SOUND_LUCK_DOWN = 351, + SOUND_LUCK_UP = 352, + SOUND_PARALYSIS = 353, + SOUND_PERTHRO = 354, + SOUND_PHEROMONES = 355, + SOUND_PRETTY_FLY = 356, + SOUND_PUBERTY = 357, + SOUND_RUA_WIZ = 358, + SOUND_RANGE_DOWN = 359, + SOUND_RANGE_UP = 360, + SOUND_RULES_CARD = 361, + SOUND_SEE_4EVER = 362, + SOUND_SPEED_DOWN = 363, + SOUND_SPEED_UP = 364, + SOUND_STRENGTH = 365, + SOUND_SUICIDE_KING = 366, + SOUND_TEARS_DOWN = 367, + SOUND_TEARS_UP = 368, + SOUND_TELEPILLS = 369, + SOUND_TEMPERANCE = 370, + SOUND_THE_CHARIOT = 371, + SOUND_THE_DEVIL = 372, + SOUND_THE_EMPEROR = 373, + SOUND_EMPRESS = 374, + SOUND_FOOL = 375, + SOUND_HANGED_MAN = 376, + SOUND_HERMIT = 377, + SOUND_HIEROPHANT = 378, + SOUND_HIGHT_PRIESTESS = 379, + SOUND_THE_LOVERS = 380, + SOUND_MAGICIAN = 381, + SOUND_MOON = 382, + SOUND_STARS = 383, + SOUND_SUN = 384, + SOUND_TOWER = 385, + SOUND_WORLD = 386, + SOUND_TWO_CLUBS = 387, + SOUND_TWO_DIAMONDS = 388, + SOUND_TWO_HEARTS = 389, + SOUND_TWO_SPADES = 390, + SOUND_WHEEL_OF_FORTUNE = 391, + SOUND_RAGMAN_1 = 392, + SOUND_RAGMAN_2 = 393, + SOUND_RAGMAN_3 = 394, + SOUND_RAGMAN_4 = 395, + SOUND_FLUSH = 396, + SOUND_WATER_DROP = 397, + SOUND_WET_FEET = 398, + + SOUND_ADDICTED = 399, + SOUND_DICE_SHARD = 400, + SOUND_EMERGENCY = 401, + SOUND_INFESTED_EXCL = 402, + SOUND_INFESTED_QUEST = 403, + SOUND_JAIL_CARD = 404, + SOUND_LARGER = 405, + SOUND_PERCS = 406, + SOUND_POWER_PILL = 407, + SOUND_QUESTION_MARK = 408, + SOUND_RELAX = 409, + SOUND_RETRO = 410, + SOUND_SMALL = 411, + SOUND_QQQ = 412, -- ??? pill + SOUND_DANGLE_WHISTLE = 413, + SOUND_LITTLE_HORN_COUGH = 414, + SOUND_LITTLE_HORN_GRUNT_1 = 415, + SOUND_LITTLE_HORN_GRUNT_2 = 416, + SOUND_THE_FORSAKEN_LAUGH = 417, + SOUND_THE_FORSAKEN_SCREAM = 418, + SOUND_THE_STAIN_BURST = 419, + SOUND_BROWNIE_LAUGH = 420, + SOUND_HUSH_ROAR = 421, + SOUND_HUSH_GROWL = 422, + SOUND_HUSH_LOW_ROAR = 423, + SOUND_FRAIL_CHARGE = 424, + SOUND_HUSH_CHARGE = 425, + SOUND_MAW_OF_VOID = 426, + SOUND_ULTRA_GREED_COIN_DESTROY = 427, + SOUND_ULTRA_GREED_COINS_FALLING = 428, + SOUND_ULTRA_GREED_DEATH_SCREAM = 429, + SOUND_ULTRA_GREED_TURN_GOLD_1 = 430, + SOUND_ULTRA_GREED_TURN_GOLD_2 = 431, + SOUND_ULTRA_GREED_ROAR_1 = 432, + SOUND_ULTRA_GREED_ROAR_2 = 433, + SOUND_ULTRA_GREED_SPIT = 434, + SOUND_ULTRA_GREED_PULL_SLOT = 435, + SOUND_ULTRA_GREED_SLOT_SPIN_LOOP = 436, + SOUND_ULTRA_GREED_SLOT_STOP = 437, + SOUND_ULTRA_GREED_SLOT_WIN_LOOP_END = 438, + SOUND_ULTRA_GREED_SLOT_WIN_LOOP = 439, + SOUND_ULTRA_GREED_SPINNING = 440, + SOUND_DOG_BARK = 441, + SOUND_DOG_HOWELL = 442, + SOUND_X_LAX = 443, + SOUND_WRONG = 444, + SOUND_VURP = 445, + SOUND_SUNSHINE = 446, + SOUND_SPADES = 447, + SOUND_HORF = 448, + SOUND_HOLY_CARD = 449, + SOUND_HEARTS = 450, + SOUND_GULP = 451, + SOUND_FRIENDS = 452, + SOUND_EXCITED = 453, + SOUND_DROWSY = 454, + SOUND_DIAMONDS = 455, + SOUND_CLUBS = 456, + SOUND_BLACK_RUNE = 457, + SOUND_PING_PONG = 458, + SOUND_SPEWER = 459, + SOUND_MOM_FOOTSTEPS = 460, + SOUND_BONE_HEART = 461, + SOUND_BONE_SNAP = 462, + SOUND_SHOVEL_DROP = 463, + SOUND_SHOVEL_DIG = 464, + SOUND_GOLD_HEART = 465, + SOUND_GOLD_HEART_DROP = 466, + SOUND_BONE_DROP = 467, + SOUND_UNHOLY = 468, + SOUND_BUTTON_PRESS = 469, + SOUND_GOLDENBOMB = 470, + SOUND_CANDLE_LIGHT = 471, + SOUND_THUNDER = 472, + SOUND_WATER_FLOW_LOOP = 473, + SOUND_BOSS2_DIVE = 474, + SOUND_BOSS2INTRO_PIPES_TURNON = 475, + SOUND_WATER_FLOW_LARGE = 476, + SOUND_DEMON_HIT = 477, + SOUND_PUNCH = 478, + SOUND_FLUTE = 479, + SOUND_LAVA_LOOP = 480, + SOUND_WOOD_PLANK_BREAK = 481, + SOUND_BULLET_SHOT = 482, + SOUND_FLAME_BURST = 483, + SOUND_INFLATE = 484, + SOUND_CLAP = 485, + SOUND_BOSS2INTRO_WATER_EXPLOSION = 486, + SOUND_STONE_IMPACT = 487, + SOUND_BOSS2_WATERTHRASHING = 488, + SOUND_FART_MEGA = 489, + SOUND_MATCHSTICK = 490, + SOUND_FORTUNE_COOKIE = 491, + SOUND_BULB_FLASH = 492, + SOUND_BATTERYDISCHARGE = 493, + SOUND_WHIP = 494, + SOUND_WHIP_HIT = 495, + SOUND_FREEZE = 496, + SOUND_ROTTEN_HEART = 497, + SOUND_FREEZE_SHATTER = 498, + SOUND_BONE_BOUNCE = 499, + SOUND_BONE_BREAK = 500, + SOUND_BISHOP_HIT = 501, + SOUND_PORTAL_LOOP = 502, -- unused + SOUND_CHAIN_LOOP = 503, + SOUND_CHAIN_BREAK = 504, + SOUND_MINECART_LOOP = 505, + SOUND_TOOTH_AND_NAIL = 506, + SOUND_TOOTH_AND_NAIL_TICK = 507, + + SOUND_STATIC_BUILDUP = 508, + + SOUND_THREAD_SNAP= 509, + SOUND_BIG_LEECH = 510, + + SOUND_REVERSE_EXPLOSION = 511, + + SOUND_REVERSE_FOOL = 512, + SOUND_REVERSE_MAGICIAN = 513, + SOUND_REVERSE_HIGH_PRIESTESS = 514, + SOUND_REVERSE_EMPRESS = 515, + SOUND_REVERSE_EMPEROR = 516, + SOUND_REVERSE_HIEROPHANT = 517, + SOUND_REVERSE_LOVERS = 518, + SOUND_REVERSE_CHARIOT = 519, + SOUND_REVERSE_JUSTICE = 520, + SOUND_REVERSE_HERMIT = 521, + SOUND_REVERSE_WHEEL_OF_FORTUNE = 522, + SOUND_REVERSE_STRENGTH = 523, + SOUND_REVERSE_HANGED_MAN = 524, + SOUND_REVERSE_DEATH = 525, + SOUND_REVERSE_TEMPERANCE = 526, + SOUND_REVERSE_DEVIL = 527, + SOUND_REVERSE_TOWER = 528, + SOUND_REVERSE_STARS = 529, + SOUND_REVERSE_MOON = 530, + SOUND_REVERSE_SUN = 531, + SOUND_REVERSE_JUDGEMENT = 532, + SOUND_REVERSE_WORLD = 533, + + SOUND_FLAMETHROWER_START = 534, + SOUND_FLAMETHROWER_LOOP = 535, + SOUND_FLAMETHROWER_END = 536, + SOUND_ROCKET_LAUNCH = 537, + SOUND_SWORD_SPIN = 538, + SOUND_BABY_BRIM = 539, + SOUND_KNIFE_PULL = 540, + + SOUND_DOGMA_APPEAR_SCREAM = 541, + SOUND_DOGMA_DEATH = 542, + SOUND_DOGMA_BLACKHOLE_CHARGE = 543, + SOUND_DOGMA_BLACKHOLE_SHOOT = 544, + SOUND_DOGMA_BLACKHOLE_OPEN = 545, + SOUND_DOGMA_BLACKHOLE_CLOSE = 546, + SOUND_DOGMA_BRIMSTONE_CHARGE = 547, + SOUND_DOGMA_BRIMSTONE_SHOOT = 548, + SOUND_DOGMA_GODHEAD = 549, + SOUND_DOGMA_JACOBS = 550, + SOUND_DOGMA_JACOBS_ZAP = 551, + SOUND_DOGMA_SCREAM = 552, + SOUND_DOGMA_PREACHER = 553, + SOUND_DOGMA_RING_START = 554, + SOUND_DOGMA_RING_LOOP = 555, + SOUND_DOGMA_FEATHER_SPRAY = 556, + SOUND_DOGMA_JACOBS_DOT = 557, + SOUND_DOGMA_BLACKHOLE_LOOP = 558, + + SOUND_DOGMA_ANGEL_TRANSFORM = 559, + SOUND_DOGMA_ANGEL_TRANSFORM_END = 560, + SOUND_DOGMA_LIGHT_APPEAR = 561, + SOUND_DOGMA_LIGHT_BALL_THROW = 562, + SOUND_DOGMA_LIGHT_RAY_CHARGE = 563, + SOUND_DOGMA_LIGHT_RAY_FIRE = 564, + SOUND_DOGMA_SPIN_ATTACK = 565, + SOUND_DOGMA_WING_FLAP = 566, + SOUND_DOGMA_TV_BREAK = 567, + + SOUND_DIVINE_INTERVENTION = 568, + + SOUND_MENU_FLIP_LIGHT = 569, + SOUND_MENU_FLIP_DARK = 570, + SOUND_MENU_RIP = 571, + SOUND_URN_OPEN = 572, + SOUND_URN_CLOSE = 573, + SOUND_RECALL = 574, + + SOUND_LARYNX_SCREAM_LO = 575, + SOUND_LARYNX_SCREAM_MED = 576, + SOUND_LARYNX_SCREAM_HI = 577, + + SOUND_GROUND_TREMOR = 578, + + SOUND_SOUL_PICKUP = 579, + SOUND_BALL_AND_CHAIN_LOOP = 580, + SOUND_BALL_AND_CHAIN_HIT = 581, + SOUND_LAZARUS_FLIP_DEAD = 582, + SOUND_LAZARUS_FLIP_ALIVE = 583, + + SOUND_RECALL_FINISH = 584, + SOUND_ROCKET_LAUNCH_SHORT = 585, + SOUND_ROCKET_LAUNCH_TINY = 586, + SOUND_ROCKET_EXPLOSION = 587, + SOUND_JELLY_BOUNCE = 588, + SOUND_POOP_LASER = 589, + SOUND_POISON_WARN = 590, + SOUND_POISON_HURT = 591, + SOUND_BERSERK_START = 592, + SOUND_BERSERK_TICK = 593, + SOUND_BERSERK_END = 594, + SOUND_EDEN_GLITCH = 595, + + SOUND_RAILROAD_TRACK_RAISE = 596, + SOUND_RAILROAD_TRACK_RAISE_FAR = 597, + + SOUND_MOM_AND_DAD_1 = 598, + SOUND_MOM_AND_DAD_2 = 599, + SOUND_MOM_AND_DAD_3 = 600, + SOUND_MOM_AND_DAD_4 = 601, + + SOUND_THUMBSUP_AMPLIFIED = 602, + SOUND_THUMBSDOWN_AMPLIFIED = 603, + SOUND_POWERUP_SPEWER_AMPLIFIED = 604, + SOUND_POOPITEM_THROW = 605, + SOUND_POOPITEM_STORE = 606, + SOUND_POOPITEM_HOLD = 607, + SOUND_MIRROR_ENTER = 608, + SOUND_MIRROR_EXIT = 609, + SOUND_MIRROR_BREAK = 610, + + SOUND_ANIMA_TRAP = 611, + SOUND_ANIMA_RATTLE = 612, + SOUND_ANIMA_BREAK = 613, + + SOUND_VAMP_DOUBLE = 614, + SOUND_FLASHBACK = 615, + SOUND_DARK_ESAU_OPEN = 616, + SOUND_DARK_ESAU_DEATH_OPEN = 617, + + SOUND_MOTHER_DEATH1 = 618, + SOUND_MOTHER_DEATH2 = 619, + SOUND_MOTHER_FISTPOUND1 = 620, + SOUND_MOTHER_FISTPOUND2 = 621, + SOUND_MOTHER_FISTPOUND3 = 622, + SOUND_MOTHER_FISTULA = 623, + SOUND_MOTHER_APPEAR1 = 624, + SOUND_MOTHER_APPEAR2 = 625, + SOUND_MOTHER_KNIFE_START = 626, + SOUND_MOTHER_KNIFE_THROW = 627, + SOUND_MOTHER_SUMMON_ISAACS_START = 628, + SOUND_MOTHER_SUMMON_ISAACS_END = 629, + SOUND_MOTHER_HAND_BOIL_START = 630, + SOUND_MOTHER_GRUNT1 = 631, + SOUND_MOTHER_GRUNT5 = 632, + SOUND_MOTHER_GRUNT6 = 633, + SOUND_MOTHER_GRUNT7 = 634, + SOUND_MOTHER_LAUGH = 635, + SOUND_MOTHER_SPIN_START = 636, + SOUND_MOTHER_WALL_SHOT_START = 637, + SOUND_MOTHER_MISC = 638, + SOUND_MOTHER_SHOOT = 639, + SOUND_MOTHER_SUCTION = 640, + SOUND_MOTHER_ISAAC_RISE = 641, + SOUND_MOTHER_ISAAC_HIT = 642, + SOUND_MOTHER_WRIST_SWELL = 643, + SOUND_MOTHER_WRIST_EXPLODE = 644, + SOUND_MOTHER_DEATH_MELT = 645, + SOUND_MOTHER_ANGER_SHAKE = 646, + SOUND_MOTHER_CHARGE1 = 647, + SOUND_MOTHER_CHARGE2 = 648, + SOUND_MOTHER_LAND_SMASH = 649, + + SOUND_ISAAC_ROAR = 650, + + SOUND_FAMINE_APPEAR = 651, + SOUND_FAMINE_DEATH_1 = 652, + SOUND_FAMINE_DEATH_2 = 653, + SOUND_FAMINE_DASH_START = 654, + SOUND_FAMINE_DASH = 655, + SOUND_FAMINE_SHOOT = 656, + SOUND_FAMINE_BURST = 657, + SOUND_FAMINE_GURGLE = 658, + + SOUND_PESTILENCE_MAGGOT_START = 659, + SOUND_PESTILENCE_MAGGOT_SHOOT = 660, + SOUND_PESTILENCE_MAGGOT_RETURN = 661, + SOUND_PESTILENCE_BODY_SHOOT = 662, + SOUND_PESTILENCE_HEAD_DEATH = 663, + SOUND_PESTILENCE_DEATH = 664, + SOUND_PESTILENCE_COUGH = 665, + SOUND_PESTILENCE_BARF = 666, + SOUND_PESTILENCE_APPEAR = 667, + SOUND_PESTILENCE_HEAD_EXPLODE = 668, + SOUND_PESTILENCE_MAGGOT_ENTER = 669, + SOUND_PESTILENCE_MAGGOT_POPOUT = 670, + SOUND_PESTILENCE_MAGGOT_SHOOT2 = 671, + SOUND_PESTILENCE_NECK_PUKE = 672, + SOUND_PESTILENCE_PUKE_START = 673, + + SOUND_WAR_APPEAR = 674, + SOUND_WAR_APPEAR_LAVA = 675, + SOUND_WAR_BOMB_TOSS = 676, + SOUND_WAR_DASH_START = 677, + SOUND_WAR_DASH = 678, + SOUND_WAR_HORSE_DEATH = 679, + SOUND_WAR_DEATH = 680, + SOUND_WAR_FIRE_SCREEM = 681, + SOUND_WAR_GRAB_PLAYER = 682, + SOUND_WAR_BOMB_HOLD = 683, + SOUND_WAR_BOMB_PULL_OUT = 684, + SOUND_WAR_CHASE = 685, + SOUND_WAR_BOMB_TICK = 686, + SOUND_WAR_FLAME = 687, + SOUND_WAR_LAVA_SPLASH = 688, + SOUND_WAR_LAVA_DASH = 689, + + SOUND_DEATH_DIES = 690, + SOUND_DEATH_DESTROY_SKULLS = 691, + SOUND_DEATH_GROWL = 692, + SOUND_DEATH_SWIPE_START = 693, + SOUND_DEATH_SWIPE = 694, + SOUND_DEATH_SUMMON_SCYTHES = 695, + SOUND_DEATH_SUMMON_SKULLS = 696, + + SOUND_BEAST_DEATH = 697, + SOUND_BEAST_LASER = 698, + SOUND_BEAST_BACKGROUND_DIVE = 699, + SOUND_BEAST_FIRE_RING = 700, + SOUND_BEAST_GHOST_DASH = 701, + SOUND_BEAST_GHOST_RISE = 702, + SOUND_BEAST_LAVA_BALL_SPLASH = 703, + SOUND_BEAST_LAVA_RISE = 704, + SOUND_BEAST_SUCTION_LOOP = 705, + SOUND_BEAST_FIRE_BARF = 706, + SOUND_BEAST_GHOST_ROAR = 707, + SOUND_BEAST_INTRO_SCREAM = 708, + SOUND_BEAST_SUCTION_END = 709, + SOUND_BEAST_SUCTION_START = 710, + SOUND_BEAST_SPIT = 711, + SOUND_BEAST_SURFACE_GROWL = 712, + SOUND_BEAST_SWITCH_SIDES = 713, + + SOUND_MOTHERSHADOW_APPEAR = 714, + SOUND_MOTHERSHADOW_CHARGE_UP = 715, + SOUND_MOTHERSHADOW_DASH = 716, + SOUND_MOTHERSHADOW_END = 717, + SOUND_MOTHERSHADOW_INTRO = 718, + + SOUND_BUMBINO_DEATH = 719, + SOUND_BUMBINO_DIZZY = 720, + SOUND_BUMBINO_HIT_WALL = 721, + SOUND_BUMBINO_MISC = 722, + SOUND_BUMBINO_PUNCH = 723, + SOUND_BUMBINO_RAM = 724, + SOUND_BUMBINO_SLAM = 725, + SOUND_BUMBINO_SNAP_OUT = 726, + + SOUND_SIREN_SCREAM = 727, + SOUND_SIREN_SING = 728, + + SOUND_DEATH_SKULL_SUMMON_LOOP = 729, + SOUND_DEATH_SKULL_SUMMON_END = 730, + + SOUND_BEAST_DEATH_2 = 731, + SOUND_BEAST_ANGELIC_BLAST = 732, + + SOUND_ANCIENT_RECALL = 733, + SOUND_ERA_WALK = 734, + SOUND_HUGE_GROWTH = 735, + SOUND_RUNE_SHARD = 736, + SOUND_SHOT_SPEED_DOWN = 737, + SOUND_SHOT_SPEED_UP = 738, + SOUND_EXPERIMENTAL_PILL = 739, + SOUND_CRACKED_KEY = 740, + SOUND_QUEEN_OF_HEARTS = 741, + SOUND_WILD_CARD = 742, + SOUND_SOUL_OF_ISAAC = 743, + SOUND_SOUL_OF_MAGDALENE = 744, + SOUND_SOUL_OF_CAIN = 745, + SOUND_SOUL_OF_JUDAS = 746, + SOUND_SOUL_OF_XXX = 747, + SOUND_SOUL_OF_EVE = 748, + SOUND_SOUL_OF_SAMSON = 749, + SOUND_SOUL_OF_AZAZEL = 750, + SOUND_SOUL_OF_LAZARUS = 751, + SOUND_SOUL_OF_EDEN = 752, + SOUND_SOUL_OF_THE_LOST = 753, + SOUND_SOUL_OF_LILITH = 754, + SOUND_SOUL_OF_THE_KEEPER = 755, + SOUND_SOUL_OF_APOLLYON = 756, + SOUND_SOUL_OF_THE_FORGOTTEN = 757, + SOUND_SOUL_OF_BETHANY = 758, + SOUND_SOUL_OF_JACOB_AND_ESAU = 759, + SOUND_MEGA_BAD_GAS = 760, + SOUND_MEGA_BAD_TRIP = 761, + SOUND_MEGA_BALLS_OF_STEEL = 762, + SOUND_MEGA_BOMBS_ARE_KEY = 763, + SOUND_MEGA_EXPLOSIVE_DIARRHEA = 764, + SOUND_MEGA_FULL_HEALTH = 765, + SOUND_MEGA_HEALTH_UP = 766, + SOUND_MEGA_HEALTH_DOWN = 767, + SOUND_MEGA_I_FOUND_PILLS = 768, + SOUND_MEGA_PUBERTY = 769, + SOUND_MEGA_PRETTY_FLY = 770, + SOUND_MEGA_RANGE_DOWN = 771, + SOUND_MEGA_RANGE_UP = 772, + SOUND_MEGA_SPEED_DOWN = 773, + SOUND_MEGA_SPEED_UP = 774, + SOUND_MEGA_TEARS_DOWN = 775, + SOUND_MEGA_TEARS_UP = 776, + SOUND_MEGA_LUCK_DOWN = 777, + SOUND_MEGA_LUCK_UP = 778, + SOUND_MEGA_TELEPILLS = 779, + SOUND_MEGA_48_HR_ENERGY = 780, + SOUND_MEGA_HEMATEMESIS = 781, + SOUND_MEGA_PARALYSIS = 782, + SOUND_MEGA_I_CAN_SEE_FOREVER = 783, + SOUND_MEGA_PHEROMONES = 784, + SOUND_MEGA_AMNESIA = 785, + SOUND_MEGA_LEMON_PARTY = 786, + SOUND_MEGA_ARE_YOU_A_WIZARD = 787, + SOUND_MEGA_PERCS = 788, + SOUND_MEGA_ADDICTED = 789, + SOUND_MEGA_RELAX = 790, + SOUND_MEGA_TRIPLE_QUESTION_MARK = 791, + SOUND_MEGA_ONE_MAKES_YOU_LARGER = 792, + SOUND_MEGA_ONE_MAKES_YOU_SMALL = 793, + SOUND_MEGA_INFESTED = 794, + SOUND_MEGA_INFESTED_1 = 795, + SOUND_MEGA_POWER_PILL = 796, + SOUND_MEGA_RETRO_VISION = 797, + SOUND_MEGA_FRIENDS_TIL_THE_END = 798, + SOUND_MEGA_EXLAX = 799, + SOUND_MEGA_SOMETHINGS_WRONG = 800, + SOUND_MEGA_IM_DROWSY = 801, + SOUND_MEGA_IM_EXCITED = 802, + SOUND_MEGA_GULP = 803, + SOUND_MEGA_HORF = 804, + SOUND_MEGA_SUNSHINE = 805, + SOUND_MEGA_VURP = 806, + SOUND_MEGA_SHOT_SPEED_DOWN = 807, + SOUND_MEGA_SHOT_SPEED_UP = 808, + SOUND_MEGA_EXPERIMENTAL_PILL = 809, + + SOUND_SIREN_LUNGE = 810, + SOUND_SIREN_MINION_SMOKE = 811, + SOUND_SIREN_SCREAM_ATTACK = 812, + SOUND_SIREN_SING_STAB = 813, + + SOUND_BEAST_LAVABALL_RISE = 814, + SOUND_BEAST_GROWL = 815, + SOUND_BEAST_GRUMBLE = 816, + + NUM_SOUND_EFFECTS = 817 +} + +DoorState = { + STATE_INIT = 0, + STATE_CLOSED = 1, + STATE_OPEN = 2, + STATE_ONE_CHAIN = 3, + STATE_HALF_CRACKED = 4 +} + +DoorVariant = { + DOOR_UNSPECIFIED = 0, + DOOR_LOCKED = 1, + DOOR_LOCKED_DOUBLE = 2, + DOOR_LOCKED_CRACKED = 3, + DOOR_LOCKED_BARRED = 4, + DOOR_LOCKED_KEYFAMILIAR = 5, + DOOR_LOCKED_GREED = 6, + DOOR_HIDDEN = 7, + DOOR_UNLOCKED = 8 +} + +Difficulty = { + DIFFICULTY_NORMAL = 0, + DIFFICULTY_HARD = 1, + DIFFICULTY_GREED = 2, + DIFFICULTY_GREEDIER = 3 +} + +LevelStateFlag = { + STATE_BUM_KILLED = 0, + STATE_EVIL_BUM_KILLED = 1, + STATE_REDHEART_DAMAGED = 2, + STATE_BUM_LEFT = 3, + STATE_EVIL_BUM_LEFT = 4, + STATE_DAMAGED = 5, + STATE_SHOPKEEPER_KILLED_LVL = 6, + STATE_COMPASS_EFFECT = 7, + STATE_MAP_EFFECT = 8, + STATE_BLUE_MAP_EFFECT = 9, + STATE_FULL_MAP_EFFECT = 10, + STATE_GREED_LOST_PENALTY = 11, + STATE_GREED_MONSTRO_SPAWNED = 12, + STATE_ITEM_DUNGEON_FOUND = 13, + STATE_MAMA_MEGA_USED = 14, + --NUM_STATE_FLAGS = 15 + + STATE_WOODEN_CROSS_REMOVED = 15, + STATE_SHOVEL_QUEST_TRIGGERED = 16, + STATE_SATANIC_BIBLE_USED = 17, + STATE_SOL_EFFECT = 18, + STATE_LEVEL_START_TRIGGERED = 19, + STATE_LUNA_EFFECT = 20, + STATE_VOID_DOOR_DISABLED = 21, + STATE_MINESHAFT_ESCAPE = 22, + STATE_MIRROR_BROKEN = 23, + NUM_STATE_FLAGS = 24 +} + +GameStateFlag = { + STATE_FAMINE_SPAWNED = 0, + STATE_PESTILENCE_SPAWNED = 1, -- obsolete + STATE_WAR_SPAWNED = 2, -- obsolete + STATE_DEATH_SPAWNED = 3, -- obsolete + STATE_BOSSPOOL_SWITCHED = 4, + STATE_DEVILROOM_SPAWNED = 5, + STATE_DEVILROOM_VISITED = 6, + STATE_BOOK_REVELATIONS_USED = 7, + STATE_BOOK_PICKED_UP = 8, + STATE_WRATH_SPAWNED = 9, + STATE_GLUTTONY_SPAWNED = 10, + STATE_LUST_SPAWNED = 11, + STATE_SLOTH_SPAWNED = 12, + STATE_ENVY_SPAWNED = 13, + STATE_PRIDE_SPAWNED = 14, + STATE_GREED_SPAWNED = 15, + STATE_SUPERGREED_SPAWNED = 16, + STATE_DONATION_SLOT_BROKEN = 17, + STATE_DONATION_SLOT_JAMMED = 18, + STATE_HEAVEN_PATH = 19, + STATE_REBIRTH_BOSS_SWITCHED = 20, -- obsolete + STATE_HAUNT_SELECTED = 21, -- obsolete + STATE_ADVERSARY_SELECTED = 22, -- obsolete + STATE_MR_FRED_SELECTED = 23, -- obsolete + STATE_MAMA_GURDY_SELECTED = 24, -- obsolete + STATE_URIEL_SPAWNED = 25, + STATE_GABRIEL_SPAWNED = 26, + STATE_FALLEN_SPAWNED = 27, + STATE_HEADLESS_HORSEMAN_SPAWNED = 28, -- obsolete + STATE_KRAMPUS_SPAWNED = 29, + STATE_DONATION_SLOT_BLOWN = 30, + STATE_SHOPKEEPER_KILLED = 31, + STATE_ULTRAPRIDE_SPAWNED = 32, + STATE_BOSSRUSH_DONE = 33, + STATE_GREED_SLOT_JAMMED = 34, + STATE_AFTERBIRTH_BOSS_SWITCHED = 35, -- obsolete + STATE_BROWNIE_SELECTED = 36, -- obsolete + STATE_SUPERBUM_APPEARED = 37, + STATE_BOSSRUSH_DOOR_SPAWNED = 38, + STATE_BLUEWOMB_DOOR_SPAWNED = 39, + STATE_BLUEWOMB_DONE = 40, + STATE_HEART_BOMB_COIN_PICKED = 41, + STATE_ABPLUS_BOSS_SWITCHED = 42, -- obsolete + STATE_SISTERS_VIS_SELECTED = 43, -- obsolete + STATE_MAX_COINS_OBTAINED = 43, -- set when reaching 99 coins, used to check for the Golden Razor achievement + + STATE_SECRET_PATH = 44, -- set when entering a trapdoor that leads to the alternate path + STATE_PERFECTION_SPAWNED = 45, -- set when Perfection has dropped from a boss + STATE_MAUSOLEUM_HEART_KILLED = 46, -- set when Mom's Heart has been killed in the Mausoleum + STATE_BACKWARDS_PATH_INIT = 47, -- set when entering Mausoleum/Gehenna II through the photo door, causes Dad's Note to spawn instead of the Mom boss room + STATE_BACKWARDS_PATH = 48, -- set during the Ascent + + NUM_STATE_FLAGS = 49 +} + +CollectibleType = { + COLLECTIBLE_NULL = 0, + COLLECTIBLE_SAD_ONION = 1, + COLLECTIBLE_INNER_EYE = 2, + COLLECTIBLE_SPOON_BENDER = 3, + COLLECTIBLE_CRICKETS_HEAD = 4, + COLLECTIBLE_MY_REFLECTION = 5, + COLLECTIBLE_NUMBER_ONE = 6, + COLLECTIBLE_BLOOD_OF_THE_MARTYR = 7, + COLLECTIBLE_BROTHER_BOBBY = 8, + COLLECTIBLE_SKATOLE = 9, + COLLECTIBLE_HALO_OF_FLIES = 10, + COLLECTIBLE_1UP = 11, + COLLECTIBLE_MAGIC_MUSHROOM = 12, + COLLECTIBLE_VIRUS = 13, + COLLECTIBLE_ROID_RAGE = 14, + COLLECTIBLE_HEART = 15, + COLLECTIBLE_RAW_LIVER = 16, + COLLECTIBLE_SKELETON_KEY = 17, + COLLECTIBLE_DOLLAR = 18, + COLLECTIBLE_BOOM = 19, + COLLECTIBLE_TRANSCENDENCE = 20, + COLLECTIBLE_COMPASS = 21, + COLLECTIBLE_LUNCH = 22, + COLLECTIBLE_DINNER = 23, + COLLECTIBLE_DESSERT = 24, + COLLECTIBLE_BREAKFAST = 25, + COLLECTIBLE_ROTTEN_MEAT = 26, + COLLECTIBLE_WOODEN_SPOON = 27, + COLLECTIBLE_BELT = 28, + COLLECTIBLE_MOMS_UNDERWEAR = 29, + COLLECTIBLE_MOMS_HEELS = 30, + COLLECTIBLE_MOMS_LIPSTICK = 31, + COLLECTIBLE_WIRE_COAT_HANGER = 32, + COLLECTIBLE_BIBLE = 33, + COLLECTIBLE_BOOK_OF_BELIAL = 34, + COLLECTIBLE_NECRONOMICON = 35, + COLLECTIBLE_POOP = 36, + COLLECTIBLE_MR_BOOM = 37, + COLLECTIBLE_TAMMYS_HEAD = 38, + COLLECTIBLE_MOMS_BRA = 39, + COLLECTIBLE_KAMIKAZE = 40, + COLLECTIBLE_MOMS_PAD = 41, + COLLECTIBLE_BOBS_ROTTEN_HEAD = 42, + -- 43 + COLLECTIBLE_TELEPORT = 44, + COLLECTIBLE_YUM_HEART = 45, + COLLECTIBLE_LUCKY_FOOT = 46, + COLLECTIBLE_DOCTORS_REMOTE = 47, + COLLECTIBLE_CUPIDS_ARROW = 48, + COLLECTIBLE_SHOOP_DA_WHOOP = 49, + COLLECTIBLE_STEVEN = 50, + COLLECTIBLE_PENTAGRAM = 51, + COLLECTIBLE_DR_FETUS = 52, + COLLECTIBLE_MAGNETO = 53, + COLLECTIBLE_TREASURE_MAP = 54, + COLLECTIBLE_MOMS_EYE = 55, + COLLECTIBLE_LEMON_MISHAP = 56, + COLLECTIBLE_DISTANT_ADMIRATION = 57, + COLLECTIBLE_BOOK_OF_SHADOWS = 58, + -- 59 + COLLECTIBLE_LADDER = 60, + -- 61 + COLLECTIBLE_CHARM_VAMPIRE = 62, + COLLECTIBLE_BATTERY = 63, + COLLECTIBLE_STEAM_SALE = 64, + COLLECTIBLE_ANARCHIST_COOKBOOK = 65, + COLLECTIBLE_HOURGLASS = 66, + COLLECTIBLE_SISTER_MAGGY = 67, + COLLECTIBLE_TECHNOLOGY = 68, + COLLECTIBLE_CHOCOLATE_MILK = 69, + COLLECTIBLE_GROWTH_HORMONES = 70, + COLLECTIBLE_MINI_MUSH = 71, + COLLECTIBLE_ROSARY = 72, + COLLECTIBLE_CUBE_OF_MEAT = 73, + COLLECTIBLE_QUARTER = 74, + COLLECTIBLE_PHD = 75, + COLLECTIBLE_XRAY_VISION = 76, + COLLECTIBLE_MY_LITTLE_UNICORN = 77, + COLLECTIBLE_BOOK_OF_REVELATIONS = 78, + COLLECTIBLE_MARK = 79, + COLLECTIBLE_PACT = 80, + COLLECTIBLE_DEAD_CAT = 81, + COLLECTIBLE_LORD_OF_THE_PIT = 82, + COLLECTIBLE_THE_NAIL = 83, + COLLECTIBLE_WE_NEED_TO_GO_DEEPER = 84, + COLLECTIBLE_DECK_OF_CARDS = 85, + COLLECTIBLE_MONSTROS_TOOTH = 86, + COLLECTIBLE_LOKIS_HORNS = 87, + COLLECTIBLE_LITTLE_CHUBBY = 88, + COLLECTIBLE_SPIDER_BITE = 89, + COLLECTIBLE_SMALL_ROCK = 90, + COLLECTIBLE_SPELUNKER_HAT = 91, + COLLECTIBLE_SUPER_BANDAGE = 92, + COLLECTIBLE_GAMEKID = 93, + COLLECTIBLE_SACK_OF_PENNIES = 94, + COLLECTIBLE_ROBO_BABY = 95, + COLLECTIBLE_LITTLE_CHAD = 96, + COLLECTIBLE_BOOK_OF_SIN = 97, + COLLECTIBLE_RELIC = 98, + COLLECTIBLE_LITTLE_GISH = 99, + COLLECTIBLE_LITTLE_STEVEN = 100, + COLLECTIBLE_HALO = 101, + COLLECTIBLE_MOMS_BOTTLE_OF_PILLS = 102, + COLLECTIBLE_COMMON_COLD = 103, + COLLECTIBLE_PARASITE = 104, + COLLECTIBLE_D6 = 105, + COLLECTIBLE_MR_MEGA = 106, + COLLECTIBLE_PINKING_SHEARS = 107, + COLLECTIBLE_WAFER = 108, + COLLECTIBLE_MONEY_EQUALS_POWER = 109, + COLLECTIBLE_MOMS_CONTACTS = 110, + COLLECTIBLE_BEAN = 111, + COLLECTIBLE_GUARDIAN_ANGEL = 112, + COLLECTIBLE_DEMON_BABY = 113, + COLLECTIBLE_MOMS_KNIFE = 114, + COLLECTIBLE_OUIJA_BOARD = 115, + COLLECTIBLE_9_VOLT = 116, + COLLECTIBLE_DEAD_BIRD = 117, + COLLECTIBLE_BRIMSTONE = 118, + COLLECTIBLE_BLOOD_BAG = 119, + COLLECTIBLE_ODD_MUSHROOM_THIN = 120, + COLLECTIBLE_ODD_MUSHROOM_LARGE = 121, + COLLECTIBLE_WHORE_OF_BABYLON = 122, + COLLECTIBLE_MONSTER_MANUAL = 123, + COLLECTIBLE_DEAD_SEA_SCROLLS = 124, + COLLECTIBLE_BOBBY_BOMB = 125, + COLLECTIBLE_RAZOR_BLADE = 126, + COLLECTIBLE_FORGET_ME_NOW = 127, + COLLECTIBLE_FOREVER_ALONE = 128, + COLLECTIBLE_BUCKET_OF_LARD = 129, + COLLECTIBLE_PONY = 130, + COLLECTIBLE_BOMB_BAG = 131, + COLLECTIBLE_LUMP_OF_COAL = 132, + COLLECTIBLE_GUPPYS_PAW = 133, + COLLECTIBLE_GUPPYS_TAIL = 134, + COLLECTIBLE_IV_BAG = 135, + COLLECTIBLE_BEST_FRIEND = 136, + COLLECTIBLE_REMOTE_DETONATOR = 137, + COLLECTIBLE_STIGMATA = 138, + COLLECTIBLE_MOMS_PURSE = 139, + COLLECTIBLE_BOBS_CURSE = 140, + COLLECTIBLE_PAGEANT_BOY = 141, + COLLECTIBLE_SCAPULAR = 142, + COLLECTIBLE_SPEED_BALL = 143, + COLLECTIBLE_BUM_FRIEND = 144, + COLLECTIBLE_GUPPYS_HEAD = 145, + COLLECTIBLE_PRAYER_CARD = 146, + COLLECTIBLE_NOTCHED_AXE = 147, + COLLECTIBLE_INFESTATION = 148, + COLLECTIBLE_IPECAC = 149, + COLLECTIBLE_TOUGH_LOVE = 150, + COLLECTIBLE_MULLIGAN = 151, + COLLECTIBLE_TECHNOLOGY_2 = 152, + COLLECTIBLE_MUTANT_SPIDER = 153, + COLLECTIBLE_CHEMICAL_PEEL = 154, + COLLECTIBLE_PEEPER = 155, + COLLECTIBLE_HABIT = 156, + COLLECTIBLE_BLOODY_LUST = 157, + COLLECTIBLE_CRYSTAL_BALL = 158, + COLLECTIBLE_SPIRIT_OF_THE_NIGHT = 159, + COLLECTIBLE_CRACK_THE_SKY = 160, + COLLECTIBLE_ANKH = 161, + COLLECTIBLE_CELTIC_CROSS = 162, + COLLECTIBLE_GHOST_BABY = 163, + COLLECTIBLE_CANDLE = 164, + COLLECTIBLE_CAT_O_NINE_TAILS = 165, + COLLECTIBLE_D20 = 166, + COLLECTIBLE_HARLEQUIN_BABY = 167, + COLLECTIBLE_EPIC_FETUS = 168, + COLLECTIBLE_POLYPHEMUS = 169, + COLLECTIBLE_DADDY_LONGLEGS = 170, + COLLECTIBLE_SPIDER_BUTT = 171, + COLLECTIBLE_SACRIFICIAL_DAGGER = 172, + COLLECTIBLE_MITRE = 173, + COLLECTIBLE_RAINBOW_BABY = 174, + COLLECTIBLE_DADS_KEY = 175, + COLLECTIBLE_STEM_CELLS = 176, + COLLECTIBLE_PORTABLE_SLOT = 177, + COLLECTIBLE_HOLY_WATER = 178, + COLLECTIBLE_FATE = 179, + COLLECTIBLE_BLACK_BEAN = 180, + COLLECTIBLE_WHITE_PONY = 181, + COLLECTIBLE_SACRED_HEART = 182, + COLLECTIBLE_TOOTH_PICKS = 183, + COLLECTIBLE_HOLY_GRAIL = 184, + COLLECTIBLE_DEAD_DOVE = 185, + COLLECTIBLE_BLOOD_RIGHTS = 186, + COLLECTIBLE_GUPPYS_HAIRBALL = 187, + COLLECTIBLE_ABEL = 188, + COLLECTIBLE_SMB_SUPER_FAN = 189, + COLLECTIBLE_PYRO = 190, + COLLECTIBLE_3_DOLLAR_BILL = 191, + COLLECTIBLE_TELEPATHY_BOOK = 192, + COLLECTIBLE_MEAT = 193, + COLLECTIBLE_MAGIC_8_BALL = 194, + COLLECTIBLE_MOMS_COIN_PURSE = 195, + COLLECTIBLE_SQUEEZY = 196, + COLLECTIBLE_JESUS_JUICE = 197, + COLLECTIBLE_BOX = 198, + COLLECTIBLE_MOMS_KEY = 199, + COLLECTIBLE_MOMS_EYESHADOW = 200, + COLLECTIBLE_IRON_BAR = 201, + COLLECTIBLE_MIDAS_TOUCH = 202, + COLLECTIBLE_HUMBLEING_BUNDLE = 203, + COLLECTIBLE_FANNY_PACK = 204, + COLLECTIBLE_SHARP_PLUG = 205, + COLLECTIBLE_GUILLOTINE = 206, + COLLECTIBLE_BALL_OF_BANDAGES = 207, + COLLECTIBLE_CHAMPION_BELT = 208, + COLLECTIBLE_BUTT_BOMBS = 209, + COLLECTIBLE_GNAWED_LEAF = 210, + COLLECTIBLE_SPIDERBABY = 211, + COLLECTIBLE_GUPPYS_COLLAR = 212, + COLLECTIBLE_LOST_CONTACT = 213, + COLLECTIBLE_ANEMIC = 214, + COLLECTIBLE_GOAT_HEAD = 215, + COLLECTIBLE_CEREMONIAL_ROBES = 216, + COLLECTIBLE_MOMS_WIG = 217, + COLLECTIBLE_PLACENTA = 218, + COLLECTIBLE_OLD_BANDAGE = 219, + COLLECTIBLE_SAD_BOMBS = 220, + COLLECTIBLE_RUBBER_CEMENT = 221, + COLLECTIBLE_ANTI_GRAVITY = 222, + COLLECTIBLE_PYROMANIAC = 223, + COLLECTIBLE_CRICKETS_BODY = 224, + COLLECTIBLE_GIMPY = 225, + COLLECTIBLE_BLACK_LOTUS = 226, + COLLECTIBLE_PIGGY_BANK = 227, + COLLECTIBLE_MOMS_PERFUME = 228, + COLLECTIBLE_MONSTROS_LUNG = 229, + COLLECTIBLE_ABADDON = 230, + COLLECTIBLE_BALL_OF_TAR = 231, + COLLECTIBLE_STOP_WATCH = 232, + COLLECTIBLE_TINY_PLANET = 233, + COLLECTIBLE_INFESTATION_2 = 234, + -- 235 + COLLECTIBLE_E_COLI = 236, + COLLECTIBLE_DEATHS_TOUCH = 237, + COLLECTIBLE_KEY_PIECE_1 = 238, + COLLECTIBLE_KEY_PIECE_2 = 239, + COLLECTIBLE_EXPERIMENTAL_TREATMENT = 240, + COLLECTIBLE_CONTRACT_FROM_BELOW = 241, + COLLECTIBLE_INFAMY = 242, + COLLECTIBLE_TRINITY_SHIELD = 243, + COLLECTIBLE_TECH_5 = 244, + COLLECTIBLE_20_20 = 245, + COLLECTIBLE_BLUE_MAP = 246, + COLLECTIBLE_BFFS = 247, + COLLECTIBLE_HIVE_MIND = 248, + COLLECTIBLE_THERES_OPTIONS = 249, + COLLECTIBLE_BOGO_BOMBS = 250, + COLLECTIBLE_STARTER_DECK = 251, + COLLECTIBLE_LITTLE_BAGGY = 252, + COLLECTIBLE_MAGIC_SCAB = 253, + COLLECTIBLE_BLOOD_CLOT = 254, + COLLECTIBLE_SCREW = 255, + COLLECTIBLE_HOT_BOMBS = 256, + COLLECTIBLE_FIRE_MIND = 257, + COLLECTIBLE_MISSING_NO = 258, + COLLECTIBLE_DARK_MATTER = 259, + COLLECTIBLE_BLACK_CANDLE = 260, + COLLECTIBLE_PROPTOSIS = 261, + COLLECTIBLE_MISSING_PAGE_2 = 262, + COLLECTIBLE_CLEAR_RUNE = 263, + COLLECTIBLE_SMART_FLY = 264, + COLLECTIBLE_DRY_BABY = 265, + COLLECTIBLE_JUICY_SACK = 266, + COLLECTIBLE_ROBO_BABY_2 = 267, + COLLECTIBLE_ROTTEN_BABY = 268, + COLLECTIBLE_HEADLESS_BABY = 269, + COLLECTIBLE_LEECH = 270, + COLLECTIBLE_MYSTERY_SACK = 271, + COLLECTIBLE_BBF = 272, + COLLECTIBLE_BOBS_BRAIN = 273, + COLLECTIBLE_BEST_BUD = 274, + COLLECTIBLE_LIL_BRIMSTONE = 275, + COLLECTIBLE_ISAACS_HEART = 276, + COLLECTIBLE_LIL_HAUNT = 277, + COLLECTIBLE_DARK_BUM = 278, + COLLECTIBLE_BIG_FAN = 279, + COLLECTIBLE_SISSY_LONGLEGS = 280, + COLLECTIBLE_PUNCHING_BAG = 281, + COLLECTIBLE_HOW_TO_JUMP = 282, + COLLECTIBLE_D100 = 283, + COLLECTIBLE_D4 = 284, + COLLECTIBLE_D10 = 285, + COLLECTIBLE_BLANK_CARD = 286, + COLLECTIBLE_BOOK_OF_SECRETS = 287, + COLLECTIBLE_BOX_OF_SPIDERS = 288, + COLLECTIBLE_RED_CANDLE = 289, + COLLECTIBLE_THE_JAR = 290, + COLLECTIBLE_FLUSH = 291, + COLLECTIBLE_SATANIC_BIBLE = 292, + COLLECTIBLE_HEAD_OF_KRAMPUS = 293, + COLLECTIBLE_BUTTER_BEAN = 294, + COLLECTIBLE_MAGIC_FINGERS = 295, + COLLECTIBLE_CONVERTER = 296, + COLLECTIBLE_BLUE_BOX = 297, + COLLECTIBLE_UNICORN_STUMP = 298, + COLLECTIBLE_TAURUS = 299, + COLLECTIBLE_ARIES = 300, + COLLECTIBLE_CANCER = 301, + COLLECTIBLE_LEO = 302, + COLLECTIBLE_VIRGO = 303, + COLLECTIBLE_LIBRA = 304, + COLLECTIBLE_SCORPIO = 305, + COLLECTIBLE_SAGITTARIUS = 306, + COLLECTIBLE_CAPRICORN = 307, + COLLECTIBLE_AQUARIUS = 308, + COLLECTIBLE_PISCES = 309, + COLLECTIBLE_EVES_MASCARA = 310, + COLLECTIBLE_JUDAS_SHADOW = 311, + COLLECTIBLE_MAGGYS_BOW = 312, + COLLECTIBLE_HOLY_MANTLE = 313, + COLLECTIBLE_THUNDER_THIGHS = 314, + COLLECTIBLE_STRANGE_ATTRACTOR = 315, + COLLECTIBLE_CURSED_EYE = 316, + COLLECTIBLE_MYSTERIOUS_LIQUID = 317, + COLLECTIBLE_GEMINI = 318, + COLLECTIBLE_CAINS_OTHER_EYE = 319, + COLLECTIBLE_BLUE_BABYS_ONLY_FRIEND = 320, + COLLECTIBLE_SAMSONS_CHAINS = 321, + COLLECTIBLE_MONGO_BABY = 322, + COLLECTIBLE_ISAACS_TEARS = 323, + COLLECTIBLE_UNDEFINED = 324, + COLLECTIBLE_SCISSORS = 325, + COLLECTIBLE_BREATH_OF_LIFE = 326, + COLLECTIBLE_POLAROID = 327, + COLLECTIBLE_NEGATIVE = 328, + COLLECTIBLE_LUDOVICO_TECHNIQUE = 329, + COLLECTIBLE_SOY_MILK = 330, + COLLECTIBLE_GODHEAD = 331, + COLLECTIBLE_LAZARUS_RAGS = 332, + COLLECTIBLE_MIND = 333, + COLLECTIBLE_BODY = 334, + COLLECTIBLE_SOUL = 335, + COLLECTIBLE_DEAD_ONION = 336, + COLLECTIBLE_BROKEN_WATCH = 337, + COLLECTIBLE_BOOMERANG = 338, + COLLECTIBLE_SAFETY_PIN = 339, + COLLECTIBLE_CAFFEINE_PILL = 340, + COLLECTIBLE_TORN_PHOTO = 341, + COLLECTIBLE_BLUE_CAP = 342, + COLLECTIBLE_LATCH_KEY = 343, + COLLECTIBLE_MATCH_BOOK = 344, + COLLECTIBLE_SYNTHOIL = 345, + COLLECTIBLE_SNACK = 346, + COLLECTIBLE_DIPLOPIA = 347, + COLLECTIBLE_PLACEBO = 348, + COLLECTIBLE_WOODEN_NICKEL = 349, + COLLECTIBLE_TOXIC_SHOCK = 350, + COLLECTIBLE_MEGA_BEAN = 351, + COLLECTIBLE_GLASS_CANNON = 352, + COLLECTIBLE_BOMBER_BOY = 353, + COLLECTIBLE_CRACK_JACKS = 354, + COLLECTIBLE_MOMS_PEARLS = 355, + COLLECTIBLE_CAR_BATTERY = 356, + COLLECTIBLE_BOX_OF_FRIENDS = 357, + COLLECTIBLE_THE_WIZ = 358, + COLLECTIBLE_8_INCH_NAILS = 359, + COLLECTIBLE_INCUBUS = 360, + COLLECTIBLE_FATES_REWARD = 361, + COLLECTIBLE_LIL_CHEST = 362, + COLLECTIBLE_SWORN_PROTECTOR = 363, + COLLECTIBLE_FRIEND_ZONE = 364, + COLLECTIBLE_LOST_FLY = 365, + COLLECTIBLE_SCATTER_BOMBS = 366, + COLLECTIBLE_STICKY_BOMBS = 367, + COLLECTIBLE_EPIPHORA = 368, + COLLECTIBLE_CONTINUUM = 369, + COLLECTIBLE_MR_DOLLY = 370, + COLLECTIBLE_CURSE_OF_THE_TOWER = 371, + COLLECTIBLE_CHARGED_BABY = 372, + COLLECTIBLE_DEAD_EYE = 373, + COLLECTIBLE_HOLY_LIGHT = 374, + COLLECTIBLE_HOST_HAT = 375, + COLLECTIBLE_RESTOCK = 376, + COLLECTIBLE_BURSTING_SACK = 377, + COLLECTIBLE_NUMBER_TWO = 378, + COLLECTIBLE_PUPULA_DUPLEX = 379, + COLLECTIBLE_PAY_TO_PLAY = 380, + COLLECTIBLE_EDENS_BLESSING = 381, + COLLECTIBLE_FRIEND_BALL = 382, + COLLECTIBLE_TEAR_DETONATOR = 383, + COLLECTIBLE_LIL_GURDY = 384, + COLLECTIBLE_BUMBO = 385, + COLLECTIBLE_D12 = 386, + COLLECTIBLE_CENSER = 387, + COLLECTIBLE_KEY_BUM = 388, + COLLECTIBLE_RUNE_BAG = 389, + COLLECTIBLE_SERAPHIM = 390, + COLLECTIBLE_BETRAYAL = 391, + COLLECTIBLE_ZODIAC = 392, + COLLECTIBLE_SERPENTS_KISS = 393, + COLLECTIBLE_MARKED = 394, + COLLECTIBLE_TECH_X = 395, + COLLECTIBLE_VENTRICLE_RAZOR = 396, + COLLECTIBLE_TRACTOR_BEAM = 397, + COLLECTIBLE_GODS_FLESH = 398, + COLLECTIBLE_MAW_OF_THE_VOID = 399, + COLLECTIBLE_SPEAR_OF_DESTINY = 400, + COLLECTIBLE_EXPLOSIVO = 401, + COLLECTIBLE_CHAOS = 402, + COLLECTIBLE_SPIDER_MOD = 403, + COLLECTIBLE_FARTING_BABY = 404, + COLLECTIBLE_GB_BUG = 405, + COLLECTIBLE_D8 = 406, + COLLECTIBLE_PURITY = 407, + COLLECTIBLE_ATHAME = 408, + COLLECTIBLE_EMPTY_VESSEL = 409, + COLLECTIBLE_EVIL_EYE = 410, + COLLECTIBLE_LUSTY_BLOOD = 411, + COLLECTIBLE_CAMBION_CONCEPTION = 412, + COLLECTIBLE_IMMACULATE_CONCEPTION = 413, + COLLECTIBLE_MORE_OPTIONS = 414, + COLLECTIBLE_CROWN_OF_LIGHT = 415, + COLLECTIBLE_DEEP_POCKETS = 416, + COLLECTIBLE_SUCCUBUS = 417, + COLLECTIBLE_FRUIT_CAKE = 418, + COLLECTIBLE_TELEPORT_2 = 419, + COLLECTIBLE_BLACK_POWDER = 420, + COLLECTIBLE_KIDNEY_BEAN = 421, + COLLECTIBLE_GLOWING_HOUR_GLASS = 422, + COLLECTIBLE_CIRCLE_OF_PROTECTION = 423, + COLLECTIBLE_SACK_HEAD = 424, + COLLECTIBLE_NIGHT_LIGHT = 425, + COLLECTIBLE_OBSESSED_FAN = 426, + COLLECTIBLE_MINE_CRAFTER = 427, + COLLECTIBLE_PJS = 428, + COLLECTIBLE_HEAD_OF_THE_KEEPER = 429, + COLLECTIBLE_PAPA_FLY = 430, + COLLECTIBLE_MULTIDIMENSIONAL_BABY = 431, + COLLECTIBLE_GLITTER_BOMBS = 432, + COLLECTIBLE_MY_SHADOW = 433, + COLLECTIBLE_JAR_OF_FLIES = 434, + COLLECTIBLE_LIL_LOKI = 435, + COLLECTIBLE_MILK = 436, + COLLECTIBLE_D7 = 437, + COLLECTIBLE_BINKY = 438, + COLLECTIBLE_MOMS_BOX = 439, + COLLECTIBLE_KIDNEY_STONE = 440, + COLLECTIBLE_MEGA_BLAST = 441, + COLLECTIBLE_DARK_PRINCES_CROWN = 442, + COLLECTIBLE_APPLE = 443, + COLLECTIBLE_LEAD_PENCIL = 444, + COLLECTIBLE_DOG_TOOTH = 445, + COLLECTIBLE_DEAD_TOOTH = 446, + COLLECTIBLE_LINGER_BEAN = 447, + COLLECTIBLE_SHARD_OF_GLASS = 448, + COLLECTIBLE_METAL_PLATE = 449, + COLLECTIBLE_EYE_OF_GREED = 450, + COLLECTIBLE_TAROT_CLOTH = 451, + COLLECTIBLE_VARICOSE_VEINS = 452, + COLLECTIBLE_COMPOUND_FRACTURE = 453, + COLLECTIBLE_POLYDACTYLY = 454, + COLLECTIBLE_DADS_LOST_COIN = 455, + COLLECTIBLE_MIDNIGHT_SNACK = 456, + COLLECTIBLE_CONE_HEAD = 457, + COLLECTIBLE_BELLY_BUTTON = 458, + COLLECTIBLE_SINUS_INFECTION = 459, + COLLECTIBLE_GLAUCOMA = 460, + COLLECTIBLE_PARASITOID = 461, + COLLECTIBLE_EYE_OF_BELIAL = 462, + COLLECTIBLE_SULFURIC_ACID = 463, + COLLECTIBLE_GLYPH_OF_BALANCE = 464, + COLLECTIBLE_ANALOG_STICK = 465, + COLLECTIBLE_CONTAGION = 466, + COLLECTIBLE_FINGER = 467, + COLLECTIBLE_SHADE = 468, + COLLECTIBLE_DEPRESSION = 469, + COLLECTIBLE_HUSHY = 470, + COLLECTIBLE_LIL_MONSTRO = 471, + COLLECTIBLE_KING_BABY = 472, + COLLECTIBLE_BIG_CHUBBY = 473, + COLLECTIBLE_BROKEN_GLASS_CANNON = 474, + COLLECTIBLE_PLAN_C = 475, + COLLECTIBLE_D1 = 476, + COLLECTIBLE_VOID = 477, + COLLECTIBLE_PAUSE = 478, + COLLECTIBLE_SMELTER = 479, + COLLECTIBLE_COMPOST = 480, + COLLECTIBLE_DATAMINER = 481, + COLLECTIBLE_CLICKER = 482, + COLLECTIBLE_MAMA_MEGA = 483, + COLLECTIBLE_WAIT_WHAT = 484, + COLLECTIBLE_CROOKED_PENNY = 485, + COLLECTIBLE_DULL_RAZOR = 486, + COLLECTIBLE_POTATO_PEELER = 487, + COLLECTIBLE_METRONOME = 488, + COLLECTIBLE_D_INFINITY = 489, + COLLECTIBLE_EDENS_SOUL = 490, + COLLECTIBLE_ACID_BABY = 491, + COLLECTIBLE_YO_LISTEN = 492, + COLLECTIBLE_ADRENALINE = 493, + COLLECTIBLE_JACOBS_LADDER = 494, + COLLECTIBLE_GHOST_PEPPER = 495, + COLLECTIBLE_EUTHANASIA = 496, + COLLECTIBLE_CAMO_UNDIES = 497, + COLLECTIBLE_DUALITY = 498, + COLLECTIBLE_EUCHARIST = 499, + COLLECTIBLE_SACK_OF_SACKS = 500, + COLLECTIBLE_GREEDS_GULLET = 501, + COLLECTIBLE_LARGE_ZIT = 502, + COLLECTIBLE_LITTLE_HORN = 503, + COLLECTIBLE_BROWN_NUGGET = 504, + COLLECTIBLE_POKE_GO = 505, + COLLECTIBLE_BACKSTABBER = 506, + COLLECTIBLE_SHARP_STRAW = 507, + COLLECTIBLE_MOMS_RAZOR = 508, + COLLECTIBLE_BLOODSHOT_EYE = 509, + COLLECTIBLE_DELIRIOUS = 510, + + -- Booster Pack #1 + COLLECTIBLE_ANGRY_FLY = 511, + COLLECTIBLE_BLACK_HOLE = 512, + COLLECTIBLE_BOZO = 513, + COLLECTIBLE_BROKEN_MODEM = 514, + COLLECTIBLE_MYSTERY_GIFT = 515, + COLLECTIBLE_SPRINKLER = 516, + COLLECTIBLE_FAST_BOMBS = 517, + COLLECTIBLE_BUDDY_IN_A_BOX = 518, + COLLECTIBLE_LIL_DELIRIUM = 519, + + -- Booster Pack #2 + COLLECTIBLE_JUMPER_CABLES = 520, + COLLECTIBLE_COUPON = 521, + COLLECTIBLE_TELEKINESIS = 522, + COLLECTIBLE_MOVING_BOX = 523, + COLLECTIBLE_TECHNOLOGY_ZERO = 524, + COLLECTIBLE_LEPROSY = 525, + + -- Booster Pack #3 + COLLECTIBLE_7_SEALS = 526, + COLLECTIBLE_MR_ME = 527, + COLLECTIBLE_ANGELIC_PRISM = 528, + COLLECTIBLE_POP = 529, + + -- Booster Pack #4 + COLLECTIBLE_DEATHS_LIST = 530, + COLLECTIBLE_HAEMOLACRIA = 531, + COLLECTIBLE_LACHRYPHAGY = 532, + COLLECTIBLE_TRISAGION = 533, + COLLECTIBLE_SCHOOLBAG = 534, + + -- Booster Pack #5 + COLLECTIBLE_BLANKET = 535, + COLLECTIBLE_SACRIFICIAL_ALTAR = 536, + COLLECTIBLE_LIL_SPEWER = 537, + COLLECTIBLE_MARBLES = 538, + COLLECTIBLE_MYSTERY_EGG = 539, + COLLECTIBLE_FLAT_STONE = 540, + + COLLECTIBLE_MARROW = 541, + COLLECTIBLE_SLIPPED_RIB = 542, + COLLECTIBLE_HALLOWED_GROUND = 543, + COLLECTIBLE_POINTY_RIB = 544, + COLLECTIBLE_BOOK_OF_THE_DEAD = 545, + COLLECTIBLE_DADS_RING = 546, + COLLECTIBLE_DIVORCE_PAPERS = 547, + COLLECTIBLE_JAW_BONE = 548, + COLLECTIBLE_BRITTLE_BONES = 549, + + COLLECTIBLE_BROKEN_SHOVEL_1 = 550, + COLLECTIBLE_BROKEN_SHOVEL_2 = 551, + COLLECTIBLE_MOMS_SHOVEL = 552, + + --NUM_COLLECTIBLES = 553 + + -- Repentance + COLLECTIBLE_MUCORMYCOSIS = 553, + COLLECTIBLE_2SPOOKY = 554, + COLLECTIBLE_GOLDEN_RAZOR = 555, + COLLECTIBLE_SULFUR = 556, + COLLECTIBLE_FORTUNE_COOKIE = 557, + COLLECTIBLE_EYE_SORE = 558, + COLLECTIBLE_120_VOLT = 559, + COLLECTIBLE_IT_HURTS = 560, + COLLECTIBLE_ALMOND_MILK = 561, + COLLECTIBLE_ROCK_BOTTOM = 562, + COLLECTIBLE_NANCY_BOMBS = 563, + COLLECTIBLE_BAR_OF_SOAP = 564, + COLLECTIBLE_BLOOD_PUPPY = 565, + COLLECTIBLE_DREAM_CATCHER = 566, + COLLECTIBLE_PASCHAL_CANDLE = 567, + COLLECTIBLE_DIVINE_INTERVENTION = 568, + COLLECTIBLE_BLOOD_OATH = 569, + COLLECTIBLE_PLAYDOUGH_COOKIE = 570, + COLLECTIBLE_SOCKS = 571, + COLLECTIBLE_EYE_OF_THE_OCCULT = 572, + COLLECTIBLE_IMMACULATE_HEART = 573, + COLLECTIBLE_MONSTRANCE = 574, + COLLECTIBLE_INTRUDER = 575, + COLLECTIBLE_DIRTY_MIND = 576, + COLLECTIBLE_DAMOCLES = 577, + COLLECTIBLE_FREE_LEMONADE = 578, + COLLECTIBLE_SPIRIT_SWORD = 579, + COLLECTIBLE_RED_KEY = 580, + COLLECTIBLE_PSY_FLY = 581, + COLLECTIBLE_WAVY_CAP = 582, + COLLECTIBLE_ROCKET_IN_A_JAR = 583, + COLLECTIBLE_BOOK_OF_VIRTUES = 584, + COLLECTIBLE_ALABASTER_BOX = 585, + COLLECTIBLE_STAIRWAY = 586, + -- 587 + COLLECTIBLE_SOL = 588, + COLLECTIBLE_LUNA = 589, + COLLECTIBLE_MERCURIUS = 590, + COLLECTIBLE_VENUS = 591, + COLLECTIBLE_TERRA = 592, + COLLECTIBLE_MARS = 593, + COLLECTIBLE_JUPITER = 594, + COLLECTIBLE_SATURNUS = 595, + COLLECTIBLE_URANUS = 596, + COLLECTIBLE_NEPTUNUS = 597, + COLLECTIBLE_PLUTO = 598, + COLLECTIBLE_VOODOO_HEAD = 599, + COLLECTIBLE_EYE_DROPS = 600, + COLLECTIBLE_ACT_OF_CONTRITION = 601, + COLLECTIBLE_MEMBER_CARD = 602, + COLLECTIBLE_BATTERY_PACK = 603, + COLLECTIBLE_MOMS_BRACELET = 604, + COLLECTIBLE_SCOOPER = 605, + COLLECTIBLE_OCULAR_RIFT = 606, + COLLECTIBLE_BOILED_BABY = 607, + COLLECTIBLE_FREEZER_BABY = 608, + COLLECTIBLE_ETERNAL_D6 = 609, + COLLECTIBLE_BIRD_CAGE = 610, + COLLECTIBLE_LARYNX = 611, + COLLECTIBLE_LOST_SOUL = 612, + -- 613 + COLLECTIBLE_BLOOD_BOMBS = 614, + COLLECTIBLE_LIL_DUMPY = 615, + COLLECTIBLE_BIRDS_EYE = 616, + COLLECTIBLE_LODESTONE = 617, + COLLECTIBLE_ROTTEN_TOMATO = 618, + COLLECTIBLE_BIRTHRIGHT = 619, + -- 620 + COLLECTIBLE_RED_STEW = 621, + COLLECTIBLE_GENESIS = 622, + COLLECTIBLE_SHARP_KEY = 623, + COLLECTIBLE_BOOSTER_PACK = 624, + COLLECTIBLE_MEGA_MUSH = 625, + COLLECTIBLE_KNIFE_PIECE_1 = 626, + COLLECTIBLE_KNIFE_PIECE_2 = 627, + COLLECTIBLE_DEATH_CERTIFICATE = 628, + COLLECTIBLE_BOT_FLY = 629, + -- 630 + COLLECTIBLE_MEAT_CLEAVER = 631, + COLLECTIBLE_EVIL_CHARM = 632, + COLLECTIBLE_DOGMA = 633, + COLLECTIBLE_PURGATORY = 634, + COLLECTIBLE_STITCHES = 635, + COLLECTIBLE_R_KEY = 636, + COLLECTIBLE_KNOCKOUT_DROPS = 637, + COLLECTIBLE_ERASER = 638, + COLLECTIBLE_YUCK_HEART = 639, + COLLECTIBLE_URN_OF_SOULS = 640, + COLLECTIBLE_AKELDAMA = 641, + COLLECTIBLE_MAGIC_SKIN = 642, + COLLECTIBLE_REVELATION = 643, + COLLECTIBLE_CONSOLATION_PRIZE = 644, + COLLECTIBLE_TINYTOMA = 645, + COLLECTIBLE_BRIMSTONE_BOMBS = 646, + COLLECTIBLE_4_5_VOLT = 647, + -- 648 + COLLECTIBLE_FRUITY_PLUM = 649, + COLLECTIBLE_PLUM_FLUTE = 650, + COLLECTIBLE_STAR_OF_BETHLEHEM = 651, + COLLECTIBLE_CUBE_BABY = 652, + COLLECTIBLE_VADE_RETRO = 653, + COLLECTIBLE_FALSE_PHD = 654, + COLLECTIBLE_SPIN_TO_WIN = 655, + COLLECTIBLE_DAMOCLES_PASSIVE = 656, + COLLECTIBLE_VASCULITIS = 657, + COLLECTIBLE_GIANT_CELL = 658, + COLLECTIBLE_TROPICAMIDE = 659, + COLLECTIBLE_CARD_READING = 660, + COLLECTIBLE_QUINTS = 661, + -- 662 + COLLECTIBLE_TOOTH_AND_NAIL = 663, + COLLECTIBLE_BINGE_EATER = 664, + COLLECTIBLE_GUPPYS_EYE = 665, + -- 666 + COLLECTIBLE_STRAW_MAN = 667, + COLLECTIBLE_DADS_NOTE = 668, + COLLECTIBLE_SAUSAGE = 669, + COLLECTIBLE_OPTIONS = 670, + COLLECTIBLE_CANDY_HEART = 671, + COLLECTIBLE_POUND_OF_FLESH = 672, + COLLECTIBLE_REDEMPTION = 673, + COLLECTIBLE_SPIRIT_SHACKLES = 674, + COLLECTIBLE_CRACKED_ORB = 675, + COLLECTIBLE_EMPTY_HEART = 676, + COLLECTIBLE_ASTRAL_PROJECTION = 677, + COLLECTIBLE_C_SECTION = 678, + COLLECTIBLE_LIL_ABADDON = 679, + COLLECTIBLE_MONTEZUMAS_REVENGE = 680, + COLLECTIBLE_LIL_PORTAL = 681, + COLLECTIBLE_WORM_FRIEND = 682, + COLLECTIBLE_BONE_SPURS = 683, + COLLECTIBLE_HUNGRY_SOUL = 684, + COLLECTIBLE_JAR_OF_WISPS = 685, + COLLECTIBLE_SOUL_LOCKET = 686, + COLLECTIBLE_FRIEND_FINDER = 687, + COLLECTIBLE_INNER_CHILD = 688, + COLLECTIBLE_GLITCHED_CROWN = 689, + COLLECTIBLE_JELLY_BELLY = 690, + COLLECTIBLE_SACRED_ORB = 691, + COLLECTIBLE_SANGUINE_BOND = 692, + COLLECTIBLE_SWARM = 693, + COLLECTIBLE_HEARTBREAK = 694, + COLLECTIBLE_BLOODY_GUST = 695, + COLLECTIBLE_SALVATION = 696, + COLLECTIBLE_VANISHING_TWIN = 697, + COLLECTIBLE_TWISTED_PAIR = 698, + COLLECTIBLE_AZAZELS_RAGE = 699, + COLLECTIBLE_ECHO_CHAMBER = 700, + COLLECTIBLE_ISAACS_TOMB = 701, + COLLECTIBLE_VENGEFUL_SPIRIT = 702, + COLLECTIBLE_ESAU_JR = 703, + COLLECTIBLE_BERSERK = 704, + COLLECTIBLE_DARK_ARTS = 705, + COLLECTIBLE_ABYSS = 706, + COLLECTIBLE_SUPPER = 707, + COLLECTIBLE_STAPLER = 708, + COLLECTIBLE_SUPLEX = 709, + COLLECTIBLE_BAG_OF_CRAFTING = 710, + COLLECTIBLE_FLIP = 711, + COLLECTIBLE_LEMEGETON = 712, + COLLECTIBLE_SUMPTORIUM = 713, + COLLECTIBLE_RECALL = 714, + COLLECTIBLE_HOLD = 715, + COLLECTIBLE_KEEPERS_SACK = 716, + COLLECTIBLE_KEEPERS_KIN = 717, + -- 718 + COLLECTIBLE_KEEPERS_BOX = 719, + COLLECTIBLE_EVERYTHING_JAR = 720, + COLLECTIBLE_TMTRAINER = 721, + COLLECTIBLE_ANIMA_SOLA = 722, + COLLECTIBLE_SPINDOWN_DICE = 723, + COLLECTIBLE_HYPERCOAGULATION = 724, + COLLECTIBLE_IBS = 725, + COLLECTIBLE_HEMOPTYSIS = 726, + COLLECTIBLE_GHOST_BOMBS = 727, + COLLECTIBLE_GELLO = 728, + COLLECTIBLE_DECAP_ATTACK = 729, + + NUM_COLLECTIBLES = 730 +} + +TrinketType = { + TRINKET_NULL = 0, + TRINKET_SWALLOWED_PENNY = 1, + TRINKET_PETRIFIED_POOP = 2, + TRINKET_AAA_BATTERY = 3, + TRINKET_BROKEN_REMOTE = 4, + TRINKET_PURPLE_HEART = 5, + TRINKET_BROKEN_MAGNET = 6, + TRINKET_ROSARY_BEAD = 7, + TRINKET_CARTRIDGE = 8, + TRINKET_PULSE_WORM = 9, + TRINKET_WIGGLE_WORM = 10, + TRINKET_RING_WORM = 11, + TRINKET_FLAT_WORM = 12, + TRINKET_STORE_CREDIT = 13, + TRINKET_CALLUS = 14, + TRINKET_LUCKY_ROCK = 15, + TRINKET_MOMS_TOENAIL = 16, + TRINKET_BLACK_LIPSTICK = 17, + TRINKET_BIBLE_TRACT = 18, + TRINKET_PAPER_CLIP = 19, + TRINKET_MONKEY_PAW = 20, + TRINKET_MYSTERIOUS_PAPER = 21, + TRINKET_DAEMONS_TAIL = 22, + TRINKET_MISSING_POSTER = 23, + TRINKET_BUTT_PENNY = 24, + TRINKET_MYSTERIOUS_CANDY = 25, + TRINKET_HOOK_WORM = 26, + TRINKET_WHIP_WORM = 27, + TRINKET_BROKEN_ANKH = 28, + TRINKET_FISH_HEAD = 29, + TRINKET_PINKY_EYE = 30, + TRINKET_PUSH_PIN = 31, + TRINKET_LIBERTY_CAP = 32, + TRINKET_UMBILICAL_CORD = 33, + TRINKET_CHILDS_HEART = 34, + TRINKET_CURVED_HORN = 35, + TRINKET_RUSTED_KEY = 36, + TRINKET_GOAT_HOOF = 37, + TRINKET_MOMS_PEARL = 38, + TRINKET_CANCER = 39, + TRINKET_RED_PATCH = 40, + TRINKET_MATCH_STICK = 41, + TRINKET_LUCKY_TOE = 42, + TRINKET_CURSED_SKULL = 43, + TRINKET_SAFETY_CAP = 44, + TRINKET_ACE_SPADES = 45, + TRINKET_ISAACS_FORK = 46, + TRINKET_POLAROID_OBSOLETE = 47, + TRINKET_MISSING_PAGE = 48, + TRINKET_BLOODY_PENNY = 49, + TRINKET_BURNT_PENNY = 50, + TRINKET_FLAT_PENNY = 51, + TRINKET_COUNTERFEIT_PENNY = 52, + TRINKET_TICK = 53, + TRINKET_ISAACS_HEAD = 54, + TRINKET_MAGGYS_FAITH = 55, + TRINKET_JUDAS_TONGUE = 56, + TRINKET_SOUL = 57, + TRINKET_SAMSONS_LOCK = 58, + TRINKET_CAINS_EYE = 59, + TRINKET_EVES_BIRD_FOOT = 60, + TRINKET_LEFT_HAND = 61, + TRINKET_SHINY_ROCK = 62, + TRINKET_SAFETY_SCISSORS = 63, + TRINKET_RAINBOW_WORM = 64, + TRINKET_TAPE_WORM = 65, + TRINKET_LAZY_WORM = 66, + TRINKET_CRACKED_DICE = 67, + TRINKET_SUPER_MAGNET = 68, + TRINKET_FADED_POLAROID = 69, + TRINKET_LOUSE = 70, + TRINKET_BOBS_BLADDER = 71, + TRINKET_WATCH_BATTERY = 72, + TRINKET_BLASTING_CAP = 73, + TRINKET_STUD_FINDER = 74, + TRINKET_ERROR = 75, + TRINKET_POKER_CHIP = 76, + TRINKET_BLISTER = 77, + TRINKET_SECOND_HAND = 78, + TRINKET_ENDLESS_NAMELESS = 79, + TRINKET_BLACK_FEATHER = 80, + TRINKET_BLIND_RAGE = 81, + TRINKET_GOLDEN_HORSE_SHOE = 82, + TRINKET_STORE_KEY = 83, + TRINKET_RIB_OF_GREED = 84, + TRINKET_KARMA = 85, + TRINKET_LIL_LARVA = 86, + TRINKET_MOMS_LOCKET = 87, + TRINKET_NO = 88, + TRINKET_CHILD_LEASH = 89, + TRINKET_BROWN_CAP = 90, + TRINKET_MECONIUM = 91, + TRINKET_CRACKED_CROWN = 92, + TRINKET_USED_DIAPER = 93, + TRINKET_FISH_TAIL = 94, + TRINKET_BLACK_TOOTH = 95, + TRINKET_OUROBOROS_WORM = 96, + TRINKET_TONSIL = 97, + TRINKET_NOSE_GOBLIN = 98, + TRINKET_SUPER_BALL = 99, + TRINKET_VIBRANT_BULB = 100, + TRINKET_DIM_BULB = 101, + TRINKET_FRAGMENTED_CARD = 102, + TRINKET_EQUALITY = 103, + TRINKET_WISH_BONE = 104, + TRINKET_BAG_LUNCH = 105, + TRINKET_LOST_CORK = 106, + TRINKET_CROW_HEART = 107, + TRINKET_WALNUT = 108, + TRINKET_DUCT_TAPE = 109, + TRINKET_SILVER_DOLLAR = 110, + TRINKET_BLOODY_CROWN = 111, + TRINKET_PAY_TO_WIN = 112, + TRINKET_LOCUST_OF_WRATH = 113, + TRINKET_LOCUST_OF_PESTILENCE = 114, + TRINKET_LOCUST_OF_FAMINE = 115, + TRINKET_LOCUST_OF_DEATH = 116, + TRINKET_LOCUST_OF_CONQUEST = 117, + TRINKET_BAT_WING = 118, + TRINKET_STEM_CELL = 119, + + -- Booster pack #1 + TRINKET_HAIRPIN = 120, + TRINKET_WOODEN_CROSS = 121, + TRINKET_BUTTER = 122, + + -- Booster pack #2 + TRINKET_FILIGREE_FEATHERS = 123, + + -- Booster pack #3 + TRINKET_DOOR_STOP = 124, + + -- Booster pack #4 + TRINKET_EXTENSION_CORD = 125, + + -- Booster pack #5 + TRINKET_ROTTEN_PENNY = 126, + TRINKET_BABY_BENDER = 127, + TRINKET_FINGER_BONE = 128, + + --NUM_TRINKETS = 129 + + -- Repentance + TRINKET_JAW_BREAKER = 129, + TRINKET_CHEWED_PEN = 130, + TRINKET_BLESSED_PENNY = 131, + TRINKET_BROKEN_SYRINGE = 132, + TRINKET_FIRECRACKER = 133, + TRINKET_GIANT_BEAN = 134, + TRINKET_LIGHTER = 135, + TRINKET_BROKEN_PADLOCK = 136, + TRINKET_MYOSOTIS = 137, + TRINKET_M = 138, + TRINKET_TEARDROP_CHARM = 139, + TRINKET_APPLE_OF_SODOM = 140, + TRINKET_FORGOTTEN_LULLABY = 141, + TRINKET_BETHS_FAITH = 142, + TRINKET_OLD_CAPACITOR = 143, + TRINKET_BRAIN_WORM = 144, + TRINKET_PERFECTION = 145, + TRINKET_DEVILS_CROWN = 146, + TRINKET_CHARGED_PENNY = 147, + TRINKET_FRIENDSHIP_NECKLACE = 148, + TRINKET_PANIC_BUTTON = 149, + TRINKET_BLUE_KEY = 150, + TRINKET_FLAT_FILE = 151, + TRINKET_TELESCOPE_LENS = 152, + TRINKET_MOMS_LOCK = 153, + TRINKET_DICE_BAG = 154, + TRINKET_HOLY_CROWN = 155, + TRINKET_MOTHERS_KISS = 156, + TRINKET_TORN_CARD = 157, + TRINKET_TORN_POCKET = 158, + TRINKET_GILDED_KEY = 159, + TRINKET_LUCKY_SACK = 160, + TRINKET_WICKED_CROWN = 161, + TRINKET_AZAZELS_STUMP = 162, + TRINKET_DINGLE_BERRY = 163, + TRINKET_RING_CAP = 164, + TRINKET_NUH_UH = 165, + TRINKET_MODELING_CLAY = 166, + TRINKET_POLISHED_BONE = 167, + TRINKET_HOLLOW_HEART = 168, + TRINKET_KIDS_DRAWING = 169, + TRINKET_CRYSTAL_KEY = 170, + TRINKET_KEEPERS_BARGAIN = 171, + TRINKET_CURSED_PENNY = 172, + TRINKET_YOUR_SOUL = 173, + TRINKET_NUMBER_MAGNET = 174, + TRINKET_STRANGE_KEY = 175, + TRINKET_LIL_CLOT = 176, + TRINKET_TEMPORARY_TATTOO = 177, + TRINKET_SWALLOWED_M80 = 178, + TRINKET_RC_REMOTE = 179, + TRINKET_FOUND_SOUL = 180, + TRINKET_EXPANSION_PACK = 181, + TRINKET_BETHS_ESSENCE = 182, + TRINKET_THE_TWINS = 183, + TRINKET_ADOPTION_PAPERS = 184, + TRINKET_CRICKET_LEG = 185, + TRINKET_APOLLYONS_BEST_FRIEND = 186, + TRINKET_BROKEN_GLASSES = 187, + TRINKET_ICE_CUBE = 188, + TRINKET_SIGIL_OF_BAPHOMET = 189, + NUM_TRINKETS = 190, + + -- Golden trinkets + TRINKET_GOLDEN_FLAG = 0x8000, + TRINKET_ID_MASK = 0x7fff, +} + +PillEffect = { + PILLEFFECT_NULL = - 1, + PILLEFFECT_BAD_GAS = 0, + PILLEFFECT_BAD_TRIP = 1, + PILLEFFECT_BALLS_OF_STEEL = 2, + PILLEFFECT_BOMBS_ARE_KEYS = 3, + PILLEFFECT_EXPLOSIVE_DIARRHEA = 4, + PILLEFFECT_FULL_HEALTH = 5, + PILLEFFECT_HEALTH_DOWN = 6, + PILLEFFECT_HEALTH_UP = 7, + PILLEFFECT_I_FOUND_PILLS = 8, + PILLEFFECT_PUBERTY = 9, + PILLEFFECT_PRETTY_FLY = 10, + PILLEFFECT_RANGE_DOWN = 11, + PILLEFFECT_RANGE_UP = 12, + PILLEFFECT_SPEED_DOWN = 13, + PILLEFFECT_SPEED_UP = 14, + PILLEFFECT_TEARS_DOWN = 15, + PILLEFFECT_TEARS_UP = 16, + PILLEFFECT_LUCK_DOWN = 17, + PILLEFFECT_LUCK_UP = 18, + PILLEFFECT_TELEPILLS = 19, + PILLEFFECT_48HOUR_ENERGY = 20, + PILLEFFECT_HEMATEMESIS = 21, + PILLEFFECT_PARALYSIS = 22, + PILLEFFECT_SEE_FOREVER = 23, + PILLEFFECT_PHEROMONES = 24, + PILLEFFECT_AMNESIA = 25, + PILLEFFECT_LEMON_PARTY = 26, + PILLEFFECT_WIZARD = 27, + PILLEFFECT_PERCS = 28, + PILLEFFECT_ADDICTED = 29, + PILLEFFECT_RELAX = 30, + PILLEFFECT_QUESTIONMARK = 31, + PILLEFFECT_LARGER = 32, + PILLEFFECT_SMALLER = 33, + PILLEFFECT_INFESTED_EXCLAMATION = 34, + PILLEFFECT_INFESTED_QUESTION = 35, + PILLEFFECT_POWER = 36, + PILLEFFECT_RETRO_VISION = 37, + PILLEFFECT_FRIENDS_TILL_THE_END = 38, + PILLEFFECT_X_LAX = 39, + PILLEFFECT_SOMETHINGS_WRONG = 40, + PILLEFFECT_IM_DROWSY = 41, + PILLEFFECT_IM_EXCITED = 42, + PILLEFFECT_GULP = 43, + PILLEFFECT_HORF = 44, + PILLEFFECT_SUNSHINE = 45, + PILLEFFECT_VURP = 46, + --NUM_PILL_EFFECTS = 47 + + PILLEFFECT_SHOT_SPEED_DOWN = 47, + PILLEFFECT_SHOT_SPEED_UP = 48, + PILLEFFECT_EXPERIMENTAL = 49, + NUM_PILL_EFFECTS = 50 +} + +Card = { + CARD_RANDOM = - 1, + CARD_NULL = 0, + CARD_FOOL = 1, + CARD_MAGICIAN = 2, + CARD_HIGH_PRIESTESS = 3, + CARD_EMPRESS = 4, + CARD_EMPEROR = 5, + CARD_HIEROPHANT = 6, + CARD_LOVERS = 7, + CARD_CHARIOT = 8, + CARD_JUSTICE = 9, + CARD_HERMIT = 10, + CARD_WHEEL_OF_FORTUNE = 11, + CARD_STRENGTH = 12, + CARD_HANGED_MAN = 13, + CARD_DEATH = 14, + CARD_TEMPERANCE = 15, + CARD_DEVIL = 16, + CARD_TOWER = 17, + CARD_STARS = 18, + CARD_MOON = 19, + CARD_SUN = 20, + CARD_JUDGEMENT = 21, + CARD_WORLD = 22, + CARD_CLUBS_2 = 23, + CARD_DIAMONDS_2 = 24, + CARD_SPADES_2 = 25, + CARD_HEARTS_2 = 26, + CARD_ACE_OF_CLUBS = 27, + CARD_ACE_OF_DIAMONDS = 28, + CARD_ACE_OF_SPADES = 29, + CARD_ACE_OF_HEARTS = 30, + CARD_JOKER = 31, + RUNE_HAGALAZ = 32, + RUNE_JERA = 33, + RUNE_EHWAZ = 34, + RUNE_DAGAZ = 35, + RUNE_ANSUZ = 36, + RUNE_PERTHRO = 37, + RUNE_BERKANO = 38, + RUNE_ALGIZ = 39, + RUNE_BLANK = 40, + RUNE_BLACK = 41, + CARD_CHAOS = 42, + CARD_CREDIT = 43, + CARD_RULES = 44, + CARD_HUMANITY = 45, + CARD_SUICIDE_KING = 46, + CARD_GET_OUT_OF_JAIL = 47, + CARD_QUESTIONMARK = 48, + CARD_DICE_SHARD = 49, + CARD_EMERGENCY_CONTACT = 50, + CARD_HOLY = 51, + + -- Booster Pack #1 + CARD_HUGE_GROWTH = 52, + CARD_ANCIENT_RECALL = 53, + CARD_ERA_WALK = 54, + + --NUM_CARDS = 55 + + -- Repentance + RUNE_SHARD = 55, + CARD_REVERSE_FOOL = 56, + CARD_REVERSE_MAGICIAN = 57, + CARD_REVERSE_HIGH_PRIESTESS = 58, + CARD_REVERSE_EMPRESS = 59, + CARD_REVERSE_EMPEROR = 60, + CARD_REVERSE_HIEROPHANT = 61, + CARD_REVERSE_LOVERS = 62, + CARD_REVERSE_CHARIOT = 63, + CARD_REVERSE_JUSTICE = 64, + CARD_REVERSE_HERMIT = 65, + CARD_REVERSE_WHEEL_OF_FORTUNE = 66, + CARD_REVERSE_STRENGTH = 67, + CARD_REVERSE_HANGED_MAN = 68, + CARD_REVERSE_DEATH = 69, + CARD_REVERSE_TEMPERANCE = 70, + CARD_REVERSE_DEVIL = 71, + CARD_REVERSE_TOWER = 72, + CARD_REVERSE_STARS = 73, + CARD_REVERSE_MOON = 74, + CARD_REVERSE_SUN = 75, + CARD_REVERSE_JUDGEMENT = 76, + CARD_REVERSE_WORLD = 77, + CARD_CRACKED_KEY = 78, + CARD_QUEEN_OF_HEARTS = 79, + CARD_WILD = 80, + CARD_SOUL_ISAAC = 81, + CARD_SOUL_MAGDALENE = 82, + CARD_SOUL_CAIN = 83, + CARD_SOUL_JUDAS = 84, + CARD_SOUL_BLUEBABY = 85, + CARD_SOUL_EVE = 86, + CARD_SOUL_SAMSON = 87, + CARD_SOUL_AZAZEL = 88, + CARD_SOUL_LAZARUS = 89, + CARD_SOUL_EDEN = 90, + CARD_SOUL_LOST = 91, + CARD_SOUL_LILITH = 92, + CARD_SOUL_KEEPER = 93, + CARD_SOUL_APOLLYON = 94, + CARD_SOUL_FORGOTTEN = 95, + CARD_SOUL_BETHANY = 96, + CARD_SOUL_JACOB = 97, + NUM_CARDS = 98 +} + +TearVariant = { + BLUE = 0, + BLOOD = 1, + TOOTH = 2, + METALLIC = 3, + BOBS_HEAD = 4, + FIRE_MIND = 5, + DARK_MATTER = 6, + MYSTERIOUS = 7, + SCHYTHE = 8, + CHAOS_CARD = 9, + LOST_CONTACT = 10, + CUPID_BLUE = 11, + CUPID_BLOOD = 12, + NAIL = 13, + PUPULA = 14, + PUPULA_BLOOD = 15, + GODS_FLESH = 16, + GODS_FLESH_BLOOD = 17, + DIAMOND = 18, + EXPLOSIVO = 19, + COIN = 20, + MULTIDIMENSIONAL = 21, + STONE = 22, + NAIL_BLOOD = 23, + GLAUCOMA = 24, + GLAUCOMA_BLOOD = 25, + BOOGER = 26, + EGG = 27, + RAZOR = 28, + BONE = 29, + BLACK_TOOTH = 30, + NEEDLE = 31, + BELIAL = 32, + EYE = 33, + EYE_BLOOD = 34, + BALLOON = 35, + HUNGRY = 36, + BALLOON_BRIMSTONE = 37, + BALLOON_BOMB = 38, + + -- Repentance + FIST = 39, + GRIDENT = 40, + ICE = 41, + ROCK = 42, + KEY = 43, + KEY_BLOOD = 44, + ERASER = 45, + FIRE = 46, + SWORD_BEAM = 47, + SPORE = 48, + TECH_SWORD_BEAM = 49, +} + +local function TEARFLAG(x) + return x >= 64 and BitSet128(0,1<; + bnot: LuaBitwiseNotMethod; + bor: LuaBitwiseOrMethod; + bshl: LuaBitwiseLeftShiftMethod; + bshr: LuaBitwiseRightShiftMethod; +} diff --git a/isaac-typescript-definitions/typings/CardConfigList.d.ts b/isaac-typescript-definitions/typings/CardConfigList.d.ts new file mode 100644 index 0000000..496f363 --- /dev/null +++ b/isaac-typescript-definitions/typings/CardConfigList.d.ts @@ -0,0 +1,6 @@ +declare interface CardConfigList { + /** This function is bugged and returns useless userdata. */ + Get(idx: int): never; + + readonly Size: int; +} diff --git a/isaac-typescript-definitions/typings/Color.d.ts b/isaac-typescript-definitions/typings/Color.d.ts new file mode 100644 index 0000000..c4fbb9d --- /dev/null +++ b/isaac-typescript-definitions/typings/Color.d.ts @@ -0,0 +1,45 @@ +/** + * @param r + * @param g + * @param b + * @param a Default is 1. + * @param ro Default is 0, range is 0-1. + * @param go Default is 0, range is 0-1. + * @param bo Default is 0, range is 0-1. + */ +declare function Color( + this: void, + r: float, + g: float, + b: float, + a?: float, + ro?: int, + go?: int, + bo?: int, +): Color; + +declare interface Color { + Reset(): void; + SetColorize(red: float, green: float, blue: float, amount: float): void; + SetOffset(redOffset: float, greenOffset: float, blueOffset: float): void; + SetTint( + redTint: float, + greenTint: float, + blueTint: float, + alphaTint: float, + ): void; + + A: float; + B: float; + BO: float; + G: float; + GO: float; + R: float; + RO: float; +} + +declare namespace Color { + function Lerp(this: void, m1: Color, m2: Color, t: float): Color; + + const Default: Color; +} diff --git a/isaac-typescript-definitions/typings/CostumeConfigList.d.ts b/isaac-typescript-definitions/typings/CostumeConfigList.d.ts new file mode 100644 index 0000000..d791777 --- /dev/null +++ b/isaac-typescript-definitions/typings/CostumeConfigList.d.ts @@ -0,0 +1,5 @@ +declare interface CostumeConfigList { + Get(idx: int): ItemConfigCostume | undefined; + + readonly Size: int; +} diff --git a/isaac-typescript-definitions/typings/EffectList.d.ts b/isaac-typescript-definitions/typings/EffectList.d.ts new file mode 100644 index 0000000..2028a4b --- /dev/null +++ b/isaac-typescript-definitions/typings/EffectList.d.ts @@ -0,0 +1,5 @@ +declare interface EffectList { + Get(idx: int): TemporaryEffect | undefined; + + Size: int; +} diff --git a/isaac-typescript-definitions/typings/Entity.d.ts b/isaac-typescript-definitions/typings/Entity.d.ts new file mode 100644 index 0000000..d843da2 --- /dev/null +++ b/isaac-typescript-definitions/typings/Entity.d.ts @@ -0,0 +1,126 @@ +declare interface Entity { + AddBurn(source: EntityRef, duration: int, damage: float): void; + AddCharmed(source: EntityRef, duration: int): void; + AddConfusion(source: EntityRef, duration: int, ignoreBosses: boolean): void; + AddEntityFlags(entityFlags: EntityFlag): void; + AddFear(source: EntityRef, duration: int): void; + AddFreeze(source: EntityRef, duration: int): void; + AddHealth(hitPoints: float): void; + AddMidasFreeze(source: EntityRef, duration: int): void; + AddPoison(source: EntityRef, duration: int, damage: float): void; + AddShrink(source: EntityRef, duration: int): void; + AddSlowing( + source: EntityRef, + duration: int, + slowValue: float, + slowColor: Color, + ): void; + AddVelocity(velocity: Vector): void; + BloodExplode(): void; + // CanShutDoors is deliberately not implemented here because it conflicts with + // EntityNPC.CanShutDoors + // CanShutDoors(): boolean; + ClearEntityFlags(entityFlags: EntityFlag): void; + CollidesWithGrid(): boolean; + Die(): void; + Exists(): boolean; + GetBossID(): BossIDs | int; + GetColor(): Readonly; + GetData(): Record; + GetDropRNG(): RNG; + GetEntityFlags(): EntityFlag; + GetLastChild(): Entity; + GetLastParent(): Entity; + GetSprite(): Sprite; + HasCommonParentWithEntity(other: Entity): boolean; + HasEntityFlags(entityFlags: EntityFlag): boolean; + HasFullHealth(): boolean; + HasMortalDamage(): boolean; + IsActiveEnemy(includeDead: boolean): boolean; + IsBoss(): boolean; + IsDead(): boolean; + IsEnemy(): boolean; + IsFlying(): boolean; + IsFrame(frame: int, offset: int): boolean; + IsInvincible(): boolean; + IsVisible(): boolean; + IsVulnerableEnemy(): boolean; + Kill(): void; + MultiplyFriction(value: float): void; + PostRender(): void; + Remove(): void; + RemoveStatusEffects(): void; + Render(offset: Vector): void; + RenderShadowLayer(offset: Vector): boolean; + /** + * + * @param color + * @param duration + * @param priority + * @param fadeout Default value is false. + * @param share Default value is false. + */ + SetColor( + color: Color, + duration: int, + priority: int, + fadeout?: boolean, + share?: boolean, + ): void; + SetSize(size: float, sizeMulti: Vector, numGridCollisionPoints: int): void; + SetSpriteFrame(animationName: string, frameNum: int): void; + SetSpriteOverlayFrame(animationName: string, frameNum: int): void; + TakeDamage( + damage: float, + damageFlags: int, + source: EntityRef, + damageCountdown: int, + ): boolean; + ToBomb(): EntityBomb | undefined; + ToEffect(): EntityEffect | undefined; + ToFamiliar(): EntityFamiliar | undefined; + ToKnife(): EntityKnife | undefined; + ToLaser(): EntityLaser | undefined; + ToNPC(): EntityNPC | undefined; + ToPickup(): EntityPickup | undefined; + ToPlayer(): EntityPlayer | undefined; + ToProjectile(): EntityProjectile | undefined; + ToTear(): EntityTear | undefined; + Update(): void; + + Child: Entity | undefined; + CollisionDamage: float; + DepthOffset: float; + readonly DropSeed: int; + EntityCollisionClass: EntityCollisionClass; + FlipX: boolean; + readonly FrameCount: int; + Friction: float; + GridCollisionClass: EntityGridCollisionClass; + HitPoints: float; + readonly Index: int; + readonly InitSeed: int; + Mass: float; + MaxHitPoints: float; + Parent: Entity | undefined; + Position: Vector; + readonly PositionOffset: Readonly; + RenderZOffset: int; + Size: float; + SizeMulti: Vector; + readonly SpawnGridIndex: int; + SpawnerEntity: Entity | undefined; + SpawnerType: EntityType | int; + SpawnerVariant: int; + readonly SplatColor: Readonly; + SpriteOffset: Vector; + SpriteRotation: float; + SpriteScale: Vector; + SubType: int; + Target: Entity | undefined; + readonly TargetPosition: Readonly; + readonly Type: EntityType | int; + Variant: int; + Velocity: Vector; + Visible: boolean; +} diff --git a/isaac-typescript-definitions/typings/EntityBomb.d.ts b/isaac-typescript-definitions/typings/EntityBomb.d.ts new file mode 100644 index 0000000..7987771 --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityBomb.d.ts @@ -0,0 +1,27 @@ +declare interface EntityBomb extends Entity { + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + AddTearFlags(flags: TearFlags): void; + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + ClearTearFlags(flags: TearFlags): void; + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + HasTearFlags(flags: TearFlags): boolean; + SetExplosionCountdown(countdown: int): void; + + ExplosionDamage: float; + /** + * Be aware that this is really a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + Flags: int; + IsFetus: boolean; + RadiusMultiplier: float; +} diff --git a/isaac-typescript-definitions/typings/EntityEffect.d.ts b/isaac-typescript-definitions/typings/EntityEffect.d.ts new file mode 100644 index 0000000..796076a --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityEffect.d.ts @@ -0,0 +1,24 @@ +declare interface EntityEffect extends Entity { + FollowParent(parent: Entity): void; + SetDamageSource(entityType: EntityType | int): void; + SetRadii(min: float, max: float): void; + SetTimeout(timeout: int): void; + + DamageSource: EntityType | int; + FallingAcceleration: float; + FallingSpeed: float; + IsFollowing: boolean; + LifeSpan: int; + MaxRadius: float; + MinRadius: float; + ParentOffset: Vector; + Rotation: float; + Scale: float; + State: int; + Timeout: int; + m_Height: float; +} + +declare namespace EntityEffect { + function IsPlayerCreep(this: void, variant: int): boolean; +} diff --git a/isaac-typescript-definitions/typings/EntityFamiliar.d.ts b/isaac-typescript-definitions/typings/EntityFamiliar.d.ts new file mode 100644 index 0000000..3d84251 --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityFamiliar.d.ts @@ -0,0 +1,64 @@ +declare interface EntityFamiliar extends Entity { + AddCoins(value: int): void; + AddHearts(hearts: int): void; + AddKeys(keys: int): void; + AddToDelayed(): void; + AddToFollowers(): void; + AddToOrbit(layer: int): void; + FireProjectile(direction: Vector): EntityTear; + FollowParent(): void; + FollowPosition(position: Vector): void; + GetOrbitPosition(position: Vector): Vector; + MoveDelayed(numFrames: int): void; + MoveDiagonally(speed: float): void; + /** + * @param maxDistance + * @param frameInterval Default is 13. + * @param flags Default is 0. + * A combination of the following flags (none of these are set by default): + * 1: Allow switching to a better target even if we already have one + * 2: Don't prioritize enemies that are close to our owner + * 4: Prioritize enemies with higher HP + * 8: Prioritize enemies with lower HP + * 16: Give lower priority to our current target + * (this makes us more likely to switch between targets) + * @param coneDir Default is Vector.Zero. + * If ~= Vector.Zero, searches for targets in a cone pointing in this direction. + * @param coneAngle Default is 15. + * If ConeDir ~= Vector.Zero, sets the half angle of the search cone in degrees + * (45 results in a search angle of 90 degrees). + */ + PickEnemyTarget( + maxDistance: float, + frameInterval?: int, + flags?: int, + coneDir?: Vector, + coneAngle?: float, + ): void; + PlayChargeAnim(direction: Direction): void; + PlayFloatAnim(direction: Direction): void; + PlayShootAnim(direction: Direction): void; + RecalculateOrbitOffset(layer: int, add: boolean): int; + RemoveFromDelayed(): void; + RemoveFromFollowers(): void; + RemoveFromOrbit(): void; + Shoot(): void; + + Coins: int; + FireCooldown: int; + HeadFrameDelay: int; + Hearts: int; + Keys: int; + LastDirection: Direction; + MoveDirection: Direction; + OrbitAngleOffset: float; + OrbitDistance: Vector; + Player: EntityPlayer; + RoomClearCount: int; + ShootDirection: Direction; + State: int; +} + +declare namespace EntityFamiliar { + function GetOrbitDistance(this: void, layer: int): Vector; +} diff --git a/isaac-typescript-definitions/typings/EntityKnife.d.ts b/isaac-typescript-definitions/typings/EntityKnife.d.ts new file mode 100644 index 0000000..a8549de --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityKnife.d.ts @@ -0,0 +1,37 @@ +declare interface EntityKnife extends Entity { + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + AddTearFlags(flags: TearFlags): void; + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + ClearTearFlags(flags: TearFlags): void; + GetKnifeDistance(): float; + GetKnifeVelocity(): float; + GetRenderZ(): int; + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + HasTearFlags(flags: TearFlags): boolean; + IsFlying(): boolean; + Reset(): void; + SetPathFollowSpeed(speed: float): void; + Shoot(charge: float, range: float): void; + + Charge: float; + MaxDistance: float; + PathFollowSpeed: float; + PathOffset: float; + Rotation: float; + RotationOffset: float; + Scale: float; + /** + * Be aware that this is really a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + TearFlags: int; +} diff --git a/isaac-typescript-definitions/typings/EntityLaser.d.ts b/isaac-typescript-definitions/typings/EntityLaser.d.ts new file mode 100644 index 0000000..663774b --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityLaser.d.ts @@ -0,0 +1,86 @@ +declare interface EntityLaser extends Entity { + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + AddTearFlags(flags: TearFlags): void; + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + ClearTearFlags(flags: TearFlags): void; + GetEndPoint(): Readonly; + // GetNonOptimizedSamples(): Readonly; // HomingLaser is not implemented + GetRenderZ(): int; + // GetSamples(): Readonly; // HomingLaser is not implemented + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + HasTearFlags(flags: TearFlags): boolean; + IsCircleLaser(): boolean; + IsSampleLaser(): boolean; + SetActiveRotation( + delay: int, + angleDegrees: float, + rotationSpeed: float, + timeoutComplete: boolean, + ): void; + SetBlackHpDropChance(chance: float): void; + // SetHomingType(laserHomingType: LaserHomingType): void; // LaserHomingType is not implemented + SetMaxDistance(distance: float): void; + SetMultidimensionalTouched(value: boolean): void; + SetOneHit(value: boolean): void; + SetTimeout(value: int): void; + + Angle: float; + AngleDegrees: float; + BlackHpDropChance: float; + BounceLaser: Entity; + CurveStrength: float; + DisableFollowParent: boolean; + EndPoint: Vector; + FirstUpdate: boolean; + GridHit: boolean; + // HomingLaser: HomingLaser; // HomingLaser is not implemented + // HomingType: LaserHomingType; // LaserHomingType is not implemented + IsActiveRotating: boolean; + LaserLength: float; + LastAngleDegrees: float; + MaxDistance: float; + OneHit: boolean; + ParentOffset: Vector; + Radius: float; + RotationDegrees: float; + RotationDelay: int; + RotationSpd: float; + // SampleLaser: boolean; // Should use IsSampleLaser() instead + Shrink: boolean; + StartAngleDegrees: float; + /** + * Be aware that this is really a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + TearFlags: int; + Timeout: int; +} + +declare namespace EntityLaser { + function CalculateEndPoint( + this: void, + start: Vector, + dir: Vector, + positionOffset: Vector, + parent: Entity, + margin: float, + ): Vector; + function ShootAngle( + this: void, + variant: LaserVariant | int, + sourcePos: Vector, + angleDegrees: float, + timeout: int, + posOffset: Vector, + source: Entity, + ): EntityLaser; +} diff --git a/isaac-typescript-definitions/typings/EntityList.d.ts b/isaac-typescript-definitions/typings/EntityList.d.ts new file mode 100644 index 0000000..4cc9d72 --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityList.d.ts @@ -0,0 +1,5 @@ +declare interface EntityList { + Get(idx: int): Entity | undefined; + + readonly Size: int; +} diff --git a/isaac-typescript-definitions/typings/EntityNPC.d.ts b/isaac-typescript-definitions/typings/EntityNPC.d.ts new file mode 100644 index 0000000..664cd55 --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityNPC.d.ts @@ -0,0 +1,97 @@ +declare interface EntityNPC extends Entity { + AnimWalkFrame( + horizontalAnim: string, + verticalAnim: string, + speedThreshold: float, + ): void; + CalcTargetPosition(distanceLimit: float): Vector; + CanBeDamagedFromVelocity(velocity: Vector): boolean; + CanReroll(): boolean; + FireBossProjectiles( + numProjectiles: int, + targetPos: Vector, + trajectoryModifier: float, + projectileParams: ProjectileParams, + ): EntityProjectile; + FireProjectiles( + position: Vector, + velocity: Vector, + projectilesMode: ProjectilesMode, + projectileParams: ProjectileParams, + ): void; + GetAliveEnemyCount(): int; + GetBossColorIdx(): int; + GetChampionColorIdx(): ChampionColor; + GetPlayerTarget(): Entity; + IsBoss(): boolean; + IsChampion(): boolean; + KillUnique(): void; + /** + * @param seed + * @param championColor The type of champion to turn this enemy into. + * (-1 results in a random champion type.) + * Default is -1. + * @param init Set to true when called while initializing the enemy, false otherwise. + * Default is false. + */ + MakeChampion( + seed: int, + championColorIdx?: ChampionColor, + init?: boolean, + ): void; + MakeSplat(size: float): EntityEffect; + Morph( + entityType: EntityType | int, + variant: int, + subType: int, + championColorIdx: ChampionColor, + ): boolean; + PlaySound( + soundEffect: SoundEffect | int, + volume: float, + frameDelay: int, + loop: boolean, + pitch: float, + ): void; + QueryNPCsGroup(groupIdx: int): EntityList; + QueryNPCsSpawnerType( + spawnerType: EntityType | int, + entityType: EntityType | int, + onlyEnemies: boolean, + ): EntityList; + QueryNPCsType(entityType: EntityNPC, variant: int): EntityList; + ResetPathFinderTarget(): void; + + // EntityNPC.CanShutDoors conflicts with Entity.CanShutDoors(), + // but the latter is deliberately not implemented so that we can use the property in EntityNPC + CanShutDoors: boolean; + readonly ChildNPC: Readonly; + EntityRef: Entity; + GroupIdx: int; + I1: int; + I2: int; + readonly ParentNPC: Readonly; + Pathfinder: PathFinder; + ProjectileCooldown: int; + ProjectileDelay: int; + Scale: float; + /** + * This has a type of `NpcState | int` so that other enums can be used to represent more specific + * entities. + */ + State: NpcState | int; + StateFrame: int; + V1: Vector; + V2: Vector; +} + +declare namespace EntityNPC { + function ThrowSpider( + this: void, + position: Vector, + spawner: Entity, + targetPos: Vector, + big: boolean, + yOffset: float, + ): EntityNPC; +} diff --git a/isaac-typescript-definitions/typings/EntityPickup.d.ts b/isaac-typescript-definitions/typings/EntityPickup.d.ts new file mode 100644 index 0000000..4688b45 --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityPickup.d.ts @@ -0,0 +1,49 @@ +declare interface EntityPickup extends Entity { + AppearFast(): void; + CanReroll(): boolean; + GetCoinValue(): int; + IsShopItem(): boolean; + /** + * @param entityType + * @param variant + * @param subType + * @param keepPrice Default is false. + * @param keepSeed If set to true, keeps the initial RNG seed of the pickup instead of rerolling + * it. Default is false. + * @param ignoreModifiers If set to true, ignores item effects that might turn this pickup into + * something other than the specified variant and subtype. Default is false. + */ + Morph( + entityType: EntityType | int, + variant: int, + subType: int, + keepPrice?: boolean, + keepSeed?: boolean, + ignoreModifiers?: boolean, + ): void; + PlayDropSound(): void; + PlayPickupSound(): void; + /** + * @param player Default is undefined. + */ + TryOpenChest(player?: EntityPlayer): boolean; + + AutoUpdatePrice: boolean; + Charge: int; + /** + * Any non-zero value causes the item to form an option group with any other item with the same + * OptionsPickupIndex value. + * + * When an item belonging to an option group is picked up, all other items belonging to the same + * group disappear. + * + * 0 is the default value and means the item doesn't belong to any group. + */ + OptionsPickupIndex: int; + Price: int; + ShopItemId: int; + State: int; + Timeout: int; + Touched: boolean; + Wait: int; +} diff --git a/isaac-typescript-definitions/typings/EntityPlayer.d.ts b/isaac-typescript-definitions/typings/EntityPlayer.d.ts new file mode 100644 index 0000000..7c607db --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityPlayer.d.ts @@ -0,0 +1,882 @@ +declare interface EntityPlayer extends Entity { + /** 1 unit is half a heart. Remove them with negative numbers. */ + AddBlackHearts(blackHearts: int): void; + /** This adds Tainted Bethany's blood charges. Only works on Tainted Bethany. */ + AddBloodCharge(num: int): void; + /** + * @param amount + * @param position + * @param target This argument is not optional. If you want to spawn a fly without a target, then + * you must explicitly pass undefined. + */ + AddBlueFlies( + amount: int, + position: Vector, + target: Entity | undefined, + ): Entity; + AddBlueSpider(position: Vector): Entity; + /** Remove them with negative numbers. */ + AddBombs(amount: int): void; + /** Remove them with negative numbers. */ + AddBoneHearts(hearts: int): void; + /** Remove them with negative numbers. */ + AddBrokenHearts(hearts: int): void; + /** + * Used to specify the kinds of stats that should be evaluated the next time `EvaluateCache()` is + * run. + */ + AddCacheFlags(cacheFlags: CacheFlag): void; + AddCard(card: Card | int): void; + /** Remove them with negative numbers. */ + AddCoins(amount: int): void; + /** + * @param collectibleType + * @param charge Default is 0. + * @param firstTimePickingUp Setting this to false will not spawn or add consumables for the item + * and will not cause it to count towards transformations. Default is true. + * @param activeSlot Sets the active slot this collectible should be added to. + * Default is ActiveSlot.SLOT_PRIMARY. + * @param varData Sets the variable data for this collectible (this is used to store extra data + * for some active items like the number of uses for Jar of Wisps). + * Default is 0. + */ + AddCollectible( + collectibleType: CollectibleType | int, + charge?: int, + firstTimePickingUp?: boolean, + activeSlot?: ActiveSlot, + varData?: int, + ): void; + AddControlsCooldown(cooldown: int): void; + AddCostume(itemConfigItem: ItemConfigItem, itemStateOnly: boolean): void; + /** + * Disables all item effects similarly to the abandoned mineshaft in Mines II. + * This also temporarily removes consumables and pocket items. + */ + AddCurseMistEffect(): void; + AddDeadEyeCharge(): void; + AddDollarBillEffect(): void; + /** Remove them with negative numbers. */ + AddEternalHearts(eternalHearts: int): void; + /** Spawns a friendly dip from Dirty Mind. */ + AddFriendlyDip(subType: DipFamiliarSubType, position: Vector): EntityFamiliar; + /** + * Turns the given number of bombs into giga bombs. + * This does not actually increase the number of bombs held. To actually add bombs, AddBombs() + * should be called first. + * + * @param num + */ + AddGigaBombs(num: int): void; + /** Remove them with negative numbers. */ + AddGoldenBomb(): void; + AddGoldenHearts(hearts: int): void; + AddGoldenKey(): void; + /** + * Adds red hearts to the player if there are any empty heart containers. 1 unit is half a heart. + * Remove health with negative numbers. + */ + AddHearts(hearts: int): void; + /** + * Spawns a Lemegeton wisp. + * + * @param subType The ID of the passive item to mimic. + * @param position + * @param adjustOrbitLayer Default is false. + */ + AddItemWisp( + subType: int, + position: Vector, + adjustOrbitLayer?: boolean, + ): EntityFamiliar; + AddJarFlies(flies: int): void; + AddJarHearts(hearts: int): void; + /** Remove them with negative numbers. */ + AddKeys(amount: int): void; + /** + * Adds heart containers to the player. 2 units is a full heart container. + * Remove them with negative numbers. + */ + AddMaxHearts(maxHearts: int, ignoreKeeper: boolean): void; + /** + * Spawns a mini Isaac from Giant Cell. + * + * @param position + * @param playAnim If false, skips the appear animation for the familiars. + */ + AddMinisaac(position: Vector, playAnim?: boolean): EntityFamiliar; + AddNullCostume(nullItemID: NullItemID | int): void; + AddPill(pillColor: PillColor | int): void; + AddPlayerFormCostume(playerForm: PlayerForm): void; + AddPrettyFly(): void; + /** + * Remove them with negative numbers. + * + * @param hearts Rotten hearts must be specified in a multiple of 2. + * For example, `AddRottenHearts(4)` will add 2 rotten hearts. + */ + AddRottenHearts(hearts: int): void; + /** This adds Bethany's soul heart charges. Only works on Bethany. */ + AddSoulCharge(num: int): void; + /** 1 unit is half a heart. Remove them with negative numbers. */ + AddSoulHearts(soulHearts: int): void; + /** Spawns a defensive fly from The Swarm. */ + AddSwarmFlyOrbital(position: Vector): EntityFamiliar; + /** + * - If the player does not have any open trinket slots, this function will do nothing. + * - If the player has an open trinket slot but already has a trinket, the new trinket will go to + * the first slot and the existing trinket will get pushed back to the second slot. + * - If you provide an argument of 0 or an otherwise invalid trinket ID, the game will crash. + * + * @param trinketType + * @param firstTimePickingUp Setting this to false will not spawn or add pickups for the item + * and will not cause it to count towards transformations. Default is true. + */ + AddTrinket( + trinketType: TrinketType | int, + firstTimePickingUp?: boolean, + ): void; + /** + * Spawns a Book of Virtues wisp. + * + * @param subType The ID of the active item to spawn a wisp from. Wisps with a special ID (for + * example "s0" in wisps.xml) can be spawned with the subtype 65536 + X where X is the number + * after the "s". + * @param position + * @param adjustOrbitLayer If true, allows wisps to spawn outside of their usual orbit if their + * assigned orbit is full. Default is false. + * @param dontUpdate If true, the spawned wisp will not update immediately. This allows certain + * properties to be set on the first frame before the wisp is fully initialized. Default is false. + */ + AddWisp( + subType: int, + position: Vector, + adjustOrbitLayer?: boolean, + dontUpdate?: boolean, + ): EntityFamiliar; + /** + * Play the animation that is normally played at the beginning of a stage. + * Also plays the associated sound effect. + */ + AnimateAppear(): void; + /** + * @param card + * @param playerAnimationName Default is "Pickup". + */ + AnimateCard( + card: Card | int, + playerAnimationName?: PlayerItemAnimation, + ): void; + /** + * @param collectibleType + * @param playerAnimationName Default is "Pickup". + * @param spriteAnimationName Default is "PlayerPickupSparkle". + */ + AnimateCollectible( + collectibleType: CollectibleType | int, + playerItemAnimation?: PlayerItemAnimation, + collectibleAnimation?: CollectibleAnimation, + ): void; + /** Play the "thumbs up" animation. */ + AnimateHappy(): void; + /** Play the animation where Isaac steps into a beam of light (e.g. at the end of Womb 2). */ + AnimateLightTravel(): void; + /** + * @param pillColor + * @param playerAnimationName Default is "Pickup". + */ + AnimatePill( + pillColor: PillColor | int, + playerAnimationName?: PlayerItemAnimation, + ): void; + AnimatePitfallIn(): void; + AnimatePitfallOut(): void; + /** + * Play the animation where Isaac holds his head in his hands. + * Also plays the associated sound effect. + */ + AnimateSad(): void; + AnimateTeleport(up: boolean): void; + AnimateTrapdoor(): void; + /** + * @param trinketType + * @param playerAnimationName Default is "Pickup". + * @param spriteAnimationName Default is "PlayerPickupSparkle". + */ + AnimateTrinket( + trinketType: TrinketType | int, + playerAnimationName?: PlayerItemAnimation, + spriteAnimationName?: string, + ): void; + AreControlsEnabled(): boolean; + AreOpposingShootDirectionsPressed(): boolean; + /** + * @param collectibleType Default is CollectibleType.COLLECTIBLE_NULL. + */ + CanAddCollectible(collectibleType?: CollectibleType): boolean; + /** Returns true if the player can pick up black hearts, false otherwise. */ + CanPickBlackHearts(): boolean; + /** Returns true if the player can pick up bone hearts, false otherwise. */ + CanPickBoneHearts(): boolean; + /** Returns true if the player can pick up golden hearts, false otherwise. */ + CanPickGoldenHearts(): boolean; + /** Returns true if the player can pick up red hearts, false otherwise. */ + CanPickRedHearts(): boolean; + /** Returns true if the player can pick up rotten hearts, false otherwise. */ + CanPickRottenHearts(): boolean; + /** Returns true if the player can pick up soul hearts, false otherwise. */ + CanPickSoulHearts(): boolean; + CanPickupItem(): boolean; + CanShoot(): boolean; + /** + * When the player presses the different shoot buttons, Isaac will normally turn his head to face + * the direction that he is supposed to shoot in. This returns true if head will react to + * shooting, false otherwise. + */ + CanTurnHead(): boolean; + /** + * This will attempt to merge forms when called on characters like Jacob and Esau. + * This currently does not work correctly when changing from/to certain characters. + * (i.e. Tainted Isaac) + */ + ChangePlayerType(type: PlayerType): void; + /** + * @param familiarVariant + * @param targetCount + * @param rng + * @param sourceItem The item this type of familiar was created by. Default is undefined. + * @param familiarSubType The subtype of the familiar to check (-1 matches any subtype). Default + * is -1. + */ + CheckFamiliar( + familiarVariant: FamiliarVariant | int, + targetCount: int, + rng: RNG, + sourceItem?: ItemConfigItem, + familiarSubType?: int, + ): void; + ClearCostumes(): void; + ClearDeadEyeCharge(): void; + /** Called automatically by the game when the player exits a room. */ + ClearTemporaryEffects(): void; + /** + * Sets the charge of the active item to 0 without triggering the active item effect. + * + * @param activeSlot Default is ActiveSlot.SLOT_PRIMARY. + */ + DischargeActiveItem(activeSlot?: ActiveSlot): void; + DoZitEffect(direction: Vector): void; + DonateLuck(luck: int): void; + DropPocketItem(pocketItemSlot: PocketItemSlot, position: Vector): void; + DropTrinket(dropPos: Vector, replaceTick: boolean): void; + /** + * Triggers the MC_EVALUATE_CACHE callback. Before calling this function, you need to set the + * appropriate cache flags by using the `AddCacheFlag()` method. + */ + EvaluateItems(): void; + /** + * @param position + * @param velocity + * @param source Default is undefined. + */ + FireBomb(position: Vector, velocity: Vector, source?: Entity): EntityBomb; + /** + * @param direction + * @param source Default is undefined. + * @param damageMultiplier Default is 1. + */ + FireBrimstone( + direction: Vector, + source?: Entity, + damageMultiplier?: float, + ): EntityLaser; + FireDelayedBrimstone(angle: float, parent: Entity): EntityLaser; + /** + * @param parent + * @param rotationOffset Default is 0. + * @param cantOverwrite Default is false. + * @param subType Default is 0. + * @param variant Default is 0. + */ + FireKnife( + parent: Entity, + rotationOffset?: float, + cantOverwrite?: boolean, + subType?: int, + variant?: int, + ): EntityKnife; + /** + * @param position + * @param velocity + * @param canBeEye Default is true. + * @param noTractorBeam Default is false. + * @param canTriggerStreakEnd Default is true. + * @param source Default is undefined. + * @param damageMultiplier Default is 1. + */ + FireTear( + position: Vector, + velocity: Vector, + canBeEye?: boolean, + noTractorBeam?: boolean, + canTriggerStreakEnd?: boolean, + source?: Entity, + damageMultiplier?: float, + ): EntityTear; + /** + * @param position + * @param laserOffset + * @param direction + * @param leftEye + * @param oneHit Default is false. + * @param source Default is undefined. + * @param damageMultiplier Default is 1. + */ + FireTechLaser( + position: Vector, + laserOffset: LaserOffset, + direction: Vector, + leftEye: boolean, + oneHit?: boolean, + source?: Entity, + damageMultiplier?: float, + ): EntityLaser; + /** + * @param position + * @param direction + * @param radius + * @param source Default is undefined. + * @param damageMultiplier Default is 1. + */ + FireTechXLaser( + position: Vector, + direction: Vector, + radius: float, + source?: Entity, + damageMultiplier?: float, + ): EntityLaser; + FlushQueueItem(): boolean; + /** + * @param activeSlot Default is ActiveSlot.SLOT_PRIMARY. + * @param force If set, items will always be charged even if they normally cannot be recharged by + * batteries. + */ + FullCharge(activeSlot?: ActiveSlot, force?: boolean): boolean; + /** + * @param activeSlot Default is ActiveSlot.SLOT_PRIMARY. + */ + GetActiveCharge(activeSlot?: ActiveSlot): int; + /** + * Returns 0 if no item is held. + * + * @param activeSlot Default is ActiveSlot.SLOT_PRIMARY. + */ + GetActiveItem(activeSlot?: ActiveSlot): CollectibleType | int; + /** + * Returns 0 if there is no active item in the specified slot. + * + * @param activeSlot Default is ActiveSlot.SLOT_PRIMARY. + */ + GetActiveSubCharge(activeSlot?: ActiveSlot): int; + GetActiveWeaponEntity(): Entity; + GetAimDirection(): Readonly; + GetBabySkin(): BabySubType | int; + /** + * @param activeSlot Default is ActiveSlot.SLOT_PRIMARY. + */ + GetBatteryCharge(activeSlot?: ActiveSlot): int; + /** This returns the bit mask for which soul hearts are black hearts. */ + GetBlackHearts(): int; + /** This gets Tainted Bethany's blood charges. */ + GetBloodCharge(): int; + /** + * There is no separate BombFlags enum, so bombs use tear flags. + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + GetBombFlags(): int; + /** + * There is no separate BombFlags enum, so bombs use tear flags. + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + GetBombVariant( + tearFlags: TearFlags, + forceSmallBomb: boolean, + ): BombVariant | int; + GetBoneHearts(): int; + GetBrokenHearts(): int; + /** Returns 0 if there is no card. */ + GetCard(pocketItemSlot: PocketItemSlot): Card | int; + GetCardRNG(card: Card | int): RNG; + GetCollectibleCount(): int; + /** + * @param collectibleType + * @param onlyCountTrueItems If set to true, the function only counts collectibles that the player + * actually owns and ignores things like Lilith's Incubus, items granted by 3 Dollar Bill, and so + * forth. + */ + GetCollectibleNum( + collectibleType: CollectibleType | int, + ignoreModifiers?: boolean, + ): int; + GetCollectibleRNG(collectibleType: CollectibleType | int): RNG; + GetCostumeNullPos( + nullFrameName: string, + headScale: boolean, + direction: Vector, + ): Vector; + GetDamageCooldown(): int; + /** This returns the number of blood charges when called on Tainted Bethany, 0 otherwise. */ + GetEffectiveBloodCharge(): int; + GetEffectiveMaxHearts(): int; + /** This returns the number of soul charges when called on Bethany, 0 otherwise. */ + GetEffectiveSoulCharge(): int; + GetEffects(): TemporaryEffects; + GetEternalHearts(): int; + GetExtraLives(): int; + GetFireDirection(): Direction; + GetFlyingOffset(): Vector; + GetGoldenHearts(): int; + GetGreedDonationBreakChance(): float; + GetHeadDirection(): Direction; + GetHeartLimit(): int; + /** + * Returns the amount of red hearts the player has inside their heart containers and bone hearts. + * 1 unit is half a heart. + */ + GetHearts(): int; + GetItemState(): int; + GetJarFlies(): int; + GetJarHearts(): int; + GetLaserOffset(laserOffset: LaserOffset, direction: Vector): Vector; + GetLastActionTriggers(): int; + GetLastDamageFlags(): DamageFlag; + GetLastDamageSource(): Readonly; + GetLastDirection(): Readonly; + /** + * - When called on Jacob or Esau, returns Jacob. + * - When called on Tainted Forgotten or Tainted Forgotten's Soul, returns Tainted Forgotten. + * - When called on any other character, returns that character. + */ + GetMainTwin(): EntityPlayer; + /** + * Returns the amount of heart containers that the player has. 1 unit is half a heart container. + */ + GetMaxHearts(): int; + /** + * Returns the maximum number of pocket items + pocket actives that the player can currently hold. + * + * - Usually, this will return 1. + * - If the player has Belly Button, Starter Deck, or Little Baggy, it will increment the number + * by 1. + * - If the player has a pocket active item, it will increment the number by 1. + * - If the player has a dice from the Dice Bag trinket, it will increment the number by 1. + * - The maximum number this can return is 4. + */ + GetMaxPocketItems(): int; + /** + * Returns the maximum number of trinkets that the player can currently hold. Usually, this will + * return 1, but the player can hold up to 2 trinkets under certain conditions (e.g. having Mom's + * Purse). + */ + GetMaxTrinkets(): int; + /** + * Returns the current passive item mimicked by Modeling Clay + * (or COLLECTIBLE_NULL if no effect is being mimicked). + */ + GetModelingClayEffect(): CollectibleType; + GetMovementDirection(): Direction; + GetMovementInput(): Vector; + GetMovementJoystick(): Vector; + GetMovementVector(): Readonly; + /** + * Note that the only thing that you can do with MultiShotParams is feed it to the + * `EntityPlayer.GetMultiShotPositionVelocity()` method. + * + * @param weaponType Default is WeaponType.WEAPON_TEARS. + */ + GetMultiShotParams(weaponType?: WeaponType): MultiShotParams; + GetMultiShotPositionVelocity( + loopIndex: int, + weaponType: WeaponType, + shotDirection: Vector, + shotSpeed: float, + multiShotParams: MultiShotParams, + ): PosVel; + /** + * Normally, this function returns the player. However, in some cases, NPCs can be redirected to + * attack another target, in which case this function will return the alternate target + * (e.g. after using Best Friend). + */ + GetNPCTarget(): Entity; + /** Returns e.g. "Isaac", "Cain", etc. */ + GetName(): string; + GetNumBlueFlies(): int; + GetNumBlueSpiders(): int; + GetNumBombs(): int; + GetNumCoins(): int; + /** Returns the number of giga bombs held. */ + GetNumGigaBombs(): int; + GetNumKeys(): int; + /** + * - When called on Jacob, returns Esau. + * - When called on Esau, returns Jacob. + * - When called on Tainted Forgotten, returns Tainted Forgotten's Soul. + * - When called on Tainted Forgotten's Soul, returns Tainted Forgotten. + * - When called on any other character, returns undefined. + */ + GetOtherTwin(): EntityPlayer | undefined; + /** Returns 0 if there is no pill. */ + GetPill(pocketItemSlot: PocketItemSlot): PillColor | int; + GetPillRNG(pillEffect: PillEffect | int): RNG; + GetPlayerType(): PlayerType | int; + // GetPocketItem(slotID: int): Readonly; // PlayerPocketItem is not implemented + /** + * Returns the joystick direction that drives player movement, taking into account certain + * modifiers like disabled controls and seed effects. + */ + GetRecentMovementVector(): Readonly; + /** + * This returns the actual number of rotten hearts. + * (For example, this returns 2 if the player has 2 rotten hearts.) + */ + GetRottenHearts(): int; + GetShootingInput(): Vector; + GetShootingJoystick(): Vector; + GetSmoothBodyRotation(): float; + /** This gets Bethany's soul heart charges. */ + GetSoulCharge(): int; + /** + * 1 unit is half a heart. Black hearts count toward this total. + * Remove them with negative numbers. + */ + GetSoulHearts(): int; + /** + * - When on The Forgotten, returns the player object for The Soul. + * - When on The Soul, returns the player object for The Forgotten. + * - Otherwise, returns undefined. + */ + GetSubPlayer(): EntityPlayer | undefined; + /** + * Used for tear parameters that are calculated on hit (e.g. Tough Love, Common Cold), + * + * @param weaponType + * @param damageScale Default is 1. + * @param tearDisplacement Default is 1. + * @param source Default is undefined. + */ + GetTearHitParams( + weaponType: WeaponType, + damageScale?: float, + tearDisplacement?: int, + source?: Entity, + ): TearParams; + GetTearMovementInheritance(shotDirection: Vector): Vector; + GetTearPoisonDamage(): float; + GetTearRangeModifier(): int; + GetTotalDamageTaken(): int; + GetTractorBeam(): Entity; + /** Returns 0 if there is no trinket. */ + GetTrinket(trinketSlot: TrinketSlot): int; + /** + * This is the number of times that the trinket effect is applied. + * Returns 0 if the player does not have the particular trinket. + */ + GetTrinketMultiplier(trinketType: TrinketType | int): int; + GetTrinketRNG(trinketType: TrinketType | int): RNG; + GetVelocityBeforeUpdate(): Readonly; + GetZodiacEffect(): ZodiacCollectibles; + /** + * @param collectibleType + * @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. + */ + HasCollectible( + collectibleType: CollectibleType | int, + ignoreModifiers?: boolean, + ): boolean; + /** Returns true if the player's item effects are currently being disabled. */ + HasCurseMistEffect(): boolean; + HasFullHearts(): boolean; + HasFullHeartsAndSoulHearts(): boolean; + HasGoldenBomb(): boolean; + HasGoldenKey(): boolean; + /** + * @param damageFlag Default is 0. + */ + HasInvincibility(damageFlag?: DamageFlag): boolean; + HasPlayerForm(playerForm: PlayerForm): boolean; + HasTimedItem(): boolean; + /** + * @param trinketType + * @param ignoreModifiers If set to true, only counts trinkets the player actually holds and + * ignores effects granted by other items. Default is false. + */ + HasTrinket( + trinketType: TrinketType | int, + ignoreModifiers?: boolean, + ): boolean; + HasWeaponType(weaponType: WeaponType): boolean; + InitBabySkin(): void; + IsBlackHeart(heart: int): boolean; + IsBoneHeart(heartSlot: int): boolean; + /** + * In a multiplayer game, if a player dies, they will return as a tiny ghost. This method returns + * true if the player is a co-op ghost. + */ + IsCoopGhost(): boolean; + IsExtraAnimationFinished(): boolean; + IsFullSpriteRendering(): boolean; + IsHeldItemVisible(): boolean; + /* Is the player holding up an item (card/collectible/etc)? */ + IsHoldingItem(): boolean; + IsItemQueueEmpty(): boolean; + IsP2Appearing(): boolean; + IsPosInSpotLight(position: Vector): boolean; + /** Returns true for The Soul. Otherwise, returns false. */ + IsSubPlayer(): boolean; + /** + * @param activeSlot Default is ActiveSlot.SLOT_PRIMARY. + */ + NeedsCharge(activeSlot?: ActiveSlot): boolean; + PlayExtraAnimation(animation: string): void; + QueueExtraAnimation(animation: string): void; + /** + * When the player touches a collectible item, they are not granted it immediately. Instead, the + * item is a queue for the duration of the animation where the player holds the item above their + * head. When the animation is finished, the item(s) in the queue will be granted. This method + * adds a new item to the item queue. If the player is not currently playing an animation, then + * the queued item will simply be awarded instantly. + * + * @param itemConfigItem + * @param charge Default is 0. + * @param touched Default is false. + * @param golden Default is false. + * @param varData Default is false. + */ + QueueItem( + itemConfigItem: ItemConfigItem, + charge?: int, + touched?: boolean, + golden?: boolean, + varData?: int, + ): void; + RemoveBlackHeart(blackHeart: int): void; + RemoveBlueFly(): void; + RemoveBlueSpider(): void; + /** + * @param collectibleType + * @param ignoreModifiers Ignores collectible effects granted by other items (i.e. Void). + * Default is false. + * @param activeSlot Sets the active slot this collectible should be removed from. + * Default is ActiveSlot.SLOT_PRIMARY. + * @param removeFromPlayerForm If successfully removed and part of a transformation, decrease that + * transformation's counter by 1. Default is true. + */ + RemoveCollectible( + collectibleType: CollectibleType | int, + ignoreModifiers?: boolean, + activeSlot?: ActiveSlot, + removeFromPlayerForm?: boolean, + ): void; + RemoveCostume(itemConfigItem: ItemConfigItem): void; + /** + * Re-enables item effects removed by AddCurseMistEffect(). + * Also attempts to restore consumables and pocket items removed by AddCurseMistEffect(). + */ + RemoveCurseMistEffect(): void; + RemoveGoldenBomb(): void; + RemoveGoldenKey(): void; + /** Removes player-specific costumes like Magdalene's hair or Cain's eyepatch. */ + RemoveSkinCostume(): void; + RenderBody(position: Vector): void; + RenderGlow(position: Vector): void; + RenderHead(position: Vector): void; + RenderTop(position: Vector): void; + ReplaceCostumeSprite( + itemConfigItem: ItemConfigItem, + spritePath: string, + spriteID: int, + ): void; + ResetDamageCooldown(): void; + ResetItemState(): void; + RespawnFamiliars(): void; + Revive(): void; + /** + * @param charge + * @param activeSlot Default is ActiveSlot.SLOT_PRIMARY. + */ + SetActiveCharge(charge: int, activeSlot?: ActiveSlot): void; + /** This sets Tainted Bethany's blood charges. Only works on Tainted Bethany. */ + SetBloodCharge(num: int): void; + SetCard(pocketItemSlot: PocketItemSlot, card: Card | int): void; + SetFullHearts(): void; + SetMinDamageCooldown(damageCooldown: int): void; + SetPill(pocketItemSlot: PocketItemSlot, pillColor: PillColor | int): void; + /** + * Sets the player's pocket active item to the given active item. + * Items added to SLOT_POCKET2 will always be removed upon being used. + * + * @param collectibleType + * @param slot Can be either ActiveSlot.SLOT_POCKET or ActiveSlot.SLOT_POCKET2. Default is ActiveSlot.SLOT_POCKET. + * @param keepInPools If true, the item will not be removed from the item pools. Default is false. + */ + SetPocketActiveItem( + collectibleType: CollectibleType, + slot?: ActiveSlot, + keepInPools?: boolean, + ): void; + SetShootingCooldown(cooldown: int): void; + /** + * This sets Bethany's soul heart charges. + * + * @param num + */ + SetSoulCharge(num: int): void; + SetTargetTrapDoor(trapDoor: GridEntity): void; + ShootRedCandle(direction: Vector): void; + SpawnMawOfVoid(timeout: int): EntityLaser; + StopExtraAnimation(): void; + SwapActiveItems(): void; + ThrowBlueSpider(position: Vector, target: Vector): Entity; + /** + * Spawns a friendly dip (from Dirty Mind) and throws it towards the specified target. + * + * @param subType + * @param position + * @param target If Vector.Zero, throws the spawned dip in a random direction. Default is + * Vector.Zero. + */ + ThrowFriendlyDip( + subType: DipFamiliarSubType, + position: Vector, + target?: Vector, + ): EntityFamiliar; + /** + * If holding an entity, throws it in the specified direction and returns it. Otherwise, returns + * undefined. + * + * @param velocity + */ + ThrowHeldEntity(velocity: Vector): Entity; + /** + * Triggers the extra effect granted by Book of Virtues for the given active item. + * + * @param collectibleType Default is CollectibleType.COLLECTIBLE_NULL. + */ + TriggerBookOfVirtues(collectibleType?: CollectibleType): void; + /** + * Attempts to pick up the given entity, returns true on success. + * Currently only works with some entity types (mainly bombs and enemies). + */ + TryHoldEntity(entity: Entity): boolean; + TryHoldTrinket(trinketType: TrinketType | int): boolean; + /** + * @param collectibleType + * @param keepPersistent If set to false, this method will only remove temporary costumes. + */ + TryRemoveCollectibleCostume( + collectibleType: CollectibleType | int, + keepPersistent: boolean, + ): void; + TryRemoveNullCostume(nullItemID: NullItemID | int): void; + /** + * Will remove the specified trinket, if it exists. This will also remove The Tick and smelted + * trinkets. + * + * @param trinketType If you provide an argument of 0 or an otherwise invalid trinket ID, the game + * will crash. + * @returns Whether or not the specified trinket was removed successfully. + */ + TryRemoveTrinket(trinketType: TrinketType | int): boolean; + TryRemoveTrinketCostume(trinketType: TrinketType | int): void; + TryUseKey(): boolean; + UpdateCanShoot(): void; + /** + * @param collectibleType + * @param useFlag Default is 0. + * @param activeSlot The active slot this item was used from. + * (Set to -1 if this item wasn't triggered by any active slot.) + * Default is ActiveSlot.SLOT_PRIMARY. + */ + UseActiveItem( + collectibleType: CollectibleType | int, + useFlag?: UseFlag, + activeSlot?: ActiveSlot, + ): void; + /** + * @param collectibleType + * @param showAnim + * @param keepActiveItem + * @param allowNonMainPlayer + * @param toAddCostume + * @param activeSlot The active slot this item was used from. + * (Set to -1 if this item wasn't triggered by any active slot.) + * Default is ActiveSlot.SLOT_PRIMARY. + */ + UseActiveItem( + collectibleType: CollectibleType | int, + showAnim: boolean, + keepActiveItem: boolean, + allowNonMainPlayer: boolean, + toAddCostume: boolean, + activeSlot?: ActiveSlot, + ): void; + /** + * @param card + * @param useFlag Default is 0. + */ + UseCard(card: Card | int, useFlag?: UseFlag): void; + /** + * @param pillEffect + * @param pillColor + * @param useFlag Default is 0. + */ + UsePill( + pillEffect: PillEffect | int, + pillColor: PillColor | int, + useFlag?: UseFlag, + ): void; + WillPlayerRevive(): boolean; + + BabySkin: BabySubType | int; + /** Only change this in the EvaluateCache callback. */ + CanFly: boolean; + readonly ControllerIndex: ControllerIndex; + ControlsCooldown: int; + ControlsEnabled: boolean; + /** Only change this in the EvaluateCache callback. */ + Damage: float; + FireDelay: int; + // readonly FriendBallEnemy: Readonly; // EntityDesc is not implemented + HeadFrameDelay: int; + ItemHoldCooldown: int; + LaserColor: Color; + /** Only change this in the EvaluateCache callback. */ + Luck: float; + /** Only change this in the EvaluateCache callback. */ + MaxFireDelay: int; + /** Only change this in the EvaluateCache callback. */ + MoveSpeed: float; + QueuedItem: QueueItemData; + /** Only change this in the EvaluateCache callback. */ + ShotSpeed: float; + SpriteScale: Vector; + TearColor: Color; + TearFallingAcceleration: float; + /** Only change this in the EvaluateCache callback. */ + TearFallingSpeed: float; + /** + * Only change this in the EvaluateCache callback. + * Be aware that this is really a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + TearFlags: int; + /** + * This is equal to the range stat multiplied by -1. + * Only change this in the EvaluateCache callback. + */ + TearHeight: float; + readonly TearsOffset: Readonly; +} diff --git a/isaac-typescript-definitions/typings/EntityProjectile.d.ts b/isaac-typescript-definitions/typings/EntityProjectile.d.ts new file mode 100644 index 0000000..d8f4f72 --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityProjectile.d.ts @@ -0,0 +1,25 @@ +declare interface EntityProjectile extends Entity { + AddChangeFlags(flags: int): void; + AddFallingAccel(value: float): void; + AddFallingSpeed(value: float): void; + AddHeight(value: float): void; + AddProjectileFlags(flags: ProjectileFlags): void; + AddScale(value: float): void; + ClearProjectileFlags(flags: int): void; + HasProjectileFlags(flags: int): void; + + Acceleration: float; + ChangeFlags: ProjectileFlags; + ChangeTimeout: int; + ChangeVelocity: float; + CurvingStrength: float; + Damage: float; + DepthOffset: float; + FallingAccel: float; + FallingSpeed: float; + Height: float; + HomingStrength: float; + ProjectileFlags: ProjectileFlags; + Scale: float; + WiggleFrameOffset: int; +} diff --git a/isaac-typescript-definitions/typings/EntityPtr.d.ts b/isaac-typescript-definitions/typings/EntityPtr.d.ts new file mode 100644 index 0000000..fc7cb86 --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityPtr.d.ts @@ -0,0 +1,7 @@ +declare function EntityPtr(this: void, entity: Entity): EntityPtr; + +declare interface EntityPtr { + SetReference(ref: Entity): void; + + readonly Ref: Entity | undefined; +} diff --git a/isaac-typescript-definitions/typings/EntityRef.d.ts b/isaac-typescript-definitions/typings/EntityRef.d.ts new file mode 100644 index 0000000..50f6a69 --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityRef.d.ts @@ -0,0 +1,12 @@ +declare function EntityRef(this: void, entity: Entity | undefined): EntityRef; + +declare interface EntityRef { + Entity: Entity; + IsCharmed: boolean; + IsFriendly: boolean; + Position: Vector; + SpawnerType: EntityType | int; + SpawnerVariant: int; + Type: EntityType | int; + Variant: int; +} diff --git a/isaac-typescript-definitions/typings/EntityTear.d.ts b/isaac-typescript-definitions/typings/EntityTear.d.ts new file mode 100644 index 0000000..33b847f --- /dev/null +++ b/isaac-typescript-definitions/typings/EntityTear.d.ts @@ -0,0 +1,56 @@ +declare interface EntityTear extends Entity { + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + AddTearFlags(flags: TearFlags): void; + ChangeVariant(newVariant: TearVariant | int): void; + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + ClearTearFlags(flags: TearFlags): void; + /** + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + HasTearFlags(flags: TearFlags): boolean; + ResetSpriteScale(): void; + SetDeadEyeIntensity(intensity: float): void; + SetKnockbackMultiplier(multiplier: float): void; + SetParentOffset(offset: Vector): void; + SetWaitFrames(value: int): void; + + readonly BaseDamage: float; + readonly BaseScale: float; + Bounced: boolean; + CanTriggerStreakEnd: boolean; + ContinueVelocity: Vector; + FallingAcceleration: float; + FallingSpeed: float; + Height: float; + HomingFriction: float; + KnockbackMultiplier: float; + ParentOffset: Vector; + readonly PosDisplacement: Readonly; + Rotation: float; + Scale: float; + StickDiff: Vector; + StickTarget: Entity; + StickTimer: int; + /** + * Be aware that this is really a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + TearFlags: int; + /** + * - In each run, the game keeps track of how many tears have been fired by the player in total. + * This is used for items such as Lead Pencil. + * - TearIndex represents this tear counter. + * - It is 0-indexed, meaning that the first tear fired by the player on a run will have a + * TearIndex of 0, the second tear fired by the player on a run will have a TearIndex of 1,and so + * on. + */ + readonly TearIndex: int; + WaitFrames: int; +} diff --git a/isaac-typescript-definitions/typings/Font.d.ts b/isaac-typescript-definitions/typings/Font.d.ts new file mode 100644 index 0000000..044f734 --- /dev/null +++ b/isaac-typescript-definitions/typings/Font.d.ts @@ -0,0 +1,75 @@ +declare function Font(this: void): Font; + +declare interface Font { + /** + * @param str + * @param positionX + * @param positionY + * @param renderColor + * @param boxWidth Default is 0. + * @param center Default is false. + */ + DrawString( + str: string, + positionX: float, + positionY: float, + renderColor: KColor, + boxWidth?: int, + center?: boolean, + ): void; + /** + * @param str + * @param positionX + * @param positionY + * @param scaleX + * @param scaleY + * @param renderColor + * @param boxWidth Default is 0. + * @param center Default is false. + */ + DrawStringScaled( + str: string, + positionX: float, + positionY: float, + scaleX: float, + scaleY: float, + renderColor: KColor, + boxWidth?: int, + center?: boolean, + ): void; + DrawStringScaledUTF8( + str: string, + positionX: float, + positionY: float, + scaleX: float, + scaleY: float, + renderColor: KColor, + boxWidth: int, + center: boolean, + ): void; + /** + * @param str + * @param positionX + * @param positionY + * @param renderColor + * @param boxWidth Default is 0. + * @param center Default is false. + */ + DrawStringUTF8( + str: string, + positionX: float, + positionY: float, + renderColor: KColor, + boxWidth?: int, + center?: boolean, + ): void; + GetBaselineHeight(): int; + GetCharacterWidth(character: string): int; + GetLineHeight(): int; + GetStringWidth(str: string): int; + GetStringWidthUTF8(str: string): int; + IsLoaded(): boolean; + Load(filePath: string): boolean; + SetMissingCharacter(missingCharacter: int): void; + Unload(): void; +} diff --git a/isaac-typescript-definitions/typings/Game.d.ts b/isaac-typescript-definitions/typings/Game.d.ts new file mode 100644 index 0000000..5e5ef1e --- /dev/null +++ b/isaac-typescript-definitions/typings/Game.d.ts @@ -0,0 +1,242 @@ +declare interface Game { + AddDevilRoomDeal(): void; + AddEncounteredBoss(entityType: EntityType | int, variant: int): void; + AddPixelation(duration: int): void; + AddStageWithoutDamage(): void; + AddStageWithoutHeartsPicked(): void; + AddTreasureRoomsVisited(): void; + /** + * There is no separate BombFlags enum, so bombs use tear flags. + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + * + * @param position + * @param damage + * @param radius + * @param lineCheck Default is true. + * @param source Default is undefined. + * @param tearFlags Default is TearFlags.TEAR_NORMAL. + * @param damageFlags Default is DamageFlag.DAMAGE_EXPLOSION. + * @param damageSource Default is false. + */ + BombDamage( + position: Vector, + damage: float, + radius: float, + lineCheck?: boolean, + source?: Entity, + tearFlags?: int, + damageFlags?: DamageFlag, + damageSource?: boolean, + ): void; + /** + * There is no separate BombFlags enum, so bombs use tear flags. + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + * + * @param position + * @param damage + * @param tearFlags Default is TearFlags.TEAR_NORMAL. + * @param color Default is Color.Default. + * @param source Default is undefined. + * @param radiusMult Default is 1. + * @param lineCheck Default is true. + * @param damageSource Default is false. + * @param damageFlags Default is DamageFlag.DAMAGE_EXPLOSION. + */ + BombExplosionEffects( + position: Vector, + damage: float, + tearFlags?: int, + color?: Color, + source?: Entity, + radiusMult?: float, + lineCheck?: boolean, + damageSource?: boolean, + damageFlags?: DamageFlag, + ): void; + /** + * There is no separate BombFlags enum, so bombs use tear flags. + * Be aware that this really takes a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + * + * @param position + * @param radius + * @param tearFlags + * @param source Default is undefined. + * @param radiusMult Default is 1. + */ + BombTearflagEffects( + position: Vector, + radius: float, + tearFlags: int, + source?: Entity, + radiusMult?: float, + ): void; + ButterBeanFart( + position: Vector, + radius: float, + source: Entity, + showEffect: boolean, + doSuperKnockback: boolean, + ): void; + /** + * @param roomIndex + * @param dimension Default is Dimension.CURRENT. + */ + ChangeRoom(roomIndex: int, dimension?: Dimension): void; + CharmFart(position: Vector, radius: float, source: Entity): void; + ClearDonationModAngel(): void; + ClearDonationModGreed(): void; + ClearStagesWithoutDamage(): void; + ClearStagesWithoutHeartsPicked(): void; + Darken(darkness: float, timeout: int): void; + DonateAngel(donate: int): void; + DonateGreed(donate: int): void; + End(ending: Ending): void; + Fadein(speed: float): void; + Fadeout(speed: float, fadeoutTarget: FadeoutTarget): void; + /** + * @param position + * @param radius Default is 85. + * @param source Default is undefined. + * @param fartScale Default is 1. + * @param fartSubType Default is 0 + * @param fartColor Default is Color.Default. + */ + Fart( + position: Vector, + radius?: float, + source?: Entity, + fartScale?: float, + fartSubType?: int, + fartColor?: Color, + ): void; + FinishChallenge(): void; + // GetAmbush(): Ambush; // Ambush is not implemented + GetDarknessModifier(): float; + GetDevilRoomDeals(): int; + GetDonationModAngel(): int; + GetDonationModGreed(): int; + GetFont(): Font; + GetFrameCount(): int; + GetGreedBossWaveNum(): int; + GetGreedWavesNum(): int; + // GetItemOverlay(): ItemOverlay; // ItemOverlay is not implemented + GetHUD(): HUD; + GetItemPool(): ItemPool; + /** This function is bugged and returns useless userdata. */ + GetLastDevilRoomStage(fakeArg: never): LevelStage; + GetLastLevelWithDamage(): LevelStage; + GetLastLevelWithoutHalfHp(): LevelStage; + GetLevel(): Level; + GetNearestPlayer(position: Vector): EntityPlayer; + GetNumEncounteredBosses(): int; + GetNumPlayers(): int; + /** Use `Isaac.GetPlayer()` instead of this function. */ + GetPlayer(fakeArg: never): EntityPlayer | undefined; + GetRandomPlayer(position: Vector, radius: float): EntityPlayer; + GetRoom(): Room; + GetScreenShakeCountdown(): Readonly; + GetSeeds(): Seeds; + GetStagesWithoutDamage(): int; + GetStagesWithoutHeartsPicked(): int; + GetStateFlag(gameStateFlag: GameStateFlag): boolean; + GetTargetDarkness(): float; + GetTreasureRoomVisitCount(): int; + GetVictoryLap(): int; + HasEncounteredBoss(entityType: EntityType | int, variant: int): boolean; + HasHallucination(): int; + IsGreedMode(): boolean; + IsPaused(): boolean; + MoveToRandomRoom(IAmErrorRoom: boolean, seed: int): void; + NextVictoryLap(): void; + Render(): void; + RerollEnemy(entity: Entity): boolean; + RerollLevelCollectibles(): void; + RerollLevelPickups(seed: int): void; + SetLastDevilRoomStage(levelStage: LevelStage): void; + SetLastLevelWithDamage(levelStage: LevelStage): void; + SetLastLevelWithoutHalfHp(levelStage: LevelStage): void; + SetStateFlag(gameStateFlag: GameStateFlag, val: boolean): void; + ShakeScreen(timeout: int): void; + ShowFortune(): void; + /** + * @param frameCount + * @param hallucinationBackdrop Default is BackdropType.NUM_BACKDROPS. + */ + ShowHallucination( + frameCount: int, + hallucinationBackdropType?: BackdropType, + ): void; + ShowRule(): void; + Spawn( + entityType: EntityType | int, + variant: int, + position: Vector, + velocity: Vector, + spawner: Entity | undefined, + subType: int, + seed: int, + ): Entity; + /* + SpawnEntityDesc( + entityDesc: EntityDesc, // EntityDesc is not implemented + position: Vector, + spawner: Entity, + ): EntityNPC; + */ + /** + * @param position + * @param effectVariant + * @param numParticles + * @param speed + * @param color Default is Color.Default. + * @param height Default is 100000. + * @param subType Default is 0. + */ + SpawnParticles( + position: Vector, + effectVariant: EffectVariant | int, + numParticles: int, + speed: float, + color?: Color, + height?: float, + subType?: int, + ): void; + /** + * You have to set Level.LeaveDoor to an appropriate value before using this function. Otherwise, + * you will be sent to the wrong room. (For teleports, set it to -1.) + * + * @param roomIndex + * @param direction + * @param roomTransition Default is RoomTransitionAnim.WALK. + * @param player Default is undefined. + * @param dimension Default is Dimension.CURRENT. + */ + StartRoomTransition( + roomIndex: int, + direction: Direction, + roomTransitionAnim?: RoomTransitionAnim, + player?: EntityPlayer, + dimension?: Dimension, + ): void; + StartStageTransition( + sameStage: boolean, + stageTransition: StageTransition, + ): void; + Update(): void; + /** + * @param position + * @param force Default is 10. + * @param radius Default is 250. + */ + UpdateStrangeAttractor(position: Vector, force?: float, radius?: float): void; + + BlueWombParTime: int; + BossRushParTime: int; + Challenge: Challenge | int; + readonly Difficulty: Difficulty; + readonly ScreenShakeOffset: Readonly; + TimeCounter: int; +} diff --git a/isaac-typescript-definitions/typings/GridEntity.d.ts b/isaac-typescript-definitions/typings/GridEntity.d.ts new file mode 100644 index 0000000..c673bd6 --- /dev/null +++ b/isaac-typescript-definitions/typings/GridEntity.d.ts @@ -0,0 +1,35 @@ +declare interface GridEntity { + Destroy(immediate: boolean): boolean; + GetGridIndex(): int; + /** The RNG returned is a reference (i.e. not a copy). */ + GetRNG(): RNG; + GetSaveState(): GridEntityDesc; + /** The Sprite returned is a reference (i.e. not a copy). */ + GetSprite(): Sprite; + GetType(): GridEntityType | int; + GetVariant(): int; + Hurt(damage: int): boolean; + Init(seed: int): void; + PostInit(): void; + Render(offset: Vector): void; + SetType(gridEntityType: GridEntityType): void; + SetVariant(variant: int): void; + ToDoor(): GridEntityDoor | undefined; + ToPit(): GridEntityPit | undefined; + ToPoop(): GridEntityPoop | undefined; + ToPressurePlate(): GridEntityPressurePlate | undefined; + ToRock(): GridEntityRock | undefined; + ToSpikes(): GridEntitySpikes | undefined; + ToTNT(): GridEntityTNT | undefined; + Update(): void; + + CollisionClass: GridCollisionClass; + /** + * Use the `GetSaveState()` method instead of accessing Desc directly, as it is a deprecated + * property. + */ + Desc: never; // GridEntityDesc; + readonly Position: Readonly; + State: int; + VarData: int; +} diff --git a/isaac-typescript-definitions/typings/GridEntityDesc.d.ts b/isaac-typescript-definitions/typings/GridEntityDesc.d.ts new file mode 100644 index 0000000..563d38e --- /dev/null +++ b/isaac-typescript-definitions/typings/GridEntityDesc.d.ts @@ -0,0 +1,10 @@ +declare interface GridEntityDesc { + Initialized: boolean; + SpawnCount: int; + SpawnSeed: int; + State: int; + Type: GridEntityType | int; + VarData: int; + VariableSeed: int; + Variant: int; +} diff --git a/isaac-typescript-definitions/typings/GridEntityDoor.d.ts b/isaac-typescript-definitions/typings/GridEntityDoor.d.ts new file mode 100644 index 0000000..eb86b48 --- /dev/null +++ b/isaac-typescript-definitions/typings/GridEntityDoor.d.ts @@ -0,0 +1,33 @@ +declare interface GridEntityDoor extends GridEntity { + Bar(): void; + CanBlowOpen(): boolean; + Close(force: boolean): void; + GetSpriteOffset(): Readonly; + IsBusted(): boolean; + IsKeyFamiliarTarget(): boolean; + IsLocked(): boolean; + IsOpen(): boolean; + IsRoomType(roomType: RoomType): boolean; + IsTargetRoomArcade(): boolean; + Open(): void; + SetLocked(locked: boolean): void; + SetRoomTypes(currentRoomType: RoomType, targetRoomType: RoomType): void; + SpawnDust(): void; + TryBlowOpen(fromExplosion: boolean, source: Entity): boolean; + TryUnlock(player: EntityPlayer, force: boolean): boolean; + + Busted: boolean; + CloseAnimation: string; + CurrentRoomType: RoomType; + Direction: Direction; + ExtraSprite: Sprite; + ExtraVisible: boolean; + LockedAnimation: string; + OpenAnimation: string; + OpenLockedAnimation: string; + // PreviousState: State; // State is not implemented (it is userdata and not an int) + PreviousVariant: DoorVariant; + Slot: DoorSlot; + TargetRoomIndex: int; + TargetRoomType: RoomType; +} diff --git a/isaac-typescript-definitions/typings/GridEntityPit.d.ts b/isaac-typescript-definitions/typings/GridEntityPit.d.ts new file mode 100644 index 0000000..f93d3e5 --- /dev/null +++ b/isaac-typescript-definitions/typings/GridEntityPit.d.ts @@ -0,0 +1,7 @@ +declare interface GridEntityPit extends GridEntity { + MakeBridge(bridgeSource: GridEntity | undefined): void; + SetLadder(value: boolean): void; + UpdateCollision(): void; + + HasLadder: boolean; +} diff --git a/isaac-typescript-definitions/typings/GridEntityPoop.d.ts b/isaac-typescript-definitions/typings/GridEntityPoop.d.ts new file mode 100644 index 0000000..588f138 --- /dev/null +++ b/isaac-typescript-definitions/typings/GridEntityPoop.d.ts @@ -0,0 +1,9 @@ +declare interface GridEntityPoop extends GridEntity { + ReduceSpawnRate(): void; + RespawnRedPoop(): void; + + ReducedSpawnRate: boolean; + ReviveTimer: int; + StateAnimation: string; + UnderPlayer: boolean; +} diff --git a/isaac-typescript-definitions/typings/GridEntityPressurePlate.d.ts b/isaac-typescript-definitions/typings/GridEntityPressurePlate.d.ts new file mode 100644 index 0000000..4b6fa7e --- /dev/null +++ b/isaac-typescript-definitions/typings/GridEntityPressurePlate.d.ts @@ -0,0 +1,7 @@ +declare interface GridEntityPressurePlate extends GridEntity { + Reward(): void; + + GreedModeRNG: RNG; + NextGreedAnimation: string; + TimerPlate: Sprite; +} diff --git a/isaac-typescript-definitions/typings/GridEntityRock.d.ts b/isaac-typescript-definitions/typings/GridEntityRock.d.ts new file mode 100644 index 0000000..e4dc238 --- /dev/null +++ b/isaac-typescript-definitions/typings/GridEntityRock.d.ts @@ -0,0 +1,10 @@ +declare interface GridEntityRock extends GridEntity { + GetBigRockFrame(): int; + GetRubbleAnim(): string; + SetBigRockFrame(frame: int): void; + UpdateAnimFrame(): void; + + Anim: string; + FrameCnt: int; + RubbleAnim: string; +} diff --git a/isaac-typescript-definitions/typings/GridEntitySpikes.d.ts b/isaac-typescript-definitions/typings/GridEntitySpikes.d.ts new file mode 100644 index 0000000..9e4287d --- /dev/null +++ b/isaac-typescript-definitions/typings/GridEntitySpikes.d.ts @@ -0,0 +1,3 @@ +declare interface GridEntitySpikes extends GridEntity { + Timeout: int; +} diff --git a/isaac-typescript-definitions/typings/GridEntityTNT.d.ts b/isaac-typescript-definitions/typings/GridEntityTNT.d.ts new file mode 100644 index 0000000..3e77770 --- /dev/null +++ b/isaac-typescript-definitions/typings/GridEntityTNT.d.ts @@ -0,0 +1,3 @@ +declare interface GridEntityTNT extends GridEntity { + FrameCnt: int; +} diff --git a/isaac-typescript-definitions/typings/HUD.d.ts b/isaac-typescript-definitions/typings/HUD.d.ts new file mode 100644 index 0000000..52b7408 --- /dev/null +++ b/isaac-typescript-definitions/typings/HUD.d.ts @@ -0,0 +1,47 @@ +declare interface HUD { + /** + * Causes the charge bar of the active item in the specified slot to blink as if it had gained + * charges. + * + * @param player + * @param slot Default is ActiveSlot.SLOT_PRIMARY. + */ + FlashChargeBar(player: EntityPlayer, slot?: ActiveSlot): void; + /** + * Forces the specified active item slot to update. This might be useful for functions that modify + * an active item slot without directly giving or removing items. + * + * @param player + * @param slot Default is ActiveSlot.SLOT_PRIMARY + */ + InvalidateActiveItem(player: EntityPlayer, slot?: ActiveSlot): void; + /** + * Forces the crafting output from Bag of Crafting to update. + * + * @param player + */ + InvalidateCraftingItem(player: EntityPlayer): void; + IsVisible(): boolean; + SetVisible(visible: boolean): void; + /** + * Accepts a sequence of up to 32 strings, where each string is a line of text. + * Passing more than 7 lines will result in them not being displayed properly since the fortune + * paper does not dynamically stretch to accommodate the extra lines yet. + * + * @param text + */ + ShowFortuneText(...text: string[]): void; + /** + * Shows the pickup text for the specified item as if it was picked up by the specified player. + */ + ShowItemText(player: EntityPlayer, item: ItemConfigItem): void; + /** + * Shows a custom pickup text. + * + * @param name + * @param description Default is "". + * @param paper If set to true, displays the description on a small piece of paper, similar to + * curses. Default is false. + */ + ShowItemText(name: string, description?: string, paper?: boolean): void; +} diff --git a/isaac-typescript-definitions/typings/Input.d.ts b/isaac-typescript-definitions/typings/Input.d.ts new file mode 100644 index 0000000..0c0585e --- /dev/null +++ b/isaac-typescript-definitions/typings/Input.d.ts @@ -0,0 +1,18 @@ +export {}; + +declare global { + /** @noSelf */ + namespace Input { + function GetActionValue(action: ButtonAction, controllerID: int): float; + function GetButtonValue(button: Keyboard, controllerID: int): float; + function GetMousePosition(gameCoords: boolean): Vector; + function IsActionPressed(action: ButtonAction, controllerID: int): boolean; + function IsActionTriggered( + action: ButtonAction, + controllerID: int, + ): boolean; + function IsButtonPressed(button: Keyboard, controllerID: int): boolean; + function IsButtonTriggered(button: Keyboard, controllerID: int): boolean; + function IsMouseBtnPressed(button: Mouse): boolean; + } +} diff --git a/isaac-typescript-definitions/typings/Isaac.d.ts b/isaac-typescript-definitions/typings/Isaac.d.ts new file mode 100644 index 0000000..3b2f4ae --- /dev/null +++ b/isaac-typescript-definitions/typings/Isaac.d.ts @@ -0,0 +1,262 @@ +export {}; + +declare global { + /** @noSelf */ + namespace Isaac { + /** + * Your mod can't do much of anything unless you attach some callback functions that can run + * code when certain things happen. The different types of callbacks are represented in the + * ModCallbacks enum. + * + * Some callbacks take an optional third argument to specify that you only want it the function + * to fire on a specific thing. For example: + * ``` + * mod.AddCallback( + * ModCallbacks.MC_POST_EFFECT_UPDATE, + * postEffectUpdatePoof01, + * EffectVariant.POOF01, + * ) + * ``` + */ + function AddCallback( + mod: Mod, + callbackID: ModCallbacks, + callbackFn: () => void, + entityID?: int, + ): void; + /** + * @returns The pill color. + */ + function AddPillEffectToPool(pillEffect: PillEffect | int): PillColor | int; + /** + * Puts a string into the debug console. (You can open the debug console with the tilde key.) + */ + function ConsoleOutput(text: string): void; + function CountBosses(): int; + function CountEnemies(): int; + /** + * This function is currently bugged (i.e. in Repentance v820) and should not be used. + * In the meantime, use "FindByType()" as a workaround. + * + * @param spawner + * @param entityType Default is EntityType.ENTITY_NULL. + * @param variant Specifying -1 will return all variants. Default is -1. + * @param subType Specifying -1 will return all subtypes. Default is -1. + */ + function CountEntities( + fakeArg: never, + spawner: Entity | undefined, + entityType?: EntityType | int, + variant?: int, + subType?: int, + ): int; + /** + * Prints a string to the "log.txt" file. By default, the file is located at: + * `C:\Users\[YourUsername]\Documents\My Games\Binding of Isaac Repentance\log.txt` + */ + function DebugString(msg: string): Mod; + /** Executes a command on the debug console. */ + function ExecuteCommand(command: string): string; + function Explode( + position: Vector, + source: Entity | undefined, + damage: float, + ): void; + /** + * @param entityType + * @param variant Default is -1. + * @param subType Default is -1. + * @param cache Default is false. + * @param ignoreFriendly Default is false. + */ + function FindByType( + entityType: EntityType | int, + variant?: int, + subType?: int, + cache?: boolean, + ignoreFriendly?: boolean, + ): Entity[]; + /** + * Beware: + * - this function does not work in the PostNewRoom callback + * - it excludes effects, even when the effect partition is selected + * - it can exclude dead enemies + * + * It is recommended to never use this function and instead use `Isaac.FindByType()` or + * `Isaac.GetRoomEntities()`. + * + * @param position + * @param radius + * @param partitions Default is 0xFFFFFFFF. + */ + function FindInRadius( + position: Vector, + radius: float, + partitions?: int, + ): Entity[]; + /** Returns -1 if no card with the specified name was found. */ + function GetCardIdByName(cardName: string): Card | int; + /** Returns 0 if the current run is not a challenge. */ + function GetChallenge(): Challenge | int; + /** Returns -1 if the specified challenge name does not exist. */ + function GetChallengeIdByName(challengeName: string): Challenge | int; + /** Returns -1 if no costume with the specified name was found. */ + function GetCostumeIdByPath(path: string): int; + /** Returns -1 if no curse with the specified name was found. */ + function GetCurseIdByName(curseName: string): LevelCurse | int; + /** Returns 0 if no entity with the specified name was found. */ + function GetEntityTypeByName(entityName: string): EntityType | int; + /** Returns -1 if no entity with the specified name was found. */ + function GetEntityVariantByName(entityName: string): int; + /** + * Returns the amount of render frames that have passed since the game was open. + * The counter for this increases even when the game is paused or when you are in the main menu. + * Since Isaac frames are equal to render frames, 60 frames equals 1 second. + * Note that these frames are completely different from the frames returned from + * `Game().GetFrameCount()` and other functions. + */ + function GetFrameCount(): int; + function GetFreeNearPosition(position: Vector, step: float): Vector; + function GetItemConfig(): ItemConfig; + /** Returns -1 if no collectible with the specified name was found. */ + function GetItemIdByName(entityName: string): CollectibleType | int; + /** Returns -1 if no music with the specified name was found. */ + function GetMusicIdByName(musicName: string): Music | int; + /** Returns -1 if no pill with the specified name was found. */ + function GetPillEffectByName(pillName: string): PillEffect | int; + /** + * With no argument, it returns the 0th player. + * For the purposes of this definition, we assume that the 0th player always exists. + * However, if called in the menu, this function will return undefined, so beware. + */ + function GetPlayer(): EntityPlayer; + /** + * For the purposes of this definition, we assume that the 0th player always exists. + * However, if called in the menu, this function will return undefined, so beware. + */ + function GetPlayer(playerID: 0): EntityPlayer; + /** + * Before using the EntityPlayer object, you should check to see if it is equal to undefined and + * handle the error case. + */ + function GetPlayer(playerID: int): EntityPlayer | undefined; + /** + * Returns -1 if the specified character does not exist. + * + * @param playerName + * @param tainted Default is false. + */ + function GetPlayerTypeByName( + playerName: string, + tainted?: boolean, + ): PlayerVariant | int; + /** + * Returns a random position in the current room in world coordinates (not render coordinates). + */ + function GetRandomPosition(): Vector; + /** + * This function is very expensive and is the main cause of lag in mods across the Isaac + * ecosystem. Be careful about calling this multiple times per frame. + */ + function GetRoomEntities(): Entity[]; + /** Returns -1 if no sound with the specified name was found. */ + function GetSoundIdByName(soundName: string): SoundEffect | int; + /** + * Returns the width of the given string in pixels based on the "terminus8" font. + * (This is the same font used in the `Isaac.RenderText()` function.) + */ + function GetTextWidth(str: string): int; + /** + * Returns the current time in milliseconds since the program was launched. + * (This is simply a mapping to "os.clock()".) + */ + function GetTime(): int; + /** Returns -1 if the specified trinket was not found. */ + function GetTrinketIdByName(trinketName: string): TrinketType | int; + /** + * @param gridEntityType + * @param variant + * @param position + * @param forced Forced has no effect and will not override a grid entity on the given location. + * Remove any existing grid entities first. + */ + function GridSpawn( + gridEntityType: GridEntityType | int, + variant: int, + position: Vector, + forced: boolean, + ): GridEntity; + /** + * Returns true if your mod has data stored from the `Isaac.SaveModData()` function. + * (This corresponds to "save#.dat" files existing in the mod's save data folder.) + */ + function HasModData(mod: Mod): boolean; + /** + * Returns a string that was stored in a "save#.dat" file from the `Isaac.SaveModData()` + * function. If there is no "save#.dat" file for your mod, this function will return an empty + * string. There are 3 "save#.dat" files, one per save slot. The number will be determined + * automatically by the game. In Repentance, these files are located in the "data" folder next + * to the "mods" folder. + */ + function LoadModData(mod: Mod): string; + // function RegisterMod(mod: Mod, modName: string, APIVersion: int): void; // Should use the global RegisterMod() instead + function RemoveCallback( + mod: Mod, + callbackID: ModCallbacks, + callbackFn: () => void, + ): void; + /** + * Will delete a "save#.dat" file, if it exists. For more information, see the + * `Isaac.SaveModData()` function. + */ + function RemoveModData(mod: Mod): void; + function RenderScaledText( + str: string, + x: float, + y: float, + scaleX: float, + scaleY: float, + r: float, + g: float, + b: float, + a: float, + ): void; + function RenderText( + str: string, + x: float, + y: float, + r: float, + g: float, + b: float, + a: float, + ): void; + /** + * Stores a string in a "save#.dat" file for persistent storage across game invocations. + * There are 3 "save#.dat" files, one per save slot. The number will be determined automatically + * by the game. In Repentance, these files are located in the "data" folder next to the "mods" + * folder. + */ + function SaveModData(mod: Mod, data: string): void; + function ScreenToWorld(position: Vector): Vector; + function ScreenToWorldDistance(position: Vector): Vector; + function Spawn( + entityType: EntityType | int, + entityVariant: int, + entitySubType: int, + position: Vector, + velocity: Vector, + spawner: Entity | undefined, + ): Entity; + /** + * Converts a game Vector (i.e. `entity.Position`) to a render Vector used for drawing sprites + * and text to the screen at fixed positions. + */ + function WorldToRenderPosition(position: Vector): Vector; + /** + * Converts a game Vector (i.e. `entity.Position`) to a screen Vector used for drawing sprites + * and text next to an entity. + */ + function WorldToScreen(position: Vector): Vector; + function WorldToScreenDistance(position: Vector): Vector; + } +} diff --git a/isaac-typescript-definitions/typings/ItemConfig.d.ts b/isaac-typescript-definitions/typings/ItemConfig.d.ts new file mode 100644 index 0000000..ad09106 --- /dev/null +++ b/isaac-typescript-definitions/typings/ItemConfig.d.ts @@ -0,0 +1,46 @@ +declare interface ItemConfig { + /** Returns undefined if the card was not found. */ + GetCard(card: Card | int): Readonly | undefined; + GetCards(): Readonly; + /** Returns undefined if the collectible type was not found. */ + GetCollectible( + collectibleType: CollectibleType | int, + ): Readonly | undefined; + GetCollectibles(): Readonly; + // CostumeConfigList is bugged and always returns a list of size 0 + // GetCostumes(): Readonly; + /** Returns undefined if the item was not found. */ + GetNullItem( + nullItemID: NullItemID | int, + ): Readonly | undefined; + GetNullItems(): Readonly; + /** Returns undefined if the pill effect was not found. */ + GetPillEffect( + pillEffect: PillEffect | int, + ): Readonly | undefined; + GetPillEffects(): Readonly; + /** Returns undefined if the trinket was not found. */ + GetTrinket( + trinketType: TrinketType | int, + ): Readonly | undefined; + GetTrinkets(): Readonly; + + // In the "enums.lua" file, the ItemConfig class is extended with many members: + // - ItemConfig.CHARGE_* + // - ItemConfig.TAG_* + // - ItemConfig.CARDTYPE_* + // In IsaacScript, these are instead implemented as enums, since it is cleaner + // See ItemConfigChargeType, ItemConfigTag, and ItemConfigCardType respectively +} + +// The static methods in this class can only be called by a global variable +// e.g. ItemConfig.Config.IsValidCollectible(1) +declare namespace ItemConfig { + /** + * This method does not work properly for modded items, so it should never be used. + * Instead, use "GetCollectible(collectibleType) !== undefined". + */ + function IsValidCollectible(fakeArg: never): boolean; + + function ShouldAddCostumeOnPickup(): boolean; +} diff --git a/isaac-typescript-definitions/typings/ItemConfigCard.d.ts b/isaac-typescript-definitions/typings/ItemConfigCard.d.ts new file mode 100644 index 0000000..0b077b6 --- /dev/null +++ b/isaac-typescript-definitions/typings/ItemConfigCard.d.ts @@ -0,0 +1,8 @@ +declare interface ItemConfigCard { + AchievementID: int; + Description: string; + GreedModeAllowed: boolean; + HudAnim: string; + ID: int; + Name: string; +} diff --git a/isaac-typescript-definitions/typings/ItemConfigCostume.d.ts b/isaac-typescript-definitions/typings/ItemConfigCostume.d.ts new file mode 100644 index 0000000..7e63796 --- /dev/null +++ b/isaac-typescript-definitions/typings/ItemConfigCostume.d.ts @@ -0,0 +1,12 @@ +// This class is unused because "ItemConfig.GetCostumes()" is broken + +declare interface ItemConfigCostume { + Anm2Path: string; + HasOverlay: boolean; + HasSkinAlt: boolean; + ID: int; + IsFlying: boolean; + OverwriteColor: boolean; + Priority: int; + SkinColor: Color; +} diff --git a/isaac-typescript-definitions/typings/ItemConfigItem.d.ts b/isaac-typescript-definitions/typings/ItemConfigItem.d.ts new file mode 100644 index 0000000..da458f3 --- /dev/null +++ b/isaac-typescript-definitions/typings/ItemConfigItem.d.ts @@ -0,0 +1,37 @@ +declare interface ItemConfigItem { + HasTags(tags: ItemConfigTag): boolean; + IsCollectible(): boolean; + IsNull(): boolean; + IsTrinket(): boolean; + + AchievementID: int; + AddBlackHearts: int; + AddBombs: int; + AddCoins: int; + AddCostumeOnPickup: boolean; + AddHearts: int; + AddKeys: int; + AddMaxHearts: int; + AddSoulHearts: int; + CacheFlags: CacheFlag; + ChargeType: ItemConfigChargeType; + ClearEffectsOnRemove: boolean; + readonly Costume: Readonly; + Description: string; + DevilPrice: int; + Discharged: boolean; + GfxFileName: string; + Hidden: boolean; + ID: int; + InitCharge: int; + MaxCharges: int; + MaxCooldown: int; + Name: string; + PassiveCache: boolean; + PersistentEffect: boolean; + Quality: int; + ShopPrice: int; + Special: boolean; + Tags: int; + Type: ItemType; +} diff --git a/isaac-typescript-definitions/typings/ItemConfigList.d.ts b/isaac-typescript-definitions/typings/ItemConfigList.d.ts new file mode 100644 index 0000000..305112f --- /dev/null +++ b/isaac-typescript-definitions/typings/ItemConfigList.d.ts @@ -0,0 +1,9 @@ +declare interface ItemConfigList { + /** + * ItemConfigList is bugged such that using the "Get()" method returns Lua userdata. + * This userdata cannot be used for anything. Instead, use "ItemConfig.GetCollectible()". + */ + Get(fakeArg: never, idx: int): ItemConfigItem; + + Size: int; +} diff --git a/isaac-typescript-definitions/typings/ItemConfigPillEffect.d.ts b/isaac-typescript-definitions/typings/ItemConfigPillEffect.d.ts new file mode 100644 index 0000000..6e63913 --- /dev/null +++ b/isaac-typescript-definitions/typings/ItemConfigPillEffect.d.ts @@ -0,0 +1,6 @@ +declare interface ItemConfigPillEffect { + AchievementID: int; + GreedModeAllowed: boolean; + ID: int; + Name: string; +} diff --git a/isaac-typescript-definitions/typings/ItemPool.d.ts b/isaac-typescript-definitions/typings/ItemPool.d.ts new file mode 100644 index 0000000..0aa5d8c --- /dev/null +++ b/isaac-typescript-definitions/typings/ItemPool.d.ts @@ -0,0 +1,44 @@ +declare interface ItemPool { + AddBibleUpgrade(add: int, itemPoolType: ItemPoolType): void; + AddRoomBlacklist(collectibleType: CollectibleType | int): void; + ForceAddPillEffect(pillEffect: PillEffect | int): PillColor | int; + GetCard( + seed: int, + playing: boolean, + rune: boolean, + onlyRunes: boolean, + ): Card | int; + /** + * @param itemPoolType + * @param decrease Default is false. + * @param seed Default is Random(). + * @param defaultItem Default is CollectibleType.COLLECTIBLE_NULL. + */ + GetCollectible( + itemPoolType: ItemPoolType, + decrease?: boolean, + seed?: int, + defaultItem?: CollectibleType, + ): CollectibleType | int; + GetLastPool(): ItemPoolType; + GetPill(seed: int): PillColor | int; + /** + * @param pillColor + * @param player Default is undefined. + */ + GetPillEffect( + pillColor: PillColor | int, + player?: EntityPlayer, + ): PillEffect | int; + GetPoolForRoom(roomType: RoomType, seed: int): ItemPoolType; + /** + * @param dontAdvanceRNG Default is false. + */ + GetTrinket(dontAdvanceRNG?: boolean): TrinketType | int; + IdentifyPill(pillColor: PillColor | int): void; + IsPillIdentified(pillColor: PillColor | int): boolean; + RemoveCollectible(collectibleType: CollectibleType | int): boolean; + RemoveTrinket(trinketType: TrinketType | int): boolean; + ResetRoomBlacklist(): void; + ResetTrinkets(): void; +} diff --git a/isaac-typescript-definitions/typings/KColor.d.ts b/isaac-typescript-definitions/typings/KColor.d.ts new file mode 100644 index 0000000..ec6066a --- /dev/null +++ b/isaac-typescript-definitions/typings/KColor.d.ts @@ -0,0 +1,14 @@ +declare function KColor( + this: void, + r: float, + g: float, + b: float, + a: float, +): KColor; + +declare interface KColor { + Alpha: float; + Blue: float; + Green: float; + Red: float; +} diff --git a/isaac-typescript-definitions/typings/Level.d.ts b/isaac-typescript-definitions/typings/Level.d.ts new file mode 100644 index 0000000..d2b1de7 --- /dev/null +++ b/isaac-typescript-definitions/typings/Level.d.ts @@ -0,0 +1,105 @@ +declare interface Level { + AddAngelRoomChance(chance: float): void; + AddCurse(levelCurse: LevelCurse | int, showName: boolean): void; + ApplyBlueMapEffect(): void; + ApplyCompassEffect(persistent: boolean): void; + ApplyMapEffect(): void; + CanOpenChallengeRoom(roomIndex: int): boolean; + CanSpawnDevilRoom(): boolean; + CanStageHaveCurseOfLabyrinth(levelStage: LevelStage): boolean; + /** + * @param roomIndex + * @param dimension Default is Dimension.CURRENT. + */ + ChangeRoom(roomIndex: int, dimension?: Dimension): void; + DisableDevilRoom(): void; + ForceHorsemanBoss(seed: int): boolean; + GetAbsoluteStage(): LevelStage; + GetAngelRoomChance(): float; + GetCanSeeEverything(): boolean; + GetCurrentRoom(): Room; + /** + * Note that this returns a read-only copy of the RoomDescriptor object and writing to any of its + * properties will fail. If you need to update anything in this object, use the + * `GetRoomByIdx(currentRoomIndex)` method instead. + */ + GetCurrentRoomDesc(): RoomDescriptorReadOnly; + GetCurrentRoomIndex(): int; + GetCurseName(): string; + GetCurses(): LevelCurse | int; + GetDevilAngelRoomRNG(): RNG; + GetDungeonPlacementSeed(): int; + GetEnterPosition(): Vector; + GetHeartPicked(): boolean; + GetLastBossRoomListIndex(): int; + GetLastRoomDesc(): RoomDescriptorReadOnly; + /** + * @param levelStage Default value is the current stage. + * @param stageType Default value is the current stage type. + * @param curses Default value is the current curses. + * @param infiniteLevel Default value is the current infinite level setting. + * @param dyslexia Default value is the current dyslexia setting. + */ + GetName( + levelStage?: LevelStage, + stageType?: StageType, + curses?: int, + infiniteLevel?: int, + dyslexia?: boolean, + ): string; + GetNonCompleteRoomIndex(): int; + GetPreviousRoomIndex(): int; + GetRandomRoomIndex(IAmErrorRoom: boolean, seed: int): int; + /** + * @param roomIdx + * @param dimension Default is Dimension.CURRENT. + */ + GetRoomByIdx(roomIndex: int, dimension?: Dimension): RoomDescriptor; + GetRoomCount(): int; + GetRooms(): RoomList; + GetStage(): LevelStage; + GetStageType(): StageType; + GetStartingRoomIndex(): int; + GetStateFlag(levelStateFlag: LevelStateFlag): boolean; + HasBossChallenge(): boolean; + InitializeDevilAngelRoom(forceAngel: boolean, forceDevil: boolean): void; + IsAltStage(): boolean; + IsDevilRoomDisabled(): boolean; + IsNextStageAvailable(): boolean; + /** + * @param roomType + * @param visited + * @param rng + * @param ignoreGroup If set to true, includes rooms that do not have the same group ID as the + * current room. Default is false. + */ + QueryRoomTypeIndex( + roomType: RoomType, + visited: boolean, + rng: RNG, + ignoreGroup?: boolean, + ): int; + RemoveCompassEffect(): void; + /** This is currently bugged and maps internally to "RemoveCurse()". The old "RemoveCurses()" is not currently accessible. */ + RemoveCurses(levelCurse: LevelCurse | int): void; + SetCanSeeEverything(value: boolean): void; + SetHeartPicked(): void; + SetNextStage(): void; + SetRedHeartDamage(): void; + SetStage(levelStage: LevelStage, stageType: StageType): void; + SetStateFlag(levelStateFlag: LevelStateFlag, val: boolean): void; + ShowMap(): void; + ShowName(sticky: boolean): void; + UncoverHiddenDoor(currentRoomIdx: int, doorSlot: DoorSlot): void; + Update(): void; + /** + * Call this method to update the mini-map after changing the `DisplayFlags` property of a room. + */ + UpdateVisibility(): void; + + DungeonReturnPosition: Vector; + DungeonReturnRoomIndex: int; + EnterDoor: int; + GreedModeWave: int; + LeaveDoor: int; +} diff --git a/isaac-typescript-definitions/typings/Mod.d.ts b/isaac-typescript-definitions/typings/Mod.d.ts new file mode 100644 index 0000000..8090f8e --- /dev/null +++ b/isaac-typescript-definitions/typings/Mod.d.ts @@ -0,0 +1,371 @@ +/** + * The Lua object corresponding to this interface is defined as a local variable in the + * "scripts/main.lua" file. + */ +declare interface Mod { + AddCallback( + modCallbacks: T, + ...args: CallbackParameters[T] + ): void; + HasData(): boolean; + LoadData(): string; + RemoveCallback(callbackID: ModCallbacks, callback: () => void): void; + RemoveData(): void; + SaveData(data: string): void; + + Name: string; +} + +/* eslint-disable @typescript-eslint/member-ordering */ +interface CallbackParameters { + [ModCallbacks.MC_NPC_UPDATE]: [ + callback: (npc: EntityNPC) => void, + entityType?: EntityType | int, + ]; + [ModCallbacks.MC_POST_UPDATE]: [callback: () => void]; + [ModCallbacks.MC_POST_RENDER]: [callback: () => void]; + [ModCallbacks.MC_USE_ITEM]: [ + callback: ( + collectibleType: CollectibleType | int, + rng: RNG, + player: EntityPlayer, + useFlags: int, + activeSlot: int, + customVarData: int, + ) => + | boolean + | { Discharge: boolean; Remove: boolean; ShowAnim: boolean } + | void, + collectibleType?: CollectibleType | int, + ]; + [ModCallbacks.MC_POST_PEFFECT_UPDATE]: [ + callback: (player: EntityPlayer) => void, + playerType?: PlayerType, + ]; + [ModCallbacks.MC_USE_CARD]: [ + callback: (card: Card | int, player: EntityPlayer, useFlags: int) => void, + card?: Card | int, + ]; + [ModCallbacks.MC_FAMILIAR_UPDATE]: [ + callback: (familiar: EntityFamiliar) => void, + familiarVariant?: FamiliarVariant | int, + ]; + [ModCallbacks.MC_FAMILIAR_INIT]: [ + callback: (familiar: EntityFamiliar) => void, + familiarVariant?: FamiliarVariant | int, + ]; + [ModCallbacks.MC_EVALUATE_CACHE]: [ + callback: (player: EntityPlayer, cacheFlag: CacheFlag) => void, + cacheFlag?: CacheFlag, + ]; + [ModCallbacks.MC_POST_PLAYER_INIT]: [ + callback: (player: EntityPlayer) => void, + playerVariant?: PlayerVariant, + ]; + [ModCallbacks.MC_USE_PILL]: [ + callback: ( + pillEffect: PillEffect | int, + player: EntityPlayer, + useFlags: int, + ) => void, + pillEffect?: PillEffect | int, + ]; + [ModCallbacks.MC_ENTITY_TAKE_DMG]: [ + callback: ( + tookDamage: Entity, + damageAmount: float, + damageFlags: DamageFlag, + damageSource: EntityRef, + damageCountdownFrames: int, + ) => boolean | void, + entityType?: EntityType | int, + ]; + [ModCallbacks.MC_POST_CURSE_EVAL]: [callback: (curses: int) => int | void]; + [ModCallbacks.MC_INPUT_ACTION]: [ + callback: ( + entity: Entity | undefined, + inputHook: InputHook, + buttonAction: ButtonAction, + ) => boolean | float | void, + inputHook?: InputHook, + ]; + [ModCallbacks.MC_POST_GAME_STARTED]: [ + callback: (isContinued: boolean) => void, + ]; + [ModCallbacks.MC_POST_GAME_END]: [callback: (isGameOver: boolean) => void]; + [ModCallbacks.MC_PRE_GAME_EXIT]: [callback: (shouldSave: boolean) => void]; + [ModCallbacks.MC_POST_NEW_LEVEL]: [callback: () => void]; + [ModCallbacks.MC_POST_NEW_ROOM]: [callback: () => void]; + [ModCallbacks.MC_GET_CARD]: [ + callback: ( + rng: RNG, + card: Card | int, + includePlayingCards: boolean, + includeRunes: boolean, + onlyRunes: boolean, + ) => Card | int | void, + ]; + [ModCallbacks.MC_GET_SHADER_PARAMS]: [ + callback: (shaderName: string) => Record | void, + ]; + [ModCallbacks.MC_EXECUTE_CMD]: [ + callback: (command: string, parameters: string) => void, + ]; + [ModCallbacks.MC_PRE_USE_ITEM]: [ + callback: ( + collectibleType: CollectibleType | int, + rng: RNG, + player: EntityPlayer, + useFlags: int, + activeSlot: int, + customVarData: int, + ) => boolean | void, + collectibleType?: CollectibleType | int, + ]; + [ModCallbacks.MC_PRE_ENTITY_SPAWN]: [ + callback: ( + entityType: EntityType | int, + variant: int, + subType: int, + position: Vector, + velocity: Vector, + spawner: Entity, + initSeed: int, + ) => [EntityType | int, int, int, int] | void, + ]; + [ModCallbacks.MC_POST_FAMILIAR_RENDER]: [ + callback: (entityFamiliar: EntityFamiliar, renderOffset: Vector) => void, + familiarVariant?: FamiliarVariant | int, + ]; + [ModCallbacks.MC_PRE_FAMILIAR_COLLISION]: [ + callback: ( + familiar: EntityFamiliar, + collider: Entity, + low: boolean, + ) => boolean | void, + familiarVariant?: FamiliarVariant | int, + ]; + [ModCallbacks.MC_POST_NPC_INIT]: [ + callback: (npc: EntityNPC) => void, + entityType?: EntityType | int, + ]; + [ModCallbacks.MC_POST_NPC_RENDER]: [ + callback: (npc: EntityNPC, renderOffset: Vector) => void, + entityType?: EntityType | int, + ]; + [ModCallbacks.MC_POST_NPC_DEATH]: [ + callback: (npc: EntityNPC) => void, + entityType?: EntityType | int, + ]; + [ModCallbacks.MC_PRE_NPC_COLLISION]: [ + callback: ( + npc: EntityNPC, + collider: Entity, + low: boolean, + ) => boolean | void, + entityType?: EntityType | int, + ]; + [ModCallbacks.MC_POST_PLAYER_UPDATE]: [ + callback: (player: EntityPlayer) => void, + playerVariant?: PlayerVariant, + ]; + [ModCallbacks.MC_POST_PLAYER_RENDER]: [ + callback: (player: EntityPlayer, renderOffset: Vector) => void, + playerVariant?: PlayerVariant, + ]; + [ModCallbacks.MC_PRE_PLAYER_COLLISION]: [ + callback: ( + player: EntityPlayer, + collider: Entity, + low: boolean, + ) => boolean | void, + playerVariant?: PlayerVariant, + ]; + [ModCallbacks.MC_POST_PICKUP_INIT]: [ + callback: (pickup: EntityPickup) => void, + pickupVariant?: PickupVariant | int, + ]; + [ModCallbacks.MC_POST_PICKUP_UPDATE]: [ + callback: (pickup: EntityPickup) => void, + pickupVariant?: PickupVariant | int, + ]; + [ModCallbacks.MC_POST_PICKUP_RENDER]: [ + callback: (pickup: EntityPickup, renderOffset: Vector) => void, + pickupVariant?: PickupVariant | int, + ]; + [ModCallbacks.MC_POST_PICKUP_SELECTION]: [ + callback: ( + pickup: EntityPickup, + variant: PickupVariant | int, + subType: int, + ) => [PickupVariant | int, int] | void, + ]; + [ModCallbacks.MC_PRE_PICKUP_COLLISION]: [ + callback: ( + pickup: EntityPickup, + collider: Entity, + low: boolean, + ) => boolean | void, + pickupVariant?: PickupVariant | int, + ]; + [ModCallbacks.MC_POST_TEAR_INIT]: [ + callback: (tear: EntityTear) => void, + tearVariant?: TearVariant | int, + ]; + [ModCallbacks.MC_POST_TEAR_UPDATE]: [ + callback: (tear: EntityTear) => void, + tearVariant?: TearVariant | int, + ]; + [ModCallbacks.MC_POST_TEAR_RENDER]: [ + callback: (tear: EntityTear, renderOffset: Vector) => void, + tearVariant?: TearVariant | int, + ]; + [ModCallbacks.MC_PRE_TEAR_COLLISION]: [ + callback: ( + tear: EntityTear, + collider: Entity, + low: boolean, + ) => boolean | void, + tearVariant?: TearVariant | int, + ]; + [ModCallbacks.MC_POST_PROJECTILE_INIT]: [ + callback: (projectile: EntityProjectile) => void, + projectileVariant?: ProjectileVariant | int, + ]; + [ModCallbacks.MC_POST_PROJECTILE_UPDATE]: [ + callback: (projectile: EntityProjectile) => void, + projectileVariant?: ProjectileVariant | int, + ]; + [ModCallbacks.MC_POST_PROJECTILE_RENDER]: [ + callback: (projectile: EntityProjectile, renderOffset: Vector) => void, + projectileVariant?: ProjectileVariant | int, + ]; + [ModCallbacks.MC_PRE_PROJECTILE_COLLISION]: [ + callback: ( + projectile: EntityProjectile, + collider: Entity, + low: boolean, + ) => boolean | void, + projectileVariant?: ProjectileVariant | int, + ]; + [ModCallbacks.MC_POST_LASER_INIT]: [ + callback: (laser: EntityLaser) => void, + laserVariant?: LaserVariant | int, + ]; + [ModCallbacks.MC_POST_LASER_UPDATE]: [ + callback: (laser: EntityLaser) => void, + laserVariant?: LaserVariant | int, + ]; + [ModCallbacks.MC_POST_LASER_RENDER]: [ + callback: (laser: EntityLaser, renderOffset: Vector) => void, + laserVariant?: LaserVariant | int, + ]; + [ModCallbacks.MC_POST_KNIFE_INIT]: [ + callback: (knife: EntityKnife) => void, + knifeSubType?: int, + ]; + [ModCallbacks.MC_POST_KNIFE_UPDATE]: [ + callback: (knife: EntityKnife) => void, + knifeSubType?: int, + ]; + [ModCallbacks.MC_POST_KNIFE_RENDER]: [ + callback: (knife: EntityKnife, renderOffset: Vector) => void, + knifeSubType?: int, + ]; + [ModCallbacks.MC_PRE_KNIFE_COLLISION]: [ + callback: ( + knife: EntityKnife, + collider: Entity, + low: boolean, + ) => boolean | void, + knifeSubType?: int, + ]; + [ModCallbacks.MC_POST_EFFECT_INIT]: [ + callback: (effect: EntityEffect) => void, + effectVariant?: EffectVariant | int, + ]; + [ModCallbacks.MC_POST_EFFECT_UPDATE]: [ + callback: (effect: EntityEffect) => void, + effectVariant?: EffectVariant | int, + ]; + [ModCallbacks.MC_POST_EFFECT_RENDER]: [ + callback: (effect: EntityEffect, renderOffset: Vector) => void, + effectVariant?: EffectVariant | int, + ]; + [ModCallbacks.MC_POST_BOMB_INIT]: [ + callback: (bomb: EntityBomb) => void, + bombVariant?: BombVariant | int, + ]; + [ModCallbacks.MC_POST_BOMB_UPDATE]: [ + callback: (bomb: EntityBomb) => void, + bombVariant?: BombVariant | int, + ]; + [ModCallbacks.MC_POST_BOMB_RENDER]: [ + callback: (bomb: EntityBomb, renderOffset: Vector) => void, + bombVariant?: BombVariant | int, + ]; + [ModCallbacks.MC_PRE_BOMB_COLLISION]: [ + callback: ( + bomb: EntityBomb, + collider: Entity, + low: boolean, + ) => boolean | void, + bombVariant?: BombVariant | int, + ]; + [ModCallbacks.MC_POST_FIRE_TEAR]: [callback: (tear: EntityTear) => void]; + [ModCallbacks.MC_PRE_GET_COLLECTIBLE]: [ + callback: ( + itemPoolType: ItemPoolType, + decrease: boolean, + seed: int, + ) => CollectibleType | int | void, + ]; + [ModCallbacks.MC_POST_GET_COLLECTIBLE]: [ + callback: ( + collectibleType: CollectibleType | int, + itemPoolType: ItemPoolType, + decrease: boolean, + seed: int, + ) => CollectibleType | int | void, + ]; + [ModCallbacks.MC_GET_PILL_COLOR]: [ + callback: (seed: int) => PillColor | int | void, + ]; + [ModCallbacks.MC_GET_PILL_EFFECT]: [ + callback: ( + pillEffect: PillEffect | int, + pillColor: PillColor | int, + ) => PillEffect | int | void, + ]; + [ModCallbacks.MC_GET_TRINKET]: [ + callback: ( + trinketType: TrinketType | int, + rng: RNG, + ) => TrinketType | int | void, + ]; + [ModCallbacks.MC_POST_ENTITY_REMOVE]: [ + callback: (entity: Entity) => void, + entityType?: EntityType | int, + ]; + [ModCallbacks.MC_POST_ENTITY_KILL]: [ + callback: (entity: Entity) => void, + entityType?: EntityType | int, + ]; + [ModCallbacks.MC_PRE_NPC_UPDATE]: [ + callback: (npc: EntityNPC) => boolean | void, + entityType?: EntityType | int, + ]; + [ModCallbacks.MC_PRE_SPAWN_CLEAN_AWARD]: [ + callback: (rng: RNG, spawnPosition: Vector) => boolean | void, + ]; + [ModCallbacks.MC_PRE_ROOM_ENTITY_SPAWN]: [ + callback: ( + entityType: EntityType | int, + variant: int, + subType: int, + gridIndex: int, + seed: int, + ) => [EntityType | int, int, int] | void, + ]; +} +/* eslint-enable @typescript-eslint/member-ordering */ diff --git a/isaac-typescript-definitions/typings/MultiShotParams.d.ts b/isaac-typescript-definitions/typings/MultiShotParams.d.ts new file mode 100644 index 0000000..759043a --- /dev/null +++ b/isaac-typescript-definitions/typings/MultiShotParams.d.ts @@ -0,0 +1,6 @@ +/** + * - This method is userdata and has no bindings associated with it. + * - It can be retrieved by using the `EntityPlayer.GetMultiShotParams()` method. + * - It can be fed to the `EntityPlayer.GetMultiShotPositionVelocity()` method. + */ +declare interface MultiShotParams {} // eslint-disable-line @typescript-eslint/no-empty-interface diff --git a/isaac-typescript-definitions/typings/MusicManager.d.ts b/isaac-typescript-definitions/typings/MusicManager.d.ts new file mode 100644 index 0000000..eab15de --- /dev/null +++ b/isaac-typescript-definitions/typings/MusicManager.d.ts @@ -0,0 +1,49 @@ +declare function MusicManager(this: void): MusicManager; + +declare interface MusicManager { + /** + * @param music + * @param fadeRate Default is 0.08. + */ + Crossfade(music: Music | int, fadeRate?: float): void; + Disable(): void; + /** + * @param layerID Default is 0. + */ + DisableLayer(layerID?: int): void; + Enable(): void; + /** + * @param layerID Default is 0. + * @param instant Default is false. + */ + EnableLayer(layerID?: int, instant?: boolean): void; + /** + * @param music + * @param volume Default is 1. + * @param fadeRate Default is 0.08. + */ + Fadein(music: Music | int, volume?: float, fadeRate?: float): void; + /** + * @param fadeRate Default is 0.08. + */ + Fadeout(fadeRate?: float): void; + GetCurrentMusicID(): Music | int; + GetQueuedMusicID(): Music | int; + IsEnabled(): boolean; + /** + * @param layerID Default is 0. + */ + IsLayerEnabled(layerID?: int): boolean; + Pause(): void; + PitchSlide(targetPitch: float): void; + Play(music: Music | int, volume: float): void; + Queue(music: Music | int): void; + ResetPitch(): void; + Resume(): void; + UpdateVolume(): void; + /** + * @param targetVolume + * @param fadeRate Default is 0.08. + */ + VolumeSlide(targetVolume: float, fadeRate?: float): void; +} diff --git a/isaac-typescript-definitions/typings/PathFinder.d.ts b/isaac-typescript-definitions/typings/PathFinder.d.ts new file mode 100644 index 0000000..156300b --- /dev/null +++ b/isaac-typescript-definitions/typings/PathFinder.d.ts @@ -0,0 +1,20 @@ +declare interface PathFinder { + EvadeTarget(targetPos: Vector): void; + FindGridPath( + position: Vector, + speed: float, + pathMarker: int, + useDirectPath: boolean, + ): void; + GetEvadeMovementCountdown(): int; + GetGridIndex(): int; + HasDirectPath(): boolean; + HasPathToPos(position: Vector, ignorePoop: boolean): boolean; + MoveRandomly(ignoreStatusEffects: boolean): boolean; + MoveRandomlyAxisAligned(speed: float, ignoreStatusEffects: boolean): void; + MoveRandomlyBoss(ignoreStatusEffects: boolean): void; + Reset(): void; + ResetMovementTarget(): void; + SetCanCrushRocks(value: boolean): void; + UpdateGridIndex(): void; +} diff --git a/isaac-typescript-definitions/typings/PillConfigList.d.ts b/isaac-typescript-definitions/typings/PillConfigList.d.ts new file mode 100644 index 0000000..ba18652 --- /dev/null +++ b/isaac-typescript-definitions/typings/PillConfigList.d.ts @@ -0,0 +1,5 @@ +declare interface PillConfigList { + Get(idx: int): ItemConfigPillEffect | undefined; + + readonly Size: int; +} diff --git a/isaac-typescript-definitions/typings/PosVel.d.ts b/isaac-typescript-definitions/typings/PosVel.d.ts new file mode 100644 index 0000000..41e87ae --- /dev/null +++ b/isaac-typescript-definitions/typings/PosVel.d.ts @@ -0,0 +1,4 @@ +declare interface PosVel { + Position: Vector; + Vector: Vector; +} diff --git a/isaac-typescript-definitions/typings/ProjectileParams.d.ts b/isaac-typescript-definitions/typings/ProjectileParams.d.ts new file mode 100644 index 0000000..a0d733d --- /dev/null +++ b/isaac-typescript-definitions/typings/ProjectileParams.d.ts @@ -0,0 +1,27 @@ +declare function ProjectileParams(this: void): ProjectileParams; + +declare interface ProjectileParams { + Acceleration: float; + BulletFlags: int; + ChangeFlags: ProjectileFlags; + ChangeTimeout: int; + ChangeVelocity: float; + CircleAngle: float; + Color: Color; + CurvingStrength: float; + DepthOffset: float; + DotProductLimit: float; + FallingAccelModifier: float; + FallingSpeedModifier: float; + FireDirectionLimit: Vector; + GridCollision: boolean; + HeightModifier: float; + HomingStrength: float; + PositionOffset: Vector; + Scale: float; + Spread: float; + TargetPosition: Vector; + Variant: ProjectileVariant | int; + VelocityMulti: float; + WiggleFrameOffset: int; +} diff --git a/isaac-typescript-definitions/typings/QueueItemData.d.ts b/isaac-typescript-definitions/typings/QueueItemData.d.ts new file mode 100644 index 0000000..537c6a0 --- /dev/null +++ b/isaac-typescript-definitions/typings/QueueItemData.d.ts @@ -0,0 +1,5 @@ +declare interface QueueItemData { + Charge: int; + Item: ItemConfigItem | undefined; + Touched: boolean; +} diff --git a/isaac-typescript-definitions/typings/RNG.d.ts b/isaac-typescript-definitions/typings/RNG.d.ts new file mode 100644 index 0000000..c584c6f --- /dev/null +++ b/isaac-typescript-definitions/typings/RNG.d.ts @@ -0,0 +1,19 @@ +declare function RNG(this: void): RNG; + +declare interface RNG { + GetSeed(): int; + Next(): int; + /** + * Generates a random float between 0 and 1. + * It is inclusive on the bottom and exclusive on the top. + */ + RandomFloat(): float; + /** + * Generates a random integer between 0 and max - 1. For example, `rng.RandomInt(4)` will return + * either 0, 1, 2, or 3. + * + * @param max + */ + RandomInt(max: int): int; + SetSeed(seed: int, shiftIdx: int): void; +} diff --git a/isaac-typescript-definitions/typings/Room.d.ts b/isaac-typescript-definitions/typings/Room.d.ts new file mode 100644 index 0000000..07caa08 --- /dev/null +++ b/isaac-typescript-definitions/typings/Room.d.ts @@ -0,0 +1,158 @@ +declare interface Room { + /** + * @param position1 + * @param position2 + * @param lineCheckMode + * @param gridPathThreshold Default is 0. + * @param ignoreWalls Default is false. + * @param ignoreCrushable Default is false. + * @returns 2 values: + * 1) boolean: true if there are no obstructions between Pos1 and Pos2, false otherwise + * 2) Vector: first hit position from pos1 to pos2 (returns pos2 if the line didn't hit anything) + */ + CheckLine( + position1: Vector, + position2: Vector, + lineCheckMode: LineCheckMode, + gridPathThreshold?: int, + ignoreWalls?: boolean, + ignoreCrushable?: boolean, + ): LuaMultiReturn<[boolean, Vector]>; + DamageGrid(index: int, damage: int): boolean; + DestroyGrid(index: int, immediate: boolean): boolean; + EmitBloodFromWalls(duration: int, count: int): void; + /** + * @param position + * @param initialStep Default is 0. + * @param avoidActiveEntities Default is false. + * @param allowPits Default is false. + */ + FindFreePickupSpawnPosition( + position: Vector, + initialStep?: float, + avoidActiveEntities?: boolean, + allowPits?: boolean, + ): Vector; + FindFreeTilePosition(position: Vector, distanceThreshold: float): Vector; + GetAliveBossesCount(): int; + GetAliveEnemiesCount(): int; + GetAwardSeed(): int; + GetBackdropType(): BackdropType; + GetBossID(): BossIDs | int; + GetBottomRightPos(): Vector; + GetBrokenWatchState(): int; + GetCenterPos(): Vector; + GetClampedGridIndex(position: Vector): int; + GetClampedPosition(position: Vector, margin: float): Vector; + GetDecorationSeed(): int; + GetDeliriumDistance(): int; + GetDevilRoomChance(): float; + GetDoor(doorSlot: DoorSlot): GridEntityDoor | undefined; + GetDoorSlotPosition(doorSlot: DoorSlot): Vector; + GetDungeonRockIdx(): int; + /** + * Using this method can cause the game to crash, so it is forbidden. + * Use "Isaac.GetRoomEntities()" instead. + */ + GetEntities(fakeArg: never): EntityList; + GetFrameCount(): int; + GetGridCollision(gridIndex: int): GridCollisionClass; + GetGridCollisionAtPos(position: Vector): GridCollisionClass; + GetGridEntity(gridIndex: int): GridEntity | undefined; + GetGridEntityFromPos(position: Vector): GridEntity | undefined; + GetGridHeight(): int; + GetGridIndex(position: Vector): int; + GetGridPath(index: int): int; + GetGridPathFromPos(position: Vector): int; + GetGridPosition(gridIndex: int): Vector; + GetGridSize(): int; + /** Note that if you call this in the main menu, the game will sometimes crash. */ + GetGridWidth(): int; + GetLaserTarget(position: Vector, direction: Vector): Vector; + GetLightingAlpha(): float; + // GetLRoomAreaDesc(): LRoomAreaDesc; // LRoomAreaDesc is not implemented + // GetLRoomTileDesc(): LRoomTileDesc; // LRoomTileDesc is not implemented + GetNextShockwaveId(): int; + GetRandomPosition(margin: float): Vector; + GetRandomTileIndex(seed: int): int; + GetRedHeartDamage(): boolean; + GetRenderScrollOffset(): Readonly; + GetRenderSurfaceTopLeft(): Readonly; + GetRoomConfigStage(): int; + GetRoomShape(): RoomShape; + GetSecondBossID(): BossIDs | int; + GetSeededCollectible(seed: int): CollectibleType | int; + GetShopLevel(): int; + GetSpawnSeed(): int; + GetTintedRockIdx(): int; + GetTopLeftPos(): Vector; + GetType(): RoomType; + HasSlowDown(): boolean; + HasTriggerPressurePlates(): boolean; + HasWater(): boolean; + HasWaterPits(): boolean; + IsAmbushActive(): boolean; + IsAmbushDone(): boolean; + IsClear(): boolean; + IsCurrentRoomLastBoss(): boolean; + IsDoorSlotAllowed(doorSlot: DoorSlot): boolean; + IsFirstEnemyDead(): boolean; + IsFirstVisit(): boolean; + IsInitialized(): boolean; + IsLShapedRoom(): boolean; + IsPositionInRoom(position: Vector, margin: float): boolean; + IsSacrificeDone(): boolean; + KeepDoorsClosed(): void; + MamaMegaExplossion(): void; + PlayMusic(): void; + RemoveDoor(doorSlot: DoorSlot): void; + RemoveGridEntity( + gridIndex: int, + pathTrail: int, + keepDecoration: boolean, + ): void; + Render(): void; + RespawnEnemies(): void; + ScreenWrapPosition(position: Vector, margin: float): Vector; + SetAmbushDone(value: boolean): void; + SetBrokenWatchState(state: int): void; + SetCardAgainstHumanity(): void; + SetClear(clear: boolean): void; + SetFirstEnemyDead(value: boolean): void; + SetFloorColor(floorColor: Color): void; + SetGridPath(index: int, value: int): boolean; + SetRedHeartDamage(): void; + SetSacrificeDone(done: boolean): void; + SetShockwaveParam(shockwaveID: int, shockwaveParams: ShockwaveParams): void; + SetSlowDown(duration: int): void; + SetWallColor(wallColor: Color): void; + ShopReshuffle(keepCollectibleIdx: boolean, reselectSaleItem: boolean): void; + ShopRestockFull(): void; + ShopRestockPartial(): void; + SpawnClearAward(): void; + SpawnGridEntity( + gridIndex: int, + gridEntityType: GridEntityType | int, + variant: int, + seed: int, + varData: int, + ): boolean; + /** + * This function was updated to take two arguments in Repentance. The reason for this is that + * bridges can be spike bridges, so the specifying the type of rock is necessary. + */ + TryMakeBridge(pit: GridEntity, rock: GridEntity): boolean; + TryPlaceLadder( + playerPos: Vector, + playerVelocity: Vector, + ladder: Entity, + ): void; + TrySpawnBlueWombDoor(firstTime: boolean, ignoreTime: boolean): boolean; + TrySpawnBossRushDoor(ignoreTime: boolean): boolean; + TrySpawnDevilRoomDoor(animate: boolean): boolean; + TrySpawnMegaSatanRoomDoor(): boolean; + TrySpawnTheVoidDoor(): boolean; + TurnGold(): void; + Update(): void; + WorldToScreenPosition(worldPos: Vector): Vector; +} diff --git a/isaac-typescript-definitions/typings/RoomConfig.d.ts b/isaac-typescript-definitions/typings/RoomConfig.d.ts new file mode 100644 index 0000000..433fcb0 --- /dev/null +++ b/isaac-typescript-definitions/typings/RoomConfig.d.ts @@ -0,0 +1,22 @@ +// This is "RoomConfig::Room" in the docs + +declare interface RoomConfig { + /** + * This is not the same thing as the Difficulty enum. + * Each room has an arbitrarily set difficulty of 0, 1, 2, 5, or 10. + */ + Difficulty: int; + Doors: int; + Height: int; + InitialWeight: float; + Name: string; + Shape: RoomShape; + SpawnCount: int; + Spawns: SpawnList; + StageID: StageID; + Subtype: int; + Type: RoomType; + Variant: int; + Weight: float; + Width: int; +} diff --git a/isaac-typescript-definitions/typings/RoomConfigEntry.d.ts b/isaac-typescript-definitions/typings/RoomConfigEntry.d.ts new file mode 100644 index 0000000..8c81dd3 --- /dev/null +++ b/isaac-typescript-definitions/typings/RoomConfigEntry.d.ts @@ -0,0 +1,6 @@ +declare interface RoomConfigEntry { + Subtype: int; + Type: EntityType; + Variant: int; + Weight: int; +} diff --git a/isaac-typescript-definitions/typings/RoomConfigSpawn.d.ts b/isaac-typescript-definitions/typings/RoomConfigSpawn.d.ts new file mode 100644 index 0000000..506754f --- /dev/null +++ b/isaac-typescript-definitions/typings/RoomConfigSpawn.d.ts @@ -0,0 +1,8 @@ +declare interface RoomConfigSpawn { + PickEntry(r: float): Readonly; + + EntryCount: int; + SumWeights: float; + X: int; + Y: int; +} diff --git a/isaac-typescript-definitions/typings/RoomDescriptor.d.ts b/isaac-typescript-definitions/typings/RoomDescriptor.d.ts new file mode 100644 index 0000000..18d34e2 --- /dev/null +++ b/isaac-typescript-definitions/typings/RoomDescriptor.d.ts @@ -0,0 +1,30 @@ +declare interface RoomDescriptor { + // AllowedDoors: DoorSet; // DoorSet is not implemented + AwardSeed: int; + ChallengeDone: boolean; + Clear: boolean; + ClearCount: int; + Data: RoomConfig | undefined; + DecorationSeed: int; + DeliriumDistance: int; + /** + * A composition of zero or more DisplayFlag. After modifying this value, you must call + * `Level.UpdateVisibility()` for it to take effect. + */ + DisplayFlags: int; + GridIndex: int; + HasWater: boolean; + ListIndex: int; + NoReward: boolean; + OverrideData: RoomConfig; + PitsCount: int; + PoopCount: int; + PressurePlatesTriggered: boolean; + SacrificeDone: boolean; + SafeGridIndex: int; + ShopItemDiscountIdx: int; + ShopItemIdx: int; + SpawnSeed: int; + SurpriseMiniboss: boolean; + VisitedCount: int; +} diff --git a/isaac-typescript-definitions/typings/RoomDescriptorReadOnly.d.ts b/isaac-typescript-definitions/typings/RoomDescriptorReadOnly.d.ts new file mode 100644 index 0000000..81c2fad --- /dev/null +++ b/isaac-typescript-definitions/typings/RoomDescriptorReadOnly.d.ts @@ -0,0 +1,122 @@ +// This is the same thing as the RoomDescriptor class, but every value is marked as being read only + +declare interface RoomDescriptorReadOnly { + // AllowedDoors: DoorSet; // DoorSet is not implemented + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + AwardSeed: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + ChallengeDone: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + Clear: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + ClearCount: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + Data: Readonly | Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + DecorationSeed: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + DeliriumDistance: Readonly; + /** + * A composition of zero or more DisplayFlag. + * + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + DisplayFlags: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + GridIndex: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + HasWater: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + ListIndex: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + NoReward: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + OverrideData: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + PitsCount: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + PoopCount: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + PressurePlatesTriggered: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + SacrificeDone: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + SafeGridIndex: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + ShopItemDiscountIdx: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + ShopItemIdx: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + SpawnSeed: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + SurpriseMiniboss: Readonly; + /** + * To set this property, get a writable copy of the RoomDescriptor by using the + * `Level.GetRoomByIdx()` method. + */ + VisitedCount: Readonly; +} diff --git a/isaac-typescript-definitions/typings/RoomList.d.ts b/isaac-typescript-definitions/typings/RoomList.d.ts new file mode 100644 index 0000000..00e3c59 --- /dev/null +++ b/isaac-typescript-definitions/typings/RoomList.d.ts @@ -0,0 +1,5 @@ +declare interface RoomList { + Get(idx: int): RoomDescriptor | undefined; + + Size: int; +} diff --git a/isaac-typescript-definitions/typings/SFXManager.d.ts b/isaac-typescript-definitions/typings/SFXManager.d.ts new file mode 100644 index 0000000..51e89c3 --- /dev/null +++ b/isaac-typescript-definitions/typings/SFXManager.d.ts @@ -0,0 +1,32 @@ +declare function SFXManager(this: void): SFXManager; + +declare interface SFXManager { + AdjustPitch(soundEffect: SoundEffect | int, pitch: float): void; + AdjustVolume(soundEffect: SoundEffect | int, volume: float): void; + GetAmbientSoundVolume(soundEffect: SoundEffect | int): float; + IsPlaying(soundEffect: SoundEffect | int): boolean; + /** + * @param soundEffect + * @param volume Default is 1. + * @param frameDelay Default is 2. + * @param loop Default is false. + * @param pitch Default is 1. + * @param pan Default is 0. + */ + Play( + soundEffect: SoundEffect | int, + volume?: float, + frameDelay?: int, + loop?: boolean, + pitch?: float, + pan?: float, + ): void; + Preload(soundEffect: SoundEffect | int): void; + SetAmbientSound( + soundEffect: SoundEffect | int, + volume: float, + pitch: float, + ): void; + Stop(soundEffect: SoundEffect | int): void; + StopLoopingSounds(): void; +} diff --git a/isaac-typescript-definitions/typings/Seeds.d.ts b/isaac-typescript-definitions/typings/Seeds.d.ts new file mode 100644 index 0000000..b605e6c --- /dev/null +++ b/isaac-typescript-definitions/typings/Seeds.d.ts @@ -0,0 +1,32 @@ +declare interface Seeds { + AddSeedEffect(seedEffect: SeedEffect): void; + CanAddSeedEffect(seedEffect: SeedEffect): boolean; + ClearSeedEffects(): void; + ClearStartSeed(): void; + CountSeedEffects(): int; + ForgetStageSeed(levelStage: LevelStage): void; + GetNextSeed(): int; + GetPlayerInitSeed(): int; + GetStageSeed(levelStage: LevelStage): int; + GetStartSeed(): int; + GetStartSeedString(): string; + HasSeedEffect(seedEffect: SeedEffect): boolean; + IsCustomRun(): boolean; + IsInitialized(): boolean; + IsSeedComboBanned(seedEffect1: SeedEffect, seedEffect2: SeedEffect): boolean; + RemoveBlockingSeedEffects(seedEffect: SeedEffect): void; + RemoveSeedEffect(seedEffect: SeedEffect): void; + Reset(): void; + Restart(challenge: Challenge | int): void; + SetStartSeed(startSeed: string): void; +} + +declare namespace Seeds { + function CountUnlockedSeedEffects(this: void): int; + function GetSeedEffect(this: void, str: string): SeedEffect; + function InitSeedInfo(this: void): void; + function IsSpecialSeed(this: void, str: string): boolean; + function IsStringValidSeed(this: void, str: string): boolean; + function Seed2String(this: void, seed: int): string; + function String2Seed(this: void, str: string): int; +} diff --git a/isaac-typescript-definitions/typings/ShockwaveParams.d.ts b/isaac-typescript-definitions/typings/ShockwaveParams.d.ts new file mode 100644 index 0000000..75751ef --- /dev/null +++ b/isaac-typescript-definitions/typings/ShockwaveParams.d.ts @@ -0,0 +1,8 @@ +declare interface ShockwaveParams { + Age: int; + LifeSpan: int; + Position: Vector; + Strength: float; + Time: float; + TimeDT: float; +} diff --git a/isaac-typescript-definitions/typings/SpawnList.d.ts b/isaac-typescript-definitions/typings/SpawnList.d.ts new file mode 100644 index 0000000..882cfc0 --- /dev/null +++ b/isaac-typescript-definitions/typings/SpawnList.d.ts @@ -0,0 +1,5 @@ +declare interface SpawnList { + Get(idx: int): RoomConfigSpawn | undefined; + + Size: int; +} diff --git a/isaac-typescript-definitions/typings/Sprite.d.ts b/isaac-typescript-definitions/typings/Sprite.d.ts new file mode 100644 index 0000000..f24762d --- /dev/null +++ b/isaac-typescript-definitions/typings/Sprite.d.ts @@ -0,0 +1,64 @@ +declare function Sprite(this: void): Sprite; + +declare interface Sprite { + GetAnimation(): string; + GetDefaultAnimation(): string; + GetDefaultAnimationName(): Readonly; + GetFilename(): string; + GetFrame(): int; + GetLayerCount(): int; + GetOverlayAnimation(): string; + GetOverlayFrame(): int; + GetTexel(samplePos: Vector, renderPos: Vector, alphaThreshold: float): KColor; + IsEventTriggered(eventName: string): boolean; + IsFinished(animationName: string): boolean; + IsLoaded(): boolean; + IsOverlayFinished(animationName: string): boolean; + IsOverlayPlaying(animationName: string): boolean; + IsPlaying(animationName: string): boolean; + Load(filename: string, loadGraphics: boolean): void; + LoadGraphics(): void; + Play(animationName: string, force: boolean): void; + PlayOverlay(animationName: string, force: boolean): void; + PlayRandom(seed: int): void; + Reload(): void; + RemoveOverlay(): void; + Render( + position: Vector, + topLeftClamp: Vector, + bottomRightClamp: Vector, + ): void; + /** + * @param layerID + * @param position + * @param topLeftClamp Default is Vector.Zero. + * @param bottomRightClamp Default is Vector.Zero. + */ + RenderLayer( + layerID: int, + position: Vector, + topLeftClamp?: Vector, + bottomRightClamp?: Vector, + ): void; + ReplaceSpritesheet(layerID: int, pngFilename: string): void; + Reset(): void; + SetAnimation(animationName: string): boolean; + SetFrame(frameNum: int): void; + SetFrame(animationName: string, frameNum: int): void; + SetLastFrame(): void; + SetLayerFrame(layerID: int, frameNum: int): void; + SetOverlayAnimation(animationName: string): boolean; + SetOverlayFrame(animationName: string, frameNum: int): void; + SetOverlayRenderPriority(renderFirst: boolean): void; + Stop(): void; + Update(): void; + WasEventTriggered(eventName: string): boolean; + + Color: Color; + FlipX: boolean; + FlipY: boolean; + Offset: Vector; + PlaybackSpeed: float; + Rotation: float; + Scale: Vector; +} diff --git a/isaac-typescript-definitions/typings/TearParams.d.ts b/isaac-typescript-definitions/typings/TearParams.d.ts new file mode 100644 index 0000000..e883d43 --- /dev/null +++ b/isaac-typescript-definitions/typings/TearParams.d.ts @@ -0,0 +1,13 @@ +declare interface TearParams { + BombVariant: int; + TearColor: Color; + TearDamage: float; + /** + * Be aware that this is really a BitSet128 instead of an integer. + * However, all of the TearFlags enums values use BitSet128 constructors. + */ + TearFlags: int; + TearHeight: float; + TearScale: float; + TearVariant: TearVariant | int; +} diff --git a/isaac-typescript-definitions/typings/TemporaryEffect.d.ts b/isaac-typescript-definitions/typings/TemporaryEffect.d.ts new file mode 100644 index 0000000..ca5d764 --- /dev/null +++ b/isaac-typescript-definitions/typings/TemporaryEffect.d.ts @@ -0,0 +1,5 @@ +declare interface TemporaryEffect { + Cooldown: int; + Count: int; + Item: ItemConfigItem; +} diff --git a/isaac-typescript-definitions/typings/TemporaryEffects.d.ts b/isaac-typescript-definitions/typings/TemporaryEffects.d.ts new file mode 100644 index 0000000..3fc5ed0 --- /dev/null +++ b/isaac-typescript-definitions/typings/TemporaryEffects.d.ts @@ -0,0 +1,67 @@ +declare interface TemporaryEffects { + /** + * This method is currently bugged in v820. Do not use this method, as it will semi-reliably crash + * the game. + * + * @param collectibleType + * @param addCostume Default is true. + * @param count Default is 1. + */ + AddCollectibleEffect( + fakeArg: never, + collectibleType: CollectibleType | int, + addCostume?: boolean, + count?: int, + ): void; + /** + * @param nullItemID + * @param addCostume + * @param count Default is 1. + */ + AddNullEffect( + nullItemID: NullItemID | int, + addCostume: boolean, + count?: int, + ): void; + /** + * @param trinketType + * @param addCostume + * @param count Default is 1. + */ + AddTrinketEffect( + trinketType: TrinketType | int, + addCostume: boolean, + count?: int, + ): void; + ClearEffects(): void; + GetCollectibleEffect( + collectibleType: CollectibleType | int, + ): Readonly; + GetCollectibleEffectNum(collectibleType: CollectibleType | int): int; + GetEffectsList(): Readonly; + GetNullEffect(nullItemID: NullItemID | int): Readonly; + GetNullEffectNum(nullItemID: NullItemID | int): int; + GetTrinketEffect(trinketType: TrinketType | int): Readonly; + GetTrinketEffectNum(trinketType: TrinketType | int): int; + HasCollectibleEffect(collectibleType: CollectibleType | int): boolean; + HasNullEffect(nullItemID: NullItemID | int): boolean; + HasTrinketEffect(trinketType: TrinketType | int): boolean; + /** + * @param collectibleType + * @param count Use -1 to remove all instances. Default is 1. + */ + RemoveCollectibleEffect( + collectibleType: CollectibleType | int, + count?: int, + ): void; + /** + * @param nullItemID + * @param count Use -1 to remove all instances. Default is 1. + */ + RemoveNullEffect(nullItemID: NullItemID | int, count?: int): void; + /** + * @param trinketType + * @param count Use -1 to remove all instances. Default is 1. + */ + RemoveTrinketEffect(trinketType: TrinketType | int, count?: int): void; +} diff --git a/isaac-typescript-definitions/typings/Vector.d.ts b/isaac-typescript-definitions/typings/Vector.d.ts new file mode 100644 index 0000000..4ba795b --- /dev/null +++ b/isaac-typescript-definitions/typings/Vector.d.ts @@ -0,0 +1,56 @@ +declare function Vector(this: void, x: float, y: float): Vector; + +declare interface Vector { + Clamp(minX: float, minY: float, maxX: float, maxY: float): void; + Clamped(minX: float, minY: float, maxX: float, maxY: float): Vector; + Cross(secondVector: Vector): float; + Distance(secondVector: Vector): float; + DistanceSquared(secondVector: Vector): float; + Dot(secondVector: Vector): float; + /** + * The game returns degrees in the following format: + * + * - Right: 0 + * - Up: -90 + * - Left: 180 + * - Down: 90 + */ + GetAngleDegrees(): float; + Length(): float; + LengthSquared(): float; + Lerp(secondVector: Vector, t: float): Vector; + Normalize(): void; + Normalized(): Vector; + Resize(newLength: float): void; + Resized(newLength: float): Vector; + Rotated(angleDegrees: float): Vector; + + /** Use the "add()" method instead. */ + __add(right: never): Vector; + /** Use the "div()" method instead. */ + __div(modifier: never): Vector; + /** Use the "mul()" method instead. */ + __mul(modifier: never): Vector; + /** Use the "sub()" method instead. */ + __sub(right: never): Vector; + // Not implemented since it can cause the game to crash + // __unm(right: never): Vector; + + X: float; + Y: float; + + // Helper functions for adding and so forth + // https://typescripttolua.github.io/docs/advanced/language-extensions/#operator-map-types + add: LuaAdditionMethod; + // Vector multiplication was extended to allow Vectors in Repentance + // However, this functionality does not apply to division + div: LuaDivisionMethod; + mul: LuaMultiplicationMethod; + sub: LuaSubtractionMethod; +} + +declare namespace Vector { + function FromAngle(this: void, angleDegrees: float): Vector; + const One: Vector; + const Zero: Vector; +} diff --git a/isaac-typescript-definitions/typings/VectorList.d.ts b/isaac-typescript-definitions/typings/VectorList.d.ts new file mode 100644 index 0000000..538a2a3 --- /dev/null +++ b/isaac-typescript-definitions/typings/VectorList.d.ts @@ -0,0 +1,5 @@ +declare interface VectorList { + Get(idx: int): Vector | undefined; + + readonly Size: int; +} diff --git a/isaac-typescript-definitions/typings/enums.d.ts b/isaac-typescript-definitions/typings/enums.d.ts new file mode 100644 index 0000000..9fc4449 --- /dev/null +++ b/isaac-typescript-definitions/typings/enums.d.ts @@ -0,0 +1,2341 @@ +declare enum ModCallbacks { + MC_NPC_UPDATE = 0, + MC_POST_UPDATE = 1, + MC_POST_RENDER = 2, + MC_USE_ITEM = 3, + MC_POST_PEFFECT_UPDATE = 4, + MC_USE_CARD = 5, + MC_FAMILIAR_UPDATE = 6, + MC_FAMILIAR_INIT = 7, + MC_EVALUATE_CACHE = 8, + MC_POST_PLAYER_INIT = 9, + MC_USE_PILL = 10, + MC_ENTITY_TAKE_DMG = 11, + MC_POST_CURSE_EVAL = 12, + MC_INPUT_ACTION = 13, + // MC_LEVEL_GENERATOR = 14, // Not implemented + MC_POST_GAME_STARTED = 15, + MC_POST_GAME_END = 16, + MC_PRE_GAME_EXIT = 17, + MC_POST_NEW_LEVEL = 18, + MC_POST_NEW_ROOM = 19, + MC_GET_CARD = 20, + MC_GET_SHADER_PARAMS = 21, + MC_EXECUTE_CMD = 22, + MC_PRE_USE_ITEM = 23, + MC_PRE_ENTITY_SPAWN = 24, + MC_POST_FAMILIAR_RENDER = 25, + MC_PRE_FAMILIAR_COLLISION = 26, + MC_POST_NPC_INIT = 27, + MC_POST_NPC_RENDER = 28, + MC_POST_NPC_DEATH = 29, + MC_PRE_NPC_COLLISION = 30, + MC_POST_PLAYER_UPDATE = 31, + MC_POST_PLAYER_RENDER = 32, + MC_PRE_PLAYER_COLLISION = 33, + MC_POST_PICKUP_INIT = 34, + MC_POST_PICKUP_UPDATE = 35, + MC_POST_PICKUP_RENDER = 36, + MC_POST_PICKUP_SELECTION = 37, + MC_PRE_PICKUP_COLLISION = 38, + MC_POST_TEAR_INIT = 39, + MC_POST_TEAR_UPDATE = 40, + MC_POST_TEAR_RENDER = 41, + MC_PRE_TEAR_COLLISION = 42, + MC_POST_PROJECTILE_INIT = 43, + MC_POST_PROJECTILE_UPDATE = 44, + MC_POST_PROJECTILE_RENDER = 45, + MC_PRE_PROJECTILE_COLLISION = 46, + MC_POST_LASER_INIT = 47, + MC_POST_LASER_UPDATE = 48, + MC_POST_LASER_RENDER = 49, + MC_POST_KNIFE_INIT = 50, + MC_POST_KNIFE_UPDATE = 51, + MC_POST_KNIFE_RENDER = 52, + MC_PRE_KNIFE_COLLISION = 53, + MC_POST_EFFECT_INIT = 54, + MC_POST_EFFECT_UPDATE = 55, + MC_POST_EFFECT_RENDER = 56, + MC_POST_BOMB_INIT = 57, + MC_POST_BOMB_UPDATE = 58, + MC_POST_BOMB_RENDER = 59, + MC_PRE_BOMB_COLLISION = 60, + MC_POST_FIRE_TEAR = 61, + MC_PRE_GET_COLLECTIBLE = 62, + MC_POST_GET_COLLECTIBLE = 63, + MC_GET_PILL_COLOR = 64, + MC_GET_PILL_EFFECT = 65, + MC_GET_TRINKET = 66, + MC_POST_ENTITY_REMOVE = 67, + MC_POST_ENTITY_KILL = 68, + MC_PRE_NPC_UPDATE = 69, + MC_PRE_SPAWN_CLEAN_AWARD = 70, + MC_PRE_ROOM_ENTITY_SPAWN = 71, +} + +declare enum EntityType { + ENTITY_NULL = 0, + ENTITY_PLAYER = 1, + ENTITY_TEAR = 2, + ENTITY_FAMILIAR = 3, + ENTITY_BOMBDROP = 4, + ENTITY_PICKUP = 5, + ENTITY_SLOT = 6, + ENTITY_LASER = 7, + ENTITY_KNIFE = 8, + ENTITY_PROJECTILE = 9, + ENTITY_GAPER = 10, + ENTITY_GUSHER = 11, + ENTITY_HORF = 12, + ENTITY_FLY = 13, + ENTITY_POOTER = 14, + ENTITY_CLOTTY = 15, + ENTITY_MULLIGAN = 16, + ENTITY_SHOPKEEPER = 17, + ENTITY_ATTACKFLY = 18, + ENTITY_LARRYJR = 19, + ENTITY_MONSTRO = 20, + ENTITY_MAGGOT = 21, + ENTITY_HIVE = 22, + ENTITY_CHARGER = 23, + ENTITY_GLOBIN = 24, + ENTITY_BOOMFLY = 25, + ENTITY_MAW = 26, + ENTITY_HOST = 27, + ENTITY_CHUB = 28, + ENTITY_HOPPER = 29, + ENTITY_BOIL = 30, + ENTITY_SPITY = 31, + ENTITY_BRAIN = 32, + ENTITY_FIREPLACE = 33, + ENTITY_LEAPER = 34, + ENTITY_MRMAW = 35, + ENTITY_GURDY = 36, + ENTITY_BABY = 38, + ENTITY_VIS = 39, + ENTITY_GUTS = 40, + ENTITY_KNIGHT = 41, + ENTITY_STONEHEAD = 42, + ENTITY_MONSTRO2 = 43, + ENTITY_POKY = 44, + ENTITY_MOM = 45, + ENTITY_SLOTH = 46, + ENTITY_LUST = 47, + ENTITY_WRATH = 48, + ENTITY_GLUTTONY = 49, + ENTITY_GREED = 50, + ENTITY_ENVY = 51, + ENTITY_PRIDE = 52, + ENTITY_DOPLE = 53, + ENTITY_FLAMINGHOPPER = 54, + ENTITY_LEECH = 55, + ENTITY_LUMP = 56, + ENTITY_MEMBRAIN = 57, + ENTITY_PARA_BITE = 58, + ENTITY_FRED = 59, + ENTITY_EYE = 60, + ENTITY_SUCKER = 61, + ENTITY_PIN = 62, + ENTITY_FAMINE = 63, + ENTITY_PESTILENCE = 64, + ENTITY_WAR = 65, + ENTITY_DEATH = 66, + ENTITY_DUKE = 67, + ENTITY_PEEP = 68, + ENTITY_LOKI = 69, + ENTITY_FISTULA_BIG = 71, + ENTITY_FISTULA_MEDIUM = 72, + ENTITY_FISTULA_SMALL = 73, + ENTITY_BLASTOCYST_BIG = 74, + ENTITY_BLASTOCYST_MEDIUM = 75, + ENTITY_BLASTOCYST_SMALL = 76, + ENTITY_EMBRYO = 77, + ENTITY_MOMS_HEART = 78, + ENTITY_GEMINI = 79, + ENTITY_MOTER = 80, + ENTITY_FALLEN = 81, + ENTITY_HEADLESS_HORSEMAN = 82, + ENTITY_HORSEMAN_HEAD = 83, + ENTITY_SATAN = 84, + ENTITY_SPIDER = 85, + ENTITY_KEEPER = 86, + ENTITY_GURGLE = 87, + ENTITY_WALKINGBOIL = 88, + ENTITY_BUTTLICKER = 89, + ENTITY_HANGER = 90, + ENTITY_SWARMER = 91, + ENTITY_HEART = 92, + ENTITY_MASK = 93, + ENTITY_BIGSPIDER = 94, + ENTITY_ETERNALFLY = 96, + ENTITY_MASK_OF_INFAMY = 97, + ENTITY_HEART_OF_INFAMY = 98, + ENTITY_GURDY_JR = 99, + ENTITY_WIDOW = 100, + ENTITY_DADDYLONGLEGS = 101, + ENTITY_ISAAC = 102, + ENTITY_STONE_EYE = 201, + ENTITY_CONSTANT_STONE_SHOOTER = 202, + ENTITY_BRIMSTONE_HEAD = 203, + ENTITY_MOBILE_HOST = 204, + ENTITY_NEST = 205, + ENTITY_BABY_LONG_LEGS = 206, + ENTITY_CRAZY_LONG_LEGS = 207, + ENTITY_FATTY = 208, + ENTITY_FAT_SACK = 209, + ENTITY_BLUBBER = 210, + ENTITY_HALF_SACK = 211, + ENTITY_DEATHS_HEAD = 212, + ENTITY_MOMS_HAND = 213, + ENTITY_FLY_L2 = 214, + ENTITY_SPIDER_L2 = 215, + ENTITY_SWINGER = 216, + ENTITY_DIP = 217, + ENTITY_WALL_HUGGER = 218, + ENTITY_WIZOOB = 219, + ENTITY_SQUIRT = 220, + ENTITY_COD_WORM = 221, + ENTITY_RING_OF_FLIES = 222, + ENTITY_DINGA = 223, + ENTITY_OOB = 224, + ENTITY_BLACK_MAW = 225, + ENTITY_SKINNY = 226, + ENTITY_BONY = 227, + ENTITY_HOMUNCULUS = 228, + ENTITY_TUMOR = 229, + ENTITY_CAMILLO_JR = 230, + ENTITY_NERVE_ENDING = 231, + ENTITY_SKINBALL = 232, + ENTITY_MOM_HEAD = 233, + ENTITY_ONE_TOOTH = 234, + ENTITY_GAPING_MAW = 235, + ENTITY_BROKEN_GAPING_MAW = 236, + ENTITY_GURGLING = 237, + ENTITY_SPLASHER = 238, + ENTITY_GRUB = 239, + ENTITY_WALL_CREEP = 240, + ENTITY_RAGE_CREEP = 241, + ENTITY_BLIND_CREEP = 242, + ENTITY_CONJOINED_SPITTY = 243, + ENTITY_ROUND_WORM = 244, + ENTITY_POOP = 245, + ENTITY_RAGLING = 246, + ENTITY_FLESH_MOBILE_HOST = 247, + ENTITY_PSY_HORF = 248, + ENTITY_FULL_FLY = 249, + ENTITY_TICKING_SPIDER = 250, + ENTITY_BEGOTTEN = 251, + ENTITY_NULLS = 252, + ENTITY_PSY_TUMOR = 253, + ENTITY_FLOATING_KNIGHT = 254, + ENTITY_NIGHT_CRAWLER = 255, + ENTITY_DART_FLY = 256, + ENTITY_CONJOINED_FATTY = 257, + ENTITY_FAT_BAT = 258, + ENTITY_IMP = 259, + ENTITY_THE_HAUNT = 260, + ENTITY_DINGLE = 261, + ENTITY_MEGA_MAW = 262, + ENTITY_GATE = 263, + ENTITY_MEGA_FATTY = 264, + ENTITY_CAGE = 265, + ENTITY_MAMA_GURDY = 266, + ENTITY_DARK_ONE = 267, + ENTITY_ADVERSARY = 268, + ENTITY_POLYCEPHALUS = 269, + ENTITY_MR_FRED = 270, + ENTITY_URIEL = 271, + ENTITY_GABRIEL = 272, + ENTITY_THE_LAMB = 273, + ENTITY_MEGA_SATAN = 274, + ENTITY_MEGA_SATAN_2 = 275, + ENTITY_ROUNDY = 276, + ENTITY_BLACK_BONY = 277, + ENTITY_BLACK_GLOBIN = 278, + ENTITY_BLACK_GLOBIN_HEAD = 279, + ENTITY_BLACK_GLOBIN_BODY = 280, + ENTITY_SWARM = 281, + ENTITY_MEGA_CLOTTY = 282, + ENTITY_BONE_KNIGHT = 283, + ENTITY_CYCLOPIA = 284, + ENTITY_RED_GHOST = 285, + ENTITY_FLESH_DEATHS_HEAD = 286, + ENTITY_MOMS_DEAD_HAND = 287, + ENTITY_DUKIE = 288, + ENTITY_ULCER = 289, + ENTITY_MEATBALL = 290, + ENTITY_PITFALL = 291, + ENTITY_MOVABLE_TNT = 292, + ENTITY_ULTRA_COIN = 293, + ENTITY_ULTRA_DOOR = 294, + ENTITY_CORN_MINE = 295, + ENTITY_HUSH_FLY = 296, + ENTITY_HUSH_GAPER = 297, + ENTITY_HUSH_BOIL = 298, + ENTITY_GREED_GAPER = 299, + ENTITY_MUSHROOM = 300, + ENTITY_POISON_MIND = 301, + ENTITY_STONEY = 302, + ENTITY_BLISTER = 303, + ENTITY_THE_THING = 304, + ENTITY_MINISTRO = 305, + ENTITY_PORTAL = 306, + ENTITY_TARBOY = 307, + ENTITY_FISTULOID = 308, + ENTITY_GUSH = 309, + ENTITY_LEPER = 310, + ENTITY_STAIN = 401, + ENTITY_BROWNIE = 402, + ENTITY_FORSAKEN = 403, + ENTITY_LITTLE_HORN = 404, + ENTITY_RAG_MAN = 405, + ENTITY_ULTRA_GREED = 406, + ENTITY_HUSH = 407, + ENTITY_HUSH_SKINLESS = 408, + ENTITY_RAG_MEGA = 409, + ENTITY_SISTERS_VIS = 410, + ENTITY_BIG_HORN = 411, + ENTITY_DELIRIUM = 412, + ENTITY_MATRIARCH = 413, + ENTITY_BONE_WORM = 801, + ENTITY_BLOOD_PUPPY = 802, + ENTITY_QUAKE_GRIMACE = 804, + ENTITY_BISHOP = 805, + ENTITY_BUBBLES = 806, + ENTITY_WRAITH = 807, + ENTITY_WILLO = 808, + ENTITY_BOMB_GRIMACE = 809, + ENTITY_SMALL_LEECH = 810, + ENTITY_DEEP_GAPER = 811, + ENTITY_SUB_HORF = 812, + ENTITY_BLURB = 813, + ENTITY_STRIDER = 814, + ENTITY_FISSURE = 815, + ENTITY_POLTY = 816, + ENTITY_PREY = 817, + ENTITY_ROCK_SPIDER = 818, + ENTITY_FLY_BOMB = 819, + ENTITY_DANNY = 820, + ENTITY_BLASTER = 821, + ENTITY_BOUNCER = 822, + ENTITY_QUAKEY = 823, + ENTITY_GYRO = 824, + ENTITY_FIRE_WORM = 825, + ENTITY_HARDY = 826, + ENTITY_FACELESS = 827, + ENTITY_NECRO = 828, + ENTITY_MOLE = 829, + ENTITY_BIG_BONY = 830, + ENTITY_GUTTED_FATTY = 831, + ENTITY_EXORCIST = 832, + ENTITY_CANDLER = 833, + ENTITY_WHIPPER = 834, + ENTITY_PEEPER_FATTY = 835, + ENTITY_VIS_VERSA = 836, + ENTITY_HENRY = 837, + ENTITY_WILLO_L2 = 838, + ENTITY_PON = 840, + ENTITY_REVENANT = 841, + ENTITY_BOMBGAGGER = 844, + ENTITY_GAPER_L2 = 850, + ENTITY_TWITCHY = 851, + ENTITY_SPIKEBALL = 852, + ENTITY_SMALL_MAGGOT = 853, + ENTITY_ADULT_LEECH = 854, + ENTITY_CHARGER_L2 = 855, + ENTITY_GASBAG = 856, + ENTITY_COHORT = 857, + ENTITY_FLOATING_HOST = 859, + ENTITY_UNBORN = 860, + ENTITY_PUSTULE = 861, + ENTITY_CYST = 862, + ENTITY_MORNINGSTAR = 863, + ENTITY_MOCKULUS = 864, + ENTITY_EVIS = 865, + ENTITY_DARK_ESAU = 866, + ENTITY_MOTHERS_SHADOW = 867, + ENTITY_ARMYFLY = 868, + ENTITY_MIGRAINE = 869, + ENTITY_DRIP = 870, + ENTITY_SPLURT = 871, + ENTITY_CLOGGY = 872, + ENTITY_FLY_TRAP = 873, + ENTITY_FARTIGAN = 874, + ENTITY_POOT_MINE = 875, + ENTITY_DUMP = 876, + ENTITY_GRUDGE = 877, + ENTITY_BUTT_SLICKER = 878, + ENTITY_BLOATY = 879, + ENTITY_FLESH_MAIDEN = 880, + ENTITY_NEEDLE = 881, + ENTITY_DUST = 882, + ENTITY_BABY_BEGOTTEN = 883, + ENTITY_SWARM_SPIDER = 884, + ENTITY_CULTIST = 885, + ENTITY_VIS_FATTY = 886, + ENTITY_DUSTY_DEATHS_HEAD = 887, + ENTITY_SHADY = 888, + ENTITY_CLICKETY_CLACK = 889, + ENTITY_MAZE_ROAMER = 890, + ENTITY_GOAT = 891, + ENTITY_POOFER = 892, + ENTITY_BALL_AND_CHAIN = 893, + ENTITY_REAP_CREEP = 900, + ENTITY_LIL_BLUB = 901, + ENTITY_RAINMAKER = 902, + ENTITY_VISAGE = 903, + ENTITY_SIREN = 904, + ENTITY_HERETIC = 905, + ENTITY_HORNFEL = 906, + ENTITY_GIDEON = 907, + ENTITY_BABY_PLUM = 908, + ENTITY_SCOURGE = 909, + ENTITY_CHIMERA = 910, + ENTITY_ROTGUT = 911, + ENTITY_MOTHER = 912, + ENTITY_MIN_MIN = 913, + ENTITY_CLOG = 914, + ENTITY_SINGE = 915, + ENTITY_BUMBINO = 916, + ENTITY_COLOSTOMIA = 917, + ENTITY_TURDLET = 918, + ENTITY_RAGLICH = 919, + ENTITY_HORNY_BOYS = 920, + ENTITY_CLUTCH = 921, + ENTITY_CADAVRA = 922, + ENTITY_DOGMA = 950, + ENTITY_BEAST = 951, + ENTITY_GENERIC_PROP = 960, + ENTITY_FROZEN_ENEMY = 963, + ENTITY_DUMMY = 964, + ENTITY_MINECART = 965, + ENTITY_SIREN_HELPER = 966, + ENTITY_HORNFEL_DOOR = 967, + ENTITY_TRIGGER_OUTPUT = 969, + ENTITY_ENVIRONMENT = 970, + ENTITY_EFFECT = 1000, + ENTITY_TEXT = 9001, +} + +declare enum GridEntityType { + GRID_NULL = 0, + GRID_DECORATION = 1, + GRID_ROCK = 2, + /** A block. */ + GRID_ROCKB = 3, + /** A tinted rock. */ + GRID_ROCKT = 4, + GRID_ROCK_BOMB = 5, + /** A pot, mushroom, or skull, depending on the stage and room type. */ + GRID_ROCK_ALT = 6, + GRID_PIT = 7, + GRID_SPIKES = 8, + GRID_SPIKES_ONOFF = 9, + GRID_SPIDERWEB = 10, + GRID_LOCK = 11, + GRID_TNT = 12, + GRID_FIREPLACE = 13, + GRID_POOP = 14, + GRID_WALL = 15, + GRID_DOOR = 16, + GRID_TRAPDOOR = 17, + GRID_STAIRS = 18, + GRID_GRAVITY = 19, + GRID_PRESSURE_PLATE = 20, + GRID_STATUE = 21, + /** A super tinted rock that yields double rewards. */ + GRID_ROCK_SS = 22, + GRID_TELEPORTER = 23, + GRID_PILLAR = 24, + GRID_ROCK_SPIKED = 25, + /** A tinted skull (that always drops a Fool card). */ + GRID_ROCK_ALT2 = 26, + GRID_ROCK_GOLD = 27, +} + +declare enum PickupPrice { + PRICE_ONE_HEART = -1, + PRICE_TWO_HEARTS = -2, + PRICE_THREE_SOULHEARTS = -3, + PRICE_ONE_HEART_AND_TWO_SOULHEARTS = -4, + PRICE_SPIKES = -5, + PRICE_SOUL = -6, + PRICE_FREE = -1000, +} + +declare enum Challenge { + CHALLENGE_NULL = 0, + CHALLENGE_PITCH_BLACK = 1, + CHALLENGE_HIGH_BROW = 2, + CHALLENGE_HEAD_TRAUMA = 3, + CHALLENGE_DARKNESS_FALLS = 4, + CHALLENGE_THE_TANK = 5, + CHALLENGE_SOLAR_SYSTEM = 6, + CHALLENGE_SUICIDE_KING = 7, + CHALLENGE_CAT_GOT_YOUR_TONGUE = 8, + CHALLENGE_DEMO_MAN = 9, + CHALLENGE_CURSED = 10, + CHALLENGE_GLASS_CANNON = 11, + CHALLENGE_WHEN_LIFE_GIVES_LEMONS = 12, + CHALLENGE_BEANS = 13, + CHALLENGE_ITS_IN_THE_CARDS = 14, + CHALLENGE_SLOW_ROLL = 15, + CHALLENGE_COMPUTER_SAVY = 16, + CHALLENGE_WAKA_WAKA = 17, + CHALLENGE_THE_HOST = 18, + CHALLENGE_THE_FAMILY_MAN = 19, + CHALLENGE_PURIST = 20, + CHALLENGE_XXXXXXXXL = 21, + CHALLENGE_SPEED = 22, + CHALLENGE_BLUE_BOMBER = 23, + CHALLENGE_PAY_TO_PLAY = 24, + CHALLENGE_HAVE_A_HEART = 25, + CHALLENGE_I_RULE = 26, + CHALLENGE_BRAINS = 27, + CHALLENGE_PRIDE_DAY = 28, + CHALLENGE_ONANS_STREAK = 29, + CHALLENGE_GUARDIAN = 30, + CHALLENGE_BACKASSWARDS = 31, + CHALLENGE_APRILS_FOOL = 32, + CHALLENGE_POKEY_MANS = 33, + CHALLENGE_ULTRA_HARD = 34, + CHALLENGE_PONG = 35, + CHALLENGE_SCAT_MAN = 36, + CHALLENGE_BLOODY_MARY = 37, + CHALLENGE_BAPTISM_BY_FIRE = 38, + CHALLENGE_ISAACS_AWAKENING = 39, + CHALLENGE_SEEING_DOUBLE = 40, + CHALLENGE_PICA_RUN = 41, + CHALLENGE_HOT_POTATO = 42, + CHALLENGE_CANTRIPPED = 43, + CHALLENGE_RED_REDEMPTION = 44, + CHALLENGE_DELETE_THIS = 45, + NUM_CHALLENGES = 46, +} + +declare enum NpcState { + STATE_INIT = 0, + STATE_APPEAR = 1, + STATE_APPEAR_CUSTOM = 2, + STATE_IDLE = 3, + STATE_MOVE = 4, + STATE_SUICIDE = 5, + STATE_JUMP = 6, + STATE_STOMP = 7, + STATE_ATTACK = 8, + STATE_ATTACK2 = 9, + STATE_ATTACK3 = 10, + STATE_ATTACK4 = 11, + STATE_SUMMON = 12, + STATE_SUMMON2 = 13, + STATE_SUMMON3 = 14, + STATE_SPECIAL = 15, + STATE_UNIQUE_DEATH = 16, + STATE_DEATH = 17, +} + +declare enum EntityGridCollisionClass { + GRIDCOLL_NONE = 0, + GRIDCOLL_WALLS_X = 1, + GRIDCOLL_WALLS_Y = 2, + GRIDCOLL_WALLS = 3, + GRIDCOLL_BULLET = 4, + GRIDCOLL_GROUND = 5, + GRIDCOLL_NOPITS = 6, + GRIDCOLL_PITSONLY = 7, +} + +declare enum EntityCollisionClass { + ENTCOLL_NONE = 0, + ENTCOLL_PLAYERONLY = 1, + ENTCOLL_PLAYEROBJECTS = 2, + ENTCOLL_ENEMIES = 3, + ENTCOLL_ALL = 4, +} + +declare enum SortingLayer { + SORTING_BACKGROUND = 0, + SORTING_DOOR = 1, + SORTING_NORMAL = 2, +} + +declare enum ItemType { + ITEM_NULL = 0, + ITEM_PASSIVE = 1, + ITEM_TRINKET = 2, + ITEM_ACTIVE = 3, + ITEM_FAMILIAR = 4, +} + +declare enum NullItemID { + ID_NULL = -1, + ID_EXPLOSIVE_DIARRHEA = 0, + ID_PUBERTY = 1, + ID_I_FOUND_PILLS = 2, + ID_LORD_OF_THE_FLIES = 3, + ID_STATUE = 4, + ID_GUPPY = 5, + ID_WIZARD = 6, + ID_MAGDALENE = 7, + ID_CAIN = 8, + ID_JUDAS = 9, + ID_EVE = 10, + ID_AZAZEL = 11, + ID_EDEN = 12, + ID_SAMSON = 13, + ID_BLINDFOLD = 14, + ID_BLANKFACE = 15, + ID_CHRISTMAS = 16, + ID_PURITY_GLOW = 17, + ID_EMPTY_VESSEL = 18, + ID_MAW_MARK = 19, + ID_MUSHROOM = 20, + ID_ANGEL = 21, + ID_BOB = 22, + ID_DRUGS = 23, + ID_MOM = 24, + ID_BABY = 25, + ID_EVIL_ANGEL = 26, + ID_POOP = 27, + ID_RELAX = 28, + ID_OVERDOSE = 29, + ID_BOOMERANG = 30, + ID_MEGABLAST = 31, + ID_LAZARUS = 32, + ID_LAZARUS2 = 33, + ID_LILITH = 34, + ID_IWATA = 35, + ID_APOLLYON = 36, + ID_BOOKWORM = 37, + ID_ADULTHOOD = 38, + ID_SPIDERBABY = 39, + ID_BATWING_WINGS = 40, + ID_HUGE_GROWTH = 41, + ID_ERA_WALK = 42, + ID_SACRIFICIAL_ALTAR = 43, + ID_FORGOTTEN = 44, + ID_BRIMSTONE2 = 45, + ID_HOLY_CARD = 46, + ID_KEEPER = 47, + ID_SPIN_TO_WIN = 50, + ID_BETHANY = 51, + ID_JACOB = 52, + ID_ESAU = 53, + ID_BLOOD_OATH = 54, + ID_INTRUDER = 55, + ID_SOL = 56, + ID_IT_HURTS = 57, + ID_MARS = 58, + ID_TOOTH_AND_NAIL = 59, + ID_REVERSE_MAGICIAN = 60, + ID_REVERSE_HIGH_PRIESTESS = 61, + ID_REVERSE_EMPRESS = 62, + ID_REVERSE_CHARIOT = 63, + ID_REVERSE_STRENGTH = 64, + ID_REVERSE_HANGED_MAN = 65, + ID_REVERSE_SUN = 66, + ID_REVERSE_DEVIL = 67, + ID_REVERSE_CHARIOT_ALT = 68, + ID_REVERSE_TEMPERANCE = 69, + ID_REVERSE_STARS = 70, + ID_WAVY_CAP_1 = 71, + ID_WAVY_CAP_2 = 72, + ID_WAVY_CAP_3 = 73, + ID_LUNA = 74, + ID_JUPITER_BODY = 75, + ID_JUPITER_BODY_ANGEL = 76, + ID_JUPITER_BODY_PONY = 77, + ID_JUPITER_BODY_WHITEPONY = 78, + ID_ISAAC_B = 79, + ID_MAGDALENE_B = 80, + ID_CAIN_B = 81, + ID_JUDAS_B = 82, + ID_BLUEBABY_B = 83, + ID_EVE_B = 84, + ID_SAMSON_B = 85, + ID_AZAZEL_B = 86, + ID_LAZARUS_B = 87, + ID_EDEN_B = 88, + ID_LOST_B = 89, + ID_LILITH_B = 90, + ID_KEEPER_B = 91, + ID_APOLLYON_B = 92, + ID_FORGOTTEN_B = 93, + ID_BETHANY_B = 94, + ID_JACOB_B = 95, + ID_AZAZELS_RAGE_1 = 96, + ID_AZAZELS_RAGE_2 = 97, + ID_AZAZELS_RAGE_3 = 98, + ID_AZAZELS_RAGE_4 = 99, + ID_ESAU_JR = 100, + ID_SPIRIT_SHACKLES_SOUL = 101, + ID_SPIRIT_SHACKLES_DISABLED = 102, + ID_BERSERK_SAMSON = 103, + ID_LAZARUS2_B = 104, + ID_SOUL_B = 105, + ID_FORGOTTEN_BOMB = 106, + ID_EXTRA_BIG_FAN = 107, + ID_JACOB2_B = 108, + ID_JACOBS_CURSE = 109, + ID_BLOODY_BABYLON = 110, + ID_DARK_ARTS = 111, + ID_LOST_CURSE = 112, + ID_LAZARUS_SOUL_REVIVE = 113, + ID_SOUL_MAGDALENE = 114, + ID_SOUL_BLUEBABY = 115, + ID_MIRROR_DEATH = 116, + ID_HEMOPTYSIS = 117, + ID_I_FOUND_HORSE_PILLS = 118, + ID_HORSE_PUBERTY = 119, + ID_SOUL_FORGOTTEN = 120, + ID_SOUL_JACOB = 121, + NUM_NULLITEMS = 122, +} + +declare enum WeaponType { + WEAPON_TEARS = 1, + WEAPON_BRIMSTONE = 2, + WEAPON_LASER = 3, + WEAPON_KNIFE = 4, + WEAPON_BOMBS = 5, + WEAPON_ROCKETS = 6, + WEAPON_MONSTROS_LUNGS = 7, + WEAPON_LUDOVICO_TECHNIQUE = 8, + WEAPON_TECH_X = 9, + WEAPON_BONE = 10, + WEAPON_NOTCHED_AXE = 11, + WEAPON_URN_OF_SOULS = 12, + WEAPON_SPIRIT_SWORD = 13, + WEAPON_FETUS = 14, + WEAPON_UMBILICAL_WHIP = 15, + NUM_WEAPON_TYPES = 16, +} + +declare enum PlayerSpriteLayer { + SPRITE_GLOW = 0, + SPRITE_BODY = 1, + SPRITE_BODY0 = 2, + SPRITE_BODY1 = 3, + SPRITE_HEAD = 4, + SPRITE_HEAD0 = 5, + SPRITE_HEAD1 = 6, + SPRITE_HEAD2 = 7, + SPRITE_HEAD3 = 8, + SPRITE_HEAD4 = 9, + SPRITE_HEAD5 = 10, + SPRITE_TOP0 = 11, + SPRITE_EXTRA = 12, + SPRITE_GHOST = 13, + SPRITE_BACK = 14, + NUM_SPRITE_LAYERS = 15, +} + +declare enum LaserOffset { + LASER_TECH1_OFFSET = 0, + LASER_TECH2_OFFSET = 1, + LASER_TECH5_OFFSET = 2, + LASER_SHOOP_OFFSET = 3, + LASER_BRIMSTONE_OFFSET = 4, + LASER_MOMS_EYE_OFFSET = 5, + LASER_TRACTOR_BEAM_OFFSET = 6, +} + +declare enum ActionTriggers { + ACTIONTRIGGER_NONE = 0, + ACTIONTRIGGER_BOMBPLACED = 1, + ACTIONTRIGGER_MOVED = 1 << 1, + ACTIONTRIGGER_SHOOTING = 1 << 2, + ACTIONTRIGGER_CARDPILLUSED = 1 << 3, + ACTIONTRIGGER_ITEMACTIVATED = 1 << 4, + ACTIONTRIGGER_ITEMSDROPPED = 1 << 5, +} + +declare enum GridCollisionClass { + COLLISION_NONE = 0, + COLLISION_PIT = 1, + COLLISION_OBJECT = 2, + COLLISION_SOLID = 3, + COLLISION_WALL = 4, + COLLISION_WALL_EXCEPT_PLAYER = 5, +} + +declare enum Direction { + NO_DIRECTION = -1, + LEFT = 0, + UP = 1, + RIGHT = 2, + DOWN = 3, +} + +declare enum LevelStage { + STAGE_NULL = 0, + STAGE1_1 = 1, + STAGE1_2 = 2, + STAGE2_1 = 3, + STAGE2_2 = 4, + STAGE3_1 = 5, + STAGE3_2 = 6, + STAGE4_1 = 7, + STAGE4_2 = 8, + STAGE4_3 = 9, + STAGE5 = 10, + STAGE6 = 11, + STAGE7 = 12, + STAGE8 = 13, + NUM_STAGES = 14, + STAGE1_GREED = 1, + STAGE2_GREED = 2, + STAGE3_GREED = 3, + STAGE4_GREED = 4, + STAGE5_GREED = 5, + STAGE6_GREED = 6, + STAGE7_GREED = 7, + NUM_BACKWARDS_STAGES = 7, +} + +declare enum StageType { + STAGETYPE_ORIGINAL = 0, + STAGETYPE_WOTL = 1, + STAGETYPE_AFTERBIRTH = 2, + STAGETYPE_GREEDMODE = 3, + STAGETYPE_REPENTANCE = 4, + STAGETYPE_REPENTANCE_B = 5, +} + +declare enum RoomType { + ROOM_NULL = 0, + ROOM_DEFAULT = 1, + ROOM_SHOP = 2, + ROOM_ERROR = 3, + ROOM_TREASURE = 4, + ROOM_BOSS = 5, + ROOM_MINIBOSS = 6, + ROOM_SECRET = 7, + ROOM_SUPERSECRET = 8, + ROOM_ARCADE = 9, + ROOM_CURSE = 10, + ROOM_CHALLENGE = 11, + ROOM_LIBRARY = 12, + ROOM_SACRIFICE = 13, + ROOM_DEVIL = 14, + ROOM_ANGEL = 15, + ROOM_DUNGEON = 16, + ROOM_BOSSRUSH = 17, + ROOM_ISAACS = 18, + ROOM_BARREN = 19, + ROOM_CHEST = 20, + ROOM_DICE = 21, + ROOM_BLACK_MARKET = 22, + ROOM_GREED_EXIT = 23, + ROOM_PLANETARIUM = 24, + ROOM_TELEPORTER = 25, + ROOM_TELEPORTER_EXIT = 26, + ROOM_ULTRASECRET = 29, + NUM_ROOMTYPES = 30, +} + +declare enum RoomShape { + ROOMSHAPE_1x1 = 1, + ROOMSHAPE_IH = 2, + ROOMSHAPE_IV = 3, + ROOMSHAPE_1x2 = 4, + ROOMSHAPE_IIV = 5, + ROOMSHAPE_2x1 = 6, + ROOMSHAPE_IIH = 7, + ROOMSHAPE_2x2 = 8, + ROOMSHAPE_LTL = 9, + ROOMSHAPE_LTR = 10, + ROOMSHAPE_LBL = 11, + ROOMSHAPE_LBR = 12, + NUM_ROOMSHAPES = 13, +} + +declare enum DoorSlot { + NO_DOOR_SLOT = -1, + LEFT0 = 0, + UP0 = 1, + RIGHT0 = 2, + DOWN0 = 3, + LEFT1 = 4, + UP1 = 5, + RIGHT1 = 6, + DOWN1 = 7, + NUM_DOOR_SLOTS = 8, +} + +declare enum LevelCurse { + CURSE_NONE = 0, + CURSE_OF_DARKNESS = 1, + CURSE_OF_LABYRINTH = 1 << 1, + CURSE_OF_THE_LOST = 1 << 2, + CURSE_OF_THE_UNKNOWN = 1 << 3, + CURSE_OF_THE_CURSED = 1 << 4, + CURSE_OF_MAZE = 1 << 5, + CURSE_OF_BLIND = 1 << 6, + CURSE_OF_GIANT = 1 << 7, + NUM_CURSES = 9, +} + +declare enum PlayerForm { + PLAYERFORM_GUPPY = 0, + PLAYERFORM_LORD_OF_THE_FLIES = 1, + PLAYERFORM_MUSHROOM = 2, + PLAYERFORM_ANGEL = 3, + PLAYERFORM_BOB = 4, + PLAYERFORM_DRUGS = 5, + PLAYERFORM_MOM = 6, + PLAYERFORM_BABY = 7, + PLAYERFORM_EVIL_ANGEL = 8, + PLAYERFORM_POOP = 9, + PLAYERFORM_BOOK_WORM = 10, + PLAYERFORM_ADULTHOOD = 11, + PLAYERFORM_SPIDERBABY = 12, + PLAYERFORM_STOMPY = 13, + /** This transformation is unused by the game. */ + PLAYERFORM_FLIGHT = 14, + NUM_PLAYER_FORMS = 15, +} + +declare enum PillColor { + PILL_NULL = 0, + PILL_BLUE_BLUE = 1, + PILL_WHITE_BLUE = 2, + PILL_ORANGE_ORANGE = 3, + PILL_WHITE_WHITE = 4, + PILL_REDDOTS_RED = 5, + PILL_PINK_RED = 6, + PILL_BLUE_CADETBLUE = 7, + PILL_YELLOW_ORANGE = 8, + PILL_ORANGEDOTS_WHITE = 9, + PILL_WHITE_AZURE = 10, + PILL_BLACK_YELLOW = 11, + PILL_WHITE_BLACK = 12, + PILL_WHITE_YELLOW = 13, + NUM_STANDARD_PILLS = 14, + PILL_GOLD = 14, + NUM_PILLS = 15, + PILL_GIANT_FLAG = 0x800, + PILL_COLOR_MASK = 0x7ff, +} + +declare enum Music { + MUSIC_NULL = 0, + MUSIC_BASEMENT = 1, + MUSIC_CAVES = 2, + MUSIC_DEPTHS = 3, + MUSIC_CELLAR = 4, + MUSIC_CATACOMBS = 5, + MUSIC_NECROPOLIS = 6, + MUSIC_WOMB_UTERO = 7, + MUSIC_GAME_OVER = 8, + MUSIC_BOSS = 9, + MUSIC_CATHEDRAL = 10, + MUSIC_SHEOL = 11, + MUSIC_DARK_ROOM = 12, + MUSIC_CHEST = 13, + MUSIC_BURNING_BASEMENT = 14, + MUSIC_FLOODED_CAVES = 15, + MUSIC_DANK_DEPTHS = 16, + MUSIC_SCARRED_WOMB = 17, + MUSIC_BLUE_WOMB = 18, + MUSIC_UTERO = 19, + MUSIC_MOM_BOSS = 20, + MUSIC_MOMS_HEART_BOSS = 21, + MUSIC_ISAAC_BOSS = 22, + MUSIC_SATAN_BOSS = 23, + MUSIC_DARKROOM_BOSS = 24, + MUSIC_BLUEBABY_BOSS = 25, + MUSIC_BOSS2 = 26, + MUSIC_HUSH_BOSS = 27, + MUSIC_ULTRAGREED_BOSS = 28, + MUSIC_LIBRARY_ROOM = 30, + MUSIC_SECRET_ROOM = 31, + MUSIC_SECRET_ROOM2 = 32, + MUSIC_DEVIL_ROOM = 33, + MUSIC_ANGEL_ROOM = 34, + MUSIC_SHOP_ROOM = 35, + MUSIC_ARCADE_ROOM = 36, + MUSIC_BOSS_OVER = 37, + MUSIC_CHALLENGE_FIGHT = 38, + MUSIC_BOSS_RUSH = 39, + MUSIC_JINGLE_BOSS_RUSH_OUTRO = 40, + MUSIC_BOSS3 = 41, + MUSIC_JINGLE_BOSS_OVER3 = 42, + MUSIC_MOTHER_BOSS = 43, + MUSIC_DOGMA_BOSS = 44, + MUSIC_BEAST_BOSS = 45, + MUSIC_JINGLE_MOTHER_OVER = 47, + MUSIC_JINGLE_DOGMA_OVER = 48, + MUSIC_JINGLE_BEAST_OVER = 49, + MUSIC_PLANETARIUM = 50, + MUSIC_SECRET_ROOM_ALT_ALT = 51, + MUSIC_BOSS_OVER_TWISTED = 52, + MUSIC_CREDITS = 60, + MUSIC_TITLE = 61, + MUSIC_TITLE_AFTERBIRTH = 62, + MUSIC_TITLE_REPENTANCE = 63, + MUSIC_JINGLE_GAME_START_ALT = 64, + MUSIC_JINGLE_NIGHTMARE_ALT = 65, + MUSIC_MOTHERS_SHADOW_INTRO = 66, + MUSIC_DOGMA_INTRO = 67, + MUSIC_STRANGE_DOOR_JINGLE = 68, + MUSIC_DARK_CLOSET = 69, + MUSIC_CREDITS_ALT = 70, + MUSIC_CREDITS_ALT_FINAL = 71, + MUSIC_JINGLE_BOSS = 81, + MUSIC_JINGLE_BOSS_OVER = 83, + MUSIC_JINGLE_HOLYROOM_FIND = 84, + MUSIC_JINGLE_SECRETROOM_FIND = 85, + MUSIC_JINGLE_TREASUREROOM_ENTRY_0 = 87, + MUSIC_JINGLE_TREASUREROOM_ENTRY_1 = 88, + MUSIC_JINGLE_TREASUREROOM_ENTRY_2 = 89, + MUSIC_JINGLE_TREASUREROOM_ENTRY_3 = 90, + MUSIC_JINGLE_CHALLENGE_ENTRY = 91, + MUSIC_JINGLE_CHALLENGE_OUTRO = 92, + MUSIC_JINGLE_GAME_OVER = 93, + MUSIC_JINGLE_DEVILROOM_FIND = 94, + MUSIC_JINGLE_GAME_START = 95, + MUSIC_JINGLE_NIGHTMARE = 96, + MUSIC_JINGLE_BOSS_OVER2 = 97, + MUSIC_JINGLE_HUSH_OVER = 98, + MUSIC_INTRO_VOICEOVER = 100, + MUSIC_EPILOGUE_VOICEOVER = 101, + MUSIC_VOID = 102, + MUSIC_VOID_BOSS = 103, + MUSIC_DOWNPOUR = 104, + MUSIC_MINES = 105, + MUSIC_MAUSOLEUM = 106, + MUSIC_CORPSE = 107, + MUSIC_DROSS = 108, + MUSIC_ASHPIT = 109, + MUSIC_GEHENNA = 110, + MUSIC_MORTIS = 111, + MUSIC_ISAACS_HOUSE = 112, + MUSIC_FINAL_VOICEOVER = 113, + MUSIC_DOWNPOUR_REVERSE = 114, + MUSIC_DROSS_REVERSE = 115, + MUSIC_MINESHAFT_AMBIENT = 116, + MUSIC_MINESHAFT_ESCAPE = 117, + MUSIC_REVERSE_GENESIS = 118, + NUM_MUSIC = 119, +} + +declare enum SoundEffect { + SOUND_NULL = 0, + SOUND_1UP = 1, + SOUND_BIRD_FLAP = 2, + SOUND_BLOBBY_WIGGLE = 3, + SOUND_INSECT_SWARM_LOOP = 4, + SOUND_BLOOD_LASER = 5, + SOUND_BLOOD_LASER_SMALL = 6, + SOUND_BLOOD_LASER_LARGE = 7, + SOUND_BOOK_PAGE_TURN_12 = 8, + SOUND_BOSS_BUG_HISS = 9, + SOUND_BLOOD_LASER_LARGER = 10, + SOUND_BOSS_GURGLE_ROAR = 11, + SOUND_BOSS_LITE_GURGLE = 12, + SOUND_BOSS_LITE_HISS = 13, + SOUND_BOSS_LITE_ROAR = 14, + SOUND_BOSS_LITE_SLOPPY_ROAR = 15, + SOUND_BOSS_SPIT_BLOB_BARF = 16, + SOUND_PAPER_IN = 17, + SOUND_PAPER_OUT = 18, + SOUND_CHEST_DROP = 21, + SOUND_CHEST_OPEN = 22, + SOUND_CHOIR_UNLOCK = 23, + SOUND_COIN_SLOT = 24, + SOUND_CUTE_GRUNT = 25, + SOUND_DEATH_BURST_BONE = 27, + SOUND_DEATH_BURST_LARGE = 28, + SOUND_DEATH_REVERSE = 29, + SOUND_DEATH_BURST_SMALL = 30, + SOUND_DEATH_CARD = 33, + SOUND_DEVIL_CARD = 34, + SOUND_DOOR_HEAVY_CLOSE = 35, + SOUND_DOOR_HEAVY_OPEN = 36, + SOUND_FART = 37, + SOUND_FETUS_JUMP = 38, + SOUND_FETUS_LAND = 40, + SOUND_FIREDEATH_HISS = 43, + SOUND_FLOATY_BABY_ROAR = 44, + SOUND_COIN_INSERT = 45, + SOUND_METAL_DOOR_CLOSE = 46, + SOUND_METAL_DOOR_OPEN = 47, + SOUND_FORESTBOSS_STOMPS = 48, + SOUND_SCYTHE_BREAK = 49, + SOUND_STONE_WALKER = 50, + SOUND_GASCAN_POUR = 51, + SOUND_HELLBOSS_GROUNDPOUND = 52, + SOUND_GLASS_BREAK = 53, + SOUND_HOLY = 54, + SOUND_ISAAC_HURT_GRUNT = 55, + SOUND_CHILD_HAPPY_ROAR_SHORT = 56, + SOUND_CHILD_ANGRY_ROAR = 57, + SOUND_KEYPICKUP_GAUNTLET = 58, + SOUND_KEY_DROP0 = 59, + SOUND_BABY_HURT = 60, + SOUND_MAGGOT_BURST_OUT = 64, + SOUND_MAGGOT_ENTER_GROUND = 66, + SOUND_MEAT_FEET_SLOW0 = 68, + SOUND_MEAT_IMPACTS = 69, + SOUND_MEAT_IMPACTS_OLD = 70, + SOUND_MEAT_JUMPS = 72, + SOUND_MEATY_DEATHS = 77, + SOUND_POT_BREAK_2 = 78, + SOUND_MUSHROOM_POOF_2 = 79, + SOUND_BLACK_POOF = 80, + SOUND_STATIC = 81, + SOUND_MOM_VOX_DEATH = 82, + SOUND_MOM_VOX_EVILLAUGH = 84, + SOUND_MOM_VOX_FILTERED_DEATH_1 = 85, + SOUND_MOM_VOX_FILTERED_EVILLAUGH = 86, + SOUND_MOM_VOX_FILTERED_HURT = 87, + SOUND_MOM_VOX_FILTERED_ISAAC = 90, + SOUND_MOM_VOX_GRUNT = 93, + SOUND_MOM_VOX_HURT = 97, + SOUND_MOM_VOX_ISAAC = 101, + SOUND_MONSTER_GRUNT_0 = 104, + SOUND_MONSTER_GRUNT_1 = 106, + SOUND_MONSTER_GRUNT_2 = 108, + SOUND_MONSTER_GRUNT_4 = 112, + SOUND_MONSTER_GRUNT_5 = 114, + SOUND_MONSTER_ROAR_0 = 115, + SOUND_MONSTER_ROAR_1 = 116, + SOUND_MONSTER_ROAR_2 = 117, + SOUND_MONSTER_ROAR_3 = 118, + SOUND_MONSTER_YELL_A = 119, + SOUND_MONSTER_YELL_B = 122, + SOUND_POWERUP1 = 128, + SOUND_POWERUP2 = 129, + SOUND_POWERUP3 = 130, + SOUND_POWERUP_SPEWER = 132, + SOUND_REDLIGHTNING_ZAP = 133, + SOUND_REDLIGHTNING_ZAP_WEAK = 134, + SOUND_REDLIGHTNING_ZAP_STRONG = 135, + SOUND_REDLIGHTNING_ZAP_BURST = 136, + SOUND_ROCK_CRUMBLE = 137, + SOUND_POT_BREAK = 138, + SOUND_MUSHROOM_POOF = 139, + SOUND_ROCKET_BLAST_DEATH = 141, + SOUND_SMB_LARGE_CHEWS_4 = 142, + SOUND_SCARED_WHIMPER = 143, + SOUND_SHAKEY_KID_ROAR = 146, + SOUND_SINK_DRAIN_GURGLE = 149, + SOUND_TEARIMPACTS = 150, + SOUND_TEARS_FIRE = 153, + SOUND_UNLOCK00 = 156, + SOUND_VAMP_GULP = 157, + SOUND_WHEEZY_COUGH = 158, + SOUND_SPIDER_COUGH = 159, + SOUND_PORTAL_OPEN = 160, + SOUND_PORTAL_LOOP = 161, + SOUND_PORTAL_SPAWN = 162, + SOUND_TAR_LOOP = 163, + SOUND_ZOMBIE_WALKER_KID = 165, + SOUND_ANIMAL_SQUISH = 166, + SOUND_ANGRY_GURGLE = 167, + SOUND_BAND_AID_PICK_UP = 169, + SOUND_BATTERYCHARGE = 170, + SOUND_BEEP = 171, + SOUND_LIGHTBOLT = 172, + SOUND_LIGHTBOLT_CHARGE = 173, + SOUND_BLOODBANK_TOUCHED = 174, + SOUND_BLOODBANK_SPAWN = 175, + SOUND_BLOODSHOOT = 178, + SOUND_BOIL_HATCH = 181, + SOUND_BOSS1_EXPLOSIONS = 182, + SOUND_EXPLOSION_WEAK = 183, + SOUND_EXPLOSION_STRONG = 184, + SOUND_BOSS2_BUBBLES = 185, + SOUND_EXPLOSION_DEBRIS = 186, + SOUND_BOSS2INTRO_ERRORBUZZ = 187, + SOUND_CASTLEPORTCULLIS = 190, + SOUND_CHARACTER_SELECT_LEFT = 194, + SOUND_CHARACTER_SELECT_RIGHT = 195, + SOUND_DERP = 197, + SOUND_DIMEDROP = 198, + SOUND_DIMEPICKUP = 199, + SOUND_LUCKYPICKUP = 200, + SOUND_FETUS_FEET = 201, + SOUND_GOLDENKEY = 204, + SOUND_GOOATTACH0 = 205, + SOUND_GOODEATH = 207, + SOUND_HAND_LASERS = 211, + SOUND_HEARTIN = 212, + SOUND_HEARTOUT = 213, + SOUND_HELL_PORTAL1 = 214, + SOUND_HELL_PORTAL2 = 215, + SOUND_ISAACDIES = 217, + SOUND_ITEMRECHARGE = 218, + SOUND_KISS_LIPS1 = 219, + SOUND_LEECH = 221, + SOUND_MAGGOTCHARGE = 224, + SOUND_MEATHEADSHOOT = 226, + SOUND_METAL_BLOCKBREAK = 229, + SOUND_NICKELDROP = 231, + SOUND_NICKELPICKUP = 232, + SOUND_PENNYDROP = 233, + SOUND_PENNYPICKUP = 234, + SOUND_PLOP = 237, + SOUND_SATAN_APPEAR = 238, + SOUND_SATAN_BLAST = 239, + SOUND_SATAN_CHARGE_UP = 240, + SOUND_SATAN_GROW = 241, + SOUND_SATAN_HURT = 242, + SOUND_SATAN_RISE_UP = 243, + SOUND_SATAN_SPIT = 245, + SOUND_SATAN_STOMP = 246, + SOUND_SCAMPER = 249, + SOUND_SHELLGAME = 252, + SOUND_SLOTSPAWN = 255, + SOUND_SPLATTER = 258, + SOUND_STEAM_HALFSEC = 261, + SOUND_STONESHOOT = 262, + SOUND_WEIRD_WORM_SPIT = 263, + SOUND_SUMMONSOUND = 265, + SOUND_SUPERHOLY = 266, + SOUND_THUMBS_DOWN = 267, + SOUND_THUMBSUP = 268, + SOUND_FIRE_BURN = 269, + SOUND_HAPPY_RAINBOW = 270, + SOUND_LASERRING = 271, + SOUND_LASERRING_WEAK = 272, + SOUND_LASERRING_STRONG = 273, + SOUND_CASH_REGISTER = 274, + SOUND_ANGEL_WING = 275, + SOUND_ANGEL_BEAM = 276, + SOUND_HOLY_MANTLE = 277, + SOUND_MEGA_BLAST_START = 278, + SOUND_MEGA_BLAST_LOOP = 279, + SOUND_MEGA_BLAST_END = 280, + SOUND_BLOOD_LASER_LOOP = 281, + SOUND_MENU_SCROLL = 282, + SOUND_MENU_NOTE_APPEAR = 283, + SOUND_MENU_NOTE_HIDE = 284, + SOUND_MENU_CHARACTER_SELECT = 285, + SOUND_SUMMON_POOF = 286, + SOUND_BOO_MAD = 300, + SOUND_FART_GURG = 301, + SOUND_FAT_GRUNT = 302, + SOUND_FAT_WIGGLE = 303, + SOUND_FIRE_RUSH = 304, + SOUND_GHOST_ROAR = 305, + SOUND_GHOST_SHOOT = 306, + SOUND_GRROOWL = 307, + SOUND_GURG_BARF = 308, + SOUND_INHALE = 309, + SOUND_LOW_INHALE = 310, + SOUND_MEGA_PUKE = 311, + SOUND_MOUTH_FULL = 312, + SOUND_MULTI_SCREAM = 313, + SOUND_SKIN_PULL = 314, + SOUND_WHISTLE = 315, + SOUND_DEVILROOM_DEAL = 316, + SOUND_SPIDER_SPIT_ROAR = 317, + SOUND_WORM_SPIT = 318, + SOUND_LITTLE_SPIT = 319, + SOUND_SATAN_ROOM_APPEAR = 320, + SOUND_HEARTBEAT = 321, + SOUND_HEARTBEAT_FASTER = 322, + SOUND_HEARTBEAT_FASTEST = 323, + SOUND_48_HR_ENERGY = 324, + SOUND_ALGIZ = 325, + SOUND_AMNESIA = 326, + SOUND_ANZUS = 327, + SOUND_BAD_GAS = 328, + SOUND_BAD_TRIP = 329, + SOUND_BALLS_OF_STEEL = 330, + SOUND_BERKANO = 331, + SOUND_BOMBS_ARE_KEY = 332, + SOUND_CARD_VS_HUMAN = 333, + SOUND_CHAOS_CARD = 334, + SOUND_CREDIT_CARD = 335, + SOUND_DAGAZ = 336, + SOUND_DEATH = 337, + SOUND_EHWAZ = 338, + SOUND_EXPLOSIVE_DIAH = 339, + SOUND_FULL_HP = 340, + SOUND_HAGALAZ = 341, + SOUND_HP_DOWN = 342, + SOUND_HP_UP = 343, + SOUND_HEMATEMISIS = 344, + SOUND_I_FOUND_PILLS = 345, + SOUND_JERA = 346, + SOUND_JOKER = 347, + SOUND_JUDGEMENT = 348, + SOUND_JUSTICE = 349, + SOUND_LEMON_PARTY = 350, + SOUND_LUCK_DOWN = 351, + SOUND_LUCK_UP = 352, + SOUND_PARALYSIS = 353, + SOUND_PERTHRO = 354, + SOUND_PHEROMONES = 355, + SOUND_PRETTY_FLY = 356, + SOUND_PUBERTY = 357, + SOUND_RUA_WIZ = 358, + SOUND_RANGE_DOWN = 359, + SOUND_RANGE_UP = 360, + SOUND_RULES_CARD = 361, + SOUND_SEE_4EVER = 362, + SOUND_SPEED_DOWN = 363, + SOUND_SPEED_UP = 364, + SOUND_STRENGTH = 365, + SOUND_SUICIDE_KING = 366, + SOUND_TEARS_DOWN = 367, + SOUND_TEARS_UP = 368, + SOUND_TELEPILLS = 369, + SOUND_TEMPERANCE = 370, + SOUND_THE_CHARIOT = 371, + SOUND_THE_DEVIL = 372, + SOUND_THE_EMPEROR = 373, + SOUND_EMPRESS = 374, + SOUND_FOOL = 375, + SOUND_HANGED_MAN = 376, + SOUND_HERMIT = 377, + SOUND_HIEROPHANT = 378, + SOUND_HIGHT_PRIESTESS = 379, + SOUND_THE_LOVERS = 380, + SOUND_MAGICIAN = 381, + SOUND_MOON = 382, + SOUND_STARS = 383, + SOUND_SUN = 384, + SOUND_TOWER = 385, + SOUND_WORLD = 386, + SOUND_TWO_CLUBS = 387, + SOUND_TWO_DIAMONDS = 388, + SOUND_TWO_HEARTS = 389, + SOUND_TWO_SPADES = 390, + SOUND_WHEEL_OF_FORTUNE = 391, + SOUND_RAGMAN_1 = 392, + SOUND_RAGMAN_2 = 393, + SOUND_RAGMAN_3 = 394, + SOUND_RAGMAN_4 = 395, + SOUND_FLUSH = 396, + SOUND_WATER_DROP = 397, + SOUND_WET_FEET = 398, + SOUND_ADDICTED = 399, + SOUND_DICE_SHARD = 400, + SOUND_EMERGENCY = 401, + SOUND_INFESTED_EXCL = 402, + SOUND_INFESTED_QUEST = 403, + SOUND_JAIL_CARD = 404, + SOUND_LARGER = 405, + SOUND_PERCS = 406, + SOUND_POWER_PILL = 407, + SOUND_QUESTION_MARK = 408, + SOUND_RELAX = 409, + SOUND_RETRO = 410, + SOUND_SMALL = 411, + SOUND_QQQ = 412, + SOUND_DANGLE_WHISTLE = 413, + SOUND_LITTLE_HORN_COUGH = 414, + SOUND_LITTLE_HORN_GRUNT_1 = 415, + SOUND_LITTLE_HORN_GRUNT_2 = 416, + SOUND_THE_FORSAKEN_LAUGH = 417, + SOUND_THE_FORSAKEN_SCREAM = 418, + SOUND_THE_STAIN_BURST = 419, + SOUND_BROWNIE_LAUGH = 420, + SOUND_HUSH_ROAR = 421, + SOUND_HUSH_GROWL = 422, + SOUND_HUSH_LOW_ROAR = 423, + SOUND_FRAIL_CHARGE = 424, + SOUND_HUSH_CHARGE = 425, + SOUND_MAW_OF_VOID = 426, + SOUND_ULTRA_GREED_COIN_DESTROY = 427, + SOUND_ULTRA_GREED_COINS_FALLING = 428, + SOUND_ULTRA_GREED_DEATH_SCREAM = 429, + SOUND_ULTRA_GREED_TURN_GOLD_1 = 430, + SOUND_ULTRA_GREED_TURN_GOLD_2 = 431, + SOUND_ULTRA_GREED_ROAR_1 = 432, + SOUND_ULTRA_GREED_ROAR_2 = 433, + SOUND_ULTRA_GREED_SPIT = 434, + SOUND_ULTRA_GREED_PULL_SLOT = 435, + SOUND_ULTRA_GREED_SLOT_SPIN_LOOP = 436, + SOUND_ULTRA_GREED_SLOT_STOP = 437, + SOUND_ULTRA_GREED_SLOT_WIN_LOOP_END = 438, + SOUND_ULTRA_GREED_SLOT_WIN_LOOP = 439, + SOUND_ULTRA_GREED_SPINNING = 440, + SOUND_DOG_BARK = 441, + SOUND_DOG_HOWELL = 442, + SOUND_X_LAX = 443, + SOUND_WRONG = 444, + SOUND_VURP = 445, + SOUND_SUNSHINE = 446, + SOUND_SPADES = 447, + SOUND_HORF = 448, + SOUND_HOLY_CARD = 449, + SOUND_HEARTS = 450, + SOUND_GULP = 451, + SOUND_FRIENDS = 452, + SOUND_EXCITED = 453, + SOUND_DROWSY = 454, + SOUND_DIAMONDS = 455, + SOUND_CLUBS = 456, + SOUND_BLACK_RUNE = 457, + SOUND_PING_PONG = 458, + SOUND_SPEWER = 459, + SOUND_MOM_FOOTSTEPS = 460, + SOUND_BONE_HEART = 461, + SOUND_BONE_SNAP = 462, + SOUND_SHOVEL_DROP = 463, + SOUND_SHOVEL_DIG = 464, + SOUND_GOLD_HEART = 465, + SOUND_GOLD_HEART_DROP = 466, + SOUND_BONE_DROP = 467, + SOUND_UNHOLY = 468, + SOUND_BUTTON_PRESS = 469, + SOUND_GOLDENBOMB = 470, + SOUND_CANDLE_LIGHT = 471, + SOUND_THUNDER = 472, + SOUND_WATER_FLOW_LOOP = 473, + SOUND_BOSS2_DIVE = 474, + SOUND_BOSS2INTRO_PIPES_TURNON = 475, + SOUND_WATER_FLOW_LARGE = 476, + SOUND_DEMON_HIT = 477, + SOUND_PUNCH = 478, + SOUND_FLUTE = 479, + SOUND_LAVA_LOOP = 480, + SOUND_WOOD_PLANK_BREAK = 481, + SOUND_BULLET_SHOT = 482, + SOUND_FLAME_BURST = 483, + SOUND_INFLATE = 484, + SOUND_CLAP = 485, + SOUND_BOSS2INTRO_WATER_EXPLOSION = 486, + SOUND_STONE_IMPACT = 487, + SOUND_BOSS2_WATERTHRASHING = 488, + SOUND_FART_MEGA = 489, + SOUND_MATCHSTICK = 490, + SOUND_FORTUNE_COOKIE = 491, + SOUND_BULB_FLASH = 492, + SOUND_BATTERYDISCHARGE = 493, + SOUND_WHIP = 494, + SOUND_WHIP_HIT = 495, + SOUND_FREEZE = 496, + SOUND_ROTTEN_HEART = 497, + SOUND_FREEZE_SHATTER = 498, + SOUND_BONE_BOUNCE = 499, + SOUND_BONE_BREAK = 500, + SOUND_BISHOP_HIT = 501, + SOUND_CHAIN_LOOP = 503, + SOUND_CHAIN_BREAK = 504, + SOUND_MINECART_LOOP = 505, + SOUND_TOOTH_AND_NAIL = 506, + SOUND_TOOTH_AND_NAIL_TICK = 507, + SOUND_STATIC_BUILDUP = 508, + SOUND_BIG_LEECH = 510, + SOUND_REVERSE_EXPLOSION = 511, + SOUND_REVERSE_FOOL = 512, + SOUND_REVERSE_MAGICIAN = 513, + SOUND_REVERSE_HIGH_PRIESTESS = 514, + SOUND_REVERSE_EMPRESS = 515, + SOUND_REVERSE_EMPEROR = 516, + SOUND_REVERSE_HIEROPHANT = 517, + SOUND_REVERSE_LOVERS = 518, + SOUND_REVERSE_CHARIOT = 519, + SOUND_REVERSE_JUSTICE = 520, + SOUND_REVERSE_HERMIT = 521, + SOUND_REVERSE_WHEEL_OF_FORTUNE = 522, + SOUND_REVERSE_STRENGTH = 523, + SOUND_REVERSE_HANGED_MAN = 524, + SOUND_REVERSE_DEATH = 525, + SOUND_REVERSE_TEMPERANCE = 526, + SOUND_REVERSE_DEVIL = 527, + SOUND_REVERSE_TOWER = 528, + SOUND_REVERSE_STARS = 529, + SOUND_REVERSE_MOON = 530, + SOUND_REVERSE_SUN = 531, + SOUND_REVERSE_JUDGEMENT = 532, + SOUND_REVERSE_WORLD = 533, + SOUND_FLAMETHROWER_START = 534, + SOUND_FLAMETHROWER_LOOP = 535, + SOUND_FLAMETHROWER_END = 536, + SOUND_ROCKET_LAUNCH = 537, + SOUND_SWORD_SPIN = 538, + SOUND_BABY_BRIM = 539, + SOUND_KNIFE_PULL = 540, + SOUND_DOGMA_APPEAR_SCREAM = 541, + SOUND_DOGMA_DEATH = 542, + SOUND_DOGMA_BLACKHOLE_CHARGE = 543, + SOUND_DOGMA_BLACKHOLE_SHOOT = 544, + SOUND_DOGMA_BLACKHOLE_OPEN = 545, + SOUND_DOGMA_BLACKHOLE_CLOSE = 546, + SOUND_DOGMA_BRIMSTONE_CHARGE = 547, + SOUND_DOGMA_BRIMSTONE_SHOOT = 548, + SOUND_DOGMA_GODHEAD = 549, + SOUND_DOGMA_JACOBS = 550, + SOUND_DOGMA_JACOBS_ZAP = 551, + SOUND_DOGMA_SCREAM = 552, + SOUND_DOGMA_PREACHER = 553, + SOUND_DOGMA_RING_START = 554, + SOUND_DOGMA_RING_LOOP = 555, + SOUND_DOGMA_FEATHER_SPRAY = 556, + SOUND_DOGMA_JACOBS_DOT = 557, + SOUND_DOGMA_BLACKHOLE_LOOP = 558, + SOUND_DOGMA_ANGEL_TRANSFORM = 559, + SOUND_DOGMA_ANGEL_TRANSFORM_END = 560, + SOUND_DOGMA_LIGHT_APPEAR = 561, + SOUND_DOGMA_LIGHT_BALL_THROW = 562, + SOUND_DOGMA_LIGHT_RAY_CHARGE = 563, + SOUND_DOGMA_LIGHT_RAY_FIRE = 564, + SOUND_DOGMA_SPIN_ATTACK = 565, + SOUND_DOGMA_WING_FLAP = 566, + SOUND_DOGMA_TV_BREAK = 567, + SOUND_DIVINE_INTERVENTION = 568, + SOUND_MENU_FLIP_LIGHT = 569, + SOUND_MENU_FLIP_DARK = 570, + SOUND_MENU_RIP = 571, + SOUND_URN_OPEN = 572, + SOUND_URN_CLOSE = 573, + SOUND_RECALL = 574, + SOUND_LARYNX_SCREAM_LO = 575, + SOUND_LARYNX_SCREAM_MED = 576, + SOUND_LARYNX_SCREAM_HI = 577, + SOUND_GROUND_TREMOR = 578, + SOUND_SOUL_PICKUP = 579, + SOUND_BALL_AND_CHAIN_LOOP = 580, + SOUND_BALL_AND_CHAIN_HIT = 581, + SOUND_LAZARUS_FLIP_DEAD = 582, + SOUND_LAZARUS_FLIP_ALIVE = 583, + SOUND_RECALL_FINISH = 584, + SOUND_ROCKET_LAUNCH_SHORT = 585, + SOUND_ROCKET_LAUNCH_TINY = 586, + SOUND_ROCKET_EXPLOSION = 587, + SOUND_JELLY_BOUNCE = 588, + SOUND_POOP_LASER = 589, + SOUND_POISON_WARN = 590, + SOUND_POISON_HURT = 591, + SOUND_BERSERK_START = 592, + SOUND_BERSERK_TICK = 593, + SOUND_BERSERK_END = 594, + SOUND_EDEN_GLITCH = 595, + SOUND_RAILROAD_TRACK_RAISE = 596, + SOUND_RAILROAD_TRACK_RAISE_FAR = 597, + SOUND_MOM_AND_DAD_1 = 598, + SOUND_MOM_AND_DAD_2 = 599, + SOUND_MOM_AND_DAD_3 = 600, + SOUND_MOM_AND_DAD_4 = 601, + SOUND_THUMBSUP_AMPLIFIED = 602, + SOUND_THUMBSDOWN_AMPLIFIED = 603, + SOUND_POWERUP_SPEWER_AMPLIFIED = 604, + SOUND_POOPITEM_THROW = 605, + SOUND_POOPITEM_STORE = 606, + SOUND_POOPITEM_HOLD = 607, + SOUND_MIRROR_ENTER = 608, + SOUND_MIRROR_EXIT = 609, + SOUND_MIRROR_BREAK = 610, + SOUND_ANIMA_TRAP = 611, + SOUND_ANIMA_RATTLE = 612, + SOUND_ANIMA_BREAK = 613, + SOUND_VAMP_DOUBLE = 614, + SOUND_FLASHBACK = 615, + SOUND_DARK_ESAU_OPEN = 616, + SOUND_DARK_ESAU_DEATH_OPEN = 617, + SOUND_MOTHER_DEATH1 = 618, + SOUND_MOTHER_DEATH2 = 619, + SOUND_MOTHER_FISTPOUND1 = 620, + SOUND_MOTHER_FISTPOUND2 = 621, + SOUND_MOTHER_FISTPOUND3 = 622, + SOUND_MOTHER_FISTULA = 623, + SOUND_MOTHER_APPEAR1 = 624, + SOUND_MOTHER_APPEAR2 = 625, + SOUND_MOTHER_KNIFE_START = 626, + SOUND_MOTHER_KNIFE_THROW = 627, + SOUND_MOTHER_SUMMON_ISAACS_START = 628, + SOUND_MOTHER_SUMMON_ISAACS_END = 629, + SOUND_MOTHER_HAND_BOIL_START = 630, + SOUND_MOTHER_GRUNT1 = 631, + SOUND_MOTHER_GRUNT5 = 632, + SOUND_MOTHER_GRUNT6 = 633, + SOUND_MOTHER_GRUNT7 = 634, + SOUND_MOTHER_LAUGH = 635, + SOUND_MOTHER_SPIN_START = 636, + SOUND_MOTHER_WALL_SHOT_START = 637, + SOUND_MOTHER_MISC = 638, + SOUND_MOTHER_SHOOT = 639, + SOUND_MOTHER_SUCTION = 640, + SOUND_MOTHER_ISAAC_RISE = 641, + SOUND_MOTHER_ISAAC_HIT = 642, + SOUND_MOTHER_WRIST_SWELL = 643, + SOUND_MOTHER_WRIST_EXPLODE = 644, + SOUND_MOTHER_DEATH_MELT = 645, + SOUND_MOTHER_ANGER_SHAKE = 646, + SOUND_MOTHER_CHARGE1 = 647, + SOUND_MOTHER_CHARGE2 = 648, + SOUND_MOTHER_LAND_SMASH = 649, + SOUND_ISAAC_ROAR = 650, + SOUND_FAMINE_APPEAR = 651, + SOUND_FAMINE_DEATH_1 = 652, + SOUND_FAMINE_DEATH_2 = 653, + SOUND_FAMINE_DASH_START = 654, + SOUND_FAMINE_DASH = 655, + SOUND_FAMINE_SHOOT = 656, + SOUND_FAMINE_BURST = 657, + SOUND_FAMINE_GURGLE = 658, + SOUND_PESTILENCE_MAGGOT_START = 659, + SOUND_PESTILENCE_MAGGOT_SHOOT = 660, + SOUND_PESTILENCE_MAGGOT_RETURN = 661, + SOUND_PESTILENCE_BODY_SHOOT = 662, + SOUND_PESTILENCE_HEAD_DEATH = 663, + SOUND_PESTILENCE_DEATH = 664, + SOUND_PESTILENCE_COUGH = 665, + SOUND_PESTILENCE_BARF = 666, + SOUND_PESTILENCE_APPEAR = 667, + SOUND_PESTILENCE_HEAD_EXPLODE = 668, + SOUND_PESTILENCE_MAGGOT_ENTER = 669, + SOUND_PESTILENCE_MAGGOT_POPOUT = 670, + SOUND_PESTILENCE_MAGGOT_SHOOT2 = 671, + SOUND_PESTILENCE_NECK_PUKE = 672, + SOUND_PESTILENCE_PUKE_START = 673, + SOUND_WAR_APPEAR = 674, + SOUND_WAR_APPEAR_LAVA = 675, + SOUND_WAR_BOMB_TOSS = 676, + SOUND_WAR_DASH_START = 677, + SOUND_WAR_DASH = 678, + SOUND_WAR_HORSE_DEATH = 679, + SOUND_WAR_DEATH = 680, + SOUND_WAR_FIRE_SCREEM = 681, + SOUND_WAR_GRAB_PLAYER = 682, + SOUND_WAR_BOMB_HOLD = 683, + SOUND_WAR_BOMB_PULL_OUT = 684, + SOUND_WAR_CHASE = 685, + SOUND_WAR_BOMB_TICK = 686, + SOUND_WAR_FLAME = 687, + SOUND_WAR_LAVA_SPLASH = 688, + SOUND_WAR_LAVA_DASH = 689, + SOUND_DEATH_DIES = 690, + SOUND_DEATH_DESTROY_SKULLS = 691, + SOUND_DEATH_GROWL = 692, + SOUND_DEATH_SWIPE_START = 693, + SOUND_DEATH_SWIPE = 694, + SOUND_DEATH_SUMMON_SCYTHES = 695, + SOUND_DEATH_SUMMON_SKULLS = 696, + SOUND_BEAST_DEATH = 697, + SOUND_BEAST_LASER = 698, + SOUND_BEAST_BACKGROUND_DIVE = 699, + SOUND_BEAST_FIRE_RING = 700, + SOUND_BEAST_GHOST_DASH = 701, + SOUND_BEAST_GHOST_RISE = 702, + SOUND_BEAST_LAVA_BALL_SPLASH = 703, + SOUND_BEAST_LAVA_RISE = 704, + SOUND_BEAST_SUCTION_LOOP = 705, + SOUND_BEAST_FIRE_BARF = 706, + SOUND_BEAST_GHOST_ROAR = 707, + SOUND_BEAST_INTRO_SCREAM = 708, + SOUND_BEAST_SUCTION_END = 709, + SOUND_BEAST_SUCTION_START = 710, + SOUND_BEAST_SPIT = 711, + SOUND_BEAST_SURFACE_GROWL = 712, + SOUND_BEAST_SWITCH_SIDES = 713, + SOUND_MOTHERSHADOW_APPEAR = 714, + SOUND_MOTHERSHADOW_CHARGE_UP = 715, + SOUND_MOTHERSHADOW_DASH = 716, + SOUND_MOTHERSHADOW_END = 717, + SOUND_MOTHERSHADOW_INTRO = 718, + SOUND_BUMBINO_DEATH = 719, + SOUND_BUMBINO_DIZZY = 720, + SOUND_BUMBINO_HIT_WALL = 721, + SOUND_BUMBINO_MISC = 722, + SOUND_BUMBINO_PUNCH = 723, + SOUND_BUMBINO_RAM = 724, + SOUND_BUMBINO_SLAM = 725, + SOUND_BUMBINO_SNAP_OUT = 726, + SOUND_SIREN_SCREAM = 727, + SOUND_SIREN_SING = 728, + SOUND_DEATH_SKULL_SUMMON_LOOP = 729, + SOUND_DEATH_SKULL_SUMMON_END = 730, + SOUND_BEAST_DEATH_2 = 731, + SOUND_BEAST_ANGELIC_BLAST = 732, + SOUND_ANCIENT_RECALL = 733, + SOUND_ERA_WALK = 734, + SOUND_HUGE_GROWTH = 735, + SOUND_RUNE_SHARD = 736, + SOUND_SHOT_SPEED_DOWN = 737, + SOUND_SHOT_SPEED_UP = 738, + SOUND_EXPERIMENTAL_PILL = 739, + SOUND_CRACKED_KEY = 740, + SOUND_QUEEN_OF_HEARTS = 741, + SOUND_WILD_CARD = 742, + SOUND_SOUL_OF_ISAAC = 743, + SOUND_SOUL_OF_MAGDALENE = 744, + SOUND_SOUL_OF_CAIN = 745, + SOUND_SOUL_OF_JUDAS = 746, + SOUND_SOUL_OF_XXX = 747, + SOUND_SOUL_OF_EVE = 748, + SOUND_SOUL_OF_SAMSON = 749, + SOUND_SOUL_OF_AZAZEL = 750, + SOUND_SOUL_OF_LAZARUS = 751, + SOUND_SOUL_OF_EDEN = 752, + SOUND_SOUL_OF_THE_LOST = 753, + SOUND_SOUL_OF_LILITH = 754, + SOUND_SOUL_OF_THE_KEEPER = 755, + SOUND_SOUL_OF_APOLLYON = 756, + SOUND_SOUL_OF_THE_FORGOTTEN = 757, + SOUND_SOUL_OF_BETHANY = 758, + SOUND_SOUL_OF_JACOB_AND_ESAU = 759, + SOUND_MEGA_BAD_GAS = 760, + SOUND_MEGA_BAD_TRIP = 761, + SOUND_MEGA_BALLS_OF_STEEL = 762, + SOUND_MEGA_BOMBS_ARE_KEY = 763, + SOUND_MEGA_EXPLOSIVE_DIARRHEA = 764, + SOUND_MEGA_FULL_HEALTH = 765, + SOUND_MEGA_HEALTH_UP = 766, + SOUND_MEGA_HEALTH_DOWN = 767, + SOUND_MEGA_I_FOUND_PILLS = 768, + SOUND_MEGA_PUBERTY = 769, + SOUND_MEGA_PRETTY_FLY = 770, + SOUND_MEGA_RANGE_DOWN = 771, + SOUND_MEGA_RANGE_UP = 772, + SOUND_MEGA_SPEED_DOWN = 773, + SOUND_MEGA_SPEED_UP = 774, + SOUND_MEGA_TEARS_DOWN = 775, + SOUND_MEGA_TEARS_UP = 776, + SOUND_MEGA_LUCK_DOWN = 777, + SOUND_MEGA_LUCK_UP = 778, + SOUND_MEGA_TELEPILLS = 779, + SOUND_MEGA_48_HR_ENERGY = 780, + SOUND_MEGA_HEMATEMESIS = 781, + SOUND_MEGA_PARALYSIS = 782, + SOUND_MEGA_I_CAN_SEE_FOREVER = 783, + SOUND_MEGA_PHEROMONES = 784, + SOUND_MEGA_AMNESIA = 785, + SOUND_MEGA_LEMON_PARTY = 786, + SOUND_MEGA_ARE_YOU_A_WIZARD = 787, + SOUND_MEGA_PERCS = 788, + SOUND_MEGA_ADDICTED = 789, + SOUND_MEGA_RELAX = 790, + SOUND_MEGA_TRIPLE_QUESTION_MARK = 791, + SOUND_MEGA_ONE_MAKES_YOU_LARGER = 792, + SOUND_MEGA_ONE_MAKES_YOU_SMALL = 793, + SOUND_MEGA_INFESTED = 794, + SOUND_MEGA_INFESTED_1 = 795, + SOUND_MEGA_POWER_PILL = 796, + SOUND_MEGA_RETRO_VISION = 797, + SOUND_MEGA_FRIENDS_TIL_THE_END = 798, + SOUND_MEGA_EXLAX = 799, + SOUND_MEGA_SOMETHINGS_WRONG = 800, + SOUND_MEGA_IM_DROWSY = 801, + SOUND_MEGA_IM_EXCITED = 802, + SOUND_MEGA_GULP = 803, + SOUND_MEGA_HORF = 804, + SOUND_MEGA_SUNSHINE = 805, + SOUND_MEGA_VURP = 806, + SOUND_MEGA_SHOT_SPEED_DOWN = 807, + SOUND_MEGA_SHOT_SPEED_UP = 808, + SOUND_MEGA_EXPERIMENTAL_PILL = 809, + SOUND_SIREN_LUNGE = 810, + SOUND_SIREN_MINION_SMOKE = 811, + SOUND_SIREN_SCREAM_ATTACK = 812, + SOUND_SIREN_SING_STAB = 813, + SOUND_BEAST_LAVABALL_RISE = 814, + SOUND_BEAST_GROWL = 815, + SOUND_BEAST_GRUMBLE = 816, + NUM_SOUND_EFFECTS = 817, +} + +declare enum DoorState { + STATE_INIT = 0, + STATE_CLOSED = 1, + STATE_OPEN = 2, + STATE_ONE_CHAIN = 3, + STATE_HALF_CRACKED = 4, +} + +declare enum Difficulty { + DIFFICULTY_NORMAL = 0, + DIFFICULTY_HARD = 1, + DIFFICULTY_GREED = 2, + DIFFICULTY_GREEDIER = 3, +} + +declare enum PillEffect { + PILLEFFECT_NULL = -1, + PILLEFFECT_BAD_GAS = 0, + PILLEFFECT_BAD_TRIP = 1, + PILLEFFECT_BALLS_OF_STEEL = 2, + PILLEFFECT_BOMBS_ARE_KEYS = 3, + PILLEFFECT_EXPLOSIVE_DIARRHEA = 4, + PILLEFFECT_FULL_HEALTH = 5, + PILLEFFECT_HEALTH_DOWN = 6, + PILLEFFECT_HEALTH_UP = 7, + PILLEFFECT_I_FOUND_PILLS = 8, + PILLEFFECT_PUBERTY = 9, + PILLEFFECT_PRETTY_FLY = 10, + PILLEFFECT_RANGE_DOWN = 11, + PILLEFFECT_RANGE_UP = 12, + PILLEFFECT_SPEED_DOWN = 13, + PILLEFFECT_SPEED_UP = 14, + PILLEFFECT_TEARS_DOWN = 15, + PILLEFFECT_TEARS_UP = 16, + PILLEFFECT_LUCK_DOWN = 17, + PILLEFFECT_LUCK_UP = 18, + PILLEFFECT_TELEPILLS = 19, + PILLEFFECT_48HOUR_ENERGY = 20, + PILLEFFECT_HEMATEMESIS = 21, + PILLEFFECT_PARALYSIS = 22, + PILLEFFECT_SEE_FOREVER = 23, + PILLEFFECT_PHEROMONES = 24, + PILLEFFECT_AMNESIA = 25, + PILLEFFECT_LEMON_PARTY = 26, + PILLEFFECT_WIZARD = 27, + PILLEFFECT_PERCS = 28, + PILLEFFECT_ADDICTED = 29, + PILLEFFECT_RELAX = 30, + PILLEFFECT_QUESTIONMARK = 31, + PILLEFFECT_LARGER = 32, + PILLEFFECT_SMALLER = 33, + PILLEFFECT_INFESTED_EXCLAMATION = 34, + PILLEFFECT_INFESTED_QUESTION = 35, + PILLEFFECT_POWER = 36, + PILLEFFECT_RETRO_VISION = 37, + PILLEFFECT_FRIENDS_TILL_THE_END = 38, + PILLEFFECT_X_LAX = 39, + PILLEFFECT_SOMETHINGS_WRONG = 40, + PILLEFFECT_IM_DROWSY = 41, + PILLEFFECT_IM_EXCITED = 42, + PILLEFFECT_GULP = 43, + PILLEFFECT_HORF = 44, + PILLEFFECT_SUNSHINE = 45, + PILLEFFECT_VURP = 46, + PILLEFFECT_SHOT_SPEED_DOWN = 47, + PILLEFFECT_SHOT_SPEED_UP = 48, + PILLEFFECT_EXPERIMENTAL = 49, + NUM_PILL_EFFECTS = 50, +} + +declare enum ButtonAction { + ACTION_LEFT = 0, + ACTION_RIGHT = 1, + ACTION_UP = 2, + ACTION_DOWN = 3, + ACTION_SHOOTLEFT = 4, + ACTION_SHOOTRIGHT = 5, + ACTION_SHOOTUP = 6, + ACTION_SHOOTDOWN = 7, + ACTION_BOMB = 8, + ACTION_ITEM = 9, + ACTION_PILLCARD = 10, + ACTION_DROP = 11, + ACTION_PAUSE = 12, + ACTION_MAP = 13, + ACTION_MENUCONFIRM = 14, + ACTION_MENUBACK = 15, + ACTION_RESTART = 16, + ACTION_FULLSCREEN = 17, + ACTION_MUTE = 18, + ACTION_JOINMULTIPLAYER = 19, + ACTION_MENULEFT = 20, + ACTION_MENURIGHT = 21, + ACTION_MENUUP = 22, + ACTION_MENUDOWN = 23, + ACTION_MENULT = 24, + ACTION_MENURT = 25, + ACTION_MENUTAB = 26, + ACTION_CONSOLE = 28, +} + +declare enum Keyboard { + KEY_SPACE = 32, + KEY_APOSTROPHE = 39, + KEY_COMMA = 44, + KEY_MINUS = 45, + KEY_PERIOD = 46, + KEY_SLASH = 47, + KEY_0 = 48, + KEY_1 = 49, + KEY_2 = 50, + KEY_3 = 51, + KEY_4 = 52, + KEY_5 = 53, + KEY_6 = 54, + KEY_7 = 55, + KEY_8 = 56, + KEY_9 = 57, + KEY_SEMICOLON = 59, + KEY_EQUAL = 61, + KEY_A = 65, + KEY_B = 66, + KEY_C = 67, + KEY_D = 68, + KEY_E = 69, + KEY_F = 70, + KEY_G = 71, + KEY_H = 72, + KEY_I = 73, + KEY_J = 74, + KEY_K = 75, + KEY_L = 76, + KEY_M = 77, + KEY_N = 78, + KEY_O = 79, + KEY_P = 80, + KEY_Q = 81, + KEY_R = 82, + KEY_S = 83, + KEY_T = 84, + KEY_U = 85, + KEY_V = 86, + KEY_W = 87, + KEY_X = 88, + KEY_Y = 89, + KEY_Z = 90, + KEY_LEFT_BRACKET = 91, + KEY_BACKSLASH = 92, + KEY_RIGHT_BRACKET = 93, + KEY_GRAVE_ACCENT = 96, + KEY_WORLD_1 = 161, + KEY_WORLD_2 = 162, + KEY_ESCAPE = 256, + KEY_ENTER = 257, + KEY_TAB = 258, + KEY_BACKSPACE = 259, + KEY_INSERT = 260, + KEY_DELETE = 261, + KEY_RIGHT = 262, + KEY_LEFT = 263, + KEY_DOWN = 264, + KEY_UP = 265, + KEY_PAGE_UP = 266, + KEY_PAGE_DOWN = 267, + KEY_HOME = 268, + KEY_END = 269, + KEY_CAPS_LOCK = 280, + KEY_SCROLL_LOCK = 281, + KEY_NUM_LOCK = 282, + KEY_PRINT_SCREEN = 283, + KEY_PAUSE = 284, + KEY_F1 = 290, + KEY_F2 = 291, + KEY_F3 = 292, + KEY_F4 = 293, + KEY_F5 = 294, + KEY_F6 = 295, + KEY_F7 = 296, + KEY_F8 = 297, + KEY_F9 = 298, + KEY_F10 = 299, + KEY_F11 = 300, + KEY_F12 = 301, + KEY_F13 = 302, + KEY_F14 = 303, + KEY_F15 = 304, + KEY_F16 = 305, + KEY_F17 = 306, + KEY_F18 = 307, + KEY_F19 = 308, + KEY_F20 = 309, + KEY_F21 = 310, + KEY_F22 = 311, + KEY_F23 = 312, + KEY_F24 = 313, + KEY_F25 = 314, + KEY_KP_0 = 320, + KEY_KP_1 = 321, + KEY_KP_2 = 322, + KEY_KP_3 = 323, + KEY_KP_4 = 324, + KEY_KP_5 = 325, + KEY_KP_6 = 326, + KEY_KP_7 = 327, + KEY_KP_8 = 328, + KEY_KP_9 = 329, + KEY_KP_DECIMAL = 330, + KEY_KP_DIVIDE = 331, + KEY_KP_MULTIPLY = 332, + KEY_KP_SUBTRACT = 333, + KEY_KP_ADD = 334, + KEY_KP_ENTER = 335, + KEY_KP_EQUAL = 336, + KEY_LEFT_SHIFT = 340, + KEY_LEFT_CONTROL = 341, + KEY_LEFT_ALT = 342, + KEY_LEFT_SUPER = 343, + KEY_RIGHT_SHIFT = 344, + KEY_RIGHT_CONTROL = 345, + KEY_RIGHT_ALT = 346, + KEY_RIGHT_SUPER = 347, + KEY_MENU = 348, +} + +declare enum Mouse { + MOUSE_BUTTON_1 = 0, + MOUSE_BUTTON_2 = 1, + MOUSE_BUTTON_3 = 2, + MOUSE_BUTTON_4 = 3, + MOUSE_BUTTON_5 = 4, + MOUSE_BUTTON_6 = 5, + MOUSE_BUTTON_7 = 6, + MOUSE_BUTTON_8 = 7, + MOUSE_BUTTON_LAST = 7, + MOUSE_BUTTON_LEFT = 0, + MOUSE_BUTTON_RIGHT = 1, + MOUSE_BUTTON_MIDDLE = 2, +} + +declare enum InputHook { + IS_ACTION_PRESSED = 0, + IS_ACTION_TRIGGERED = 1, + GET_ACTION_VALUE = 2, +} + +declare enum SeedEffect { + SEED_NORMAL = 0, + SEED_MOVEMENT_PITCH = 1, + SEED_HEALTH_PITCH = 2, + SEED_CAMO_ISAAC = 3, + SEED_CAMO_ENEMIES = 4, + SEED_CAMO_PICKUPS = 5, + SEED_CAMO_EVERYTHING = 6, + SEED_FART_SOUNDS = 7, + SEED_OLD_TV = 8, + SEED_DYSLEXIA = 9, + SEED_NO_HUD = 10, + SEED_PICKUPS_SLIDE = 11, + SEED_CONTROLS_REVERSED = 12, + SEED_ALL_CHAMPIONS = 13, + SEED_INVISIBLE_ISAAC = 14, + SEED_INVISIBLE_ENEMIES = 15, + SEED_INFINITE_BASEMENT = 16, + SEED_ALWAYS_CHARMED = 17, + SEED_ALWAYS_CONFUSED = 18, + SEED_ALWAYS_AFRAID = 19, + SEED_ALWAYS_ALTERNATING_FEAR = 20, + SEED_ALWAYS_CHARMED_AND_AFRAID = 21, + SEED_EXTRA_BLOOD = 23, + SEED_POOP_TRAIL = 24, + SEED_PACIFIST = 25, + SEED_DAMAGE_WHEN_STOPPED = 26, + SEED_DAMAGE_ON_INTERVAL = 27, + SEED_DAMAGE_ON_TIME_LIMIT = 28, + SEED_PILLS_NEVER_IDENTIFY = 29, + SEED_MYSTERY_TAROT_CARDS = 30, + SEED_ENEMIES_RESPAWN = 32, + SEED_ITEMS_COST_MONEY = 33, + SEED_BIG_HEAD = 35, + SEED_SMALL_HEAD = 36, + SEED_BLACK_ISAAC = 37, + SEED_GLOWING_TEARS = 38, + SEED_SLOW_MUSIC = 41, + SEED_ULTRA_SLOW_MUSIC = 42, + SEED_FAST_MUSIC = 43, + SEED_ULTRA_FAST_MUSIC = 44, + SEED_NO_FACE = 46, + SEED_ISAAC_TAKES_HIGH_DAMAGE = 47, + SEED_ISAAC_TAKES_MASSIVE_DAMAGE = 48, + SEED_ICE_PHYSICS = 52, + SEED_KAPPA = 53, + SEED_CHRISTMAS = 54, + SEED_KIDS_MODE = 55, + SEED_PERMANENT_CURSE_DARKNESS = 56, + SEED_PERMANENT_CURSE_LABYRINTH = 57, + SEED_PERMANENT_CURSE_LOST = 58, + SEED_PERMANENT_CURSE_UNKNOWN = 59, + SEED_PERMANENT_CURSE_MAZE = 60, + SEED_PERMANENT_CURSE_BLIND = 61, + SEED_PERMANENT_CURSE_CURSED = 62, + SEED_PREVENT_CURSE_DARKNESS = 63, + SEED_PREVENT_CURSE_LABYRINTH = 64, + SEED_PREVENT_CURSE_LOST = 65, + SEED_PREVENT_CURSE_UNKNOWN = 66, + SEED_PREVENT_CURSE_MAZE = 67, + SEED_PREVENT_CURSE_BLIND = 68, + SEED_PREVENT_ALL_CURSES = 70, + SEED_NO_BOSS_ROOM_EXITS = 71, + SEED_PICKUPS_TIMEOUT = 72, + SEED_INVINCIBLE = 73, + SEED_SHOOT_IN_MOVEMENT_DIRECTION = 74, + SEED_SHOOT_OPPOSITE_MOVEMENT_DIRECTION = 75, + SEED_AXIS_ALIGNED_CONTROLS = 76, + SEED_SUPER_HOT = 77, + SEED_RETRO_VISION = 78, + NUM_SEEDS = 79, +} + +declare enum GridRooms { + NO_ROOM_IDX = -99999, + ROOM_DEVIL_IDX = -1, + ROOM_ERROR_IDX = -2, + ROOM_DEBUG_IDX = -3, + ROOM_DUNGEON_IDX = -4, + ROOM_BOSSRUSH_IDX = -5, + ROOM_BLACK_MARKET_IDX = -6, + ROOM_MEGA_SATAN_IDX = -7, + ROOM_BLUE_WOOM_IDX = -8, + ROOM_THE_VOID_IDX = -9, + ROOM_SECRET_EXIT_IDX = -10, + ROOM_GIDEON_DUNGEON_IDX = -11, + ROOM_GENESIS_IDX = -12, + ROOM_SECRET_SHOP_IDX = -13, + ROOM_ROTGUT_DUNGEON1_IDX = -14, + ROOM_ROTGUT_DUNGEON2_IDX = -15, + ROOM_BLUE_ROOM_IDX = -16, + ROOM_EXTRA_BOSS_IDX = -17, + ROOM_ANGEL_SHOP_IDX = -18, + NUM_OFF_GRID_ROOMS = 18, + MAX_GRID_ROOMS = 507, + MAX_ROOMS = 525, + ROOM_MIRROR_IDX = -100, + ROOM_MINESHAFT_IDX = -101, +} + +declare enum ItemPoolType { + POOL_NULL = -1, + POOL_TREASURE = 0, + POOL_SHOP = 1, + POOL_BOSS = 2, + POOL_DEVIL = 3, + POOL_ANGEL = 4, + POOL_SECRET = 5, + POOL_LIBRARY = 6, + POOL_SHELL_GAME = 7, + POOL_GOLDEN_CHEST = 8, + POOL_RED_CHEST = 9, + POOL_BEGGAR = 10, + POOL_DEMON_BEGGAR = 11, + POOL_CURSE = 12, + POOL_KEY_MASTER = 13, + POOL_BATTERY_BUM = 14, + POOL_MOMS_CHEST = 15, + POOL_GREED_TREASUREL = 16, + POOL_GREED_BOSS = 17, + POOL_GREED_SHOP = 18, + POOL_GREED_DEVIL = 19, + POOL_GREED_ANGEL = 20, + POOL_GREED_CURSE = 21, + POOL_GREED_SECRET = 22, + POOL_CRANE_GAME = 23, + POOL_24 = 24, + POOL_BOMB_BUM = 25, + POOL_PLANETARIUM = 26, + POOL_OLD_CHEST = 27, + POOL_BABY_SHOP = 28, + POOL_WOODEN_CHEST = 29, + POOL_ROTTEN_BEGGAR = 30, + NUM_ITEMPOOLS = 31, +} + +declare enum EntityPartition { + FAMILIAR = 1, + BULLET = 1 << 1, + TEAR = 1 << 2, + ENEMY = 1 << 3, + PICKUP = 1 << 4, + PLAYER = 1 << 5, + EFFECT = 1 << 6, +} + +declare enum ChampionColor { + /** 33% more life. Drops a red heart. */ + RED = 0, + /** 33% increased movement speed. Drops a Lil Battery. */ + YELLOW = 1, + /** Leaves green creep as it walks. Drops a pill. */ + GREEN = 2, + /** Greed shot (causing dropped coins on hit). Drops 1-3 coins. */ + ORANGE = 3, + /** Half speed. Spawns 3 blue flies on death. */ + BLUE = 4, + /** Explodes on death. Drops a bomb. */ + BLACK = 5, + /** Invincible until all other enemies are killed. Drops an eternal heart. */ + WHITE = 6, + /** 33% health, half speed. Drops a key. */ + GREY = 7, + /** Spectral projectiles and can move past environmental obstacles. Drops a locked chest. */ + TRANSPARENT = 8, + /** Fades in and out of visibility. Drops a red chest. */ + FLICKER = 9, + /** Random projectiles. No drop. */ + PINK = 10, + /** Pulls the player (and tears) towards itself. Drops a trinket. */ + PURPLE = 11, + /** + * Collapses into a flesh pile upon death and regenerates if not finished off. + * Drops a double heart. + */ + DARK_RED = 12, + /** Releases blood shots in 8 directions when killed. Drops a half red heart. */ + LIGHT_BLUE = 13, + /** + * The enemy blends into the background and briefly becomes visible when damaged. + * Drops a rune. + */ + CAMO = 14, + /** Splits into two copies of itself upon death. */ + PULSE_GREEN = 15, + /** Repels Isaac's tears while in the gray state. Drops a random pickup. */ + PULSE_GREY = 16, + /** Has 1-2 Eternal Flies circling it. Spawns two attack flies on death. */ + FLY_PROTECTED = 17, + /** Half size, 33% less HP, 33% faster. 20% chance to drop a pill. */ + TINY = 18, + /** Double size, 50% more HP, does 2 hearts of damage, 10% slower. 20% chance to drop a pill. */ + GIANT = 19, + /** Heals all enemies in the room (including itself) for 30 HP per second. Drops a heart. */ + PULSE_RED = 20, + /** + * Spawns an Attack Fly on hit. After each hit, there is a delay until the next hit results in + * another Attack Fly. A single Pulsating enemy can have up to 5 Attack Flies at once. + * Spawns 4-6 blue flies on death. + */ + SIZE_PULSE = 21, + /** + * 3x HP. All enemies in the room that are not champions will turn yellow while the crowned enemy + * is alive. The affected enemies will drop batteries like yellow champions upon dying. + * Drops 2-3 random pickups. + */ + KING = 22, + /** + * Does 2 hearts of damage when touched. Produces a Necronomicon effect upon death. + * Deals two full hearts of damage. + */ + DEATH = 23, + /** Constantly poops. */ + BROWN = 24, + /** Many champion effects combined, drops one of everything. */ + RAINBOW = 25, +} + +declare enum ActiveSlot { + /** The main slot for active items, in the top-left-hand corner. */ + SLOT_PRIMARY = 0, + /** The SchoolBag slot, to the top-left of the active item. */ + SLOT_SECONDARY = 1, + /** The permanent card/pill slot. (Several Tainted characters use this slot.) */ + SLOT_POCKET = 2, + /** A single use card/pill slot (used by Dice Bag). */ + SLOT_POCKET2 = 3, +} + +declare enum RoomTransitionAnim { + /** Mostly when using doors. */ + WALK = 0, + /** The fade-in / fade-out used for Mom's Hand. */ + FADE = 1, + /** The fade + pixelation effect used for secret item dungeon. */ + PIXELATION = 2, + TELEPORT = 3, + /** For Curse of the Maze. */ + MAZE = 4, + ANKH = 5, + DEAD_CAT = 6, + ONE_UP = 7, + COLLAR = 8, + JUDAS_SHADOW = 9, + LAZARUS = 10, + /** For the Ventricle Razor teleport. */ + WOMB_TELEPORT = 11, + /** For the Glowing Hour Glass teleport. */ + GLOWING_HOURGLASS = 12, + D7 = 13, + MISSING_POSTER = 14, + /** No transition; goes directly to the boss intro cutscene (for the Backasswards challenge). */ + BOSS_FORCED = 15, + /** For a Card Reading teleport. */ + PORTAL_TELEPORT = 16, + /** For the Forgotten's Birthright effect. */ + FORGOTTEN_TELEPORT = 17, + FADE_MIRROR = 18, + MINECART = 19, + DEATH_CERTIFICATE = 20, +} + +declare enum BackdropType { + BACKDROP_NULL = 0, + BASEMENT = 1, + CELLAR = 2, + BURNT_BASEMENT = 3, + CAVES = 4, + CATACOMBS = 5, + FLOODED_CAVES = 6, + DEPTHS = 7, + NECROPOLIS = 8, + DANK_DEPTHS = 9, + WOMB = 10, + UTERO = 11, + SCARRED_WOMB = 12, + BLUE_WOMB = 13, + SHEOL = 14, + CATHEDRAL = 15, + DARKROOM = 16, + CHEST = 17, + MEGA_SATAN = 18, + LIBRARY = 19, + SHOP = 20, + ISAAC = 21, + BARREN = 22, + SECRET = 23, + DICE = 24, + ARCADE = 25, + ERROR_ROOM = 26, + BLUE_WOMB_PASS = 27, + GREED_SHOP = 28, + DUNGEON = 29, + SACRIFICE = 30, + DOWNPOUR = 31, + MINES = 32, + MAUSOLEUM = 33, + CORPSE = 34, + PLANETARIUM = 35, + DOWNPOUR_ENTRANCE = 36, + MINES_ENTRANCE = 37, + MAUSOLEUM_ENTRANCE = 38, + CORPSE_ENTRANCE = 39, + MAUSOLEUM2 = 40, + MAUSOLEUM3 = 41, + MAUSOLEUM4 = 42, + CORPSE2 = 43, + CORPSE3 = 44, + DROSS = 45, + ASHPIT = 46, + GEHENNA = 47, + MORTIS = 48, + ISAACS_BEDROOM = 49, + HALLWAY = 50, + MOMS_BEDROOM = 51, + CLOSET = 52, + CLOSET_B = 53, + DOGMA = 54, + DUNGEON_GIDEON = 55, + DUNGEON_ROTGUT = 56, + DUNGEON_BEAST = 57, + MINES_SHAFT = 58, + ASHPIT_SHAFT = 59, + DARK_CLOSET = 60, + NUM_BACKDROPS = 61, + CHARGE_NORMAL = 0, + CHARGE_TIMED = 1, + CHARGE_SPECIAL = 2, + TAG_DEAD = 1, + TAG_SYRINGE = 1 << 1, + TAG_MOM = 1 << 2, + TAG_TECH = 1 << 3, + TAG_BATTERY = 1 << 4, + TAG_GUPPY = 1 << 5, + TAG_FLY = 1 << 6, + TAG_BOB = 1 << 7, + TAG_MUSHROOM = 1 << 8, + TAG_BABY = 1 << 9, + TAG_ANGEL = 1 << 10, + TAG_DEVIL = 1 << 11, + TAG_POOP = 1 << 12, + TAG_BOOK = 1 << 13, + TAG_SPIDER = 1 << 14, + TAG_QUEST = 1 << 15, + TAG_MONSTER_MANUAL = 1 << 16, + TAG_NO_GREED = 1 << 17, + TAG_FOOD = 1 << 18, + TAG_TEARS_UP = 1 << 19, + TAG_OFFENSIVE = 1 << 20, + TAG_NO_KEEPER = 1 << 21, + TAG_NO_LOST_BR = 1 << 22, + TAG_STARS = 1 << 23, + TAG_SUMMONABLE = 1 << 24, + TAG_NO_CANTRIP = 1 << 25, + TAG_WISP = 1 << 26, + TAG_UNIQUE_FAMILIAR = 1 << 27, + CARDTYPE_TAROT = 0, + CARDTYPE_SUIT = 1, + CARDTYPE_RUNE = 2, + CARDTYPE_SPECIAL_OBJECT = 4, + CARDTYPE_TAROT_REVERSE = 5, +} diff --git a/isaac-typescript-definitions/typings/enumsFlags.d.ts b/isaac-typescript-definitions/typings/enumsFlags.d.ts new file mode 100644 index 0000000..a3a850f --- /dev/null +++ b/isaac-typescript-definitions/typings/enumsFlags.d.ts @@ -0,0 +1,398 @@ +// Enums from the "resources/scripts/enums.lua" file +// (flags only) + +declare enum EntityFlag { + FLAG_NO_STATUS_EFFECTS = 1, + FLAG_NO_INTERPOLATE = 1 << 1, + FLAG_APPEAR = 1 << 2, + FLAG_RENDER_FLOOR = 1 << 3, + FLAG_NO_TARGET = 1 << 4, + FLAG_FREEZE = 1 << 5, + FLAG_POISON = 1 << 6, + FLAG_SLOW = 1 << 7, + FLAG_CHARM = 1 << 8, + FLAG_CONFUSION = 1 << 9, + FLAG_MIDAS_FREEZE = 1 << 10, + FLAG_FEAR = 1 << 11, + FLAG_BURN = 1 << 12, + FLAG_RENDER_WALL = 1 << 13, + FLAG_INTERPOLATION_UPDATE = 1 << 14, + FLAG_APPLY_GRAVITY = 1 << 15, + FLAG_NO_BLOOD_SPLASH = 1 << 16, + FLAG_NO_REMOVE_ON_TEX_RENDER = 1 << 17, + FLAG_NO_DEATH_TRIGGER = 1 << 18, + FLAG_NO_SPIKE_DAMAGE = 1 << 19, + FLAG_LASER_POP = 1 << 19, + FLAG_ITEM_SHOULD_DUPLICATE = 1 << 19, + FLAG_BOSSDEATH_TRIGGERED = 1 << 20, + FLAG_DONT_OVERWRITE = 1 << 21, + FLAG_SPAWN_STICKY_SPIDERS = 1 << 22, + FLAG_SPAWN_BLACK_HP = 1 << 23, + FLAG_SHRINK = 1 << 24, + FLAG_NO_FLASH_ON_DAMAGE = 1 << 25, + FLAG_NO_KNOCKBACK = 1 << 26, + FLAG_SLIPPERY_PHYSICS = 1 << 27, + FLAG_ADD_JAR_FLY = 1 << 28, + FLAG_FRIENDLY = 1 << 29, + FLAG_NO_PHYSICS_KNOCKBACK = 1 << 30, + FLAG_DONT_COUNT_BOSS_HP = 1 << 31, + FLAG_NO_SPRITE_UPDATE = 1 << 32, + FLAG_CONTAGIOUS = 1 << 33, + FLAG_BLEED_OUT = 1 << 34, + FLAG_HIDE_HP_BAR = 1 << 35, + FLAG_NO_DAMAGE_BLINK = 1 << 36, + FLAG_PERSISTENT = 1 << 37, + FLAG_BACKDROP_DETAIL = 1 << 38, + FLAG_AMBUSH = 1 << 39, + FLAG_GLITCH = 1 << 40, + FLAG_SPIN = 1 << 41, + FLAG_NO_REWARD = 1 << 42, + FLAG_REDUCE_GIBS = 1 << 43, + FLAG_TRANSITION_UPDATE = 1 << 44, + FLAG_NO_PLAYER_CONTROL = 1 << 45, + FLAG_NO_QUERY = 1 << 46, + FLAG_KNOCKED_BACK = 1 << 47, + FLAG_APPLY_IMPACT_DAMAGE = 1 << 48, + FLAG_ICE_FROZEN = 1 << 49, + FLAG_ICE = 1 << 50, + FLAG_MAGNETIZED = 1 << 51, + FLAG_BAITED = 1 << 52, + FLAG_KILLSWITCH = 1 << 53, + FLAG_WEAKNESS = 1 << 54, + FLAG_EXTRA_GORE = 1 << 55, + FLAG_BRIMSTONE_MARKED = 1 << 56, + FLAG_HELD = 1 << 57, + FLAG_THROWN = 1 << 58, + FLAG_FRIENDLY_BALL = 1 << 59, +} + +/** For EntityType.ENTITY_TEAR (2) */ +declare enum TearFlags { + TEAR_NORMAL = 0, + TEAR_SPECTRAL = 1, + TEAR_PIERCING = 1 << 1, + TEAR_HOMING = 1 << 2, + TEAR_SLOW = 1 << 3, + TEAR_POISON = 1 << 4, + TEAR_FREEZE = 1 << 5, + TEAR_SPLIT = 1 << 6, + TEAR_GROW = 1 << 7, + TEAR_BOOMERANG = 1 << 8, + TEAR_PERSISTENT = 1 << 9, + TEAR_WIGGLE = 1 << 10, + TEAR_MULLIGAN = 1 << 11, + TEAR_EXPLOSIVE = 1 << 12, + TEAR_CHARM = 1 << 13, + TEAR_CONFUSION = 1 << 14, + TEAR_HP_DROP = 1 << 15, + TEAR_ORBIT = 1 << 16, + TEAR_WAIT = 1 << 17, + TEAR_QUADSPLIT = 1 << 18, + TEAR_BOUNCE = 1 << 19, + TEAR_FEAR = 1 << 20, + TEAR_SHRINK = 1 << 21, + TEAR_BURN = 1 << 22, + TEAR_ATTRACTOR = 1 << 23, + TEAR_KNOCKBACK = 1 << 24, + TEAR_PULSE = 1 << 25, + TEAR_SPIRAL = 1 << 26, + TEAR_FLAT = 1 << 27, + TEAR_SAD_BOMB = 1 << 28, + TEAR_BUTT_BOMB = 1 << 29, + TEAR_SQUARE = 1 << 30, + TEAR_GLOW = 1 << 31, + TEAR_GISH = 1 << 32, + TEAR_MYSTERIOUS_LIQUID_CREEP = 1 << 33, + TEAR_SHIELDED = 1 << 34, + TEAR_GLITTER_BOMB = 1 << 35, + TEAR_SCATTER_BOMB = 1 << 36, + TEAR_STICKY = 1 << 37, + TEAR_CONTINUUM = 1 << 38, + TEAR_LIGHT_FROM_HEAVEN = 1 << 39, + TEAR_COIN_DROP = 1 << 40, + TEAR_BLACK_HP_DROP = 1 << 41, + TEAR_TRACTOR_BEAM = 1 << 42, + TEAR_GODS_FLESH = 1 << 43, + TEAR_GREED_COIN = 1 << 44, + TEAR_CROSS_BOMB = 1 << 45, + TEAR_BIG_SPIRAL = 1 << 46, + TEAR_PERMANENT_CONFUSION = 1 << 47, + TEAR_BOOGER = 1 << 48, + TEAR_EGG = 1 << 49, + TEAR_ACID = 1 << 50, + TEAR_BONE = 1 << 51, + TEAR_BELIAL = 1 << 52, + TEAR_MIDAS = 1 << 53, + TEAR_NEEDLE = 1 << 54, + TEAR_JACOBS = 1 << 55, + TEAR_HORN = 1 << 56, + TEAR_LASER = 1 << 57, + TEAR_POP = 1 << 58, + TEAR_ABSORB = 1 << 59, + TEAR_LASERSHOT = 1 << 60, + TEAR_HYDROBOUNCE = 1 << 61, + TEAR_BURSTSPLIT = 1 << 62, + TEAR_CREEP_TRAIL = 1 << 63, + TEAR_PUNCH = 1 << 64, + TEAR_ICE = 1 << 65, + TEAR_MAGNETIZE = 1 << 66, + TEAR_BAIT = 1 << 67, + TEAR_OCCULT = 1 << 68, + TEAR_ORBIT_ADVANCED = 1 << 69, + TEAR_ROCK = 1 << 70, + TEAR_TURN_HORIZONTAL = 1 << 71, + TEAR_BLOOD_BOMB = 1 << 72, + TEAR_ECOLI = 1 << 73, + TEAR_COIN_DROP_DEATH = 1 << 74, + TEAR_BRIMSTONE_BOMB = 1 << 75, + TEAR_RIFT = 1 << 76, + TEAR_SPORE = 1 << 77, + TEAR_GHOST_BOMB = 1 << 78, + TEAR_CARD_DROP_DEATH = 1 << 79, + TEAR_RUNE_DROP_DEATH = 1 << 80, + TEAR_TELEPORT = 1 << 81, + TEAR_EFFECT_COUNT = 82, + TEAR_REROLL_ROCK_WISP = 1 << 115, + TEAR_MOM_STOMP_WISP = 1 << 116, + TEAR_ENEMY_TO_WISP = 1 << 117, + TEAR_REROLL_ENEMY = 1 << 118, + TEAR_GIGA_BOMB = 1 << 119, + TEAR_EXTRA_GORE = 1 << 120, + TEAR_RAINBOW = 1 << 121, + TEAR_DETONATE = 1 << 122, + TEAR_CHAIN = 1 << 123, + TEAR_DARK_MATTER = 1 << 124, + TEAR_GOLDEN_BOMB = 1 << 125, + TEAR_FAST_BOMB = 1 << 126, + TEAR_LUDOVICO = 1 << 127, +} + +/** For EntityType.ENTITY_PROJECTILE (9) */ +declare enum ProjectileFlags { + SMART = 1, + 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, + BURSTSPLIT = 1 << 49, + WIGGLE_ROTGUT = 1 << 50, + FREEZE = 1 << 51, + ACCELERATE_TO_POSITION = 1 << 52, + BROCCOLI = 1 << 53, + BACKSPLIT = 1 << 54, + SIDEWAVE = 1 << 55, + ORBIT_PARENT = 1 << 56, + FADEOUT = 1 << 57, +} + +declare enum CacheFlag { + CACHE_DAMAGE = 0x1, + CACHE_FIREDELAY = 0x2, + CACHE_SHOTSPEED = 0x4, + CACHE_RANGE = 0x8, + CACHE_SPEED = 0x10, + CACHE_TEARFLAG = 0x20, + CACHE_TEARCOLOR = 0x40, + CACHE_FLYING = 0x80, + CACHE_WEAPON = 0x100, + CACHE_FAMILIARS = 0x200, + CACHE_LUCK = 0x400, + CACHE_SIZE = 0x800, + CACHE_COLOR = 0x1000, + CACHE_PICKUP_VISION = 0x2000, + CACHE_ALL = 0xffff, + CACHE_TWIN_SYNC = 0x80000000, +} + +declare enum DamageFlag { + DAMAGE_NOKILL = 1, + DAMAGE_FIRE = 1 << 1, + DAMAGE_EXPLOSION = 1 << 2, + DAMAGE_LASER = 1 << 3, + DAMAGE_ACID = 1 << 4, + DAMAGE_RED_HEARTS = 1 << 5, + DAMAGE_COUNTDOWN = 1 << 6, + DAMAGE_SPIKES = 1 << 7, + DAMAGE_CLONES = 1 << 8, + DAMAGE_POOP = 1 << 9, + DAMAGE_DEVIL = 1 << 10, + DAMAGE_ISSAC_HEART = 1 << 11, + DAMAGE_TNT = 1 << 12, + DAMAGE_INVINCIBLE = 1 << 13, + DAMAGE_SPAWN_FLY = 1 << 14, + DAMAGE_POISON_BURN = 1 << 15, + DAMAGE_CURSED_DOOR = 1 << 16, + DAMAGE_TIMER = 1 << 17, + DAMAGE_IV_BAG = 1 << 18, + DAMAGE_PITFALL = 1 << 19, + DAMAGE_CHEST = 1 << 20, + DAMAGE_FAKE = 1 << 21, + DAMAGE_BOOGER = 1 << 22, + DAMAGE_SPAWN_BLACK_HEART = 1 << 23, + DAMAGE_CRUSH = 1 << 24, + DAMAGE_NO_MODIFIERS = 1 << 25, + DAMAGE_SPAWN_RED_HEART = 1 << 26, + DAMAGE_SPAWN_COIN = 1 << 27, + DAMAGE_NO_PENALTIES = 1 << 28, + DAMAGE_SPAWN_TEMP_HEART = 1 << 29, + DAMAGE_IGNORE_ARMOR = 1 << 30, + DAMAGE_SPAWN_CARD = 1 << 31, + DAMAGE_SPAWN_RUNE = 1 << 32, +} + +declare enum GameStateFlag { + STATE_FAMINE_SPAWNED = 0, + STATE_PESTILENCE_SPAWNED = 1, + STATE_WAR_SPAWNED = 2, + STATE_DEATH_SPAWNED = 3, + STATE_BOSSPOOL_SWITCHED = 4, + STATE_DEVILROOM_SPAWNED = 5, + STATE_DEVILROOM_VISITED = 6, + STATE_BOOK_REVELATIONS_USED = 7, + STATE_BOOK_PICKED_UP = 8, + STATE_WRATH_SPAWNED = 9, + STATE_GLUTTONY_SPAWNED = 10, + STATE_LUST_SPAWNED = 11, + STATE_SLOTH_SPAWNED = 12, + STATE_ENVY_SPAWNED = 13, + STATE_PRIDE_SPAWNED = 14, + STATE_GREED_SPAWNED = 15, + STATE_SUPERGREED_SPAWNED = 16, + STATE_DONATION_SLOT_BROKEN = 17, + STATE_DONATION_SLOT_JAMMED = 18, + STATE_HEAVEN_PATH = 19, + STATE_REBIRTH_BOSS_SWITCHED = 20, + STATE_HAUNT_SELECTED = 21, + STATE_ADVERSARY_SELECTED = 22, + STATE_MR_FRED_SELECTED = 23, + STATE_MAMA_GURDY_SELECTED = 24, + STATE_URIEL_SPAWNED = 25, + STATE_GABRIEL_SPAWNED = 26, + STATE_FALLEN_SPAWNED = 27, + STATE_HEADLESS_HORSEMAN_SPAWNED = 28, + STATE_KRAMPUS_SPAWNED = 29, + STATE_DONATION_SLOT_BLOWN = 30, + STATE_SHOPKEEPER_KILLED = 31, + STATE_ULTRAPRIDE_SPAWNED = 32, + STATE_BOSSRUSH_DONE = 33, + STATE_GREED_SLOT_JAMMED = 34, + STATE_AFTERBIRTH_BOSS_SWITCHED = 35, + STATE_BROWNIE_SELECTED = 36, + STATE_SUPERBUM_APPEARED = 37, + STATE_BOSSRUSH_DOOR_SPAWNED = 38, + STATE_BLUEWOMB_DOOR_SPAWNED = 39, + STATE_BLUEWOMB_DONE = 40, + STATE_HEART_BOMB_COIN_PICKED = 41, + STATE_ABPLUS_BOSS_SWITCHED = 42, + STATE_SISTERS_VIS_SELECTED = 43, + STATE_MAX_COINS_OBTAINED = 43, + STATE_SECRET_PATH = 44, + STATE_PERFECTION_SPAWNED = 45, + STATE_MAUSOLEUM_HEART_KILLED = 46, + STATE_BACKWARDS_PATH_INIT = 47, + STATE_BACKWARDS_PATH = 48, + NUM_STATE_FLAGS = 49, +} + +declare enum LevelStateFlag { + STATE_BUM_KILLED = 0, + STATE_EVIL_BUM_KILLED = 1, + STATE_REDHEART_DAMAGED = 2, + STATE_BUM_LEFT = 3, + STATE_EVIL_BUM_LEFT = 4, + STATE_DAMAGED = 5, + STATE_SHOPKEEPER_KILLED_LVL = 6, + STATE_COMPASS_EFFECT = 7, + STATE_MAP_EFFECT = 8, + STATE_BLUE_MAP_EFFECT = 9, + STATE_FULL_MAP_EFFECT = 10, + STATE_GREED_LOST_PENALTY = 11, + STATE_GREED_MONSTRO_SPAWNED = 12, + STATE_ITEM_DUNGEON_FOUND = 13, + STATE_MAMA_MEGA_USED = 14, + STATE_WOODEN_CROSS_REMOVED = 15, + STATE_SHOVEL_QUEST_TRIGGERED = 16, + STATE_SATANIC_BIBLE_USED = 17, + STATE_SOL_EFFECT = 18, + STATE_LEVEL_START_TRIGGERED = 19, + STATE_LUNA_EFFECT = 20, + STATE_VOID_DOOR_DISABLED = 21, + STATE_MINESHAFT_ESCAPE = 22, + STATE_MIRROR_BROKEN = 23, + NUM_STATE_FLAGS = 24, +} + +declare enum UseFlag { + /** Don't play use animations. */ + USE_NOANIM = 1, + /** Don't add costume. */ + USE_NOCOSTUME = 1 << 1, + /** Effect was triggered by an active item owned by the player. */ + USE_OWNED = 1 << 2, + /** Allow the effect to trigger on non-main players (i.e. coop babies). */ + USE_ALLOWNONMAIN = 1 << 3, + /** D4 only: Reroll the player's active item. */ + USE_REMOVEACTIVE = 1 << 4, + /** Effect was triggered a second time by Car Battery (or Tarot Cloth for cards). */ + USE_CARBATTERY = 1 << 5, + /** Effect was triggered by Void. */ + USE_VOID = 1 << 6, + /** Effect was mimicked by an active item (Blank Card, Placebo). */ + USE_MIMIC = 1 << 7, + /** Never play announcer voice. */ + USE_NOANNOUNCER = 1 << 8, + /** + * This allows an item to spawn wisps when called from another item usage as the wisps generator + * checks for NOANIM, so usually you want to use this with NOANIM call. + */ + USE_ALLOWWISPSPAWN = 1 << 9, + /** + * If set, forces UseActiveItem to use the CustomVarData argument instead of the active item's + * stored VarData. + */ + USE_CUSTOMVARDATA = 1 << 10, +} diff --git a/isaac-typescript-definitions/typings/enumsSubTypes.d.ts b/isaac-typescript-definitions/typings/enumsSubTypes.d.ts new file mode 100644 index 0000000..2e6fd8c --- /dev/null +++ b/isaac-typescript-definitions/typings/enumsSubTypes.d.ts @@ -0,0 +1,1242 @@ +// Enums from the "resources/scripts/enums.lua" file +// (entity subtypes only) + +/** For EntityType.ENTITY_PLAYER (1), PlayerVariant.PLAYER (0) */ +declare enum PlayerType { + PLAYER_POSSESSOR = -1, + PLAYER_ISAAC = 0, + PLAYER_MAGDALENA = 1, + PLAYER_CAIN = 2, + PLAYER_JUDAS = 3, + PLAYER_XXX = 4, + PLAYER_EVE = 5, + PLAYER_SAMSON = 6, + PLAYER_AZAZEL = 7, + PLAYER_LAZARUS = 8, + PLAYER_EDEN = 9, + PLAYER_THELOST = 10, + PLAYER_LAZARUS2 = 11, + PLAYER_BLACKJUDAS = 12, + PLAYER_LILITH = 13, + PLAYER_KEEPER = 14, + PLAYER_APOLLYON = 15, + PLAYER_THEFORGOTTEN = 16, + PLAYER_THESOUL = 17, + PLAYER_BETHANY = 18, + PLAYER_JACOB = 19, + PLAYER_ESAU = 20, + PLAYER_ISAAC_B = 21, + PLAYER_MAGDALENA_B = 22, + PLAYER_CAIN_B = 23, + PLAYER_JUDAS_B = 24, + PLAYER_XXX_B = 25, + PLAYER_EVE_B = 26, + PLAYER_SAMSON_B = 27, + PLAYER_AZAZEL_B = 28, + PLAYER_LAZARUS_B = 29, + PLAYER_EDEN_B = 30, + PLAYER_THELOST_B = 31, + PLAYER_LILITH_B = 32, + PLAYER_KEEPER_B = 33, + PLAYER_APOLLYON_B = 34, + PLAYER_THEFORGOTTEN_B = 35, + PLAYER_BETHANY_B = 36, + PLAYER_JACOB_B = 37, + PLAYER_LAZARUS2_B = 38, + PLAYER_JACOB2_B = 39, + PLAYER_THESOUL_B = 40, + NUM_PLAYER_TYPES = 41, +} + +/** For EntityType.ENTITY_PLAYER (1), PlayerVariant.COOP_BABY (1) */ +declare enum BabySubType { + BABY_UNASSIGNED = -1, + BABY_SPIDER = 0, + BABY_LOVE = 1, + BABY_BLOAT = 2, + BABY_WATER = 3, + BABY_PSY = 4, + BABY_CURSED = 5, + BABY_TROLL = 6, + BABY_YBAB = 7, + BABY_COCKEYED = 8, + BABY_HOST = 9, + BABY_LOST = 10, + BABY_CUTE = 11, + BABY_CROW = 12, + BABY_SHADOW = 13, + BABY_GLASS = 14, + BABY_GOLD = 15, + BABY_CY = 16, + BABY_BEAN = 17, + BABY_MAG = 18, + BABY_WRATH = 19, + BABY_WRAPPED = 20, + BABY_BEGOTTEN = 21, + BABY_DEAD = 22, + BABY_FIGHTING = 23, + BABY_0 = 24, + BABY_GLITCH = 25, + BABY_MAGNET = 26, + BABY_BLACK = 27, + BABY_RED = 28, + BABY_WHITE = 29, + BABY_BLUE = 30, + BABY_RAGE = 31, + BABY_CRY = 32, + BABY_YELLOW = 33, + BABY_LONG = 34, + BABY_GREEN = 35, + BABY_LIL = 36, + BABY_BIG = 37, + BABY_BROWN = 38, + BABY_NOOSE = 39, + BABY_HIVE = 40, + BABY_BUDDY = 41, + BABY_COLORFUL = 42, + BABY_WHORE = 43, + BABY_CRACKED = 44, + BABY_DRIPPING = 45, + BABY_BLINDING = 46, + BABY_SUCKY = 47, + BABY_DARK = 48, + BABY_PICKY = 49, + BABY_REVENGE = 50, + BABY_BELIAL = 51, + BABY_SALE = 52, + BABY_GOAT = 53, + BABY_SUPER_GREED = 54, + BABY_MORT = 55, + BABY_APOLLYON = 56, + BABY_BONE = 57, + BABY_BOUND = 58, + BABY_FOUND_SOUL = 59, + BABY_LOST_WHITE = 60, + BABY_LOST_BLACK = 61, + BABY_LOST_BLUE = 62, + BABY_LOST_GREY = 63, + BABY_WISP = 64, + BABY_DOUBLE = 65, + BABY_GLOWING = 66, + BABY_ILLUSION = 67, + BABY_HOPE = 68, + BABY_SOLOMON_A = 69, + BABY_SOLOMON_B = 70, + BABY_BASIC = 71, +} + +/** For EntityType.ENTITY_FAMILIAR (3), FamiliarVariant.BLUE_FLY (43) */ +declare enum LocustSubtypes { + /** Red (explosive) */ + LOCUST_OF_WRATH = 1, + /** Green (poison) */ + LOCUST_OF_PESTILENCE = 2, + /** Yellow (slowing) */ + LOCUST_OF_FAMINE = 3, + /** Black (double-damage) */ + LOCUST_OF_DEATH = 4, + /** White */ + LOCUST_OF_CONQUEST = 5, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_HEART (10) */ +declare enum HeartSubType { + HEART_FULL = 1, + HEART_HALF = 2, + HEART_SOUL = 3, + HEART_ETERNAL = 4, + HEART_DOUBLEPACK = 5, + HEART_BLACK = 6, + HEART_GOLDEN = 7, + HEART_HALF_SOUL = 8, + HEART_SCARED = 9, + HEART_BLENDED = 10, + HEART_BONE = 11, + HEART_ROTTEN = 12, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_COIN (20) */ +declare enum CoinSubType { + COIN_PENNY = 1, + COIN_NICKEL = 2, + COIN_DIME = 3, + COIN_DOUBLEPACK = 4, + COIN_LUCKYPENNY = 5, + COIN_STICKYNICKEL = 6, + COIN_GOLDEN = 7, +} + +/** EntityType.ENTITY_PICKUP (5), For PickupVariant.PICKUP_KEY (30) */ +declare enum KeySubType { + KEY_NORMAL = 1, + KEY_GOLDEN = 2, + KEY_DOUBLEPACK = 3, + KEY_CHARGED = 4, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_BOMB (40) */ +declare enum BombSubType { + BOMB_NORMAL = 1, + BOMB_DOUBLEPACK = 2, + BOMB_TROLL = 3, + BOMB_GOLDEN = 4, + BOMB_SUPERTROLL = 5, + BOMB_GOLDENTROLL = 6, + BOMB_GIGA = 7, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_POOP (42) */ +declare enum PoopPickupSubType { + POOP_SMALL = 0, + POOP_BIG = 1, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_CHEST (50) */ +declare enum ChestSubType { + CHEST_OPENED = 0, + CHEST_CLOSED = 1, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_GRAB_BAG (69) */ +declare enum SackSubType { + SACK_NORMAL = 1, + SACK_BLACK = 2, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_LIL_BATTERY (90) */ +declare enum BatterySubType { + BATTERY_NORMAL = 1, + BATTERY_MICRO = 2, + BATTERY_MEGA = 3, + BATTERY_GOLDEN = 4, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_COLLECTIBLE (100) */ +declare enum CollectibleType { + COLLECTIBLE_NULL = 0, + COLLECTIBLE_SAD_ONION = 1, + COLLECTIBLE_INNER_EYE = 2, + COLLECTIBLE_SPOON_BENDER = 3, + COLLECTIBLE_CRICKETS_HEAD = 4, + COLLECTIBLE_MY_REFLECTION = 5, + COLLECTIBLE_NUMBER_ONE = 6, + COLLECTIBLE_BLOOD_OF_THE_MARTYR = 7, + COLLECTIBLE_BROTHER_BOBBY = 8, + COLLECTIBLE_SKATOLE = 9, + COLLECTIBLE_HALO_OF_FLIES = 10, + COLLECTIBLE_1UP = 11, + COLLECTIBLE_MAGIC_MUSHROOM = 12, + COLLECTIBLE_VIRUS = 13, + COLLECTIBLE_ROID_RAGE = 14, + COLLECTIBLE_HEART = 15, + COLLECTIBLE_RAW_LIVER = 16, + COLLECTIBLE_SKELETON_KEY = 17, + COLLECTIBLE_DOLLAR = 18, + COLLECTIBLE_BOOM = 19, + COLLECTIBLE_TRANSCENDENCE = 20, + COLLECTIBLE_COMPASS = 21, + COLLECTIBLE_LUNCH = 22, + COLLECTIBLE_DINNER = 23, + COLLECTIBLE_DESSERT = 24, + COLLECTIBLE_BREAKFAST = 25, + COLLECTIBLE_ROTTEN_MEAT = 26, + COLLECTIBLE_WOODEN_SPOON = 27, + COLLECTIBLE_BELT = 28, + COLLECTIBLE_MOMS_UNDERWEAR = 29, + COLLECTIBLE_MOMS_HEELS = 30, + COLLECTIBLE_MOMS_LIPSTICK = 31, + COLLECTIBLE_WIRE_COAT_HANGER = 32, + COLLECTIBLE_BIBLE = 33, + COLLECTIBLE_BOOK_OF_BELIAL = 34, + COLLECTIBLE_NECRONOMICON = 35, + COLLECTIBLE_POOP = 36, + COLLECTIBLE_MR_BOOM = 37, + COLLECTIBLE_TAMMYS_HEAD = 38, + COLLECTIBLE_MOMS_BRA = 39, + COLLECTIBLE_KAMIKAZE = 40, + COLLECTIBLE_MOMS_PAD = 41, + COLLECTIBLE_BOBS_ROTTEN_HEAD = 42, + COLLECTIBLE_TELEPORT = 44, + COLLECTIBLE_YUM_HEART = 45, + COLLECTIBLE_LUCKY_FOOT = 46, + COLLECTIBLE_DOCTORS_REMOTE = 47, + COLLECTIBLE_CUPIDS_ARROW = 48, + COLLECTIBLE_SHOOP_DA_WHOOP = 49, + COLLECTIBLE_STEVEN = 50, + COLLECTIBLE_PENTAGRAM = 51, + COLLECTIBLE_DR_FETUS = 52, + COLLECTIBLE_MAGNETO = 53, + COLLECTIBLE_TREASURE_MAP = 54, + COLLECTIBLE_MOMS_EYE = 55, + COLLECTIBLE_LEMON_MISHAP = 56, + COLLECTIBLE_DISTANT_ADMIRATION = 57, + COLLECTIBLE_BOOK_OF_SHADOWS = 58, + COLLECTIBLE_LADDER = 60, + COLLECTIBLE_CHARM_VAMPIRE = 62, + COLLECTIBLE_BATTERY = 63, + COLLECTIBLE_STEAM_SALE = 64, + COLLECTIBLE_ANARCHIST_COOKBOOK = 65, + COLLECTIBLE_HOURGLASS = 66, + COLLECTIBLE_SISTER_MAGGY = 67, + COLLECTIBLE_TECHNOLOGY = 68, + COLLECTIBLE_CHOCOLATE_MILK = 69, + COLLECTIBLE_GROWTH_HORMONES = 70, + COLLECTIBLE_MINI_MUSH = 71, + COLLECTIBLE_ROSARY = 72, + COLLECTIBLE_CUBE_OF_MEAT = 73, + COLLECTIBLE_QUARTER = 74, + COLLECTIBLE_PHD = 75, + COLLECTIBLE_XRAY_VISION = 76, + COLLECTIBLE_MY_LITTLE_UNICORN = 77, + COLLECTIBLE_BOOK_OF_REVELATIONS = 78, + COLLECTIBLE_MARK = 79, + COLLECTIBLE_PACT = 80, + COLLECTIBLE_DEAD_CAT = 81, + COLLECTIBLE_LORD_OF_THE_PIT = 82, + COLLECTIBLE_THE_NAIL = 83, + COLLECTIBLE_WE_NEED_TO_GO_DEEPER = 84, + COLLECTIBLE_DECK_OF_CARDS = 85, + COLLECTIBLE_MONSTROS_TOOTH = 86, + COLLECTIBLE_LOKIS_HORNS = 87, + COLLECTIBLE_LITTLE_CHUBBY = 88, + COLLECTIBLE_SPIDER_BITE = 89, + COLLECTIBLE_SMALL_ROCK = 90, + COLLECTIBLE_SPELUNKER_HAT = 91, + COLLECTIBLE_SUPER_BANDAGE = 92, + COLLECTIBLE_GAMEKID = 93, + COLLECTIBLE_SACK_OF_PENNIES = 94, + COLLECTIBLE_ROBO_BABY = 95, + COLLECTIBLE_LITTLE_CHAD = 96, + COLLECTIBLE_BOOK_OF_SIN = 97, + COLLECTIBLE_RELIC = 98, + COLLECTIBLE_LITTLE_GISH = 99, + COLLECTIBLE_LITTLE_STEVEN = 100, + COLLECTIBLE_HALO = 101, + COLLECTIBLE_MOMS_BOTTLE_OF_PILLS = 102, + COLLECTIBLE_COMMON_COLD = 103, + COLLECTIBLE_PARASITE = 104, + COLLECTIBLE_D6 = 105, + COLLECTIBLE_MR_MEGA = 106, + COLLECTIBLE_PINKING_SHEARS = 107, + COLLECTIBLE_WAFER = 108, + COLLECTIBLE_MONEY_EQUALS_POWER = 109, + COLLECTIBLE_MOMS_CONTACTS = 110, + COLLECTIBLE_BEAN = 111, + COLLECTIBLE_GUARDIAN_ANGEL = 112, + COLLECTIBLE_DEMON_BABY = 113, + COLLECTIBLE_MOMS_KNIFE = 114, + COLLECTIBLE_OUIJA_BOARD = 115, + COLLECTIBLE_9_VOLT = 116, + COLLECTIBLE_DEAD_BIRD = 117, + COLLECTIBLE_BRIMSTONE = 118, + COLLECTIBLE_BLOOD_BAG = 119, + COLLECTIBLE_ODD_MUSHROOM_THIN = 120, + COLLECTIBLE_ODD_MUSHROOM_LARGE = 121, + COLLECTIBLE_WHORE_OF_BABYLON = 122, + COLLECTIBLE_MONSTER_MANUAL = 123, + COLLECTIBLE_DEAD_SEA_SCROLLS = 124, + COLLECTIBLE_BOBBY_BOMB = 125, + COLLECTIBLE_RAZOR_BLADE = 126, + COLLECTIBLE_FORGET_ME_NOW = 127, + COLLECTIBLE_FOREVER_ALONE = 128, + COLLECTIBLE_BUCKET_OF_LARD = 129, + COLLECTIBLE_PONY = 130, + COLLECTIBLE_BOMB_BAG = 131, + COLLECTIBLE_LUMP_OF_COAL = 132, + COLLECTIBLE_GUPPYS_PAW = 133, + COLLECTIBLE_GUPPYS_TAIL = 134, + COLLECTIBLE_IV_BAG = 135, + COLLECTIBLE_BEST_FRIEND = 136, + COLLECTIBLE_REMOTE_DETONATOR = 137, + COLLECTIBLE_STIGMATA = 138, + COLLECTIBLE_MOMS_PURSE = 139, + COLLECTIBLE_BOBS_CURSE = 140, + COLLECTIBLE_PAGEANT_BOY = 141, + COLLECTIBLE_SCAPULAR = 142, + COLLECTIBLE_SPEED_BALL = 143, + COLLECTIBLE_BUM_FRIEND = 144, + COLLECTIBLE_GUPPYS_HEAD = 145, + COLLECTIBLE_PRAYER_CARD = 146, + COLLECTIBLE_NOTCHED_AXE = 147, + COLLECTIBLE_INFESTATION = 148, + COLLECTIBLE_IPECAC = 149, + COLLECTIBLE_TOUGH_LOVE = 150, + COLLECTIBLE_MULLIGAN = 151, + COLLECTIBLE_TECHNOLOGY_2 = 152, + COLLECTIBLE_MUTANT_SPIDER = 153, + COLLECTIBLE_CHEMICAL_PEEL = 154, + COLLECTIBLE_PEEPER = 155, + COLLECTIBLE_HABIT = 156, + COLLECTIBLE_BLOODY_LUST = 157, + COLLECTIBLE_CRYSTAL_BALL = 158, + COLLECTIBLE_SPIRIT_OF_THE_NIGHT = 159, + COLLECTIBLE_CRACK_THE_SKY = 160, + COLLECTIBLE_ANKH = 161, + COLLECTIBLE_CELTIC_CROSS = 162, + COLLECTIBLE_GHOST_BABY = 163, + COLLECTIBLE_CANDLE = 164, + COLLECTIBLE_CAT_O_NINE_TAILS = 165, + COLLECTIBLE_D20 = 166, + COLLECTIBLE_HARLEQUIN_BABY = 167, + COLLECTIBLE_EPIC_FETUS = 168, + COLLECTIBLE_POLYPHEMUS = 169, + COLLECTIBLE_DADDY_LONGLEGS = 170, + COLLECTIBLE_SPIDER_BUTT = 171, + COLLECTIBLE_SACRIFICIAL_DAGGER = 172, + COLLECTIBLE_MITRE = 173, + COLLECTIBLE_RAINBOW_BABY = 174, + COLLECTIBLE_DADS_KEY = 175, + COLLECTIBLE_STEM_CELLS = 176, + COLLECTIBLE_PORTABLE_SLOT = 177, + COLLECTIBLE_HOLY_WATER = 178, + COLLECTIBLE_FATE = 179, + COLLECTIBLE_BLACK_BEAN = 180, + COLLECTIBLE_WHITE_PONY = 181, + COLLECTIBLE_SACRED_HEART = 182, + COLLECTIBLE_TOOTH_PICKS = 183, + COLLECTIBLE_HOLY_GRAIL = 184, + COLLECTIBLE_DEAD_DOVE = 185, + COLLECTIBLE_BLOOD_RIGHTS = 186, + COLLECTIBLE_GUPPYS_HAIRBALL = 187, + COLLECTIBLE_ABEL = 188, + COLLECTIBLE_SMB_SUPER_FAN = 189, + COLLECTIBLE_PYRO = 190, + COLLECTIBLE_3_DOLLAR_BILL = 191, + COLLECTIBLE_TELEPATHY_BOOK = 192, + COLLECTIBLE_MEAT = 193, + COLLECTIBLE_MAGIC_8_BALL = 194, + COLLECTIBLE_MOMS_COIN_PURSE = 195, + COLLECTIBLE_SQUEEZY = 196, + COLLECTIBLE_JESUS_JUICE = 197, + COLLECTIBLE_BOX = 198, + COLLECTIBLE_MOMS_KEY = 199, + COLLECTIBLE_MOMS_EYESHADOW = 200, + COLLECTIBLE_IRON_BAR = 201, + COLLECTIBLE_MIDAS_TOUCH = 202, + COLLECTIBLE_HUMBLEING_BUNDLE = 203, + COLLECTIBLE_FANNY_PACK = 204, + COLLECTIBLE_SHARP_PLUG = 205, + COLLECTIBLE_GUILLOTINE = 206, + COLLECTIBLE_BALL_OF_BANDAGES = 207, + COLLECTIBLE_CHAMPION_BELT = 208, + COLLECTIBLE_BUTT_BOMBS = 209, + COLLECTIBLE_GNAWED_LEAF = 210, + COLLECTIBLE_SPIDERBABY = 211, + COLLECTIBLE_GUPPYS_COLLAR = 212, + COLLECTIBLE_LOST_CONTACT = 213, + COLLECTIBLE_ANEMIC = 214, + COLLECTIBLE_GOAT_HEAD = 215, + COLLECTIBLE_CEREMONIAL_ROBES = 216, + COLLECTIBLE_MOMS_WIG = 217, + COLLECTIBLE_PLACENTA = 218, + COLLECTIBLE_OLD_BANDAGE = 219, + COLLECTIBLE_SAD_BOMBS = 220, + COLLECTIBLE_RUBBER_CEMENT = 221, + COLLECTIBLE_ANTI_GRAVITY = 222, + COLLECTIBLE_PYROMANIAC = 223, + COLLECTIBLE_CRICKETS_BODY = 224, + COLLECTIBLE_GIMPY = 225, + COLLECTIBLE_BLACK_LOTUS = 226, + COLLECTIBLE_PIGGY_BANK = 227, + COLLECTIBLE_MOMS_PERFUME = 228, + COLLECTIBLE_MONSTROS_LUNG = 229, + COLLECTIBLE_ABADDON = 230, + COLLECTIBLE_BALL_OF_TAR = 231, + COLLECTIBLE_STOP_WATCH = 232, + COLLECTIBLE_TINY_PLANET = 233, + COLLECTIBLE_INFESTATION_2 = 234, + COLLECTIBLE_E_COLI = 236, + COLLECTIBLE_DEATHS_TOUCH = 237, + COLLECTIBLE_KEY_PIECE_1 = 238, + COLLECTIBLE_KEY_PIECE_2 = 239, + COLLECTIBLE_EXPERIMENTAL_TREATMENT = 240, + COLLECTIBLE_CONTRACT_FROM_BELOW = 241, + COLLECTIBLE_INFAMY = 242, + COLLECTIBLE_TRINITY_SHIELD = 243, + COLLECTIBLE_TECH_5 = 244, + COLLECTIBLE_20_20 = 245, + COLLECTIBLE_BLUE_MAP = 246, + COLLECTIBLE_BFFS = 247, + COLLECTIBLE_HIVE_MIND = 248, + COLLECTIBLE_THERES_OPTIONS = 249, + COLLECTIBLE_BOGO_BOMBS = 250, + COLLECTIBLE_STARTER_DECK = 251, + COLLECTIBLE_LITTLE_BAGGY = 252, + COLLECTIBLE_MAGIC_SCAB = 253, + COLLECTIBLE_BLOOD_CLOT = 254, + COLLECTIBLE_SCREW = 255, + COLLECTIBLE_HOT_BOMBS = 256, + COLLECTIBLE_FIRE_MIND = 257, + COLLECTIBLE_MISSING_NO = 258, + COLLECTIBLE_DARK_MATTER = 259, + COLLECTIBLE_BLACK_CANDLE = 260, + COLLECTIBLE_PROPTOSIS = 261, + COLLECTIBLE_MISSING_PAGE_2 = 262, + COLLECTIBLE_CLEAR_RUNE = 263, + COLLECTIBLE_SMART_FLY = 264, + COLLECTIBLE_DRY_BABY = 265, + COLLECTIBLE_JUICY_SACK = 266, + COLLECTIBLE_ROBO_BABY_2 = 267, + COLLECTIBLE_ROTTEN_BABY = 268, + COLLECTIBLE_HEADLESS_BABY = 269, + COLLECTIBLE_LEECH = 270, + COLLECTIBLE_MYSTERY_SACK = 271, + COLLECTIBLE_BBF = 272, + COLLECTIBLE_BOBS_BRAIN = 273, + COLLECTIBLE_BEST_BUD = 274, + COLLECTIBLE_LIL_BRIMSTONE = 275, + COLLECTIBLE_ISAACS_HEART = 276, + COLLECTIBLE_LIL_HAUNT = 277, + COLLECTIBLE_DARK_BUM = 278, + COLLECTIBLE_BIG_FAN = 279, + COLLECTIBLE_SISSY_LONGLEGS = 280, + COLLECTIBLE_PUNCHING_BAG = 281, + COLLECTIBLE_HOW_TO_JUMP = 282, + COLLECTIBLE_D100 = 283, + COLLECTIBLE_D4 = 284, + COLLECTIBLE_D10 = 285, + COLLECTIBLE_BLANK_CARD = 286, + COLLECTIBLE_BOOK_OF_SECRETS = 287, + COLLECTIBLE_BOX_OF_SPIDERS = 288, + COLLECTIBLE_RED_CANDLE = 289, + COLLECTIBLE_THE_JAR = 290, + COLLECTIBLE_FLUSH = 291, + COLLECTIBLE_SATANIC_BIBLE = 292, + COLLECTIBLE_HEAD_OF_KRAMPUS = 293, + COLLECTIBLE_BUTTER_BEAN = 294, + COLLECTIBLE_MAGIC_FINGERS = 295, + COLLECTIBLE_CONVERTER = 296, + COLLECTIBLE_BLUE_BOX = 297, + COLLECTIBLE_UNICORN_STUMP = 298, + COLLECTIBLE_TAURUS = 299, + COLLECTIBLE_ARIES = 300, + COLLECTIBLE_CANCER = 301, + COLLECTIBLE_LEO = 302, + COLLECTIBLE_VIRGO = 303, + COLLECTIBLE_LIBRA = 304, + COLLECTIBLE_SCORPIO = 305, + COLLECTIBLE_SAGITTARIUS = 306, + COLLECTIBLE_CAPRICORN = 307, + COLLECTIBLE_AQUARIUS = 308, + COLLECTIBLE_PISCES = 309, + COLLECTIBLE_EVES_MASCARA = 310, + COLLECTIBLE_JUDAS_SHADOW = 311, + COLLECTIBLE_MAGGYS_BOW = 312, + COLLECTIBLE_HOLY_MANTLE = 313, + COLLECTIBLE_THUNDER_THIGHS = 314, + COLLECTIBLE_STRANGE_ATTRACTOR = 315, + COLLECTIBLE_CURSED_EYE = 316, + COLLECTIBLE_MYSTERIOUS_LIQUID = 317, + COLLECTIBLE_GEMINI = 318, + COLLECTIBLE_CAINS_OTHER_EYE = 319, + COLLECTIBLE_BLUE_BABYS_ONLY_FRIEND = 320, + COLLECTIBLE_SAMSONS_CHAINS = 321, + COLLECTIBLE_MONGO_BABY = 322, + COLLECTIBLE_ISAACS_TEARS = 323, + COLLECTIBLE_UNDEFINED = 324, + COLLECTIBLE_SCISSORS = 325, + COLLECTIBLE_BREATH_OF_LIFE = 326, + COLLECTIBLE_POLAROID = 327, + COLLECTIBLE_NEGATIVE = 328, + COLLECTIBLE_LUDOVICO_TECHNIQUE = 329, + COLLECTIBLE_SOY_MILK = 330, + COLLECTIBLE_GODHEAD = 331, + COLLECTIBLE_LAZARUS_RAGS = 332, + COLLECTIBLE_MIND = 333, + COLLECTIBLE_BODY = 334, + COLLECTIBLE_SOUL = 335, + COLLECTIBLE_DEAD_ONION = 336, + COLLECTIBLE_BROKEN_WATCH = 337, + COLLECTIBLE_BOOMERANG = 338, + COLLECTIBLE_SAFETY_PIN = 339, + COLLECTIBLE_CAFFEINE_PILL = 340, + COLLECTIBLE_TORN_PHOTO = 341, + COLLECTIBLE_BLUE_CAP = 342, + COLLECTIBLE_LATCH_KEY = 343, + COLLECTIBLE_MATCH_BOOK = 344, + COLLECTIBLE_SYNTHOIL = 345, + COLLECTIBLE_SNACK = 346, + COLLECTIBLE_DIPLOPIA = 347, + COLLECTIBLE_PLACEBO = 348, + COLLECTIBLE_WOODEN_NICKEL = 349, + COLLECTIBLE_TOXIC_SHOCK = 350, + COLLECTIBLE_MEGA_BEAN = 351, + COLLECTIBLE_GLASS_CANNON = 352, + COLLECTIBLE_BOMBER_BOY = 353, + COLLECTIBLE_CRACK_JACKS = 354, + COLLECTIBLE_MOMS_PEARLS = 355, + COLLECTIBLE_CAR_BATTERY = 356, + COLLECTIBLE_BOX_OF_FRIENDS = 357, + COLLECTIBLE_THE_WIZ = 358, + COLLECTIBLE_8_INCH_NAILS = 359, + COLLECTIBLE_INCUBUS = 360, + COLLECTIBLE_FATES_REWARD = 361, + COLLECTIBLE_LIL_CHEST = 362, + COLLECTIBLE_SWORN_PROTECTOR = 363, + COLLECTIBLE_FRIEND_ZONE = 364, + COLLECTIBLE_LOST_FLY = 365, + COLLECTIBLE_SCATTER_BOMBS = 366, + COLLECTIBLE_STICKY_BOMBS = 367, + COLLECTIBLE_EPIPHORA = 368, + COLLECTIBLE_CONTINUUM = 369, + COLLECTIBLE_MR_DOLLY = 370, + COLLECTIBLE_CURSE_OF_THE_TOWER = 371, + COLLECTIBLE_CHARGED_BABY = 372, + COLLECTIBLE_DEAD_EYE = 373, + COLLECTIBLE_HOLY_LIGHT = 374, + COLLECTIBLE_HOST_HAT = 375, + COLLECTIBLE_RESTOCK = 376, + COLLECTIBLE_BURSTING_SACK = 377, + COLLECTIBLE_NUMBER_TWO = 378, + COLLECTIBLE_PUPULA_DUPLEX = 379, + COLLECTIBLE_PAY_TO_PLAY = 380, + COLLECTIBLE_EDENS_BLESSING = 381, + COLLECTIBLE_FRIEND_BALL = 382, + COLLECTIBLE_TEAR_DETONATOR = 383, + COLLECTIBLE_LIL_GURDY = 384, + COLLECTIBLE_BUMBO = 385, + COLLECTIBLE_D12 = 386, + COLLECTIBLE_CENSER = 387, + COLLECTIBLE_KEY_BUM = 388, + COLLECTIBLE_RUNE_BAG = 389, + COLLECTIBLE_SERAPHIM = 390, + COLLECTIBLE_BETRAYAL = 391, + COLLECTIBLE_ZODIAC = 392, + COLLECTIBLE_SERPENTS_KISS = 393, + COLLECTIBLE_MARKED = 394, + COLLECTIBLE_TECH_X = 395, + COLLECTIBLE_VENTRICLE_RAZOR = 396, + COLLECTIBLE_TRACTOR_BEAM = 397, + COLLECTIBLE_GODS_FLESH = 398, + COLLECTIBLE_MAW_OF_THE_VOID = 399, + COLLECTIBLE_SPEAR_OF_DESTINY = 400, + COLLECTIBLE_EXPLOSIVO = 401, + COLLECTIBLE_CHAOS = 402, + COLLECTIBLE_SPIDER_MOD = 403, + COLLECTIBLE_FARTING_BABY = 404, + COLLECTIBLE_GB_BUG = 405, + COLLECTIBLE_D8 = 406, + COLLECTIBLE_PURITY = 407, + COLLECTIBLE_ATHAME = 408, + COLLECTIBLE_EMPTY_VESSEL = 409, + COLLECTIBLE_EVIL_EYE = 410, + COLLECTIBLE_LUSTY_BLOOD = 411, + COLLECTIBLE_CAMBION_CONCEPTION = 412, + COLLECTIBLE_IMMACULATE_CONCEPTION = 413, + COLLECTIBLE_MORE_OPTIONS = 414, + COLLECTIBLE_CROWN_OF_LIGHT = 415, + COLLECTIBLE_DEEP_POCKETS = 416, + COLLECTIBLE_SUCCUBUS = 417, + COLLECTIBLE_FRUIT_CAKE = 418, + COLLECTIBLE_TELEPORT_2 = 419, + COLLECTIBLE_BLACK_POWDER = 420, + COLLECTIBLE_KIDNEY_BEAN = 421, + COLLECTIBLE_GLOWING_HOUR_GLASS = 422, + COLLECTIBLE_CIRCLE_OF_PROTECTION = 423, + COLLECTIBLE_SACK_HEAD = 424, + COLLECTIBLE_NIGHT_LIGHT = 425, + COLLECTIBLE_OBSESSED_FAN = 426, + COLLECTIBLE_MINE_CRAFTER = 427, + COLLECTIBLE_PJS = 428, + COLLECTIBLE_HEAD_OF_THE_KEEPER = 429, + COLLECTIBLE_PAPA_FLY = 430, + COLLECTIBLE_MULTIDIMENSIONAL_BABY = 431, + COLLECTIBLE_GLITTER_BOMBS = 432, + COLLECTIBLE_MY_SHADOW = 433, + COLLECTIBLE_JAR_OF_FLIES = 434, + COLLECTIBLE_LIL_LOKI = 435, + COLLECTIBLE_MILK = 436, + COLLECTIBLE_D7 = 437, + COLLECTIBLE_BINKY = 438, + COLLECTIBLE_MOMS_BOX = 439, + COLLECTIBLE_KIDNEY_STONE = 440, + COLLECTIBLE_MEGA_BLAST = 441, + COLLECTIBLE_DARK_PRINCES_CROWN = 442, + COLLECTIBLE_APPLE = 443, + COLLECTIBLE_LEAD_PENCIL = 444, + COLLECTIBLE_DOG_TOOTH = 445, + COLLECTIBLE_DEAD_TOOTH = 446, + COLLECTIBLE_LINGER_BEAN = 447, + COLLECTIBLE_SHARD_OF_GLASS = 448, + COLLECTIBLE_METAL_PLATE = 449, + COLLECTIBLE_EYE_OF_GREED = 450, + COLLECTIBLE_TAROT_CLOTH = 451, + COLLECTIBLE_VARICOSE_VEINS = 452, + COLLECTIBLE_COMPOUND_FRACTURE = 453, + COLLECTIBLE_POLYDACTYLY = 454, + COLLECTIBLE_DADS_LOST_COIN = 455, + COLLECTIBLE_MIDNIGHT_SNACK = 456, + COLLECTIBLE_CONE_HEAD = 457, + COLLECTIBLE_BELLY_BUTTON = 458, + COLLECTIBLE_SINUS_INFECTION = 459, + COLLECTIBLE_GLAUCOMA = 460, + COLLECTIBLE_PARASITOID = 461, + COLLECTIBLE_EYE_OF_BELIAL = 462, + COLLECTIBLE_SULFURIC_ACID = 463, + COLLECTIBLE_GLYPH_OF_BALANCE = 464, + COLLECTIBLE_ANALOG_STICK = 465, + COLLECTIBLE_CONTAGION = 466, + COLLECTIBLE_FINGER = 467, + COLLECTIBLE_SHADE = 468, + COLLECTIBLE_DEPRESSION = 469, + COLLECTIBLE_HUSHY = 470, + COLLECTIBLE_LIL_MONSTRO = 471, + COLLECTIBLE_KING_BABY = 472, + COLLECTIBLE_BIG_CHUBBY = 473, + COLLECTIBLE_BROKEN_GLASS_CANNON = 474, + COLLECTIBLE_PLAN_C = 475, + COLLECTIBLE_D1 = 476, + COLLECTIBLE_VOID = 477, + COLLECTIBLE_PAUSE = 478, + COLLECTIBLE_SMELTER = 479, + COLLECTIBLE_COMPOST = 480, + COLLECTIBLE_DATAMINER = 481, + COLLECTIBLE_CLICKER = 482, + COLLECTIBLE_MAMA_MEGA = 483, + COLLECTIBLE_WAIT_WHAT = 484, + COLLECTIBLE_CROOKED_PENNY = 485, + COLLECTIBLE_DULL_RAZOR = 486, + COLLECTIBLE_POTATO_PEELER = 487, + COLLECTIBLE_METRONOME = 488, + COLLECTIBLE_D_INFINITY = 489, + COLLECTIBLE_EDENS_SOUL = 490, + COLLECTIBLE_ACID_BABY = 491, + COLLECTIBLE_YO_LISTEN = 492, + COLLECTIBLE_ADRENALINE = 493, + COLLECTIBLE_JACOBS_LADDER = 494, + COLLECTIBLE_GHOST_PEPPER = 495, + COLLECTIBLE_EUTHANASIA = 496, + COLLECTIBLE_CAMO_UNDIES = 497, + COLLECTIBLE_DUALITY = 498, + COLLECTIBLE_EUCHARIST = 499, + COLLECTIBLE_SACK_OF_SACKS = 500, + COLLECTIBLE_GREEDS_GULLET = 501, + COLLECTIBLE_LARGE_ZIT = 502, + COLLECTIBLE_LITTLE_HORN = 503, + COLLECTIBLE_BROWN_NUGGET = 504, + COLLECTIBLE_POKE_GO = 505, + COLLECTIBLE_BACKSTABBER = 506, + COLLECTIBLE_SHARP_STRAW = 507, + COLLECTIBLE_MOMS_RAZOR = 508, + COLLECTIBLE_BLOODSHOT_EYE = 509, + COLLECTIBLE_DELIRIOUS = 510, + COLLECTIBLE_ANGRY_FLY = 511, + COLLECTIBLE_BLACK_HOLE = 512, + COLLECTIBLE_BOZO = 513, + COLLECTIBLE_BROKEN_MODEM = 514, + COLLECTIBLE_MYSTERY_GIFT = 515, + COLLECTIBLE_SPRINKLER = 516, + COLLECTIBLE_FAST_BOMBS = 517, + COLLECTIBLE_BUDDY_IN_A_BOX = 518, + COLLECTIBLE_LIL_DELIRIUM = 519, + COLLECTIBLE_JUMPER_CABLES = 520, + COLLECTIBLE_COUPON = 521, + COLLECTIBLE_TELEKINESIS = 522, + COLLECTIBLE_MOVING_BOX = 523, + COLLECTIBLE_TECHNOLOGY_ZERO = 524, + COLLECTIBLE_LEPROSY = 525, + COLLECTIBLE_7_SEALS = 526, + COLLECTIBLE_MR_ME = 527, + COLLECTIBLE_ANGELIC_PRISM = 528, + COLLECTIBLE_POP = 529, + COLLECTIBLE_DEATHS_LIST = 530, + COLLECTIBLE_HAEMOLACRIA = 531, + COLLECTIBLE_LACHRYPHAGY = 532, + COLLECTIBLE_TRISAGION = 533, + COLLECTIBLE_SCHOOLBAG = 534, + COLLECTIBLE_BLANKET = 535, + COLLECTIBLE_SACRIFICIAL_ALTAR = 536, + COLLECTIBLE_LIL_SPEWER = 537, + COLLECTIBLE_MARBLES = 538, + COLLECTIBLE_MYSTERY_EGG = 539, + COLLECTIBLE_FLAT_STONE = 540, + COLLECTIBLE_MARROW = 541, + COLLECTIBLE_SLIPPED_RIB = 542, + COLLECTIBLE_HALLOWED_GROUND = 543, + COLLECTIBLE_POINTY_RIB = 544, + COLLECTIBLE_BOOK_OF_THE_DEAD = 545, + COLLECTIBLE_DADS_RING = 546, + COLLECTIBLE_DIVORCE_PAPERS = 547, + COLLECTIBLE_JAW_BONE = 548, + COLLECTIBLE_BRITTLE_BONES = 549, + COLLECTIBLE_BROKEN_SHOVEL_1 = 550, + COLLECTIBLE_BROKEN_SHOVEL_2 = 551, + COLLECTIBLE_MOMS_SHOVEL = 552, + COLLECTIBLE_MUCORMYCOSIS = 553, + COLLECTIBLE_2SPOOKY = 554, + COLLECTIBLE_GOLDEN_RAZOR = 555, + COLLECTIBLE_SULFUR = 556, + COLLECTIBLE_FORTUNE_COOKIE = 557, + COLLECTIBLE_EYE_SORE = 558, + COLLECTIBLE_120_VOLT = 559, + COLLECTIBLE_IT_HURTS = 560, + COLLECTIBLE_ALMOND_MILK = 561, + COLLECTIBLE_ROCK_BOTTOM = 562, + COLLECTIBLE_NANCY_BOMBS = 563, + COLLECTIBLE_BAR_OF_SOAP = 564, + COLLECTIBLE_BLOOD_PUPPY = 565, + COLLECTIBLE_DREAM_CATCHER = 566, + COLLECTIBLE_PASCHAL_CANDLE = 567, + COLLECTIBLE_DIVINE_INTERVENTION = 568, + COLLECTIBLE_BLOOD_OATH = 569, + COLLECTIBLE_PLAYDOUGH_COOKIE = 570, + COLLECTIBLE_SOCKS = 571, + COLLECTIBLE_EYE_OF_THE_OCCULT = 572, + COLLECTIBLE_IMMACULATE_HEART = 573, + COLLECTIBLE_MONSTRANCE = 574, + COLLECTIBLE_INTRUDER = 575, + COLLECTIBLE_DIRTY_MIND = 576, + COLLECTIBLE_DAMOCLES = 577, + COLLECTIBLE_FREE_LEMONADE = 578, + COLLECTIBLE_SPIRIT_SWORD = 579, + COLLECTIBLE_RED_KEY = 580, + COLLECTIBLE_PSY_FLY = 581, + COLLECTIBLE_WAVY_CAP = 582, + COLLECTIBLE_ROCKET_IN_A_JAR = 583, + COLLECTIBLE_BOOK_OF_VIRTUES = 584, + COLLECTIBLE_ALABASTER_BOX = 585, + COLLECTIBLE_STAIRWAY = 586, + COLLECTIBLE_SOL = 588, + COLLECTIBLE_LUNA = 589, + COLLECTIBLE_MERCURIUS = 590, + COLLECTIBLE_VENUS = 591, + COLLECTIBLE_TERRA = 592, + COLLECTIBLE_MARS = 593, + COLLECTIBLE_JUPITER = 594, + COLLECTIBLE_SATURNUS = 595, + COLLECTIBLE_URANUS = 596, + COLLECTIBLE_NEPTUNUS = 597, + COLLECTIBLE_PLUTO = 598, + COLLECTIBLE_VOODOO_HEAD = 599, + COLLECTIBLE_EYE_DROPS = 600, + COLLECTIBLE_ACT_OF_CONTRITION = 601, + COLLECTIBLE_MEMBER_CARD = 602, + COLLECTIBLE_BATTERY_PACK = 603, + COLLECTIBLE_MOMS_BRACELET = 604, + COLLECTIBLE_SCOOPER = 605, + COLLECTIBLE_OCULAR_RIFT = 606, + COLLECTIBLE_BOILED_BABY = 607, + COLLECTIBLE_FREEZER_BABY = 608, + COLLECTIBLE_ETERNAL_D6 = 609, + COLLECTIBLE_BIRD_CAGE = 610, + COLLECTIBLE_LARYNX = 611, + COLLECTIBLE_LOST_SOUL = 612, + COLLECTIBLE_BLOOD_BOMBS = 614, + COLLECTIBLE_LIL_DUMPY = 615, + COLLECTIBLE_BIRDS_EYE = 616, + COLLECTIBLE_LODESTONE = 617, + COLLECTIBLE_ROTTEN_TOMATO = 618, + COLLECTIBLE_BIRTHRIGHT = 619, + COLLECTIBLE_RED_STEW = 621, + COLLECTIBLE_GENESIS = 622, + COLLECTIBLE_SHARP_KEY = 623, + COLLECTIBLE_BOOSTER_PACK = 624, + COLLECTIBLE_MEGA_MUSH = 625, + COLLECTIBLE_KNIFE_PIECE_1 = 626, + COLLECTIBLE_KNIFE_PIECE_2 = 627, + COLLECTIBLE_DEATH_CERTIFICATE = 628, + COLLECTIBLE_BOT_FLY = 629, + COLLECTIBLE_MEAT_CLEAVER = 631, + COLLECTIBLE_EVIL_CHARM = 632, + COLLECTIBLE_DOGMA = 633, + COLLECTIBLE_PURGATORY = 634, + COLLECTIBLE_STITCHES = 635, + COLLECTIBLE_R_KEY = 636, + COLLECTIBLE_KNOCKOUT_DROPS = 637, + COLLECTIBLE_ERASER = 638, + COLLECTIBLE_YUCK_HEART = 639, + COLLECTIBLE_URN_OF_SOULS = 640, + COLLECTIBLE_AKELDAMA = 641, + COLLECTIBLE_MAGIC_SKIN = 642, + COLLECTIBLE_REVELATION = 643, + COLLECTIBLE_CONSOLATION_PRIZE = 644, + COLLECTIBLE_TINYTOMA = 645, + COLLECTIBLE_BRIMSTONE_BOMBS = 646, + COLLECTIBLE_4_5_VOLT = 647, + COLLECTIBLE_FRUITY_PLUM = 649, + COLLECTIBLE_PLUM_FLUTE = 650, + COLLECTIBLE_STAR_OF_BETHLEHEM = 651, + COLLECTIBLE_CUBE_BABY = 652, + COLLECTIBLE_VADE_RETRO = 653, + COLLECTIBLE_FALSE_PHD = 654, + COLLECTIBLE_SPIN_TO_WIN = 655, + COLLECTIBLE_DAMOCLES_PASSIVE = 656, + COLLECTIBLE_VASCULITIS = 657, + COLLECTIBLE_GIANT_CELL = 658, + COLLECTIBLE_TROPICAMIDE = 659, + COLLECTIBLE_CARD_READING = 660, + COLLECTIBLE_QUINTS = 661, + COLLECTIBLE_TOOTH_AND_NAIL = 663, + COLLECTIBLE_BINGE_EATER = 664, + COLLECTIBLE_GUPPYS_EYE = 665, + COLLECTIBLE_STRAW_MAN = 667, + COLLECTIBLE_DADS_NOTE = 668, + COLLECTIBLE_SAUSAGE = 669, + COLLECTIBLE_OPTIONS = 670, + COLLECTIBLE_CANDY_HEART = 671, + COLLECTIBLE_POUND_OF_FLESH = 672, + COLLECTIBLE_REDEMPTION = 673, + COLLECTIBLE_SPIRIT_SHACKLES = 674, + COLLECTIBLE_CRACKED_ORB = 675, + COLLECTIBLE_EMPTY_HEART = 676, + COLLECTIBLE_ASTRAL_PROJECTION = 677, + COLLECTIBLE_C_SECTION = 678, + COLLECTIBLE_LIL_ABADDON = 679, + COLLECTIBLE_MONTEZUMAS_REVENGE = 680, + COLLECTIBLE_LIL_PORTAL = 681, + COLLECTIBLE_WORM_FRIEND = 682, + COLLECTIBLE_BONE_SPURS = 683, + COLLECTIBLE_HUNGRY_SOUL = 684, + COLLECTIBLE_JAR_OF_WISPS = 685, + COLLECTIBLE_SOUL_LOCKET = 686, + COLLECTIBLE_FRIEND_FINDER = 687, + COLLECTIBLE_INNER_CHILD = 688, + COLLECTIBLE_GLITCHED_CROWN = 689, + COLLECTIBLE_JELLY_BELLY = 690, + COLLECTIBLE_SACRED_ORB = 691, + COLLECTIBLE_SANGUINE_BOND = 692, + COLLECTIBLE_SWARM = 693, + COLLECTIBLE_HEARTBREAK = 694, + COLLECTIBLE_BLOODY_GUST = 695, + COLLECTIBLE_SALVATION = 696, + COLLECTIBLE_VANISHING_TWIN = 697, + COLLECTIBLE_TWISTED_PAIR = 698, + COLLECTIBLE_AZAZELS_RAGE = 699, + COLLECTIBLE_ECHO_CHAMBER = 700, + COLLECTIBLE_ISAACS_TOMB = 701, + COLLECTIBLE_VENGEFUL_SPIRIT = 702, + COLLECTIBLE_ESAU_JR = 703, + COLLECTIBLE_BERSERK = 704, + COLLECTIBLE_DARK_ARTS = 705, + COLLECTIBLE_ABYSS = 706, + COLLECTIBLE_SUPPER = 707, + COLLECTIBLE_STAPLER = 708, + COLLECTIBLE_SUPLEX = 709, + COLLECTIBLE_BAG_OF_CRAFTING = 710, + COLLECTIBLE_FLIP = 711, + COLLECTIBLE_LEMEGETON = 712, + COLLECTIBLE_SUMPTORIUM = 713, + COLLECTIBLE_RECALL = 714, + COLLECTIBLE_HOLD = 715, + COLLECTIBLE_KEEPERS_SACK = 716, + COLLECTIBLE_KEEPERS_KIN = 717, + COLLECTIBLE_KEEPERS_BOX = 719, + COLLECTIBLE_EVERYTHING_JAR = 720, + COLLECTIBLE_TMTRAINER = 721, + COLLECTIBLE_ANIMA_SOLA = 722, + COLLECTIBLE_SPINDOWN_DICE = 723, + COLLECTIBLE_HYPERCOAGULATION = 724, + COLLECTIBLE_IBS = 725, + COLLECTIBLE_HEMOPTYSIS = 726, + COLLECTIBLE_GHOST_BOMBS = 727, + COLLECTIBLE_GELLO = 728, + COLLECTIBLE_DECAP_ATTACK = 729, + NUM_COLLECTIBLES = 730, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_TAROTCARD (300) */ +declare enum Card { + CARD_RANDOM = -1, + CARD_NULL = 0, + CARD_FOOL = 1, + CARD_MAGICIAN = 2, + CARD_HIGH_PRIESTESS = 3, + CARD_EMPRESS = 4, + CARD_EMPEROR = 5, + CARD_HIEROPHANT = 6, + CARD_LOVERS = 7, + CARD_CHARIOT = 8, + CARD_JUSTICE = 9, + CARD_HERMIT = 10, + CARD_WHEEL_OF_FORTUNE = 11, + CARD_STRENGTH = 12, + CARD_HANGED_MAN = 13, + CARD_DEATH = 14, + CARD_TEMPERANCE = 15, + CARD_DEVIL = 16, + CARD_TOWER = 17, + CARD_STARS = 18, + CARD_MOON = 19, + CARD_SUN = 20, + CARD_JUDGEMENT = 21, + CARD_WORLD = 22, + CARD_CLUBS_2 = 23, + CARD_DIAMONDS_2 = 24, + CARD_SPADES_2 = 25, + CARD_HEARTS_2 = 26, + CARD_ACE_OF_CLUBS = 27, + CARD_ACE_OF_DIAMONDS = 28, + CARD_ACE_OF_SPADES = 29, + CARD_ACE_OF_HEARTS = 30, + CARD_JOKER = 31, + RUNE_HAGALAZ = 32, + RUNE_JERA = 33, + RUNE_EHWAZ = 34, + RUNE_DAGAZ = 35, + RUNE_ANSUZ = 36, + RUNE_PERTHRO = 37, + RUNE_BERKANO = 38, + RUNE_ALGIZ = 39, + RUNE_BLANK = 40, + RUNE_BLACK = 41, + CARD_CHAOS = 42, + CARD_CREDIT = 43, + CARD_RULES = 44, + CARD_HUMANITY = 45, + CARD_SUICIDE_KING = 46, + CARD_GET_OUT_OF_JAIL = 47, + CARD_QUESTIONMARK = 48, + CARD_DICE_SHARD = 49, + CARD_EMERGENCY_CONTACT = 50, + CARD_HOLY = 51, + CARD_HUGE_GROWTH = 52, + CARD_ANCIENT_RECALL = 53, + CARD_ERA_WALK = 54, + RUNE_SHARD = 55, + CARD_REVERSE_FOOL = 56, + CARD_REVERSE_MAGICIAN = 57, + CARD_REVERSE_HIGH_PRIESTESS = 58, + CARD_REVERSE_EMPRESS = 59, + CARD_REVERSE_EMPEROR = 60, + CARD_REVERSE_HIEROPHANT = 61, + CARD_REVERSE_LOVERS = 62, + CARD_REVERSE_CHARIOT = 63, + CARD_REVERSE_JUSTICE = 64, + CARD_REVERSE_HERMIT = 65, + CARD_REVERSE_WHEEL_OF_FORTUNE = 66, + CARD_REVERSE_STRENGTH = 67, + CARD_REVERSE_HANGED_MAN = 68, + CARD_REVERSE_DEATH = 69, + CARD_REVERSE_TEMPERANCE = 70, + CARD_REVERSE_DEVIL = 71, + CARD_REVERSE_TOWER = 72, + CARD_REVERSE_STARS = 73, + CARD_REVERSE_MOON = 74, + CARD_REVERSE_SUN = 75, + CARD_REVERSE_JUDGEMENT = 76, + CARD_REVERSE_WORLD = 77, + CARD_CRACKED_KEY = 78, + CARD_QUEEN_OF_HEARTS = 79, + CARD_WILD = 80, + CARD_SOUL_ISAAC = 81, + CARD_SOUL_MAGDALENE = 82, + CARD_SOUL_CAIN = 83, + CARD_SOUL_JUDAS = 84, + CARD_SOUL_BLUEBABY = 85, + CARD_SOUL_EVE = 86, + CARD_SOUL_SAMSON = 87, + CARD_SOUL_AZAZEL = 88, + CARD_SOUL_LAZARUS = 89, + CARD_SOUL_EDEN = 90, + CARD_SOUL_LOST = 91, + CARD_SOUL_LILITH = 92, + CARD_SOUL_KEEPER = 93, + CARD_SOUL_APOLLYON = 94, + CARD_SOUL_FORGOTTEN = 95, + CARD_SOUL_BETHANY = 96, + CARD_SOUL_JACOB = 97, + NUM_CARDS = 98, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_TRINKET (350) */ +declare enum TrinketType { + TRINKET_NULL = 0, + TRINKET_SWALLOWED_PENNY = 1, + TRINKET_PETRIFIED_POOP = 2, + TRINKET_AAA_BATTERY = 3, + TRINKET_BROKEN_REMOTE = 4, + TRINKET_PURPLE_HEART = 5, + TRINKET_BROKEN_MAGNET = 6, + TRINKET_ROSARY_BEAD = 7, + TRINKET_CARTRIDGE = 8, + TRINKET_PULSE_WORM = 9, + TRINKET_WIGGLE_WORM = 10, + TRINKET_RING_WORM = 11, + TRINKET_FLAT_WORM = 12, + TRINKET_STORE_CREDIT = 13, + TRINKET_CALLUS = 14, + TRINKET_LUCKY_ROCK = 15, + TRINKET_MOMS_TOENAIL = 16, + TRINKET_BLACK_LIPSTICK = 17, + TRINKET_BIBLE_TRACT = 18, + TRINKET_PAPER_CLIP = 19, + TRINKET_MONKEY_PAW = 20, + TRINKET_MYSTERIOUS_PAPER = 21, + TRINKET_DAEMONS_TAIL = 22, + TRINKET_MISSING_POSTER = 23, + TRINKET_BUTT_PENNY = 24, + TRINKET_MYSTERIOUS_CANDY = 25, + TRINKET_HOOK_WORM = 26, + TRINKET_WHIP_WORM = 27, + TRINKET_BROKEN_ANKH = 28, + TRINKET_FISH_HEAD = 29, + TRINKET_PINKY_EYE = 30, + TRINKET_PUSH_PIN = 31, + TRINKET_LIBERTY_CAP = 32, + TRINKET_UMBILICAL_CORD = 33, + TRINKET_CHILDS_HEART = 34, + TRINKET_CURVED_HORN = 35, + TRINKET_RUSTED_KEY = 36, + TRINKET_GOAT_HOOF = 37, + TRINKET_MOMS_PEARL = 38, + TRINKET_CANCER = 39, + TRINKET_RED_PATCH = 40, + TRINKET_MATCH_STICK = 41, + TRINKET_LUCKY_TOE = 42, + TRINKET_CURSED_SKULL = 43, + TRINKET_SAFETY_CAP = 44, + TRINKET_ACE_SPADES = 45, + TRINKET_ISAACS_FORK = 46, + TRINKET_POLAROID_OBSOLETE = 47, + TRINKET_MISSING_PAGE = 48, + TRINKET_BLOODY_PENNY = 49, + TRINKET_BURNT_PENNY = 50, + TRINKET_FLAT_PENNY = 51, + TRINKET_COUNTERFEIT_PENNY = 52, + TRINKET_TICK = 53, + TRINKET_ISAACS_HEAD = 54, + TRINKET_MAGGYS_FAITH = 55, + TRINKET_JUDAS_TONGUE = 56, + TRINKET_SOUL = 57, + TRINKET_SAMSONS_LOCK = 58, + TRINKET_CAINS_EYE = 59, + TRINKET_EVES_BIRD_FOOT = 60, + TRINKET_LEFT_HAND = 61, + TRINKET_SHINY_ROCK = 62, + TRINKET_SAFETY_SCISSORS = 63, + TRINKET_RAINBOW_WORM = 64, + TRINKET_TAPE_WORM = 65, + TRINKET_LAZY_WORM = 66, + TRINKET_CRACKED_DICE = 67, + TRINKET_SUPER_MAGNET = 68, + TRINKET_FADED_POLAROID = 69, + TRINKET_LOUSE = 70, + TRINKET_BOBS_BLADDER = 71, + TRINKET_WATCH_BATTERY = 72, + TRINKET_BLASTING_CAP = 73, + TRINKET_STUD_FINDER = 74, + TRINKET_ERROR = 75, + TRINKET_POKER_CHIP = 76, + TRINKET_BLISTER = 77, + TRINKET_SECOND_HAND = 78, + TRINKET_ENDLESS_NAMELESS = 79, + TRINKET_BLACK_FEATHER = 80, + TRINKET_BLIND_RAGE = 81, + TRINKET_GOLDEN_HORSE_SHOE = 82, + TRINKET_STORE_KEY = 83, + TRINKET_RIB_OF_GREED = 84, + TRINKET_KARMA = 85, + TRINKET_LIL_LARVA = 86, + TRINKET_MOMS_LOCKET = 87, + TRINKET_NO = 88, + TRINKET_CHILD_LEASH = 89, + TRINKET_BROWN_CAP = 90, + TRINKET_MECONIUM = 91, + TRINKET_CRACKED_CROWN = 92, + TRINKET_USED_DIAPER = 93, + TRINKET_FISH_TAIL = 94, + TRINKET_BLACK_TOOTH = 95, + TRINKET_OUROBOROS_WORM = 96, + TRINKET_TONSIL = 97, + TRINKET_NOSE_GOBLIN = 98, + TRINKET_SUPER_BALL = 99, + TRINKET_VIBRANT_BULB = 100, + TRINKET_DIM_BULB = 101, + TRINKET_FRAGMENTED_CARD = 102, + TRINKET_EQUALITY = 103, + TRINKET_WISH_BONE = 104, + TRINKET_BAG_LUNCH = 105, + TRINKET_LOST_CORK = 106, + TRINKET_CROW_HEART = 107, + TRINKET_WALNUT = 108, + TRINKET_DUCT_TAPE = 109, + TRINKET_SILVER_DOLLAR = 110, + TRINKET_BLOODY_CROWN = 111, + TRINKET_PAY_TO_WIN = 112, + TRINKET_LOCUST_OF_WRATH = 113, + TRINKET_LOCUST_OF_PESTILENCE = 114, + TRINKET_LOCUST_OF_FAMINE = 115, + TRINKET_LOCUST_OF_DEATH = 116, + TRINKET_LOCUST_OF_CONQUEST = 117, + TRINKET_BAT_WING = 118, + TRINKET_STEM_CELL = 119, + TRINKET_HAIRPIN = 120, + TRINKET_WOODEN_CROSS = 121, + TRINKET_BUTTER = 122, + TRINKET_FILIGREE_FEATHERS = 123, + TRINKET_DOOR_STOP = 124, + TRINKET_EXTENSION_CORD = 125, + TRINKET_ROTTEN_PENNY = 126, + TRINKET_BABY_BENDER = 127, + TRINKET_FINGER_BONE = 128, + TRINKET_JAW_BREAKER = 129, + TRINKET_CHEWED_PEN = 130, + TRINKET_BLESSED_PENNY = 131, + TRINKET_BROKEN_SYRINGE = 132, + TRINKET_FIRECRACKER = 133, + TRINKET_GIANT_BEAN = 134, + TRINKET_LIGHTER = 135, + TRINKET_BROKEN_PADLOCK = 136, + TRINKET_MYOSOTIS = 137, + TRINKET_M = 138, + TRINKET_TEARDROP_CHARM = 139, + TRINKET_APPLE_OF_SODOM = 140, + TRINKET_FORGOTTEN_LULLABY = 141, + TRINKET_BETHS_FAITH = 142, + TRINKET_OLD_CAPACITOR = 143, + TRINKET_BRAIN_WORM = 144, + TRINKET_PERFECTION = 145, + TRINKET_DEVILS_CROWN = 146, + TRINKET_CHARGED_PENNY = 147, + TRINKET_FRIENDSHIP_NECKLACE = 148, + TRINKET_PANIC_BUTTON = 149, + TRINKET_BLUE_KEY = 150, + TRINKET_FLAT_FILE = 151, + TRINKET_TELESCOPE_LENS = 152, + TRINKET_MOMS_LOCK = 153, + TRINKET_DICE_BAG = 154, + TRINKET_HOLY_CROWN = 155, + TRINKET_MOTHERS_KISS = 156, + TRINKET_TORN_CARD = 157, + TRINKET_TORN_POCKET = 158, + TRINKET_GILDED_KEY = 159, + TRINKET_LUCKY_SACK = 160, + TRINKET_WICKED_CROWN = 161, + TRINKET_AZAZELS_STUMP = 162, + TRINKET_DINGLE_BERRY = 163, + TRINKET_RING_CAP = 164, + TRINKET_NUH_UH = 165, + TRINKET_MODELING_CLAY = 166, + TRINKET_POLISHED_BONE = 167, + TRINKET_HOLLOW_HEART = 168, + TRINKET_KIDS_DRAWING = 169, + TRINKET_CRYSTAL_KEY = 170, + TRINKET_KEEPERS_BARGAIN = 171, + TRINKET_CURSED_PENNY = 172, + TRINKET_YOUR_SOUL = 173, + TRINKET_NUMBER_MAGNET = 174, + TRINKET_STRANGE_KEY = 175, + TRINKET_LIL_CLOT = 176, + TRINKET_TEMPORARY_TATTOO = 177, + TRINKET_SWALLOWED_M80 = 178, + TRINKET_RC_REMOTE = 179, + TRINKET_FOUND_SOUL = 180, + TRINKET_EXPANSION_PACK = 181, + TRINKET_BETHS_ESSENCE = 182, + TRINKET_THE_TWINS = 183, + TRINKET_ADOPTION_PAPERS = 184, + TRINKET_CRICKET_LEG = 185, + TRINKET_APOLLYONS_BEST_FRIEND = 186, + TRINKET_BROKEN_GLASSES = 187, + TRINKET_ICE_CUBE = 188, + TRINKET_SIGIL_OF_BAPHOMET = 189, + NUM_TRINKETS = 190, + TRINKET_GOLDEN_FLAG = 0x8000, + TRINKET_ID_MASK = 0x7fff, +} + +/** For EntityType.ENTITY_PICKUP (5), PickupVariant.PICKUP_BED (380) */ +declare enum BedSubType { + BED_ISAAC = 0, + BED_MOM = 1, +} diff --git a/isaac-typescript-definitions/typings/enumsVariants.d.ts b/isaac-typescript-definitions/typings/enumsVariants.d.ts new file mode 100644 index 0000000..5299b90 --- /dev/null +++ b/isaac-typescript-definitions/typings/enumsVariants.d.ts @@ -0,0 +1,520 @@ +// Enums from the "resources/scripts/enums.lua" file +// (entity variants only) + +/** For EntityType.TEAR (2) */ +declare enum TearVariant { + BLUE = 0, + BLOOD = 1, + TOOTH = 2, + METALLIC = 3, + BOBS_HEAD = 4, + FIRE_MIND = 5, + DARK_MATTER = 6, + MYSTERIOUS = 7, + SCHYTHE = 8, + CHAOS_CARD = 9, + LOST_CONTACT = 10, + CUPID_BLUE = 11, + CUPID_BLOOD = 12, + NAIL = 13, + PUPULA = 14, + PUPULA_BLOOD = 15, + GODS_FLESH = 16, + GODS_FLESH_BLOOD = 17, + DIAMOND = 18, + EXPLOSIVO = 19, + COIN = 20, + MULTIDIMENSIONAL = 21, + STONE = 22, + NAIL_BLOOD = 23, + GLAUCOMA = 24, + GLAUCOMA_BLOOD = 25, + BOOGER = 26, + EGG = 27, + RAZOR = 28, + BONE = 29, + BLACK_TOOTH = 30, + NEEDLE = 31, + BELIAL = 32, + EYE = 33, + EYE_BLOOD = 34, + BALLOON = 35, + HUNGRY = 36, + BALLOON_BRIMSTONE = 37, + BALLOON_BOMB = 38, + FIST = 39, + GRIDENT = 40, + ICE = 41, + ROCK = 42, + KEY = 43, + KEY_BLOOD = 44, + ERASER = 45, + FIRE = 46, + SWORD_BEAM = 47, + SPORE = 48, + TECH_SWORD_BEAM = 49, +} + +/** For EntityType.ENTITY_FAMILIAR (3) */ +declare enum FamiliarVariant { + FAMILIAR_NULL = 0, + BROTHER_BOBBY = 1, + DEMON_BABY = 2, + LITTLE_CHUBBY = 3, + LITTLE_GISH = 4, + LITTLE_STEVEN = 5, + ROBO_BABY = 6, + SISTER_MAGGY = 7, + ABEL = 8, + GHOST_BABY = 9, + HARLEQUIN_BABY = 10, + RAINBOW_BABY = 11, + ISAACS_HEAD = 12, + BLUE_BABY_SOUL = 13, + DEAD_BIRD = 14, + EVES_BIRD_FOOT = 15, + DADDY_LONGLEGS = 16, + PEEPER = 17, + BOMB_BAG = 20, + SACK_OF_PENNIES = 21, + LITTLE_CHAD = 22, + RELIC = 23, + BUM_FRIEND = 24, + HOLY_WATER = 25, + KEY_PIECE_1 = 26, + KEY_PIECE_2 = 27, + KEY_FULL = 28, + FOREVER_ALONE = 30, + DISTANT_ADMIRATION = 31, + GUARDIAN_ANGEL = 32, + FLY_ORBITAL = 33, + SACRIFICIAL_DAGGER = 35, + DEAD_CAT = 40, + ONE_UP = 41, + GUPPYS_HAIRBALL = 42, + BLUE_FLY = 43, + CUBE_OF_MEAT_1 = 44, + CUBE_OF_MEAT_2 = 45, + CUBE_OF_MEAT_3 = 46, + CUBE_OF_MEAT_4 = 47, + ISAACS_BODY = 48, + SMART_FLY = 50, + DRY_BABY = 51, + JUICY_SACK = 52, + ROBO_BABY_2 = 53, + ROTTEN_BABY = 54, + HEADLESS_BABY = 55, + LEECH = 56, + MYSTERY_SACK = 57, + BBF = 58, + BOBS_BRAIN = 59, + BEST_BUD = 60, + LIL_BRIMSTONE = 61, + ISAACS_HEART = 62, + LIL_HAUNT = 63, + DARK_BUM = 64, + BIG_FAN = 65, + SISSY_LONGLEGS = 66, + PUNCHING_BAG = 67, + GUILLOTINE = 68, + BALL_OF_BANDAGES_1 = 69, + BALL_OF_BANDAGES_2 = 70, + BALL_OF_BANDAGES_3 = 71, + BALL_OF_BANDAGES_4 = 72, + BLUE_SPIDER = 73, + MONGO_BABY = 74, + SAMSONS_CHAINS = 75, + CAINS_OTHER_EYE = 76, + BLUEBABYS_ONLY_FRIEND = 77, + SCISSORS = 78, + GEMINI = 79, + INCUBUS = 80, + FATES_REWARD = 81, + LIL_CHEST = 82, + SWORN_PROTECTOR = 83, + FRIEND_ZONE = 84, + LOST_FLY = 85, + CHARGED_BABY = 86, + LIL_GURDY = 87, + BUMBO = 88, + CENSER = 89, + KEY_BUM = 90, + RUNE_BAG = 91, + SERAPHIM = 92, + GB_BUG = 93, + SPIDER_MOD = 94, + FARTING_BABY = 95, + SUCCUBUS = 96, + LIL_LOKI = 97, + OBSESSED_FAN = 98, + PAPA_FLY = 99, + MILK = 100, + MULTIDIMENSIONAL_BABY = 101, + SUPER_BUM = 102, + TONSIL = 103, + BIG_CHUBBY = 104, + DEPRESSION = 105, + SHADE = 106, + HUSHY = 107, + LIL_MONSTRO = 108, + KING_BABY = 109, + FINGER = 110, + YO_LISTEN = 111, + ACID_BABY = 112, + SPIDER_BABY = 113, + SACK_OF_SACKS = 114, + BROWN_NUGGET_POOTER = 115, + BLOODSHOT_EYE = 116, + MOMS_RAZOR = 117, + ANGRY_FLY = 118, + BUDDY_IN_A_BOX = 119, + SPRINKLER = 120, + LEPROSY = 121, + LIL_HARBINGERS = 122, + ANGELIC_PRISM = 123, + MYSTERY_EGG = 124, + LIL_SPEWER = 125, + SLIPPED_RIB = 126, + POINTY_RIB = 127, + BONE_ORBITAL = 128, + HALLOWED_GROUND = 129, + JAW_BONE = 130, + INTRUDER = 200, + DIP = 201, + DAMOCLES = 202, + BLOOD_OATH = 203, + PSY_FLY = 204, + MENORAH = 205, + WISP = 206, + PEEPER_2 = 207, + BOILED_BABY = 208, + FREEZER_BABY = 209, + BIRD_CAGE = 210, + LOST_SOUL = 211, + LIL_DUMPY = 212, + KNIFE_PIECE_1 = 213, + KNIFE_PIECE_2 = 214, + TINYTOMA = 216, + TINYTOMA_2 = 217, + BOT_FLY = 218, + SIREN_MINION = 220, + PASCHAL_CANDLE = 221, + STITCHES = 222, + KNIFE_FULL = 223, + BABY_PLUM = 224, + FRUITY_PLUM = 225, + SPIN_TO_WIN = 226, + MINISAAC = 228, + SWARM_FLY_ORBITAL = 229, + LIL_ABADDON = 230, + ABYSS_LOCUST = 231, + LIL_PORTAL = 232, + WORM_FRIEND = 233, + BONE_SPUR = 234, + TWISTED_BABY = 235, + STAR_OF_BETHLEHEM = 236, + ITEM_WISP = 237, + BLOOD_BABY = 238, + CUBE_BABY = 239, + UMBILICAL_BABY = 240, + BLOOD_PUPPY = 241, + VANISHING_TWIN = 242, + DECAP_ATTACK = 243, + FORGOTTEN_BODY = 900, +} + +/** For EntityType.ENTITY_BOMBDROP (4) */ +declare enum BombVariant { + BOMB_NORMAL = 0, + BOMB_BIG = 1, + BOMB_DECOY = 2, + BOMB_TROLL = 3, + BOMB_SUPERTROLL = 4, + BOMB_POISON = 5, + BOMB_POISON_BIG = 6, + BOMB_SAD = 7, + BOMB_HOT = 8, + BOMB_BUTT = 9, + BOMB_MR_MEGA = 10, + BOMB_BOBBY = 11, + BOMB_GLITTER = 12, + BOMB_THROWABLE = 13, + BOMB_SMALL = 14, + BOMB_BRIMSTONE = 15, + BOMB_SAD_BLOOD = 16, + BOMB_GIGA = 17, + BOMB_GOLDENTROLL = 18, + BOMB_ROCKET = 19, + BOMB_ROCKET_GIGA = 20, +} + +/** For EntityType.ENTITY_PICKUP (5) */ +declare enum PickupVariant { + PICKUP_NULL = 0, + PICKUP_HEART = 10, + PICKUP_COIN = 20, + PICKUP_KEY = 30, + PICKUP_BOMB = 40, + PICKUP_THROWABLEBOMB = 41, + PICKUP_POOP = 42, + PICKUP_CHEST = 50, + PICKUP_BOMBCHEST = 51, + PICKUP_SPIKEDCHEST = 52, + PICKUP_ETERNALCHEST = 53, + PICKUP_MIMICCHEST = 54, + PICKUP_OLDCHEST = 55, + PICKUP_WOODENCHEST = 56, + PICKUP_MEGACHEST = 57, + PICKUP_HAUNTEDCHEST = 58, + PICKUP_LOCKEDCHEST = 60, + PICKUP_GRAB_BAG = 69, + PICKUP_PILL = 70, + PICKUP_LIL_BATTERY = 90, + PICKUP_COLLECTIBLE = 100, + PICKUP_SHOPITEM = 150, + PICKUP_TAROTCARD = 300, + PICKUP_BIGCHEST = 340, + PICKUP_TRINKET = 350, + PICKUP_REDCHEST = 360, + PICKUP_TROPHY = 370, + PICKUP_BED = 380, + PICKUP_MOMSCHEST = 390, +} + +/** For EntityType.ENTITY_PROJECTILE (9) */ +declare enum ProjectileVariant { + PROJECTILE_NORMAL = 0, + PROJECTILE_BONE = 1, + PROJECTILE_FIRE = 2, + PROJECTILE_PUKE = 3, + PROJECTILE_TEAR = 4, + PROJECTILE_CORN = 5, + PROJECTILE_HUSH = 6, + PROJECTILE_COIN = 7, + PROJECTILE_GRID = 8, + PROJECTILE_ROCK = 9, + PROJECTILE_RING = 10, + PROJECTILE_MEAT = 11, + PROJECTILE_FCUK = 12, + PROJECTILE_WING = 13, + PROJECTILE_LAVA = 14, + PROJECTILE_HEAD = 15, + PROJECTILE_PEEP = 16, +} + +/** For EntityType.ENTITY_EFFECT (1000) */ +declare enum EffectVariant { + EFFECT_NULL = 0, + BOMB_EXPLOSION = 1, + BLOOD_EXPLOSION = 2, + FLY_EXPLOSION = 3, + ROCK_PARTICLE = 4, + BLOOD_PARTICLE = 5, + DEVIL = 6, + BLOOD_SPLAT = 7, + LADDER = 8, + ANGEL = 9, + BLUE_FLAME = 10, + BULLET_POOF = 11, + TEAR_POOF_A = 12, + TEAR_POOF_B = 13, + RIPPLE_POOF = 14, + CROSS_POOF = 14, + POOF01 = 15, + POOF02 = 16, + POOF04 = 17, + BOMB_CRATER = 18, + CRACK_THE_SKY = 19, + SCYTHE_BREAK = 20, + TINY_BUG = 21, + CREEP_RED = 22, + CREEP_GREEN = 23, + CREEP_YELLOW = 24, + CREEP_WHITE = 25, + CREEP_BLACK = 26, + WOOD_PARTICLE = 27, + MONSTROS_TOOTH = 28, + MOM_FOOT_STOMP = 29, + TARGET = 30, + ROCKET = 31, + PLAYER_CREEP_LEMON_MISHAP = 32, + TINY_FLY = 33, + FART = 34, + TOOTH_PARTICLE = 35, + XRAY_WALL = 36, + PLAYER_CREEP_HOLYWATER = 37, + SPIDER_EXPLOSION = 38, + HEAVEN_LIGHT_DOOR = 39, + STARFLASH = 40, + WATER_DROPLET = 41, + BLOOD_GUSH = 42, + POOP_EXPLOSION = 43, + PLAYER_CREEP_WHITE = 44, + PLAYER_CREEP_BLACK = 45, + PLAYER_CREEP_RED = 46, + TRINITY_SHIELD = 47, + BATTERY = 48, + HEART = 49, + LASER_IMPACT = 50, + HOT_BOMB_FIRE = 51, + RED_CANDLE_FLAME = 52, + PLAYER_CREEP_GREEN = 53, + PLAYER_CREEP_HOLYWATER_TRAIL = 54, + SPIKE = 55, + CREEP_BROWN = 56, + PULLING_EFFECT = 57, + POOP_PARTICLE = 58, + DUST_CLOUD = 59, + BOOMERANG = 60, + SHOCKWAVE = 61, + ROCK_EXPLOSION = 62, + WORM = 63, + BEETLE = 64, + WISP = 65, + EMBER_PARTICLE = 66, + SHOCKWAVE_DIRECTIONAL = 67, + WALL_BUG = 68, + BUTTERFLY = 69, + BLOOD_DROP = 70, + BRIMSTONE_SWIRL = 71, + CRACKWAVE = 72, + SHOCKWAVE_RANDOM = 73, + ISAACS_CARPET = 74, + BAR_PARTICLE = 75, + DICE_FLOOR = 76, + LARGE_BLOOD_EXPLOSION = 77, + PLAYER_CREEP_LEMON_PARTY = 78, + TEAR_POOF_SMALL = 79, + TEAR_POOF_VERYSMALL = 80, + FRIEND_BALL = 81, + WOMB_TELEPORT = 82, + SPEAR_OF_DESTINY = 83, + EVIL_EYE = 84, + DIAMOND_PARTICLE = 85, + NAIL_PARTICLE = 86, + FALLING_EMBER = 87, + DARK_BALL_SMOKE_PARTICLE = 88, + ULTRA_GREED_FOOTPRINT = 89, + PLAYER_CREEP_PUDDLE_MILK = 90, + MOMS_HAND = 91, + PLAYER_CREEP_BLACKPOWDER = 92, + PENTAGRAM_BLACKPOWDER = 93, + CREEP_SLIPPERY_BROWN = 94, + GOLD_PARTICLE = 95, + HUSH_LASER = 96, + IMPACT = 97, + COIN_PARTICLE = 98, + WATER_SPLASH = 99, + HUSH_ASHES = 100, + HUSH_LASER_UP = 101, + BULLET_POOF_HUSH = 102, + ULTRA_GREED_BLING = 103, + FIREWORKS = 104, + BROWN_CLOUD = 105, + FART_RING = 106, + BLACK_HOLE = 107, + MR_ME = 108, + DEATH_SKULL = 109, + ENEMY_BRIMSTONE_SWIRL = 110, + HAEMO_TRAIL = 111, + HALLOWED_GROUND = 112, + BRIMSTONE_BALL = 113, + FORGOTTEN_CHAIN = 114, + BROKEN_SHOVEL_SHADOW = 115, + DIRT_PATCH = 116, + FORGOTTEN_SOUL = 117, + SMALL_ROCKET = 118, + TIMER = 119, + SPAWNER = 120, + LIGHT = 121, + BIG_HORN_HOLE_HELPER = 122, + HALO = 123, + TAR_BUBBLE = 124, + BIG_HORN_HAND = 125, + TECH_DOT = 126, + MAMA_MEGA_EXPLOSION = 127, + OPTION_LINE = 128, + LEECH_EXPLOSION = 130, + MAGGOT_EXPLOSION = 131, + BIG_SPLASH = 132, + WATER_RIPPLE = 133, + PEDESTAL_RIPPLE = 134, + RAIN_DROP = 135, + GRID_ENTITY_PROJECTILE_HELPER = 136, + WORMWOOD_HOLE = 137, + MIST = 138, + TRAPDOOR_COVER = 139, + BACKDROP_DECORATION = 140, + SMOKE_CLOUD = 141, + WHIRLPOOL = 142, + FARTWAVE = 143, + ENEMY_GHOST = 144, + ROCK_POOF = 145, + DIRT_PILE = 146, + FIRE_JET = 147, + FIRE_WAVE = 148, + BIG_ROCK_EXPLOSION = 149, + BIG_CRACKWAVE = 150, + BIG_ATTRACT = 151, + HORNFEL_ROOM_CONTROLLER = 152, + OCCULT_TARGET = 153, + DOOR_OUTLINE = 154, + CREEP_SLIPPERY_BROWN_GROWING = 155, + TALL_LADDER = 156, + WILLO_SPAWNER = 157, + TADPOLE = 158, + LIL_GHOST = 159, + BISHOP_SHIELD = 160, + PORTAL_TELEPORT = 161, + HERETIC_PENTAGRAM = 162, + CHAIN_GIB = 163, + SIREN_RING = 164, + CHARM_EFFECT = 165, + SPRITE_TRAIL = 166, + CHAIN_LIGHTNING = 167, + COLOSTOMIA_PUDDLE = 168, + CREEP_STATIC = 169, + DOGMA_DEBRIS = 170, + DOGMA_BLACKHOLE = 171, + DOGMA_ORB = 172, + CRACKED_ORB_POOF = 173, + SHOP_SPIKES = 174, + KINETI_BEAM = 175, + CLEAVER_SLASH = 176, + REVERSE_EXPLOSION = 177, + URN_OF_SOULS = 178, + ENEMY_SOUL = 179, + RIFT = 180, + LAVA_SPAWNER = 181, + BIG_KNIFE = 182, + MOTHER_SHOCKWAVE = 183, + WORM_FRIEND_SNARE = 184, + REDEMPTION = 185, + HUNGRY_SOUL = 186, + EXPLOSION_WAVE = 187, + DIVINE_INTERVENTION = 188, + PURGATORY = 189, + MOTHER_TRACER = 190, + PICKUP_GHOST = 191, + FISSURE_SPAWNER = 192, + ANIMA_CHAIN = 193, + DARK_SNARE = 194, + CREEP_LIQUID_POOP = 195, + GROUND_GLOW = 196, + DEAD_BIRD = 197, + GENERIC_TRACER = 198, + ULTRA_DEATH_SCYTHE = 199, +} + +/** For GridEntityType.GRID_DOOR (16) */ +declare enum DoorVariant { + DOOR_UNSPECIFIED = 0, + DOOR_LOCKED = 1, + DOOR_LOCKED_DOUBLE = 2, + DOOR_LOCKED_CRACKED = 3, + DOOR_LOCKED_BARRED = 4, + DOOR_LOCKED_KEYFAMILIAR = 5, + DOOR_LOCKED_GREED = 6, + DOOR_HIDDEN = 7, + DOOR_UNLOCKED = 8, +} diff --git a/isaac-typescript-definitions/typings/functions.d.ts b/isaac-typescript-definitions/typings/functions.d.ts new file mode 100644 index 0000000..f01a8ae --- /dev/null +++ b/isaac-typescript-definitions/typings/functions.d.ts @@ -0,0 +1,21 @@ +declare type PtrHash = number & { __ptrHashBrand: unknown }; + +declare function Game(this: void): Game; +/** + * Comparing two API objects directly in mod code will not work, even if the Lua metadata points to + * the same pointer in memory. As a workaround, use this function to get a numerical hash of the + * object. + * + * A `PtrHash` object is simply a branded number for better type safety and code clarity. + */ +declare function GetPtrHash( + this: void, + pointer: Entity | RoomDescriptor | RoomDescriptorReadOnly, +): PtrHash; +/** Returns a random integer between 0 and 2^32. */ +declare function Random(this: void): int; +/** + * Returns a random vector between (-1, -1) and (1, 1). + * Multiply this vector by a number for larger random vectors. + */ +declare function RandomVector(this: void): Vector; diff --git a/isaac-typescript-definitions/typings/index.d.ts b/isaac-typescript-definitions/typings/index.d.ts new file mode 100644 index 0000000..8d719ed --- /dev/null +++ b/isaac-typescript-definitions/typings/index.d.ts @@ -0,0 +1,98 @@ +/// + +/// +/// +/// +/// +/// +/// +/// +/// +/// + +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// + +/// +/// +/// +/// +/// +/// +/// + +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/isaac-typescript-definitions/typings/json.d.ts b/isaac-typescript-definitions/typings/json.d.ts new file mode 100644 index 0000000..a6c2427 --- /dev/null +++ b/isaac-typescript-definitions/typings/json.d.ts @@ -0,0 +1,12 @@ +// The "json.lua" module exists at: +// C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac Rebirth\resources\scripts\json.lua +// It is intended to be consumed by mods via: +// local json = require("json") +// We need to specify the "@noResolution" tstl compiler annotation, +// since the "json.lua" file is not supposed to exist inside of end-user mods + +/** @noResolution */ +declare module "json" { + function encode(this: void, data: unknown): string; + function decode(this: void, data: string): unknown; +} diff --git a/isaac-typescript-definitions/typings/main.d.ts b/isaac-typescript-definitions/typings/main.d.ts new file mode 100644 index 0000000..efbc977 --- /dev/null +++ b/isaac-typescript-definitions/typings/main.d.ts @@ -0,0 +1,11 @@ +// Functions and constants from the "resources/scripts/main.lua" file + +export {}; + +/** @noSelf */ +declare global { + function RegisterMod(modName: string, APIVersion: int): Mod; + function StartDebug(): void; + + const REPENTANCE: boolean | undefined; +} diff --git a/isaac-typescript-definitions/typings/mods/EID.d.ts b/isaac-typescript-definitions/typings/mods/EID.d.ts new file mode 100644 index 0000000..6e269da --- /dev/null +++ b/isaac-typescript-definitions/typings/mods/EID.d.ts @@ -0,0 +1,487 @@ +declare const EID: EIDInterface | undefined; + +declare interface EIDDescriptionObject { + Description: string; + ID: int; + ItemType: int; + ItemVariant: int; + Name: string; + RealID: int; + Transformation: string; + fullItemString: string; +} + +/** + * @param LeftOffset Defaults to -1. + * @param TopOffset Defaults to 0. + * @param SpriteObject Defaults to `EID.InlineIconSprite`. + */ +declare type EIDInlineIcon = [ + AnimationName: string, + Frame: int, + Width: int, + Height: int, + LeftOffset?: int, + TopOffset?: int, + SpriteObject?: Sprite, +]; + +declare type EIDTransformationTargetType = + | "collectible" + | "trinket" + | "card" + | "pill" + | "entity"; + +declare interface EIDInterface { + /** Gets the size of the screen. */ + GetScreenSize(): Vector; + + /** Adds a character specific description for the item "Birthright". */ + addBirthright( + characterId: int, + description: string, + playerName?: string, + language?: string, + ): void; + + /** Adds a description for a card/rune. */ + addCard( + id: int, + description: string, + itemName?: string, + language?: string, + ): void; + + /** Adds a description for a collectible. */ + addCollectible( + id: int, + description: string, + itemName?: string, + language?: string, + ): void; + + /** + * Adds a new color object with the shortcut defined in the "shortcut" variable + * (e.g. "{{shortcut}}" = your color). + * + * Shortcuts are case-sensitive! Shortcuts can be overridden with this function to allow for full + * control over everything. + * + * Define a callback to let it be called when interpreting the color-markup. Define a `KColor` + * otherwise for a simple color change. + */ + addColor( + shortcut: string, + kColor: KColor, + callback?: (color: KColor) => KColor, + ): void; + + /** + * Adds Description object modifiers. + * Used for altering descriptions. Examples: Spindown dice, Tarot Cloth, etc. + * + * @param condition A function that returns `true` if `callback` should be called on the given + * description string. + * @param callback A function that returns a modified version of the given description string. + */ + addDescriptionModifier( + modifierName: string, + condition: (testDescription: string) => boolean, + callback: (oldDescription: string) => string, + ): void; + + /** + * Adds a description for an entity. + * + * When subtype is -1 or undefined, it will affect all subtypes of that entity. + */ + addEntity( + id: int, + variant: int, + subtype: int | undefined, + entityName: string, + description: string, + language?: string, + ): void; + + /** + * Adds a new icon object with the shortcut defined in the "shortcut" variable + * (e.g. "{{shortcut}}" = your icon). + * + * Shortcuts are case-sensitive! Shortcuts can be overridden with this function to allow for full + * control over everything. + * + * Setting "animationFrame" to -1 will play the animation. The spriteObject needs to be of class + * Sprite() and have an .anm2 loaded to do this. + * + * @param leftOffset Defaults to -1. + * @param topOffset Defaults to 0. + */ + addIcon( + shortcut: string, + animationName: string, + animationFrame: int, + width: int, + height: int, + leftOffset: float | undefined, + topOffset: float | undefined, + spriteObject: Sprite, + ): void; + + /** Adds a description for a pilleffect id. */ + addPill( + id: int, + description: string, + itemName?: string, + language?: string, + ): void; + + /** + * Adds a text position modifier `Vector`, which will be applied to the text position variable. + * + * Useful to add small offsets. For example: for schoolbag HUD. + */ + addTextPosModifier(identifier: string, modifierVector: Vector): void; + + /** Adds a description for a trinket. */ + addTrinket( + id: int, + description: string, + itemName?: string, + language?: string, + ): void; + + /** + * Changes the initial position of all EID descriptions. + * + * Useful to totally alter and override the current initial overlay position. + */ + alterTextPos(newPosVector: Vector): void; + + /** Appends a given string to the description of a given `EIDDescriptionObj`. */ + appendToDescription( + descObj: EIDDescriptionObject, + appendString: string, + ): void; + + /** Compares two KColors. Returns true if they are equal. */ + areColorsEqual(c1: KColor, c2: KColor): boolean; + + /** + * Assigns transformations to an entity (Adds to existing transformations). + * + * When type = entity, targetIdentifier must be in the format "ID.Variant.subtype". + * For any other type, it can just be the id. + * + * EXAMPLE: `EID.assignTransformation("collectible", 1, "My Transformation")`. + */ + assignTransformation( + targetType: EIDTransformationTargetType, + targetIdentifier: string | int, + transformationString: string, + ): void; + + /** Creates a copy of a `KColor` object. This prevents overwriting existing `KColor` objects. */ + copyKColor(colorObj: KColor): KColor; + + /** + * Tries to read special markup used to generate icons for all collectibles/trinkets and the + * default cards/pills. + * + * @returns An `EIDInlineIcon` Object or `undefined` if no parsing was possible. + */ + createItemIconObject(str: string): EIDInlineIcon | undefined; + + /** Creates a new transformation. */ + createTransformation( + uniqueName: string, + displayName: string, + language?: string, + ): void; + + /** + * Overrides all potentially displayed texts and permanently displays the given texts. Can be + * turned off again using + * {@link EID.hidePermanentText EID:hidePermanentText()}. + */ + displayPermanentText(descriptionObject: EIDDescriptionObject): void; + + /** + * Filters a given string and looks for `KColor` markup. + * Splits the text into subsections limited by them. + * + * @returns An array of tables containing subsections of the text, their respective `KColor`, + * and the width of the subsection. + */ + filterColorMarkup( + text: string, + baseKColor: KColor, + ): Array<[string, KColor, int]>; + + /** + * Searches through the given string and replaces Icon placeholders with icons. + * Returns 2 values: + * + * - The string without the placeholders but with an accurate space between lines. + * - An array of tables containing each Inline Sprite and the preceding text width. + */ + filterIconMarkup( + text: string, + textPosX?: int, + textPosY?: int, + ): LuaMultiReturn<[string, Array<[EIDInlineIcon, int]>]>; + + /** + * Fits a given string to a specific width. + * + * @returns The string as a table of lines. + */ + fitTextToWidth(str: string, textboxWidth: number): string[]; + + /** + * Generates a string with the defined pixel-length using a custom 1px wide character. + * + * This will only work for EID's specific custom font. + */ + generatePlaceholderString(length: int): string; + + /** Returns an adjusted SubType id for special cases like Horse Pills and Golden Trinkets. */ + getAdjustedSubtype(Type: int, Variant: int, SubType: int): int; + + /** + * Gets a `KColor` from a Markup-string (example Input: `"{{ColorText}}"`). + * + * @returns The `KColor` object and a `boolean` value indicating if the given string was a color + * markup or not. + */ + getColor(str: string, baseKColor: KColor): LuaMultiReturn<[KColor, boolean]>; + + /** + * Returns the description data table in the current language related to a given id, variant and + * subtype. + * + * Falls back to English if it doesn't exist. + */ + getDescriptionData( + Type: int, + Variant: int, + SubType: int, + ): EIDDescriptionObject; + + /** + * Returns the specified object table in the current language. + * + * Falls back to English if it doesn't exist. + */ + getDescriptionEntry(objTable: string, objID?: string): EIDDescriptionObject; + + /** + * Returns the description object of the specified entity. + * + * Falls back to English if the objID isn't available. + */ + getDescriptionObj( + Type: int, + Variant: int, + SubType: int, + ): EIDDescriptionObject; + + /** Get `KColor` object of "Error" texts. */ + getErrorColor(): KColor; + + /** Turns entity type names into actual in-game ID.Variant pairs. */ + getIDVariantString(typeName: string): string; + + /** + * Returns the `EIDInlineIcon` object of a given icon string. + * + * Can be used to validate an icon string. + */ + getIcon(str: string): EIDInlineIcon; + + /** + * Returns the entity that is currently described. Returns last described entity if currently not + * displaying text. + */ + getLastDescribedEntity(): Entity; + + /** + * Fetches description table from the legacy mod descriptions if they exist. + * + * @returns ["", "", description], ["", name, description], + * or `undefined` (if there is no legacy description). + */ + getLegacyModDescription( + Type: int, + Variant: int, + SubType: int, + ): ["", "", string] | ["", string, string] | undefined; + + /** Get `KColor` object of "Entity Name" texts. */ + getNameColor(): KColor; + + /** Tries to get the in-game name of an item based on its ID. */ + getObjectName(Type: int, Variant: int, SubType: int): string; + + /** Converts a given CollectibleID into the respective Spindown dice result. */ + getSpindownResult(collectibleID: int): int; + + /** Returns the width of a given string in pixels */ + getStrWidth(str: string): int; + + /** Turns entity type and variants into their EID table-name. */ + getTableName(Type: int, Variant: int, SubType: int): string; + + /** Get `KColor` object of "Description" texts. */ + getTextColor(): KColor; + + /** Returns the current text position. */ + getTextPosition(): Vector; + + /** + * Gets the transformation uniqueName / ID of a given entity. + * + * Example: `EID:getTransformation(5,100,34)` will return `"12"` which is the id for Bookworm. + */ + getTransformation(Type: int, Variant: int, SubType: int): string; + + /** Get `KColor` object of "Transformation" texts. */ + getTransformationColor(): KColor; + + /** Returns the icon for a given transformation name or ID. */ + getTransformationIcon(str: string): EIDInlineIcon; + + /** + * Gets the name of the given transformation by its uniqueName / ID. + * + * (Note: this function might be broken) + */ + getTransformationName(id: string): string; + + /** + * Tries to get the in-game description of an object, based on their description in the XML files. + * + * @returns `"(No Description available)"` if it cannot find the given object's description. + */ + getXMLDescription( + Type: int, + Variant: int, + SubType: int, + ): string | "(no description available)"; + + /** + * Returns the icon used for the bullet-point. It will look at the first word in the given string. + */ + handleBulletpointIcon(text: string): EIDInlineIcon; + + /** Returns `true`, if curse of blind is active. */ + hasCurseBlind(): boolean; + + /** Check if an entity is part of the describable entities. */ + hasDescription(entity: Entity): boolean; + + /** Hides permanently displayed text objects if they exist. */ + hidePermanentText(): void; + + /** Interpolates between 2 KColors with a given fraction. */ + interpolateColors(kColor1: KColor, kColor2: KColor, fraction: number): KColor; + + /** Returns if EID is displaying text right now. */ + isDisplayingText(): boolean; + + /** Loads a given font from a given file path and use it to render text. */ + loadFont(fontFileName: string): boolean; + + /** + * Removes a Description object modifier. + * Used for altering descriptions. Examples: Spindown dice, Tarot Cloth, etc. + */ + removeDescriptionModifier(modifierName: string): void; + + /** + * Removes a given value from the string inside a table. + * Example: `"1,2,3"`, removing `2` will return `"1,3"`. + */ + removeEntryFromString( + sourceTable: LuaTable | string[], + entryKey: string | number, + entryValue: string, + ): void; + + /** + * Removes a text position modifier `Vector`. + * + * Useful to remove small offsets. For example: for schoolbag HUD. + */ + removeTextPosModifier(identifier: string): void; + + /** + * Removes a transformation from an entity. + * + * When type = entity, targetIdentifier must be in the format "ID.Variant.subtype". + * For any other type, it can just be the id. + * + * EXAMPLE: `EID.removeTransformation("collectible", 1, "My Transformation")`. + */ + removeTransformation( + targetType: EIDTransformationTargetType, + targetIdentifier: string | int, + transformationString: string, + ): void; + + /** Helper function to render Icons in specific EID settings. */ + renderIcon(spriteObj: Sprite, posX: int, posY: int): void; + + /** + * Renders a list of given inline sprite objects returned by the + * {@link EID.filterIconMarkup EID:filterIconMarkup()} function. + * + * Table entry format: {`EIDInlineIcon` Object, Width of text preceding the icon}. + */ + renderInlineIcons( + spriteTable: Array<[EIDInlineIcon, int]>, + posX: int, + posY: int, + ): void; + + /** + * Renders a given string using the EID custom font. + * This will also apply any markup and render icons. + * + * Needs to be called in a render callback. + * + * @returns The last used `KColor`. + */ + renderString( + str: string, + position: Vector, + scale: Vector, + kColor: KColor, + ): KColor; + + /** Replaces shorthand-representations of a character with the internal reference. */ + replaceShortMarkupStrings(text: string): string; + + /** + * Converts a given table into a string containing the crafting icons of the table. + * + * Example input: `{1,2,3,4,5,6,7,8}`. + * + * Result: `"{{Crafting8}}{{Crafting7}}{{Crafting6}}{{Crafting5}}{{Crafting4}}{{Crafting3}}{{Crafting2}}{{Crafting1}}"`. + * + * Prefer {@link EID.tableToCraftingIconsMerged tableToCraftingIconsMerged()}, + * due to improved render performance. + */ + tableToCraftingIconsFull(craftTable: int[]): string; + + /** + * Converts a given table into a string containing the crafting icons of the table, + * which are also grouped to reduce render lag. + * + * Example input: `{1,1,1,2,2,3,3,3}`. + * + * Result: `"3{{Crafting3}}2{{Crafting2}}3{{Crafting1}}"`. + */ + tableToCraftingIconsMerged(craftTable: int[]): string; +} diff --git a/isaac-typescript-definitions/typings/mods/Encyclopedia.d.ts b/isaac-typescript-definitions/typings/mods/Encyclopedia.d.ts new file mode 100644 index 0000000..7837a77 --- /dev/null +++ b/isaac-typescript-definitions/typings/mods/Encyclopedia.d.ts @@ -0,0 +1,154 @@ +declare const Encyclopedia: EncyclopediaInterface | undefined; + +declare interface EncyclopediaInterface { + AddCharacter(args: { + CompletionTrackerFuncs: [() => EncyclopediaItemVars[]]; + ID: PlayerType; + ModName: string; + Name: string; + }): void; + + AddCharacterTainted(args: { + CompletionTrackerFuncs: [() => EncyclopediaItemVars[]]; + Description: string; + ID: PlayerType; + ModName: string; + Name: string; + UnlockFunc: (args: EncyclopediaItemVars) => EncyclopediaItemVars; + }): void; + + AddItem(itemTab: { + ActiveCharge: number | undefined; + Class: string | undefined; + CloseFunc: (vars: EncyclopediaItemVars) => void; + Desc: string | undefined; + Hide: boolean | undefined; + ID: number; + ModName: string | undefined; + Name: string | undefined; + Pools: EncyclopediaItemPools; + Sprite: Sprite; + StatusFunc: (vars: EncyclopediaItemVars) => EncyclopediaItemVars; + UnlockFunc: (vars: EncyclopediaItemVars) => EncyclopediaItemVars; + WikiDesc: WikiDescription | undefined; + }): void; + + AddItemPoolSprite(id: number, sprite: Sprite): void; + + AddPocketItem( + itemTab: { + Class: string | undefined; + Desc: string | undefined; + Hide: boolean | undefined; + ID: number; + ModName: string | undefined; + Name: string | undefined; + Sprite: Sprite | undefined; + StatusClose: ((vars: EncyclopediaItemVars) => void) | undefined; + StatusFunc: + | ((vars: EncyclopediaItemVars) => EncyclopediaItemVars) + | undefined; + UnlockFunc: + | ((vars: EncyclopediaItemVars) => EncyclopediaItemVars | void) + | undefined; + WikiDesc: WikiDescription | undefined; + }, + eType: string, + ): void; + + AddRune(itemTab: { + Class: string; + Desc: string | undefined; + ID: number; + ModName: string | undefined; + Name: string | undefined; + RuneType: number; + Sprite: Sprite | undefined; + StatusClose: (vars: EncyclopediaItemVars) => void; + StatusFunc: (vars: EncyclopediaItemVars) => EncyclopediaItemVars; + UnlockFunc: + | ((vars: EncyclopediaItemVars) => EncyclopediaItemVars | void) + | undefined; + WikiDesc: WikiDescription | undefined; + }): void; + + AddTrinket(itemTab: { + Class: string | undefined; + Desc: string | undefined; + Hide: boolean | undefined; + ID: number; + ModName: string | undefined; + Name: string | undefined; + Sprite: Sprite | undefined; + StatusClose: ((vars: EncyclopediaItemVars) => void) | undefined; + StatusFunc: + | ((vars: EncyclopediaItemVars) => EncyclopediaItemVars) + | undefined; + UnlockFunc: + | ((vars: EncyclopediaItemVars) => EncyclopediaItemVars | void) + | undefined; + WikiDesc: WikiDescription | undefined; + }): void; + + EIDtoWiki(desc: string, title?: string): void; + + GetItemPoolIdByName(name: string): number; + + RegisterSprite( + gfxRoot: string, + anmToPlay: string, + anmFrame: number, + newSprite: string, + layer: number, + ): Sprite; + ItemPools: EncyclopediaItemPools; +} + +/** + * Contains Encyclopedia's custom item pool system. + * It uses custom item pools in order to allow better compatibility with modded pools. + * The same as the ItemPoolType enum, but every pool is 1 value higher, + * "to handle table indices better". + */ +declare type EncyclopediaItemPools = Record; + +/** + * A description for an item. Each object in the array is a category, + * containing a header and as many paragraphs as are needed. + */ +declare type WikiDescription = [ + { + header: { + clr: number | undefined; + fSize: number | undefined; + hAlign: number | undefined; + str: string; + }; + paragraphs: [ + { + str: string; + }, + ]; + }, +]; + +/** + * Encyclopedia's 'General Item Variables' object. Used to store data about an item. + */ +declare interface EncyclopediaItemVars { + CloseFunc(vars: EncyclopediaItemVars): void; + StatusFunc(vars: EncyclopediaItemVars): EncyclopediaItemVars; + + AllIndex: number | undefined; + AllIntIndex: number; + Class: string; + Desc: string | undefined; + Index: number | undefined; + ItemID: number; + Name: string | undefined; + Pools: EncyclopediaItemPools | undefined; + Spr: Sprite; + Title: string | undefined; + WikiDesc: WikiDescription | undefined; + typeString: string; +} diff --git a/isaac-typescript-definitions/typings/mods/InputHelper.d.ts b/isaac-typescript-definitions/typings/mods/InputHelper.d.ts new file mode 100644 index 0000000..45c164f --- /dev/null +++ b/isaac-typescript-definitions/typings/mods/InputHelper.d.ts @@ -0,0 +1,10 @@ +// This is a global exposed as part of ModConfigMenu + +declare const InputHelper: InputHelperInterface | undefined; + +declare interface InputHelperInterface { + KeyboardPressed(this: void, key: Keyboard, controllerIndex: int): boolean; + + ControllerToString: LuaTable; + KeyboardToString: LuaTable; +} diff --git a/isaac-typescript-definitions/typings/mods/MinimapAPI.d.ts b/isaac-typescript-definitions/typings/mods/MinimapAPI.d.ts new file mode 100644 index 0000000..a961f89 --- /dev/null +++ b/isaac-typescript-definitions/typings/mods/MinimapAPI.d.ts @@ -0,0 +1,310 @@ +declare const MinimapAPI: MinimapAPIInterface | undefined; + +interface MinimapAPIInterface { + AddDisplayFlagsCallback( + mod: Mod, + func: ( + room: MinimapAPIRoomDescriptor, + flags: DisplayFlag, + ) => DisplayFlag | undefined, + ): void; + + AddIcon( + id: number | string, + sprite: Sprite, + animationName: string, + frame: number, + color: Color | undefined, + ): { + Sprite: Sprite; + animationName: string; + color: Color | undefined; + frame: number; + id: number | string; + }; + + AddMapFlag( + id: number | string, + condition: () => boolean, + sprite: Sprite, + animName: string, + animFrame: number | (() => number), + ): { + ID: number | string; + anim: string; + color: Color; + condition: () => boolean; + frame: number | (() => number); + sprite: Sprite; + }; + + AddPickup( + id: number | string, + icon: string | MinimapAPIIcon, + entityType: EntityType, + variant: number, + subtype: number, + func: (pickup: EntityPickup) => boolean | undefined, + icongroup: string | number, + priority: number, + ): MinimapAPIRoomDescriptor; + + AddPlayerPositionCallback( + mod: Mod, + func: ( + room: MinimapAPIRoomDescriptor, + position: Vector, + ) => Vector | undefined, + ): void; + + AddRoom(table: { + /** + * The display flags that this room will take on if seen from an adjacent room. This is usually + * 0 for secret rooms, 3 for locked rooms and 5 for all others. + */ + AdjacentDisplayFlags: DisplayFlag | undefined; + + /** + * Optional. The API will automatically remove a room if you add this in the same position, + * setting this to true will disable this functionality. + */ + AllowRoomOverlap: boolean | undefined; + + /** The clear boolean for the room. */ + Clear: boolean | undefined; + + /** A Color object that is applied when this room is rendered on the map. */ + Color: Color | undefined; + + /** + * A RoomDescriptor object if you are attaching a vanilla room to this table. Setting this will + * cause this room's display flags and clear boolean to be taken from this RoomDescriptor. + */ + Descriptor: RoomDescriptor | undefined; + + /** The display flags for the room. Matches the format of `RoomDescriptor.DisplayFlags`. */ + DisplayFlags: DisplayFlag | undefined; + + /** + * This room is secret. It will not be revealed by the compass or the treasure map, and it WILL + * be revealed by the blue map. + */ + Hidden: boolean | undefined; + + /** Any value. This is used to identify your room later. */ + ID: number | string; + + /** + * A list of icon IDs that display on the map (e.g. keys and hearts). This will be overridden + * once the player enters this room. + */ + ItemIcons: number[] | undefined; + + /** + * A list of strings like above, but this is only shown when the player does not know the room's + * type. (e.g. locked shop, dice room) + */ + LockedIcons: string[] | undefined; + + /** + * A boolean. If true, then this room's minimap appearance will never be changed by the API + * itself, meaning its display flags, clear status, visited status and pickup icons will have to + * be updated externally. + */ + NoUpdate: boolean | undefined; + + /** A vector representing the position of the room on the minimap. */ + Position: Vector; + + /** + * A RoomShape enum value that represents the sprite on the minimap and where icons will be + * placed. + */ + Shape: RoomShape; + + /** + * A RoomType enum value. Optional, but recommended if you want the room to work as expected + * with minimap revealing items. + */ + Type: RoomType | undefined; + + /** + * Whether the room has been visited or not. This will be set to true as soon as the player's + * map position is in line with this room. + */ + Visited: boolean | undefined; + }): MinimapAPIRoomDescriptor; + + AddRoomShape( + id: number | string, + smallAnims: RoomAnimsTable, + largeAnims: RoomAnimsTable, + gridPivot: Vector, + gridSize: Vector, + positions: Vector[], + iconPositions: Vector[], + iconPositionCenter: Vector, + largeIconPositions: Vector[], + largeIconPositionCenter: Vector[], + adjacentCoords: Vector, + doorSlots: DoorSlot[] | undefined, + ): void; + + GetConfig(configOption: string): boolean | number | undefined; + + GetCurrentRoom(): MinimapAPIRoomDescriptor | undefined; + + GetLevel(dimension?: Dimension): MinimapAPIRoomDescriptor[]; + + GetPlayerPosition(): Vector; + + GetPositionRelativeToDoor( + room: MinimapAPIRoomDescriptor, + doorslot: DoorSlot, + ): Vector; + + GetRoom(position: Vector): MinimapAPIRoomDescriptor | undefined; + + GetRoomAtPosition(position: Vector): MinimapAPIRoomDescriptor | undefined; + + GetRoomById(id: number | string): MinimapAPIRoomDescriptor | undefined; + + GetRoomByIdx(roomIndex: int): MinimapAPIRoomDescriptor | undefined; + + GetSaveTable(menuExit: boolean): LuaTable; + + IsPositionFree(position: Vector): boolean; + + IsPositionFreeNoAlign( + position: Vector, + roomShape: RoomShape | undefined, + ): boolean; + + IsRoomAdjacent( + room1: MinimapAPIRoomDescriptor, + room2: MinimapAPIRoomDescriptor, + ): boolean; + + PlayerInRoom(room: MinimapAPIRoomDescriptor): boolean; + + RemoveIcon(id: string | number): void; + + RemoveRoom(position: Vector): void; + + RemoveRoomByID(id: number | string): void; + + SetPlayerPosition(position: Vector): void; + + Config: { + Disable: boolean; + DisplayExploredRooms: boolean; + DisplayMode: 0 | 1 | 2; + DisplayOnNoHUD: boolean; + HideInCombat: boolean; + MapFrameHeight: number; + MapFrameWidth: number; + OverrideLost: boolean; + OverrideVoid: boolean; + PositionX: number; + PositionY: number; + ShowCurrentRoomItems: boolean; + ShowIcons: boolean; + ShowLevelFlags: boolean; + ShowShadows: boolean; + SmoothSlidingSpeed: number; + }; + + Debug: { + Colors(): void; + Icons(): void; + RandomMap(): void; + Shapes(): void; + }; + + Levels: Map; + + OverrideConfig: { + Disable: boolean | undefined; + DisplayExploredRooms: boolean | undefined; + DisplayMode: 0 | 1 | 2 | undefined; + DisplayOnNoHUD: boolean | undefined; + HideInCombat: boolean | undefined; + MapFrameHeight: number | undefined; + MapFrameWidth: number | undefined; + OverrideLost: boolean | undefined; + OverrideVoid: boolean | undefined; + PositionX: number | undefined; + PositionY: number | undefined; + ShowCurrentRoomItems: boolean | undefined; + ShowIcons: boolean | undefined; + ShowLevelFlags: boolean | undefined; + ShowShadows: boolean | undefined; + SmoothSlidingSpeed: number | undefined; + }; + ReleaseVersion: number | undefined; + Version: string | number; +} + +interface MinimapAPIIcon { + Color: Color; + anim: string; + frame: number; + sprite: Sprite; +} + +interface RoomAnimsTable { + RoomCurrent: { + anim: string; + frame: number; + sprite: Sprite; + }; + + RoomSemivisited: { + anim: string; + frame: number; + sprite: Sprite; + }; + + RoomUnvisited: { + anim: string; + frame: number; + sprite: Sprite; + }; + + RoomVisited: { + anim: string; + frame: number; + sprite: Sprite; + }; +} + +interface MinimapAPIRoomDescriptor { + GetAdjacentRooms(): MinimapAPIRoomDescriptor[]; + GetDisplayFlags(): int; + IsClear(): boolean; + IsIconVisible(): boolean; + IsShadow(): boolean; + IsVisible(): boolean; + IsVisited(): boolean; + Remove(): void; + SetPosition(pos: Vector): void; + + AdjacentDisplayFlags: int; + Clear: boolean; + Color: Color; + Descriptor: RoomDescriptor; + DisplayFlags: int; + DisplayPosition: Vector; + Hidden: boolean; + ID: int; + ItemIcons: string[]; + LockedIcons: string[]; + NoUpdate: boolean; + PermanentIcons: string[]; + Position: Vector; + RenderOffset: Vector; + Shape: RoomShape; + TargetRenderOffset: Vector; + Type: RoomType; + Visited: boolean; +} diff --git a/isaac-typescript-definitions/typings/mods/ModConfigMenu.d.ts b/isaac-typescript-definitions/typings/mods/ModConfigMenu.d.ts new file mode 100644 index 0000000..227cb85 --- /dev/null +++ b/isaac-typescript-definitions/typings/mods/ModConfigMenu.d.ts @@ -0,0 +1,72 @@ +declare const ModConfigMenu: ModConfigMenuInterface | undefined; + +/** @noSelf */ +declare interface ModConfigMenuInterface { + AddSetting( + categoryName: string, + subcategoryName: string, + setting?: ModConfigMenuSetting, + ): void; + AddSpace(categoryName: string, subcategoryName: string): void; + AddText( + categoryName: string, + subcategoryName: string, + textFunction: () => string, + ): void; + GetCategoryIDByName(categoryName: string): int | undefined; + + Config: { + General: { + HudOffset: int; + }; + LastBackPressed: Keyboard | Controller; + }; + IsVisible: boolean; + /** + * MenuData is not normally supposed to be accessed, but we access it to wipe data during a mod + * reload. + */ + MenuData: LuaTable; + PopupGfx: { + /* eslint-disable @typescript-eslint/member-ordering */ + THIN_SMALL: "gfx/ui/modconfig/popup_thin_small.png"; + THIN_MEDIUM: "gfx/ui/modconfig/popup_thin_medium.png"; + THIN_LARGE: "gfx/ui/modconfig/popup_thin_large.png"; + WIDE_SMALL: "gfx/ui/modconfig/popup_wide_small.png"; + WIDE_MEDIUM: "gfx/ui/modconfig/popup_wide_medium.png"; + WIDE_LARGE: "gfx/ui/modconfig/popup_wide_large.png"; + /* eslint-enable @typescript-eslint/member-ordering */ + }; +} + +/** @noSelf */ +declare interface ModConfigMenuSetting { + CurrentSetting: () => number | boolean; + Display: () => string; + Info: string[]; + Maximum?: number; + Minimum?: number; + ModifyBy?: number; + /** This will be undefined if the user canceled the popup dialog. */ + OnChange: (newValue: number | boolean | undefined) => void; + Popup?: () => void; + PopupGfx?: string; + PopupWidth?: int; + Type: ModConfigMenuOptionType; +} + +declare const enum ModConfigMenuOptionType { + TEXT = 1, + SPACE = 2, + SCROLL = 3, + BOOLEAN = 4, + NUMBER = 5, + KEYBIND_KEYBOARD = 6, + KEYBIND_CONTROLLER = 7, + TITLE = 8, +} + +declare interface MenuData { + Name: string; + Subcategories: string[]; +} diff --git a/isaac-typescript-definitions/typings/mods/MusicModCallback.d.ts b/isaac-typescript-definitions/typings/mods/MusicModCallback.d.ts new file mode 100644 index 0000000..f166cc5 --- /dev/null +++ b/isaac-typescript-definitions/typings/mods/MusicModCallback.d.ts @@ -0,0 +1,84 @@ +declare const MMC: MusicModCallback | undefined; + +declare interface MusicModCallback { + /** + * Adds a callback to be triggered whenever a track is about to play. Used for changing music. + * + * @param mod The ModReference for your mod (created with RegisterMod()) + * @param callback A function that is called every time a track is about to play. + * The function should return one of the following: + * - a track ID to play that instead + * - a LuaMultiReturn<[jingleID: Music, trackID: Music]> to play a jingle and queue the track + * - 0 to prevent the track from playing, and allow the current one to continue + * - -1 to stop all music + * - undefined to continue to internal code + * @param tracks The tracks that will trigger your function call. + * If this argument is omitted, all music changes will trigger this callback. + */ + AddMusicCallback( + mod: Mod, + callback: ( + id: Music, + ) => + | Music + | LuaMultiReturn<[jingleID: Music, trackID: Music]> + | number + | undefined, + ...tracks: Music[] + ): void; + + /** + * @returns The ID of the intended boss room entry music for this room (e.g. Satan, Mom). + * If not in a boss room, it will simply return one of the two generic themes. + */ + GetBossTrack(): Music; + + /** + * @returns Either the ID of the current room's music, or a LuaMultiReturn containing the current + * jingle's ID and the current room's track ID. + * + * WARNING: Using this in an uncleared boss room will return ONLY the boss jingle. + * If you want the intended boss music, use `GetBossTrack()`. + */ + GetMusicTrack(): LuaMultiReturn< + [currentRoomMusicOrJingle: Music, currentRoomMusic?: Music] + >; + + GetStageTrack(): Music; + InCustomStage(): boolean; + + /** + * @returns A table that behaves identically to the MusicManager class, except that it will call + * all mod callbacks. Useful if you want to allow others to change the music of your custom room + * or stage with Music API. + */ + Manager(): MusicManager; + + /** + * This will remove all callbacks associated with the mod. + * + * @param mod The mod object that you created with RegisterMod. + */ + RemoveMusicCallback(mod: Mod): void; + + /** + * True if music layers are disabled in favour of a mod that does not allow them. + * False by default. + * Change to true if your mod does not support layers. + * This is not associated with the `MusicManager.DisableLayer()` command and takes priority if + * true. + */ + DisableMusicLayers: boolean; + + /** + * This variable is true if the mod has fully loaded. False otherwise. + */ + Initialised: boolean; // cspell:disable-line + + /** + * The current version of the API. You can check that the right version is installed with your + * mod, as there is a slight possibility that future versions will not be backwards compatible. + * The mod version in metadata may not match this. + */ + Version: string; +} diff --git a/isaac-typescript-definitions/typings/mods/StageAPI.d.ts b/isaac-typescript-definitions/typings/mods/StageAPI.d.ts new file mode 100644 index 0000000..a606668 --- /dev/null +++ b/isaac-typescript-definitions/typings/mods/StageAPI.d.ts @@ -0,0 +1,312 @@ +declare const StageAPI: StageAPIInterface | undefined; + +interface StageAPICallbackParameters { + [StageAPICallback.POST_CHANGE_ROOM_GFX]: [callback: (this: void) => void]; + + [StageAPICallback.POST_CHECK_VALID_ROOM]: [ + callback: ( + this: void, + roomList: unknown, + seed: int, + shape: RoomShape, + rType: RoomType, + requireRoomType: unknown, + ) => void, + ]; + + [StageAPICallback.POST_CUSTOM_DOOR_UPDATE]: [ + callback: ( + door: unknown, + data: unknown, + sprite: unknown, + customDoor: unknown, + persistData: unknown, + ) => void, + ]; + + [StageAPICallback.POST_CUSTOM_GRID_PROJECTILE_HELPER_UPDATE]: [ + callback: ( + customGridEntity: unknown, + projectileHelper: unknown, + projectileHelperParent: unknown, + ) => void, + ]; + + [StageAPICallback.POST_CUSTOM_GRID_PROJECTILE_UPDATE]: [ + callback: (customGridEntity: unknown, projectile: unknown) => void, + ]; + + [StageAPICallback.POST_CUSTOM_GRID_REMOVE]: [ + callback: ( + spawnIndex: unknown, + persistData: unknown, + customGrid: unknown, + customGridTypeName: unknown, + ) => void, + ]; + + [StageAPICallback.POST_CUSTOM_GRID_UPDATE]: [ + callback: (customGridEntity: unknown) => void, + ]; + + [StageAPICallback.POST_GRID_UPDATE]: [callback: () => void]; + + [StageAPICallback.POST_OVERRIDDEN_GRID_BREAK]: [ + callback: ( + this: void, + gridIndex: int, + grid: GridEntity, + justBrokenGridSpawns: + | LuaTable + | undefined, + ) => false | void, + ]; + + [StageAPICallback.POST_ROOM_INIT]: [ + callback: ( + this: void, + currentRoom: StageAPILevelRoom, + fromSaveData: unknown, + saveData: unknown, + ) => void, + ]; + + [StageAPICallback.POST_ROOM_LOAD]: [ + callback: ( + this: void, + currentRoom: StageAPILevelRoom, + isFirstLoad: boolean, + isExtraRoom: boolean, + ) => void, + ]; + + [StageAPICallback.POST_SPAWN_CUSTOM_DOOR]: [ + callback: ( + door: unknown, + data: unknown, + sprite: unknown, + customDoor: unknown, + persistData: unknown, + index: unknown, + force: unknown, + respawning: unknown, + grid: unknown, + customGrid: unknown, + ) => void, + ]; + + [StageAPICallback.POST_SPAWN_CUSTOM_GRID]: [ + callback: ( + customGridEntity: unknown, + force: unknown, + respawning: unknown, + ) => void, + ]; + + [StageAPICallback.POST_STAGEAPI_NEW_ROOM]: [callback: () => void]; + + [StageAPICallback.POST_STAGEAPI_NEW_ROOM_GENERATION]: [ + callback: (justGenerated: unknown, currentRoom: unknown) => void, + ]; + + [StageAPICallback.PRE_BOSS_SELECT]: [ + callback: (bosses: unknown, allowHorseman: unknown, rng: unknown) => void, + ]; + + [StageAPICallback.PRE_CHANGE_ROOM_GFX]: [ + callback: (currentRoom: unknown) => void, + ]; + + [StageAPICallback.PRE_ROOM_LAYOUT_CHOOSE]: [ + callback: ( + this: void, + currentRoom: unknown, + roomsList: unknown, + ) => StageAPICustomRoomConfig | undefined, + ]; + + [StageAPICallback.PRE_SELECT_ENTITY_LIST]: [ + callback: ( + entityList: unknown, + spawnIndex: unknown, + addEntities: unknown, + ) => void, + ]; + + [StageAPICallback.PRE_SELECT_GRIDENTITY_LIST]: [ + callback: (gridDataList: unknown, spawnIndex: unknown) => void, + ]; + + [StageAPICallback.PRE_SELECT_NEXT_STAGE]: [ + callback: (currentStage: unknown) => void, + ]; + + [StageAPICallback.PRE_SPAWN_ENTITY]: [ + callback: ( + entityInfo: unknown, + entityList: unknown, + index: unknown, + doGrids: unknown, + doPersistentOnly: unknown, + doAutoPersistent: unknown, + avoidSpawning: unknown, + persistenceData: unknown, + shouldSpawnEntity: unknown, + ) => void, + ]; + + [StageAPICallback.PRE_SPAWN_ENTITY_LIST]: [ + callback: ( + entityList: unknown, + spawnIndex: unknown, + doGrids: unknown, + doPersistentOnly: unknown, + doAutoPersistent: unknown, + avoidSpawning: unknown, + persistenceData: unknown, + ) => void, + ]; + + [StageAPICallback.PRE_SPAWN_GRID]: [ + callback: ( + this: void, + gridData: unknown, + gridInformation: unknown, + entities: unknown, + gridSpawnRNG: RNG, + ) => boolean | undefined, + ]; + + [StageAPICallback.PRE_STAGEAPI_NEW_ROOM]: [callback: (this: void) => void]; + + [StageAPICallback.PRE_TRANSITION_RENDER]: [callback: () => void]; + + [StageAPICallback.PRE_UPDATE_GRID_GFX]: [callback: () => void]; +} + +/** @noSelf */ +interface StageAPIInterface { + /** + * Stores a function and its params in a table indexed by `ID` and sorted by `priority`, + * where low priority is at the start. + */ + AddCallback( + modID: string, + id: T, + priority: int, + ...args: StageAPICallbackParameters[T] + ): void; + + /** + * Convenience function that assembles filenames and packages them in a {@link Backdrop} for + * you. + * + * @param prefix the path to the directory containing the backdrop spritesheets, + * as well as any shared prefix. + * + * Ex: "gfx/backdrop/revel1/glacier/main_" + * @param suffix Generally the file extension, i.e. `".png"`. + */ + BackdropHelper( + backdrop: StageAPIBackdrop | StageAPIBackdrop[], + prefix: string, + suffix: string, + ): StageAPIBackdrop[]; + + ChangeBackdrop( + backdrop: StageAPIBackdrop, + justWalls?: boolean, + storeBackdropEntities?: false, + ): void; + ChangeBackdrop( + backdrop: StageAPIBackdrop, + justWalls: boolean, + storeBackdropEntities: true, + ): Entity[]; + + /** Function to create a custom floor layout. */ + CreateMapFromRoomsList( + roomsList: StageAPIRoomsList, + mapRoomVariant?: int, + ): StageAPILevelMap; + + /** + * Creates a new custom stage. + * + * @param name MUST BE UNIQUE. USED TO IDENTIFY STAGE AND FOR SAVING CURRENT STAGE. + * @param noSetReplaces Replaces defaults to catacombs one if noSetReplaces is not set. + */ + CustomStage( + name: string, + stageOverrideStage?: StageAPIStageOverrideStage, + noSetReplaces?: boolean, + ): StageAPICustomStage; + + /** Used to go to a specific room when on a custom StageAPI floor. */ + ExtraRoomTransition( + levelMapRoomID: int, + direction: Direction, + transitionType: RoomTransitionAnim, + levelMapID: unknown, + leaveDoor?: int, + enterDoor?: int, + setPlayerPosition?: unknown, + extraRoomBaseType?: unknown, + ): void; + + /** + * On the first run after opening the game for the first time, StageAPI gathers a bunch of data + * from vanilla rooms so that it can properly build custom stages. If a mod is initializing a + * custom stage, they must first check on every PostRender frame until this method returns true. + */ + FinishedLoadingData(): boolean; + + GetCurrentLevelMap(): StageAPILevelMap; + + GetCurrentRoom(): StageAPILevelRoom | undefined; + + /** Roughly analogous to the vanilla `Level.GetCurrentRoomIndex` function. */ + GetCurrentRoomID(): int; + + GetCustomGrids( + index: int | undefined, + name: string, + ): StageAPICustomGridEntity[]; + + /** Teleports the player(s) to a specified stage */ + GotoCustomStage( + customStage: StageAPICustomStage, + playTransition?: boolean, + noForgetSeed?: boolean, + ): void; + + GridGfx(): StageAPIGridGfx; + + InitCustomLevel(levelMap: StageAPILevelMap, levelStartRoom: boolean): void; + + LoadCustomMapRoomDoors( + levelRoom: StageAPILevelRoom, + roomData: StageAPIRoomData, + levelMap?: StageAPILevelMap, + ): void; + + /** Constructor for the RoomGfx object. */ + RoomGfx( + backdrop: StageAPIBackdrop, + gridGfx: StageAPIGridGfx | undefined, + shadingName: string, + shadingPrefix: string, + ): StageAPIRoomGfx; + + RoomsList(name: string, ...layouts: unknown[]): StageAPIRoomsList; + + /** Unregisters all mod callbacks, should be used when a mod loads, useful for `luamod`. */ + UnregisterCallbacks(modID: string): void; + + Callbacks: Record; + + StageOverride: { + CatacombsOne: 1; + CatacombsTwo: 2; + }; +} diff --git a/isaac-typescript-definitions/typings/mods/StageAPIInterfaces.d.ts b/isaac-typescript-definitions/typings/mods/StageAPIInterfaces.d.ts new file mode 100644 index 0000000..224fbb8 --- /dev/null +++ b/isaac-typescript-definitions/typings/mods/StageAPIInterfaces.d.ts @@ -0,0 +1,233 @@ +declare interface StageAPIBackdrop { + Corners: string[]; + LFloors: string[]; + NFloors: string[]; + Walls: string[]; +} + +declare interface StageAPICustomDoor { + AlwaysOpen: boolean; + Anm2: string; + CloseAnim: string; + ClosedAnim: string; + DirectionOffsets: unknown; + ExitFunction: string; + Name: string; + NoAutoHandling: boolean; + OpenAnim: string; + OpenedAnim: string; + TransitionAnim: int; +} + +declare interface StageAPICustomGridEntity { + PersistentData: StageAPICustomDoor; +} + +declare interface StageAPICustomStage { + /** Gets the ID of the currently playing music. */ + GetPlayingMusic(): int; + + /** + * Automatically aliases the new stage to the old one, if noSetAlias is not set. + * + * This means that IsStage calls on either will return true if either is active. + * + * STILL NEEDS A UNIQUE NAME. + */ + InheritInit(name: string, noSetAlias?: boolean): void; + + /** If this {@link CustomStage} is, in fact, a stage. */ + IsStage(noAlias: boolean): boolean; + + /** + * Indicates that this stage overrides alt rock effects. + * + * @param rooms If present, only overrides rock alt effects for the specified + * {@link RoomType RoomTypes}. If absent, overrides alt rocks everywhere. + * + * DOES NOT add any new effects on its own. + */ + OverrideRockAltEffects(rooms?: RoomType[]): void; + + /** Sets the boss music used by the stage. */ + SetBossMusic(musicID: int, clearedMusicID: int): void; + + /** Sets the available bosses for the stage. */ + SetBosses(bossIDs: int[]): void; + + /** Sets the name displayed to the player. */ + SetDisplayName(name: string): void; + + /** Sets if this is the second half of a stage. */ + SetIsSecondStage(isSecondStage: boolean): void; + + /** Sets the music used by the stage. */ + SetMusic(musicID: int, roomType: RoomType): void; + + /** + * Sets the internal name/id. + * + * MUST BE UNIQUE. + */ + SetName(name: string): void; + + /** Sets the stage after this one. */ + SetNextStage(nextStage: StageAPICustomStage | StageAPIVanillaStage): void; + + /** Sets the stage this `CustomStage` overrides. */ + SetReplace(stageOverrideStage: StageAPIStageOverrideStage): void; + + /** + * Sets the {@link RoomGfx} used by the stage. + * + * @param RoomTypes the room types these gfx apply to. + * + * Can be a string identifier, a {@link RoomType}, or an array of either. + */ + SetRoomGfx( + roomGfx: StageAPIRoomGfx, + roomTypes: string | int | string[] | int[], + ): void; + + /** Sets the list room layouts used by the stage. */ + SetRooms(roomsList: StageAPIRoomsList): void; + + /** + * Sets the paths to the "spot" graphic, + * the patch of ground underneath the boss and player sprites in the pre-boss cutscene. + */ + SetSpots(bossSpot: string | undefined, playerSpot: string | undefined): void; + + /** Sets the stage's number. */ + SetStageNumber(num: int): void; + + /** Sets the path to the stage transition icon. */ + SetTransitionIcon(iconPath: string): void; +} + +declare interface StageAPIDoorInfo { + IsBossAmbush?: boolean; + NotCurrent?: RoomType[]; + NotEither?: RoomType[]; + NotTarget?: RoomType[]; + RequireCurrent?: RoomType[]; + RequireEither?: RoomType[]; + RequireTarget?: RoomType[]; +} + +declare interface StageAPIGridGfx { + /** Sets the path to the gfx spritesheet of the specified subset of doors. */ + AddDoors(filename: string, DoorInfo: StageAPIDoorInfo): void; + + /** Sets the path to the bridge gfx spritesheet. */ + SetBridges(filename: string): void; + + /** Sets the path to the decoration gfx spritesheet. */ + SetDecorations(filename: string): void; + + /** Sets the path to the gfx spritesheet for the specified {@link GridEntity}. */ + SetGrid(filename: string, GridEntityType: GridEntityType, variant: int): void; + + /** Sets the path to the pay-to-play door gfx spritesheet. */ + SetPayToPlayDoor(filename: string): void; + + /** + * Sets the path to the pit gfx spritesheet + * + * Alt Pits are used where water pits would be. + * + * @param hasExtraFrames Controls for situations where the base game would not normally tile pits + * specially. + */ + SetPits( + filename: string, + altPitsFilename?: string, + hasExtraFrames?: boolean, + ): void; + + /** + * Sets the paths to the pit gfx spritesheets. + * + * Takes lists of { File, HasExtraFrames }. + * + * (Original docs indicate to "see utero override".) + */ + SetPits( + filenames: Array<{ File: string; HasExtraFrames?: boolean }>, + altPitsFilenames: Array<{ File: string; HasExtraFrames?: boolean }>, + ): void; + + /** Sets the path to the rock gfx spritesheet. */ + SetRocks(filename: string): void; +} + +declare interface StageAPILevelMap { + GetCurrentRoomData(): StageAPIRoomData; + GetRoom(roomData: StageAPIRoomData): StageAPILevelRoom; + Map: StageAPIRoomData[]; +} + +declare interface StageAPILevelRoom { + AvoidSpawning: unknown; + AwardSeed: int; + ClearCount: int; + Data: unknown; + DecorationSeed: int; + Dimension: Dimension; + Doors: unknown; + ExtraSpawn: unknown; + FirstLoad: boolean; + Layout: { + Name: string; + Variant: int; + }; + PersistenceData: unknown; + PersistentData: unknown; + RoomType: RoomType; + RoomsListName: string; + Seed: int; + Shape: RoomShape; + SpawnSeed: int; + SurpriseMiniboss: boolean; + VisitCount: int; +} + +declare interface StageAPIRemovedEntityData { + Position: Vector; + Seed: number; + Spawner: Entity | undefined; + SubType: int; + Type: EntityType; + Variant: int; + Velocity: Vector; +} + +declare interface StageAPIRoomData { + MapID: int; + RoomID: int; + X: int; + Y: int; +} + +declare interface StageAPIRoomGfx { + Backdrop: Sprite; + GridGfx: Sprite; + shadingName: string; + shadingPrefix: string; +} + +declare interface StageAPIRoomsList { + AddRooms(roomFiles: string[] | StageAPICustomRoomConfig[]): void; +} + +declare type StageAPIStageOverrideStage = { + OverrideStage: LevelStage; + OverrideStageType: StageType; + ReplaceWith: StageAPICustomStage | StageAPIVanillaStage; +}; + +declare interface StageAPIVanillaStage { + NormalStage: true; + Stage: LevelStage; + StageType: StageType; +} diff --git a/isaac-typescript-definitions/typings/mods/StageAPIUnofficial.d.ts b/isaac-typescript-definitions/typings/mods/StageAPIUnofficial.d.ts new file mode 100644 index 0000000..f180ff2 --- /dev/null +++ b/isaac-typescript-definitions/typings/mods/StageAPIUnofficial.d.ts @@ -0,0 +1,267 @@ +declare type StageAPICustomRoomConfig = LuaTable< + number | string, + StageAPILuaRoomGenericEntity | number | string +>; + +declare const enum StageAPILayoutButtonVariant { + ROOM_CLEAR = 0, + REWARD = 1, + GREED = 2, + KILL = 9, + RAIL = 3, +} + +declare const enum StageAPILayoutCornyPoopSubtype { + NORMAL = 0, + NON_REPLACEABLE = 1, +} + +declare const enum StageAPILayoutGridType { + ROCK = 1000, + ROCK_ALT = 1002, + ROCK_BOMB = 1001, + ROCK_SPIKE = 1010, + ROCK_GOLD = 1011, + MARKED_SKULL = 1008, + BLOCK_METAL = 1900, + BLOCK_METAL_TALL = 1901, + BLOCK_INVISIBLE = 1999, + BLOCK_KEY = 4000, + PIT = 3000, + TNT = 1300, + TNT_PUSHABLE = 292, + SPIKES = 1930, + SPIKES_ON_OFF = 1931, + COBWEB = 1940, + BUTTON = 4500, + POOP = 1500, + POOP_CORNY = 1495, + POOP_RED = 1490, + POOP_GOLD = 1496, + POOP_RAINBOW = 1494, + POOP_BLACK = 1497, + POOP_HOLY = 1498, + POOP_CHARMING = 1501, + GRAVITY = 10000, + PITFALL = 291, + PROP_A = 10, + PROP_B = 20, + PROP_C = 30, +} + +declare const enum StageAPILayoutPitfallVariant { + NORMAL = 0, + SUCTION = 1, + TELEPORT = 2, +} + +declare const enum StageAPILayoutPoopSubtype { + NORMAL = 0, + NON_REPLACEABLE = 1, +} + +declare const enum StageAPILayoutRockSubtype { + NORMAL = 0, + NON_REPLACEABLE = 1, +} + +declare const enum StageAPILayoutSpikesOnOffVariant { + NORMAL = 0, + DOWN_1_FIFTH = 1, + DOWN_2_FIFTHS = 2, + DOWN_3_FIFTHS = 3, + DOWN_4_FIFTHS = 4, + DOWN_5_FIFTHS = 5, + UP_1_FIFTH = 6, + UP_2_FIFTHS = 7, + UP_3_FIFTHS = 8, + UP_4_FIFTHS = 9, + UP_5_FIFTHS = 10, +} + +declare interface StageAPILuaRoomDoor extends StageAPILuaRoomGenericEntity { + EXISTS: boolean; + SLOT: DoorSlot; +} + +declare interface StageAPILuaRoomEntity extends StageAPILuaRoomGenericEntity { + 1: { + /* eslint-disable @typescript-eslint/member-ordering */ + TYPE: int; + VARIANT: int; + SUBTYPE: int; + WEIGHT: float; + METADATA?: unknown; + /* eslint-enable @typescript-eslint/member-ordering */ + }; +} + +declare interface StageAPILuaRoomGenericEntity { + GRIDX: int; + GRIDY: int; + ISDOOR: boolean; +} + +declare const enum StageAPIPickupRandomGroupVariant { + ANY = 0, + NOT_CHEST_ITEM = 1, + NOT_ITEM = 2, + NOT_CHEST_ITEM_COIN = 3, + NOT_CHEST_ITEM_TRINKET = 4, +} + +declare const enum StageAPICallback { + POST_CHANGE_ROOM_GFX = "POST_CHANGE_ROOM_GFX", + + /** Return false to invalidate a room layout; return integer to specify new weight. */ + POST_CHECK_VALID_ROOM = "POST_CHECK_VALID_ROOM", + + /** + * Takes CustomDoorName as first callback parameter, and will only run if parameter not supplied + * or matches current door. + */ + POST_CUSTOM_DOOR_UPDATE = "POST_CUSTOM_DOOR_UPDATE", + + /** + * Takes CustomGridTypeName as first callback parameter, and will only run if parameter not + * supplied or matches current grid. + */ + POST_CUSTOM_GRID_PROJECTILE_HELPER_UPDATE = "POST_CUSTOM_GRID_PROJECTILE_HELPER_UPDATE", + + /** + * Takes CustomGridTypeName as first callback parameter, and will only run if parameter not + * supplied or matches current grid. + */ + POST_CUSTOM_GRID_PROJECTILE_UPDATE = "POST_CUSTOM_GRID_PROJECTILE_UPDATE", + + /** + * Takes CustomGridTypeName as first callback parameter, and will only run if parameter not + * supplied or matches current grid. + */ + POST_CUSTOM_GRID_REMOVE = "POST_CUSTOM_GRID_REMOVE", + + /** + * Takes CustomGridTypeName as first callback parameter, and will only run if parameter not + * supplied or matches current grid. + */ + POST_CUSTOM_GRID_UPDATE = "POST_CUSTOM_GRID_UPDATE", + + /** + * Calls when the number of grids changes or grids are reprocessed. This is when room grid + * graphics are changed. + */ + POST_GRID_UPDATE = "POST_GRID_UPDATE", + + /** + * Called when an overridden grid reaches its break state and is considered broken. + * + * @param justBrokenGridSpawns Contains all deleted spawns from the grid. + * + * Breaks on first non-undefined return. + */ + POST_OVERRIDDEN_GRID_BREAK = "POST_OVERRIDDEN_GRID_BREAK", + + /** + * Called when a room initializes. Can occur at two times, when a room is initially entered or + * when a room is loaded from save data. Takes no return values. + */ + POST_ROOM_INIT = "POST_ROOM_INIT", + + /** Called when a room is loaded. Takes no return value. */ + POST_ROOM_LOAD = "POST_ROOM_LOAD", + + /** + * Takes CustomDoorName as first callback parameter, and will only run if parameter not supplied + * or matches current door. + */ + POST_SPAWN_CUSTOM_DOOR = "POST_SPAWN_CUSTOM_DOOR", + + /** + * Takes CustomGridTypeName as first callback parameter, and will only run if parameter not + * supplied or matches current grid. + */ + POST_SPAWN_CUSTOM_GRID = "POST_SPAWN_CUSTOM_GRID", + + /** + * All loading and processing of new room generation and old room loading is done, but the gfx + * has not changed yet. + */ + POST_STAGEAPI_NEW_ROOM = "POST_STAGEAPI_NEW_ROOM", + + /** + * Allows returning justGenerated and currentRoom. Run after normal room generation but before + * reloading old rooms. + */ + POST_STAGEAPI_NEW_ROOM_GENERATION = "POST_STAGEAPI_NEW_ROOM_GENERATION", + + /** If a boss is returned, uses it instead. */ + PRE_BOSS_SELECT = "PRE_BOSS_SELECT", + + /** Allows returning room gfx to use in place of the stage's. */ + PRE_CHANGE_ROOM_GFX = "PRE_CHANGE_ROOM_GFX", + + /** + * Takes 1 return value. If a table, uses it as the current room layout. + * Otherwise, chooses from `roomsList` with seeded RNG. Breaks on first return. + * + * Called both on initial room load and when continuing game, before INIT. + */ + PRE_ROOM_LAYOUT_CHOOSE = "PRE_ROOM_LAYOUT_CHOOSE", + + /** + * Takes 4 return values, AddEntities, EntityList, StillAddRandom, and NoBreak. + * If the first value is false, cancels selecting the list. + * AddEntities and EntityList are lists of EntityData tables, described below. + * Usually StageAPI will pick one entity from the EntityList to add to the AddEntities table at + * random, but that can be changed with this callback. + * If StillAddRandom is true, StageAPI will still add a random entity from the entityList to + * addEntities, alongside ones you returned. + */ + PRE_SELECT_ENTITY_LIST = "PRE_SELECT_ENTITY_LIST", + + /** + * Takes 1 return value. If false, cancels selecting the list. If GridData, selects it to spawn. + * With no value, picks at random. + */ + PRE_SELECT_GRIDENTITY_LIST = "PRE_SELECT_GRIDENTITY_LIST", + + /** Return a stage to go to instead of currentStage.NextStage or none. */ + PRE_SELECT_NEXT_STAGE = "PRE_SELECT_NEXT_STAGE", + + /** + * Takes 1 return value. If false, cancels spawning the entity info. If a table, uses it as the + * entity info. Any return value breaks out of future callbacks. + */ + PRE_SPAWN_ENTITY = "PRE_SPAWN_ENTITY", + + /** + * Takes 1 return value. If false, cancels spawning the entity list. If a table, uses it as the + * entity list. Any return value breaks out of future callbacks. Every entity in the final entity + * list is spawned. Note that this entity list contains EntityInfo tables rather than EntityData, + * which contain persistent room-specific data. Both detailed below. + */ + PRE_SPAWN_ENTITY_LIST = "PRE_SPAWN_ENTITY_LIST", + + /** + * Takes 1 return value. If `false`, cancels spawning the grid. + * If a table, uses it as the grid data. + * + * Any return value breaks out of future callbacks. + */ + PRE_SPAWN_GRID = "PRE_SPAWN_GRID", + + /** + * Runs before most but not all stageapi room functionality. Guaranteed to run before any room + * loads. + */ + PRE_STAGEAPI_NEW_ROOM = "PRE_STAGEAPI_NEW_ROOM", + + /** + * Called before the custom room transition would render, for effects that should render before + * it. + */ + PRE_TRANSITION_RENDER = "PRE_TRANSITION_RENDER", + + /** Allows returning grid gfx to use in place of the stage's. */ + PRE_UPDATE_GRID_GFX = "PRE_UPDATE_GRID_GFX", +} diff --git a/isaac-typescript-definitions/typings/primitives.d.ts b/isaac-typescript-definitions/typings/primitives.d.ts new file mode 100644 index 0000000..9f2b67a --- /dev/null +++ b/isaac-typescript-definitions/typings/primitives.d.ts @@ -0,0 +1,15 @@ +// The Binding of Isaac: Rebirth Lua API expects certain values as either integers or floats, +// so we define those types here + +/** + * TypeScript does not support integers. + * https://spin.atomicobject.com/2018/11/05/using-an-int-type-in-typescript/ + * To avoid verbose casting everywhere, we just make int an alias for number. + */ +type int = number; // eslint-disable-line @typescript-eslint/naming-convention + +/** + * In TypeScript, a "number" is the same thing as a float. We make an alias here so that the API + * definitions better correspond to the official API documentation. + */ +type float = number; // eslint-disable-line @typescript-eslint/naming-convention diff --git a/isaac-typescript-definitions/typings/socket.d.ts b/isaac-typescript-definitions/typings/socket.d.ts new file mode 100644 index 0000000..265dc97 --- /dev/null +++ b/isaac-typescript-definitions/typings/socket.d.ts @@ -0,0 +1,119 @@ +// The "socket.lua" module exists at: +// C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac Rebirth\resources\scripts\socket.lua +// It is intended to be consumed by mods via: +// local socket = require("socket") +// (but it requires that the "--luadebug" flag is enabled) + +declare interface Socket { + gettime(this: void): float; + tcp(this: void): SocketClient; + udp(this: void): SocketClient; +} + +declare interface SocketClient { + /** + * Closes a TCP object. The internal socket used by the object is closed and the local address to + * which the object was bound is made available to other applications. No further operations + * (except for further calls to the close method) are allowed on a closed socket. + */ + close(): void; + + /** + * Attempts to connect a master object to a remote host, transforming it into a client object. + * Client objects support methods `send`, `receive`, `getsockname`, `getpeername`, `settimeout`, + * and close. + * + * Address can be an IP address or a host name. Port must be an integer number. + * + * In case of error, the method returns undefined followed by a string describing the error. In + * case of success, the method returns 1. + */ + connect( + host: string, + port: int, + ): LuaMultiReturn<[returnCode: int, errMsg: string]>; + + /** + * Reads data from a client object, according to the specified read pattern. Patterns follow the + * Lua file I/O format, and the difference in performance between all patterns is negligible. + * + * Pattern can be any of the following: + * + * - '*a': reads from the socket until the connection is closed. No end-of-line translation is + * performed. + * - '*l': reads a line of text from the socket. The line is terminated by a LF character (ASCII + * 10), optionally preceded by a CR character (ASCII 13). The CR and LF characters are not + * included in the returned line. In fact, all CR characters are ignored by the pattern. This is + * the default pattern. + * - number: causes the method to read a specified number of bytes from the socket. + * + * Prefix is an optional string to be concatenated to the beginning of any received data before + * return. + * + * If successful, the method returns the received pattern. In case of error, the method returns + * undefined followed by an error message which can be the string "closed" in case the connection + * was closed before the transmission was completed or the string "timeout" in case there was a + * timeout during the operation. Also, after the error message, the function returns the partial + * result of the transmission. + */ + receive(): LuaMultiReturn<[data: string | undefined, errMsg: string]>; + + /** + * Sends data through client object. + * + * Data is the string to be sent. The optional arguments i and j work exactly like the standard + * string.sub Lua function to allow the selection of a substring to be sent. + * + * If successful, the method returns the index of the last byte within [i, j] that has been sent. + * Notice that, if i is 1 or absent, this is effectively the total number of bytes sent. In case + * of error, the method returns undefined, followed by an error message, followed by the index of + * the last byte within [i, j] that has been sent. You might want to try again from the byte + * following that. The error message can be "closed" in case the connection was closed before the + * transmission was completed or the string 'timeout' in case there was a timeout during the + * operation. + */ + send( + msg: string, + ): LuaMultiReturn<[sentBytes: int | undefined, errMsg: string]>; + + /** + * Changes the peer of a UDP object. This method turns an unconnected UDP object into a connected + * UDP object or vice versa. + * + * For connected objects, outgoing datagrams will be sent to the specified peer, and datagrams + * received from other peers will be discarded by the OS. Connected UDP objects must use the + * `send` and `receive` methods instead of `sendto` and `receivefrom`. + * + * Address can be an IP address or a host name. Port is the port number. If address is "*" and the + * object is connected, the peer association is removed and the object becomes an unconnected + * object again. In that case, the port argument is ignored. + * + * In case of error the method returns undefined followed by an error message. In case of success, + * the method returns 1. + */ + setpeername( + host: string, + port: int, + ): LuaMultiReturn<[returnCode: int, errMsg: string]>; + + /** + * Changes the timeout values for the object. By default, all I/O operations are blocking. That + * is, any call to the methods send, receive, and accept will block indefinitely, until the + * operation completes. The settimeout method defines a limit on the amount of time the I/O + * methods can block. When a timeout is set and the specified amount of time has elapsed, the + * affected methods give up and fail with an error code. + * + * The amount of time to wait is specified as the value parameter, in seconds. There are two + * timeout modes and both can be used together for fine tuning: + * + * - 'b': block timeout. Specifies the upper limit on the amount of time LuaSocket can be blocked + * by the operating system while waiting for completion of any single I/O operation. This is the + * default mode. + * - 't': total timeout. Specifies the upper limit on the amount of time LuaSocket can block a Lua + * script before returning from a call. + * + * The nil timeout value allows operations to block indefinitely. Negative timeout values have the + * same effect. + */ + settimeout(timeout: int): void; +} diff --git a/isaac-typescript-definitions/typings/unofficial/enums.d.ts b/isaac-typescript-definitions/typings/unofficial/enums.d.ts new file mode 100644 index 0000000..246cdf5 --- /dev/null +++ b/isaac-typescript-definitions/typings/unofficial/enums.d.ts @@ -0,0 +1,248 @@ +// These are unofficial enums contributed by the community +// We have to use const enums here instead of normal enums because the corresponding Lua globals do +// not exist +// https://www.typescriptlang.org/docs/handbook/enums.html +// Alternatively, we could create new global enums, but that would pollute the global namespace + +// Some of the official enums repeat themselves inside of the properties +// e.g. "CollectibleType.COLLECTIBLE_SAD_ONION" is better written as "CollectibleType.SAD_ONION" +// As a standard, enums in this file do not use any unnecessary prefixes + +/** + * Matches the ItemConfig.CHARGE_* members of the ItemConfig class. + * In IsaacScript, we reimplement this as an enum, since it is cleaner. + */ +declare const enum ItemConfigChargeType { + NORMAL = 0, + TIMED = 1, + SPECIAL = 2, +} + +/** + * Matches the ItemConfig.TAG_* members of the ItemConfig class. + * In IsaacScript, we reimplement this as an enum, since it is cleaner. + */ +declare const enum ItemConfigTag { + /** Dead things (for the Parasite unlock) */ + DEAD = 1, + /** Syringes (for Little Baggy and the Spun! transformation) */ + SYRINGE = 1 << 1, + /** Mom's things (for Mom's Contact and the Yes Mother? transformation) */ + MOM = 1 << 2, + /** Technology items (for the Technology Zero unlock) */ + TECH = 1 << 3, + /** Battery items (for the Jumper Cables unlock) */ + BATTERY = 1 << 4, + /** -- Guppy items (Guppy transformation) */ + GUPPY = 1 << 5, + /** Fly items (Beelzebub transformation) */ + FLY = 1 << 6, + /** Bob items (Bob transformation) */ + BOB = 1 << 7, + /** Mushroom items (Fun Guy transformation) */ + MUSHROOM = 1 << 8, + /** Baby items (Conjoined transformation) */ + BABY = 1 << 9, + /** Angel items (Seraphim transformation) */ + ANGEL = 1 << 10, + /** Devil items (Leviathan transformation) */ + DEVIL = 1 << 11, + /** Poop items (Oh Shit transformation) */ + POOP = 1 << 12, + /** Book items (Book Worm transformation) */ + BOOK = 1 << 13, + /** Spider items (Spider Baby transformation) */ + SPIDER = 1 << 14, + /** Quest item (cannot be rerolled or randomly obtained) */ + QUEST = 1 << 15, + /** Can be spawned by Monster Manual */ + MONSTER_MANUAL = 1 << 16, + /** Cannot appear in Greed Mode */ + NO_GREED = 1 << 17, + /** Food item (for Binge Eater) */ + FOOD = 1 << 18, + /** Tears up item (for Lachryphagy unlock detection) */ + TEARS_UP = 1 << 19, + /** Whitelisted item for Tainted Lost */ + OFFENSIVE = 1 << 20, + /** Blacklisted item for Keeper & Tainted Keeper */ + NO_KEEPER = 1 << 21, + /** Blacklisted item for The Lost's Birthright */ + NO_LOST_BR = 1 << 22, + /** Star themed items (for the Planetarium unlock) */ + STARS = 1 << 23, + /** Summonable items (for Tainted Bethany) */ + SUMMONABLE = 1 << 24, + /** Can't be obtained in Cantripped challenge */ + NO_CANTRIP = 1 << 25, + /** Active items that have wisps attached to them (automatically set) */ + WISP = 1 << 26, + /** Unique familiars that cannot be duplicated */ + UNIQUE_FAMILIAR = 1 << 27, +} + +/** + * Matches the ItemConfig.TAG_* members of the ItemConfig class. + * In IsaacScript, we reimplement this as an enum, since it is cleaner. + */ +declare const enum ItemConfigCardType { + TAROT = 0, + /** Standard playing cards (twos, aces and Joker, does not include Suicide King, Rules Card or Queen of Hearts) */ + CARDTYPE_SUIT = 1, + CARDTYPE_RUNE = 2, + /** + * Anything that doesn't fall in the earlier categories. + * This excludes non-cards such as Dice Shard, which are located in subsequent enums. + */ + CARDTYPE_SPECIAL = 3, + /** Special pocket items that do not qualify as "cards" */ + CARDTYPE_SPECIAL_OBJECT = 4, + CARDTYPE_TAROT_REVERSE = 5, +} + +declare const enum Dimension { + CURRENT = -1, + MAIN = 0, + /** Used by the mirror sequence and the escape sequence. */ + SECONDARY = 1, + DEATH_CERTIFICATE = 2, +} + +declare const enum ControllerIndex { + KEYBOARD = 0, + CONTROLLER_1 = 1, + CONTROLLER_2 = 2, + CONTROLLER_3 = 3, +} + +declare const enum PocketItemSlot { + SLOT_1 = 0, + SLOT_2 = 1, + SLOT_3 = 2, + SLOT_4 = 3, +} + +declare const enum TrinketSlot { + /** The bottom-right trinket. */ + SLOT_1 = 0, + /** The top-left trinket. */ + SLOT_2 = 1, +} + +declare type ZodiacCollectibles = + | CollectibleType.COLLECTIBLE_CANCER + | CollectibleType.COLLECTIBLE_ARIES + | CollectibleType.COLLECTIBLE_LEO + | CollectibleType.COLLECTIBLE_SCORPIO + | CollectibleType.COLLECTIBLE_AQUARIUS + | CollectibleType.COLLECTIBLE_PISCES + | CollectibleType.COLLECTIBLE_TAURUS + | CollectibleType.COLLECTIBLE_GEMINI + | CollectibleType.COLLECTIBLE_CAPRICORN + | CollectibleType.COLLECTIBLE_SAGITTARIUS + | CollectibleType.COLLECTIBLE_LIBRA + | CollectibleType.COLLECTIBLE_VIRGO; + +declare const enum PlayerItemAnimation { + PICKUP = "Pickup", + LIFT_ITEM = "LiftItem", + HIDE_ITEM = "HideItem", + USE_ITEM = "UseItem", +} + +declare const enum CollectibleAnimation { + IDLE = "Idle", + EMPTY = "Empty", + SHOP_IDLE = "ShopIdle", + PLAYER_PICKUP = "PlayerPickup", + PLAYER_PICKUP_SPARKLE = "PlayerPickupSparkle", +} + +declare const enum StageTransition { + DISAPPEAR = 0, + NONE = 1, +} + +declare const enum FadeoutTarget { + FILE_SELECT = 0, + MAIN_MENU = 1, + TITLE_SCREEN = 2, + RESTART_RUN = 3, + RESTART_RUN_LAP = 4, + // 5 and higher results in a black screen +} + +/** + * These enums loop after 31, so 32 = DPAD_LEFT, 63 = DPAD_LEFT, and so on. + * There appears to be no input key for joystick movement. + */ +declare const enum Controller { + DPAD_LEFT = 0, + DPAD_RIGHT = 1, + DPAD_UP = 2, + DPAD_DOWN = 3, + /** A, X and B on Xbox, Playstation and Nintendo respectively. */ + BUTTON_A = 4, + /** B, O and A on Xbox, Playstation and Nintendo respectively. */ + BUTTON_B = 5, + /** X, □ and Y on Xbox, Playstation and Nintendo respectively. */ + BUTTON_X = 6, + /** Y, Δ and X on Xbox, Playstation and Nintendo respectively. */ + BUTTON_Y = 7, + /** Left shoulder button. */ + BUMPER_LEFT = 8, + TRIGGER_LEFT = 9, + STICK_LEFT = 10, + /** Right shoulder button. */ + BUMPER_RIGHT = 11, + TRIGGER_RIGHT = 12, + STICK_RIGHT = 13, + /** Select, Share and - on Xbox, Playstation and Nintendo respectively. */ + BUTTON_BACK = 14, + /** Start, Options and + on Xbox, Playstation and Nintendo respectively. */ + BUTTON_START = 15, +} + +declare const enum LineCheckMode { + /** Stopped by pits and rocks (e.g. like a Gaper's behavior). */ + NORMAL = 0, + /** Same as MODE_NORMAL, but less resource-intensive. */ + ECONOMIC = 1, + /** Only blocked by walls and metal blocks. */ + EXPLOSION = 2, + /** Not blocked by pits. Used by enemies that shoot projectiles at you, such as Hosts. */ + PROJECTILE = 3, +} + +declare const enum ProjectilesMode { + ONE_PROJECTILE = 0, + /** Uses params.Spread */ + TWO_PROJECTILES = 1, + /** Uses params.Spread */ + THREE_PROJECTILES = 2, + /** Uses params.Spread */ + THREE_PROJECTILES_SPREAD = 3, + /** Uses params.Spread */ + FOUR_PROJECTILES = 4, + /** Uses params.Spread */ + FIVE_PROJECTILES = 5, + /** Uses velocity.X as speed. */ + FOUR_PROJECTILES_PLUS_PATTERN = 6, + /** Uses velocity.X as speed. */ + FOUR_PROJECTILES_X_PATTERN = 7, + /** Uses velocity.X as speed. */ + EIGHT_PROJECTILES_STAR_PATTERN = 8, + /** + * Uses velocity.X as speed. + * Uses velocity.y as N. + * To fire in an arc, use params.FireDirectionLimit and params.DotProductLimit. + */ + N_PROJECTILES_IN_CIRCLE = 9, +} + +declare const enum DisplayFlag { + INVISIBLE = 1 << -1, + VISIBLE = 1 << 0, + SHADOW = 1 << 1, + SHOW_ICON = 1 << 2, +} diff --git a/isaac-typescript-definitions/typings/unofficial/enumsGridEntity.d.ts b/isaac-typescript-definitions/typings/unofficial/enumsGridEntity.d.ts new file mode 100644 index 0000000..1f33ea6 --- /dev/null +++ b/isaac-typescript-definitions/typings/unofficial/enumsGridEntity.d.ts @@ -0,0 +1,100 @@ +/** + * 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. + */ +declare const enum GridEntityXMLType { + ROCK = 1000, + ROCK_BOMB = 1001, + /** A pot, mushroom, or skull, depending on the stage and room type. */ + ROCK_ALT = 1002, + /** A tinted rock. */ + ROCKT = 1003, + /** A marked skull that will drop a Fool card. */ + ROCK_ALT2 = 1008, + /** + * Rocks that will be destroyed when other nearby rocks are. In-game, it will be a + * GridEntityType.GRID_ROCK with a VarData of 1. + */ + ROCK_EVENT = 1009, + ROCK_SPIKED = 1010, + ROCK_GOLD = 1011, + TNT = 1300, + FIREPLACE = 1400, + RED_FIREPLACE = 1410, + POOP_RED = 1490, + POOP_RAINBOW = 1494, + POOP_CORN = 1495, + POOP_GOLDEN = 1496, + POOP_BLACK = 1497, + POOP_WHITE = 1498, + POOP_GIGA = 1499, + POOP = 1500, + POOP_CHARMING = 1501, + ROCKB = 1900, + PILLAR = 1901, + SPIKES = 1930, + SPIKES_ONOFF = 1931, + SPIDERWEB = 1940, + WALL = 1999, + PIT = 3000, + FISSURE_SPAWNER = 3001, + PIT_EVENT = 3009, + LOCK = 4000, + PRESSURE_PLATE = 4500, + STATUE_DEVIL = 5000, + STATUE_ANGEL = 5001, + TELEPORTER = 6100, + TRAPDOOR = 9000, + STAIRS = 9100, + GRAVITY = 10000, +} + +/** For GridEntityType.GRID_DOOR (16) */ +declare const enum DoorSlotFlag { + LEFT0 = 1 << DoorSlot.LEFT0, + UP0 = 1 << DoorSlot.UP0, + RIGHT0 = 1 << DoorSlot.RIGHT0, + DOWN0 = 1 << DoorSlot.DOWN0, + LEFT1 = 1 << DoorSlot.LEFT1, + UP1 = 1 << DoorSlot.UP1, + RIGHT1 = 1 << DoorSlot.RIGHT1, + DOWN1 = 1 << DoorSlot.DOWN1, +} + +/** For GridEntityType.GRID_TRAPDOOR (17) */ +declare const enum TrapdoorState { + CLOSED = 0, + OPEN = 1, +} + +/** For GridEntityType.GRID_PRESSURE_PLATE (20) */ +declare const enum PressurePlateState { + UNPRESSED = 0, + STATE_1_UNKNOWN = 1, + STATE_2_UNKNOWN = 2, + PRESSURE_PLATE_PRESSED = 3, + REWARD_PLATE_PRESSED = 4, +} + +/** For GridEntityType.GRID_TELEPORTER (23) */ +declare const enum TeleporterState { + NORMAL = 0, + ACTIVATED = 1, + /** + * Set when a player stands on a teleport pad that has no corresponding pad for the player to be + * sent to. When this happens, the pad turns black and deactivates. + */ + DISABLED = 2, +} + +/** + * 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. + */ +declare const enum GridPath { + NONE = 0, + FIREPLACE = 950, + ROCK = 1000, + PIT = 3000, +} diff --git a/isaac-typescript-definitions/typings/unofficial/enumsGridEntityVariants.d.ts b/isaac-typescript-definitions/typings/unofficial/enumsGridEntityVariants.d.ts new file mode 100644 index 0000000..ecfd123 --- /dev/null +++ b/isaac-typescript-definitions/typings/unofficial/enumsGridEntityVariants.d.ts @@ -0,0 +1,65 @@ +/** For GridEntityType.GRID_ROCK (2) */ +declare const enum RockVariant { + NORMAL = 0, + EVENT = 1, +} + +/** For GridEntityType.GRID_ROCK (2) */ +declare const enum PitVariant { + NORMAL = 0, + FISSURE_SPAWNER = 16, +} + +/** For GridEntityType.GRID_POOP (14) */ +declare const enum PoopVariant { + NORMAL = 0, + RED = 1, + CORN = 2, + GOLDEN = 3, + RAINBOW = 4, + BLACK = 5, + WHITE = 6, + GIGA_TOP_LEFT = 7, + GIGA_TOP_RIGHT = 8, + GIGA_BOTTOM_LEFT = 9, + GIGA_BOTTOM_RIGHT = 10, + CHARMING = 11, +} + +/** GridEntityType.GRID_TRAPDOOR (17) */ +declare const enum TrapdoorVariant { + /** Trapdoors of non-zero variants will function equivalently to those of variant zero. */ + NORMAL = 0, +} + +/** GridEntityType.GRID_STAIRS (18) */ +declare const enum StairsVariant { + NORMAL = 0, + /** Found by throwing a Chaos Card at Great Gideon. */ + GREAT_GIDEON = 1, + /** Found in shops when the player has the Member Card item. */ + SECRET_SHOP = 2, + /** Found when using Genesis on a "final" floor. */ + PASSAGE_TO_BEGINNING_OF_FLOOR = 3, + /** + * This variant is not used by the game. + * Any variant with a value of 4 or higher will not interact with the player. + */ + NULL = 4, +} + +/** For GridEntityType.GRID_PRESSURE_PLATE (20) */ +declare const enum PressurePlateVariant { + PRESSURE_PLATE = 0, + REWARD_PLATE = 1, + GREED_PLATE = 2, + MINECART_PLATE = 3, + KILL_ALL_ENEMIES_PLATE = 9, + SPAWN_ROCKS_PLATE = 10, +} + +/** For GridEntityType.GRID_STATUE (21) */ +declare const enum StatueVariant { + DEVIL = 0, + ANGEL = 1, +} diff --git a/isaac-typescript-definitions/typings/unofficial/enumsState.d.ts b/isaac-typescript-definitions/typings/unofficial/enumsState.d.ts new file mode 100644 index 0000000..4482339 --- /dev/null +++ b/isaac-typescript-definitions/typings/unofficial/enumsState.d.ts @@ -0,0 +1,75 @@ +/* For EntityType.ENTITY_DEATH (66) */ +declare const enum DeathState { + APPEAR = 1, + SCYTHE_APPEAR = 3, + /** Death will wander around in his idle state. */ + MAIN_IDLE = 4, + SCYTHE_SPIN_ATTACK = 4, + JUMP_OFF_HORSE = 7, + SLOW_ATTACK = 8, + SUMMON_KNIGHTS = 13, + SUMMON_SCYTHES = 14, +} + +/** For EntityType.ENTITY_DADDYLONGLEGS (101) */ +declare const enum DaddyLongLegsState { + /** Used at the end of the sequence of single stomp attacks. */ + SLAM_WITH_PROJECTILE_BURST = 4, + /** + * This is used for both the single stomp attack and the multi-stomp attack. + * When doing the multi-stomp attack, the main entity will go to state 9 and the child entities + * will have state 7. + */ + STOMP_ATTACK_LEG = 7, + SPITTING_SPIDERS_ATTACK = 8, + MULTI_STOMP_ATTACK_MAIN = 9, +} + +/* For EntityType.ENTITY_BIG_HORN (411) */ +declare const enum BigHornState { + IDLE = 3, + HEAD_GOING_UP_OR_GOING_DOWN_INTO_HOLE = 4, + HAND_GOING_DOWN_INTO_HOLE = 5, + HAND_SLAM_ATTACK = 8, + /** + * This is used for all types of Troll Bomb attacks. Troll Bombs can randomly be Mega Troll Bombs + * or Hot Bombs. + */ + HAND_THROW_TROLL_BOMB_ATTACK = 9, + HAND_THROW_TRIPLE_TROLL_BOMB_ATTACK = 10, + /** + * This is used for the attack where he spits out 1 ball, spits out 2 balls, and spits out 3 + * balls. + */ + HEAD_BALL_ATTACK = 13, +} + +/* For EntityType.ENTITY_REAP_CREEP (900) */ +declare const enum ReapCreepState { + CRAWLING_FROM_SIDE_TO_SIDE = 3, + JUMPING_TO_TOP_WALL = 6, + WALL_SLAM_ATTACK = 7, + PROJECTILE_SPIT_LINE_ATTACK = 8, + PROJECTILE_SPIT_BURST_ATTACK = 9, + /** This is used for both the single fat Brimstone attack and the quad-beam Brimstone attack. */ + BRIMSTONE_ATTACK = 10, + SPAWNING_WALL_SPIDERS = 13, + SPAWNING_SPIDERS = 14, + /** + * There are three phases, so Reap Creep will enter this state while going from phase 1 to phase 2 + * and when going from phase 2 to phase 3. + */ + TRANSFORMING_TO_NEXT_PHASE = 16, +} + +/* For EntityType.ENTITY_COLOSTOMIA (917) */ +declare const enum ColostomiaState { + IDLE_PHASE_1 = 3, + IDLE_PHASE_2 = 4, + JUMP_ATTACK_WITH_PROJECTILE_SPLASH = 6, + CHARGE_SLIDE = 8, + SPIT_POOP_BOMB = 9, + SPIT_TWO_POOP_BOMBS = 10, + FART_ATTACK = 11, + TRANSITION_TO_PHASE_2 = 16, +} diff --git a/isaac-typescript-definitions/typings/unofficial/enumsSubTypes.d.ts b/isaac-typescript-definitions/typings/unofficial/enumsSubTypes.d.ts new file mode 100644 index 0000000..9e115fa --- /dev/null +++ b/isaac-typescript-definitions/typings/unofficial/enumsSubTypes.d.ts @@ -0,0 +1,34 @@ +/** For EntityType.ENTITY_FAMILIAR (3), FamiliarVariant.DIP (201) */ +declare const enum DipFamiliarSubType { + NORMAL = 0, + RED = 1, + CORNY = 2, + GOLD = 3, + RAINBOW = 4, + BLACK = 5, + WHITE = 6, +} + +/** For EntityType.ENTITY_CHARGER (23), ChargerVariant.CHARGER (0) */ +declare const enum ChargerSubType { + CHARGER = 0, + MY_SHADOW = 1, +} + +/** For EntityType.ENTITY_EFFECT (1000), EffectVariant.HEAVEN_LIGHT_DOOR (39) */ +declare const enum HeavenLightDoorSubType { + HEAVEN_DOOR = 0, + MOONLIGHT = 1, +} + +/** For EntityType.ENTITY_EFFECT (1000), EffectVariant.TALL_LADDER (156) */ +declare const enum LadderSubType { + TALL_LADDER = 0, + STAIRWAY = 1, +} + +/** For EntityType.ENTITY_EFFECT (1000), EffectVariant.PURGATORY (189) */ +declare const enum PurgatorySubType { + PURGATORY_RIFT = 0, + PURGATORY_GHOST = 1, +} diff --git a/isaac-typescript-definitions/typings/unofficial/enumsVariants.d.ts b/isaac-typescript-definitions/typings/unofficial/enumsVariants.d.ts new file mode 100644 index 0000000..51fdce3 --- /dev/null +++ b/isaac-typescript-definitions/typings/unofficial/enumsVariants.d.ts @@ -0,0 +1,278 @@ +/** For EntityType.ENTITY_PLAYER (1) */ +declare const enum PlayerVariant { + PLAYER = 0, + COOP_BABY = 1, +} + +/** For EntityType.ENTITY_SLOT (6) */ +declare const enum SlotVariant { + SLOT_MACHINE = 1, + BLOOD_DONATION_MACHINE = 2, + FORTUNE_TELLING_MACHINE = 3, + BEGGAR = 4, + DEVIL_BEGGAR = 5, + SHELL_GAME = 6, + KEY_MASTER = 7, + DONATION_MACHINE = 8, + BOMB_BUM = 9, + SHOP_RESTOCK_MACHINE = 10, + GREED_DONATION_MACHINE = 11, + MOMS_DRESSING_TABLE = 12, + BATTERY_BUM = 13, + ISAAC_SECRET = 14, + HELL_GAME = 15, + CRANE_GAME = 16, + CONFESSIONAL = 17, + ROTTEN_BEGGAR = 18, +} + +/** For EntityType.ENTITY_LASER (7) */ +declare const enum LaserVariant { + /** Used for Brimstone. */ + THICK_RED = 1, + /** Used for Technology. */ + THIN_RED = 2, + SHOOP_DA_WHOOP = 3, + /** Looks like a squiggly line. */ + PRIDE = 4, + /** Used for Angel lasers. */ + LIGHT_BEAM = 5, + /** Used for Mega Blast. */ + GIANT_RED = 6, + TRACTOR_BEAM = 7, + /** Used for Circle of Protection; looks like a thinner Angel laser. */ + LIGHT_RING = 8, + /** Used for Brimstone + Technology. */ + BRIMTECH = 9, +} + +/** For EntityType.ENTITY_KNIFE (8) */ +declare const enum KnifeVariant { + MOMS_KNIFE = 8, + BONE_CLUB = 1, + BONE_SCYTHE = 2, + DONKEY_JAWBONE = 3, + BAG_OF_CRAFTING = 4, + SUMPTORIUM = 5, + NOTCHED_AXE = 9, + SPIRIT_SWORD = 10, + TECH_SWORD = 11, +} + +/** For EntityType.ENTITY_CHARGER (23) */ +declare const enum ChargerVariant { + CHARGER = 0, + DROWNED_CHARGER = 1, + DANK_CHARGER = 2, + CARRION_PRINCESS = 3, +} + +/** For EntityType.ENTITY_FIREPLACE (33) */ +declare const enum FireplaceVariant { + NORMAL = 0, + RED = 1, + BLUE = 2, + PURPLE = 3, + WHITE = 4, + MOVEABLE = 10, + COAL = 11, + MOVEABLE_BLUE = 12, + MOVEABLE_PURPLE = 13, +} + +/** For EntityType.ENTITY_VIS (39) */ +declare const enum VisVariant { + VIS = 0, + DOUBLE_VIS = 1, + CHUBBER = 2, + SCARRED_DOUBLE_VIS = 3, + CHUBBER_PROJECTILE = 22, +} + +/** For EntityType.ENTITY_MOM (45) */ +declare const enum MomVariant { + MOM = 0, + STOMP = 10, +} + +/** For EntityType.ENTITY_PIN (62) */ +declare const enum PinVariant { + PIN = 0, + SCOLEX = 1, + FRAIL = 2, + WORMWOOD = 3, +} + +/** For EntityType.ENTITY_DEATH (66) */ +declare const enum DeathVariant { + DEATH = 0, + DEATH_SCYTHE = 10, + DEATH_HORSE = 20, + DEATH_WITHOUT_HORSE = 30, +} + +/** For EntityType.ENTITY_PEEP (68) */ +declare const enum PeepVariant { + PEEP = 0, + BLOAT = 1, + PEEP_EYE = 10, + BLOAT_EYE = 11, +} + +/** For EntityType.ENTITY_GEMINI (79) */ +declare const enum GeminiVariant { + GEMINI = 0, + STEVEN = 1, + BLIGHTED_OVUM = 2, + GEMINI_BABY = 10, + STEVEN_BABY = 11, + BLIGHTED_OVUM_BABY = 12, + UMBILICAL_CORD = 20, +} + +/** For EntityType.ENTITY_FALLEN (81) */ +declare const enum FallenVariant { + FALLEN = 0, + KRAMPUS = 1, +} + +/** For EntityType.ENTITY_SATAN (84) */ +declare const enum SatanVariant { + SATAN = 0, + STOMP = 10, +} + +/** For EntityType.ENTITY_ISAAC (102) */ +declare const enum IsaacVariant { + ISAAC = 0, + BLUE_BABY = 1, + BLUE_BABY_HUSH = 2, +} + +/** For EntityType.ENTITY_DEATHS_HEAD (212) */ +declare const enum DeathsHeadVariant { + DEATHS_HEAD = 0, + /** + * This is the only Death's Head variant that does not rely on other enemies in the room being + * alive. + */ + DANK_DEATHS_HEAD = 1, + CURSED_DEATHS_HEAD = 2, + BRIMSTONE_DEATHS_HEAD = 3, + REDSKULL = 4, +} + +/** For EntityType.ENTITY_RAGLING (246) */ +declare const enum RaglingVariant { + RAGLING = 0, + RAG_MANS_RAGLING = 1, +} + +/** For EntityType.ENTITY_BEGOTTEN (251) */ +declare const enum BegottenVariant { + BEGOTTEN = 0, + BEGOTTEN_CHAIN = 10, +} + +/** For EntityType.ENTITY_THE_HAUNT (260) */ +declare const enum HauntVariant { + HAUNT = 0, + LIL_HAUNT = 10, +} + +/** For EntityType.ENTITY_DINGLE (261) */ +declare const enum DingleVariant { + DINGLE = 0, + DANGLE = 1, +} + +/** For EntityType.ENTITY_MAMA_GURDY (266) */ +declare const enum MamaGurdyVariant { + MAMA_GURDY = 0, + LEFT_HAND = 1, + RIGHT_HAND = 2, +} + +/** For EntityType.ENTITY_URIEL (271) and EntityType.ENTITY_GABRIEL (272) */ +declare const enum AngelVariant { + NORMAL = 0, + FALLEN = 1, +} + +/** For EntityType.ENTITY_THE_LAMB (273) */ +declare const enum LambVariant { + LAMB = 0, + BODY = 10, +} + +/** EntityType.ENTITY_PITFALL (291) */ +declare const enum PitfallVariant { + PITFALL = 0, + SUCTION_PITFALL = 1, + TELEPORT_PITFALL = 2, +} + +/** EntityType.ENTITY_LITTLE_HORN (404) */ +declare const enum LittleHornVariant { + LITTLE_HORN = 0, + DARK_BALL = 1, +} + +/** EntityType.ENTITY_BIG_HORN (411) */ +declare const enum BigHornVariant { + BIG_HORN = 0, + SMALL_HOLE = 1, + BIG_HOLE = 2, +} + +/** For EntityType.ENTITY_DARK_ESAU (866) */ +declare const enum DarkEsauVariant { + DARK_ESAU = 0, + PIT = 1, +} + +/** For EntityType.ENTITY_ROTGUT (911) */ +declare const enum RotgutVariant { + PHASE_1_HEAD = 0, + PHASE_2_MAGGOT = 1, + PHASE_3_HEART = 2, +} + +/** For EntityType.ENTITY_MOTHER (912) */ +declare const enum MotherVariant { + PHASE_1 = 0, + PHASE_2 = 10, + BALL = 100, +} + +/** For EntityType.ENTITY_DOGMA (950) */ +declare const enum DogmaVariant { + DOGMA_PHASE_1 = 0, + TV = 1, + ANGEL_PHASE_2 = 2, + ANGEL_BABY_UNUSED = 10, +} + +/** For EntityType.ENTITY_BEAST (951) */ +declare const enum BeastVariant { + BEAST = 0, + STALACTITE = 1, + ROCK_PROJECTILE = 2, + SOUL = 3, + ULTRA_FAMINE = 10, + ULTRA_FAMINE_FLY = 11, + ULTRA_PESTILENCE = 20, + ULTRA_PESTILENCE_FLY = 21, + ULTRA_PESTILENCE_MAGGOT = 22, + ULTRA_PESTILENCE_FLY_BALL = 23, + ULTRA_WAR = 30, + ULTRA_WAR_BOMB = 31, + ULTRA_DEATH = 40, + ULTRA_DEATH_SCYTHE = 41, + ULTRA_DEATH_HEAD = 42, + BACKGROUND_BEAST = 100, + BACKGROUND_FAMINE = 101, + BACKGROUND_PESTILENCE = 102, + BACKGROUND_WAR = 103, + BACKGROUND_DEATH = 104, +} diff --git a/isaac-typescript-definitions/typings/unofficial/enumsXML.d.ts b/isaac-typescript-definitions/typings/unofficial/enumsXML.d.ts new file mode 100644 index 0000000..35b0411 --- /dev/null +++ b/isaac-typescript-definitions/typings/unofficial/enumsXML.d.ts @@ -0,0 +1,207 @@ +/** Matches the IDs in the "specialrooms.stb" file. */ +declare const enum BossIDs { + MONSTRO = 1, + LARRY_JR = 2, + CHUB = 3, + GURDY = 4, + MONSTRO_II = 5, + MOM = 6, + SCOLEX = 7, + MOMS_HEART = 8, + FAMINE = 9, + PESTILENCE = 10, + WAR = 11, + DEATH = 12, + DUKE_OF_FLIES = 13, + PEEP = 14, + LOKI = 15, + BLASTOCYST = 16, + GEMINI = 17, + FISTULA = 18, + GISH = 19, + STEVEN = 20, + CHAD = 21, + HEADLESS_HORSEMAN = 22, + THE_FALLEN = 23, + SATAN = 24, + IT_LIVES = 25, + THE_HOLLOW = 26, + THE_CARRION_QUEEN = 27, + GURDY_JR = 28, + THE_HUSK = 29, + THE_BLOAT = 30, + LOKII = 31, + THE_BLIGHTED_OVUM = 32, + TERATOMA = 33, + THE_WIDOW = 34, + MASK_OF_INFAMY = 35, + THE_WRETCHED = 36, + PIN = 37, + CONQUEST = 38, + ISAAC = 39, + /** Also known as "???". */ + BLUE_BABY = 40, + DADDY_LONG_LEGS = 41, + TRIACHNID = 42, + THE_HAUNT = 43, + DINGLE = 44, + MEGA_MAW = 45, + MEGA_MAW_II = 46, // The Gate + MEGA_FATTY = 47, + MEGA_FATTY_II = 48, // The Cage + MEGA_GURDY = 49, + DARK_ONE = 50, + DARK_ONE_II = 51, // The Adversary + POLYCEPHALUS = 52, + MEGA_FRED = 53, + THE_LAMB = 54, + MEGA_SATAN = 55, + GURGLINGS = 56, + THE_STAIN = 57, + BROWNIE = 58, + THE_FORSAKEN = 59, + LITTLE_HORN = 60, + RAG_MAN = 61, + ULTRA_GREED = 62, + HUSH = 63, + DANGLE = 64, + TURDLING = 65, + THE_FRAIL = 66, + RAG_MEGA = 67, + SISTERS_VIS = 68, + BIG_HORN = 69, + DELIRIUM = 70, + THE_MATRIARCH = 72, + THE_PILE = 73, + REAP_CREEP = 74, + BEELZEBLUB = 75, + WORMWOOD = 76, + RAINMAKER = 77, + THE_VISAGE = 78, + THE_SIREN = 79, + TUFF_TWINS = 80, + THE_HERETIC = 81, + HORNFEL = 82, + GREAT_GIDEON = 83, + BABY_PLUM = 84, + THE_SCOURGE = 85, + CHIMERA = 86, + ROTGUT = 87, + MOTHER = 88, + MAUSOLEUM_MOM = 89, + MAUSOLEUM_MOMS_HEART = 90, + MIN_MIN = 91, + CLOG = 92, + SINGE = 93, + BUMBINO = 94, + COLOSTOMIA = 95, + THE_SHELL = 96, + TURDLET = 97, + /** This boss is currently unfinished and there are no boss rooms for it. */ + RAGLICH = 98, + /** Dogma does not have its own boss rooms; it appears in a normal room. */ + DOGMA = 99, + /** The Beast does not have its own boss rooms; it appears in a crawlspace. */ + BEAST = 100, + HORNY_BOYS = 101, + /** This boss is currently unfinished and there are no boss rooms for it. */ + POSSESSOR = 102, +} + +/** For RoomType.ROOM_DEVIL (14) */ +declare const enum DevilRoomSubType { + NORMAL = 0, + NUMBER_SIX_TRINKET_ROOM = 1, +} + +/** For RoomType.ROOM_ANGEL (15) */ +declare const enum AngelRoomSubType { + NORMAL = 0, + SHOP = 1, +} + +declare const enum StageID { + SPECIAL_ROOMS = 0, + BASEMENT = 1, + CELLAR = 2, + BURNING_BASEMENT = 3, + CAVES = 4, + CATACOMBS = 5, + FLOODED_CAVES = 6, + DEPTHS = 7, + NECROPOLIS = 8, + DANK_DEPTHS = 9, + WOMB = 10, + UTERO = 11, + SCARRED_WOMB = 12, + BLUE_WOMB = 13, + SHEOL = 14, + CATHEDRAL = 15, + DARK_ROOM = 16, + CHEST = 17, + VOID = 26, + DOWNPOUR = 27, + DROSS = 28, + MINES = 29, + ASHPIT = 30, + MAUSOLEUM = 31, + GEHENNA = 32, + CORPSE = 33, + MORTIS = 34, + HOME = 35, + BACKWARDS = 36, +} + +/** For StageID.HOME (35) */ +declare const enum HomeRoomSubType { + ISAACS_BEDROOM = 0, + HALLWAY = 1, + MOMS_BEDROOM = 2, + LIVING_ROOM = 3, + BEAST_ROOM = 4, + CLOSET_RIGHT = 10, + CLOSET_LEFT = 11, + DEATH_CERTIFICATE_ENTRANCE = 33, + DEATH_CERTIFICATE_ITEMS = 33, +} + +/** For StageID.BACKWARDS (36) */ +declare const enum BackwardsPathRoomSubType { + EXIT = 0, + BASEMENT = 1, + CAVES = 4, + DEPTHS = 7, + DOWNPOUR = 27, + MINES = 29, + MAUSOLEUM = 31, +} + +/** Matches the entries in the "cutscenes.xml" file. */ +declare const enum Ending { + INTRO = 1, + CREDITS = 2, + EPILOGUE = 3, + WOMB_EDEN = 4, + WOMB_RUBBER_CEMENT = 5, + WOMB_NOOSE = 6, + WOMB_WIRE_COAT_HANGER = 7, + WOMB_EVERYTHING_IS_TERRIBLE = 8, + WOMB_IPECAC = 9, + WOMB_EXPERIMENTAL_TREATMENT = 10, + WOMB_A_QUARTER = 11, + WOMB_DR_FETUS = 12, + WOMB_BLUE_BABY = 13, + WOMB_IT_LIVES = 14, + SHEOL = 15, + CATHEDRAL = 16, + CHEST = 17, + DARK_ROOM = 18, + MEGA_SATAN = 19, + BLUE_WOMB = 20, + GREED_MODE = 21, + THE_VOID = 22, + GREEDIER = 23, + MOTHER = 24, + DOGMA = 25, + BEAST = 26, +} diff --git a/isaac-typescript-definitions/update.sh b/isaac-typescript-definitions/update.sh new file mode 100755 index 0000000..a76aa04 --- /dev/null +++ b/isaac-typescript-definitions/update.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -e # Exit on any errors + +# Get the directory of this script +# https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +cd "$DIR" + +PACKAGE_JSON="$DIR/package.json" +OLD_HASH=$(md5sum "$PACKAGE_JSON") +npx npm-check-updates --upgrade --packageFile "$PACKAGE_JSON" +NEW_HASH=$(md5sum "$PACKAGE_JSON") +if [[ $OLD_HASH != $NEW_HASH ]]; then + npm install +fi diff --git a/package.json b/package.json new file mode 100644 index 0000000..79128f3 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "isaac-lua-definitions", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "oatmealine", + "license": "AGPL-3.0", + "dependencies": { + "chalk": "^4.1.2" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..222476c --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,47 @@ +lockfileVersion: 5.3 + +specifiers: + chalk: ^4.1.2 + +dependencies: + chalk: 4.1.2 + +packages: + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: false + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: false + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: false + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: false + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: false diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..58c1cf3 --- /dev/null +++ b/readme.md @@ -0,0 +1,15 @@ +# Isaac EmmyLua definitions + +A very, _very_ jank solution to types in Isaac modding + +![](showcase.gif) + +# Install / Use + +1. `git clone https://git.oat.zone/oat/isaac-lua-definitions/ --recursive` + +2. `node index.js` + +3. Put everything in `out/` in your workspace + +4. Use [EmmyLua](https://github.com/EmmyLua/EmmyLua-LanguageServer) to utilize Lua typing \ No newline at end of file