From 3484e9105bbbdcfada9faf8ce77b6639747fc923 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Mon, 10 Jan 2022 18:09:30 -0500 Subject: [PATCH 01/36] v0.1 --- eid_tmtrainer.lua | 128 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 eid_tmtrainer.lua diff --git a/eid_tmtrainer.lua b/eid_tmtrainer.lua new file mode 100644 index 00000000..5927a46c --- /dev/null +++ b/eid_tmtrainer.lua @@ -0,0 +1,128 @@ +--[[ + +This file is only loaded when the game is launched with the "--luadebug" launch option. +This allows mods to have access to your computer's files, which is necessary to read glitched item info that's printed to the game's log file. + +Having --luadebug on would allow malicious mods to delete your files, execute command prompt commands, and probably much more. +USE AT YOUR OWN RISK. + +]] + +local game = Game() + +-- glitched items start at 4294967295 +local maxNumber = 4294967296 +local spawnedItems = 0 + +local logLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/log.txt" +local newLogLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/log2.txt" +local secondaryLog = io.open(newLogLocation, "w+") +secondaryLog:write("[EID] For performance and accuracy reasons, reading glitched item descriptions from the log file requires wiping the log regularly, so while you have TMTRAINER, most of the log will be moved here\n") +--test using file:seek instead, to just move our cursor to the start of new text! + +--currently english only +local attributeConversions = { + chain = "", + pickup_collected = "When you collect a pickup:", + enemy_kill = "On enemy kill, chance to:", + + + area_damage = "Deal {1} area damage", + add_temporary_effect = "Gain {1} for the room", + convert_entities = "Convert all {1} in the room to {2}", + +} + +local function parseEffectLine(raw) + local words = {} + for w in string.gmatch(raw,"%S+") do table.insert(words, w) end + -- words[1] = "[INFO]", words[2] = "-" + local effectTrigger = words[3] + -- words[4] = "->" + local effectType = words[5] + local fullEffect = "" + for i=5,#words do fullEffect = fullEffect .. words[i] .. " " end + + local replacements = {} + local extraText = "" + -- switch statement for how to handle the words after the effect type + if effectType == "add_temporary_effect" then + -- remainder of line = collectible name that's granted for the room + local name = "" + for i=6,#words do + name = name .. words[i] + if (i ~= #words) then name = name .. " " end + end + elseif effectType == "convert_entities" then + local replacements[1] = words[6] + local replacements[2] = words[8] + end + + local eidString = "" + eidString = eidString .. (attributeConversions[effectTrigger] or effectTrigger) .. "#" + eidString = eidString .. (attributeConversions[effectType] or fullEffect) .. extraText .. "#" + for k,v in ipairs(replacements) do + eidString = string.gsub(eidString, "{" .. k .. "}", v) + end +end + +--work on how resuming a game works (determine current id by checking if item ids exist) + +local function GameStartTMTRAINER(_,isSave) + if not isSave then spawnedItems = 0 + else + --check what item ID we're on + end +end +EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, GameStartTMTRAINER) + +--[[ +EID:AddCallback(ModCallbacks.MC_PRE_ENTITY_SPAWN, function(_, enttype, variant, subtype, pos, vel, spawner, seed) + if (EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER) and enttype == 5 and variant == 100 and subtype == 0) then + print("[EID] TMTRAINER SPAWNED " .. (maxNumber - spawnedItems - 1)) + Isaac.DebugString("[EID] TMTRAINER SPAWNED " .. (maxNumber - spawnedItems - 1)) + --print("PRE ENTITY SPAWN " .. enttype .. "." .. variant .. "." .. subtype .. ", " .. tostring(pos)) + --Isaac.DebugString("PRE ENTITY SPAWN " .. enttype .. "." .. variant .. "." .. subtype .. ", " .. tostring(pos)) + end +end) +]] + +local function CheckLogForItems(_) + if (game:GetFrameCount() % 5 ~= 0 or not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER)) then return end + local logLines = io.lines(logLocation) + local numEffects = 0 + local itemScore = 0 + local effects = {} + local eidDesc = "" + for line in io.lines(logLocation) do + if string.find(line, "initialized with") then + local count = 0 + spawnedItems = spawnedItems + 1 + -- find the number of effects, and the score given + -- (this match gets every number in the line) + for s in string.gmatch(line, "%d*%.?%d+") do + if count == 0 then + numEffects = tonumber(s) + count = 1 + elseif count == 1 then + itemScore = tonumber(s) + end + end + eidDesc = "Score: " .. itemScore + elseif numEffects > 0 then + numEffects = numEffects - 1 + table.insert(effects, line) + eidDesc = eidDesc .. "#" .. line + if numEffects == 0 then + print("adding " .. tostring(maxNumber - spawnedItems) .. ", " .. eidDesc) + EID:addCollectible(maxNumber - spawnedItems, eidDesc) + end + end + -- there are some lines that have a gigantic amount of white space and I don't know why, don't write those I guess... + if (#line < 200) then secondaryLog:write("LINE: " .. #line .. ": " .. line .. "\n") end + end + secondaryLog:flush() + -- wipe the log file + io.open(logLocation, "w+") +end +EID:AddCallback(ModCallbacks.MC_POST_UPDATE, CheckLogForItems) \ No newline at end of file From 82de50749f0455669009a1f6680f4afba75c0d77 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Mon, 10 Jan 2022 18:10:49 -0500 Subject: [PATCH 02/36] luadebug tmtrainer + spaces -> tabs --- main.lua | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/main.lua b/main.lua index 51fdbdb3..7f0e4e30 100644 --- a/main.lua +++ b/main.lua @@ -94,20 +94,21 @@ local nullVector = Vector(0,0) local modfolder ='external item descriptions_836319872' --release mod folder name local function GetCurrentModPath() - if debug then - return string.sub(debug.getinfo(GetCurrentModPath).source,2) .. "/../" - end - --use some very hacky trickery to get the path to this mod - local _, err = pcall(require, "") - local _, basePathStart = string.find(err, "no file '", 1) - local _, modPathStart = string.find(err, "no file '", basePathStart) - local modPathEnd, _ = string.find(err, ".lua'", modPathStart) - local modPath = string.sub(err, modPathStart+1, modPathEnd-1) - modPath = string.gsub(modPath, "\\", "/") + if debug then + if REPENTANCE then require("eid_tmtrainer") end + return string.sub(debug.getinfo(GetCurrentModPath).source,2) .. "/../" + end + --use some very hacky trickery to get the path to this mod + local _, err = pcall(require, "") + local _, basePathStart = string.find(err, "no file '", 1) + local _, modPathStart = string.find(err, "no file '", basePathStart) + local modPathEnd, _ = string.find(err, ".lua'", modPathStart) + local modPath = string.sub(err, modPathStart+1, modPathEnd-1) + modPath = string.gsub(modPath, "\\", "/") modPath = string.gsub(modPath, "//", "/") modPath = string.gsub(modPath, ":/", ":\\") - - return modPath + + return modPath end EID.modPath = GetCurrentModPath() From 93fbc37b31f230ac8c921fb2e49c1fe3322e254c Mon Sep 17 00:00:00 2001 From: Buurazu Date: Mon, 10 Jan 2022 18:51:46 -0500 Subject: [PATCH 03/36] v0.1.1 --- eid_tmtrainer.lua | 47 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/eid_tmtrainer.lua b/eid_tmtrainer.lua index 5927a46c..e7743529 100644 --- a/eid_tmtrainer.lua +++ b/eid_tmtrainer.lua @@ -15,6 +15,9 @@ local maxNumber = 4294967296 local spawnedItems = 0 local logLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/log.txt" +local logFound = false +local logCursor = 0 + local newLogLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/log2.txt" local secondaryLog = io.open(newLogLocation, "w+") secondaryLog:write("[EID] For performance and accuracy reasons, reading glitched item descriptions from the log file requires wiping the log regularly, so while you have TMTRAINER, most of the log will be moved here\n") @@ -23,14 +26,17 @@ secondaryLog:write("[EID] For performance and accuracy reasons, reading glitched --currently english only local attributeConversions = { chain = "", + active = "On use:", pickup_collected = "When you collect a pickup:", - enemy_kill = "On enemy kill, chance to:", + enemy_kill = "On kill, chance to:", - area_damage = "Deal {1} area damage", + area_damage = "Deal {1} damage to all enemies in the room", add_temporary_effect = "Gain {1} for the room", convert_entities = "Convert all {1} in the room to {2}", - + use_active_item = "Use {1}", + spawn_entity = "Spawn a {1}", + fart = "Fart with size {1}", } local function parseEffectLine(raw) @@ -46,16 +52,18 @@ local function parseEffectLine(raw) local replacements = {} local extraText = "" -- switch statement for how to handle the words after the effect type - if effectType == "add_temporary_effect" then + if effectType == "add_temporary_effect" or effectType == "use_active_item" then -- remainder of line = collectible name that's granted for the room local name = "" for i=6,#words do name = name .. words[i] if (i ~= #words) then name = name .. " " end end + replacements[1] = name elseif effectType == "convert_entities" then - local replacements[1] = words[6] - local replacements[2] = words[8] + --figure out how to convert entity numbers + replacements[1] = words[6] + replacements[2] = words[8] end local eidString = "" @@ -64,14 +72,28 @@ local function parseEffectLine(raw) for k,v in ipairs(replacements) do eidString = string.gsub(eidString, "{" .. k .. "}", v) end + return eidString end --work on how resuming a game works (determine current id by checking if item ids exist) local function GameStartTMTRAINER(_,isSave) - if not isSave then spawnedItems = 0 + local theLog = io.open(logLocation, "r") + if (theLog == nil) then + print("[EID] Could not find the log file at " .. logLocation .. "; glitched item descriptions won't work!") + logFound = false + return else + logFound = true + end + spawnedItems = 0 + if isSave then --check what item ID we're on + local config = Isaac.GetItemConfig() + while config:GetCollectible(maxNumber - spawnedItems - 1) ~= nil do + spawnedItems = spawnedItems + 1 + end + print("resuming at " .. (maxNumber - spawnedItems - 1)) end end EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, GameStartTMTRAINER) @@ -88,7 +110,7 @@ end) ]] local function CheckLogForItems(_) - if (game:GetFrameCount() % 5 ~= 0 or not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER)) then return end + if (not logFound or game:GetFrameCount() % 5 ~= 0 or not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER)) then return end local logLines = io.lines(logLocation) local numEffects = 0 local itemScore = 0 @@ -108,13 +130,14 @@ local function CheckLogForItems(_) itemScore = tonumber(s) end end - eidDesc = "Score: " .. itemScore + eidDesc = "Score: " .. itemScore .. "#" elseif numEffects > 0 then numEffects = numEffects - 1 table.insert(effects, line) - eidDesc = eidDesc .. "#" .. line + eidDesc = eidDesc .. parseEffectLine(line) + -- also display the unparsed line for debug purposes (REMOVE THIS) + eidDesc = eidDesc .. "(" .. line .. ")#" if numEffects == 0 then - print("adding " .. tostring(maxNumber - spawnedItems) .. ", " .. eidDesc) EID:addCollectible(maxNumber - spawnedItems, eidDesc) end end @@ -125,4 +148,4 @@ local function CheckLogForItems(_) -- wipe the log file io.open(logLocation, "w+") end -EID:AddCallback(ModCallbacks.MC_POST_UPDATE, CheckLogForItems) \ No newline at end of file +EID:AddCallback(ModCallbacks.MC_POST_UPDATE, CheckLogForItems) From bdc853701468ed9d10acf69e9d56c110b03a74a3 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Tue, 11 Jan 2022 03:18:50 -0500 Subject: [PATCH 04/36] v0.2 --- eid_tmtrainer.lua | 148 +++++++++++++++++++++++++++++----------------- 1 file changed, 95 insertions(+), 53 deletions(-) diff --git a/eid_tmtrainer.lua b/eid_tmtrainer.lua index e7743529..50c70247 100644 --- a/eid_tmtrainer.lua +++ b/eid_tmtrainer.lua @@ -18,20 +18,20 @@ local logLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME local logFound = false local logCursor = 0 -local newLogLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/log2.txt" -local secondaryLog = io.open(newLogLocation, "w+") -secondaryLog:write("[EID] For performance and accuracy reasons, reading glitched item descriptions from the log file requires wiping the log regularly, so while you have TMTRAINER, most of the log will be moved here\n") ---test using file:seek instead, to just move our cursor to the start of new text! - --currently english only local attributeConversions = { + --chain = "Then: ", chain = "", - active = "On use:", - pickup_collected = "When you collect a pickup:", - enemy_kill = "On kill, chance to:", + active = "On use:#", + pickup_collected = "When you collect a pickup:#", + enemy_kill = "On kill, chance to:#", + damage_taken = "When you take damage:#", + entity_spawned = "When a {T1} is spawned, chance to:#", + tear_fire = "When you fire a tear, chance to:#", + enemy_hit = "On hitting an enemy, chance to:#", + room_clear = "On room clear:#", - - area_damage = "Deal {1} damage to all enemies in the room", + area_damage = "Deal {1} damage in an area around you", add_temporary_effect = "Gain {1} for the room", convert_entities = "Convert all {1} in the room to {2}", use_active_item = "Use {1}", @@ -39,17 +39,27 @@ local attributeConversions = { fart = "Fart with size {1}", } +local lastEffectTrigger = "chain" + local function parseEffectLine(raw) local words = {} for w in string.gmatch(raw,"%S+") do table.insert(words, w) end + + local triggerReplacements = {} + local replacements = {} + -- words[1] = "[INFO]", words[2] = "-" local effectTrigger = words[3] + if (string.find(effectTrigger, "entity_spawned")) then + effectTrigger = "entity_spawned" + triggerReplacements[1] = string.sub(words[3], 16, -2) + end -- words[4] = "->" local effectType = words[5] local fullEffect = "" for i=5,#words do fullEffect = fullEffect .. words[i] .. " " end - local replacements = {} + local extraText = "" -- switch statement for how to handle the words after the effect type if effectType == "add_temporary_effect" or effectType == "use_active_item" then @@ -59,67 +69,71 @@ local function parseEffectLine(raw) name = name .. words[i] if (i ~= #words) then name = name .. " " end end - replacements[1] = name + + replacements[1] = "{{Collectible" .. Isaac.GetItemIdByName(name) .. "}}" .. name elseif effectType == "convert_entities" then --figure out how to convert entity numbers replacements[1] = words[6] replacements[2] = words[8] + elseif effectType == "spawn_entity" then + replacements[1] = words[6] + elseif effectType == "fart" then + replacements[1] = words[6] + elseif effectType == "area_damage" then + --I could check for 0 damage here and not show it + --It also has flags in words[8] but they don't seem very useful, usually all zeroes + replacements[1] = words[6] end local eidString = "" - eidString = eidString .. (attributeConversions[effectTrigger] or effectTrigger) .. "#" + if effectTrigger ~= lastEffectTrigger then eidString = eidString .. (attributeConversions[effectTrigger] or (effectTrigger .. "#")) end eidString = eidString .. (attributeConversions[effectType] or fullEffect) .. extraText .. "#" - for k,v in ipairs(replacements) do - eidString = string.gsub(eidString, "{" .. k .. "}", v) - end + for k,v in ipairs(triggerReplacements) do eidString = string.gsub(eidString, "{T" .. k .. "}", v) end + for k,v in ipairs(replacements) do eidString = string.gsub(eidString, "{" .. k .. "}", v) end + + if effectTrigger ~= "chain" then lastEffectTrigger = effectTrigger end return eidString end ---work on how resuming a game works (determine current id by checking if item ids exist) +--SOMETHING SCREWY WITH GLOWING HOURGLASS -local function GameStartTMTRAINER(_,isSave) +local function CountLogItems() local theLog = io.open(logLocation, "r") - if (theLog == nil) then - print("[EID] Could not find the log file at " .. logLocation .. "; glitched item descriptions won't work!") - logFound = false - return - else - logFound = true - end - spawnedItems = 0 - if isSave then - --check what item ID we're on - local config = Isaac.GetItemConfig() - while config:GetCollectible(maxNumber - spawnedItems - 1) ~= nil do - spawnedItems = spawnedItems + 1 + theLog:seek("set", logCursor) + + local itemCount = 0 + + local line = theLog:read() + while line ~= nil do + if string.find(line, "initialized with") then + itemCount = itemCount + 1 end - print("resuming at " .. (maxNumber - spawnedItems - 1)) + line = theLog:read() end + + theLog:close() + return itemCount end -EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, GameStartTMTRAINER) - ---[[ -EID:AddCallback(ModCallbacks.MC_PRE_ENTITY_SPAWN, function(_, enttype, variant, subtype, pos, vel, spawner, seed) - if (EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER) and enttype == 5 and variant == 100 and subtype == 0) then - print("[EID] TMTRAINER SPAWNED " .. (maxNumber - spawnedItems - 1)) - Isaac.DebugString("[EID] TMTRAINER SPAWNED " .. (maxNumber - spawnedItems - 1)) - --print("PRE ENTITY SPAWN " .. enttype .. "." .. variant .. "." .. subtype .. ", " .. tostring(pos)) - --Isaac.DebugString("PRE ENTITY SPAWN " .. enttype .. "." .. variant .. "." .. subtype .. ", " .. tostring(pos)) - end -end) -]] local function CheckLogForItems(_) if (not logFound or game:GetFrameCount() % 5 ~= 0 or not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER)) then return end - local logLines = io.lines(logLocation) + local numEffects = 0 local itemScore = 0 local effects = {} local eidDesc = "" - for line in io.lines(logLocation) do + + local theLog = io.open(logLocation, "r") + theLog:seek("set", logCursor) + + local logLines = {} + local line = theLog:read() + while line ~= nil do if string.find(line, "initialized with") then local count = 0 spawnedItems = spawnedItems + 1 + lastEffectTrigger = "chain" + eidDesc = "" -- find the number of effects, and the score given -- (this match gets every number in the line) for s in string.gmatch(line, "%d*%.?%d+") do @@ -130,22 +144,50 @@ local function CheckLogForItems(_) itemScore = tonumber(s) end end - eidDesc = "Score: " .. itemScore .. "#" elseif numEffects > 0 then numEffects = numEffects - 1 table.insert(effects, line) eidDesc = eidDesc .. parseEffectLine(line) -- also display the unparsed line for debug purposes (REMOVE THIS) - eidDesc = eidDesc .. "(" .. line .. ")#" + --eidDesc = eidDesc .. "(" .. line .. ")#" if numEffects == 0 then + -- Glowing Hour Glass type effects will cause the game to reload all items, check if our desc is equal to the first one + if (EID:getDescriptionObj(5, 100, maxNumber - 1).Description == eidDesc) then spawnedItems = 1 end EID:addCollectible(maxNumber - spawnedItems, eidDesc) + print("adding " .. (maxNumber - spawnedItems)) end end - -- there are some lines that have a gigantic amount of white space and I don't know why, don't write those I guess... - if (#line < 200) then secondaryLog:write("LINE: " .. #line .. ": " .. line .. "\n") end + + line = theLog:read() end - secondaryLog:flush() - -- wipe the log file - io.open(logLocation, "w+") + + logCursor = theLog:seek() + theLog:close() end EID:AddCallback(ModCallbacks.MC_POST_UPDATE, CheckLogForItems) + +-- figure out where to resume loading item descriptions when continuing a file +-- unfortunately, I'm not bothering to save descriptions if you close the game +local function GameStartTMTRAINER(_,isSave) + local theLog = io.open(logLocation, "r") + if (theLog == nil) then + print("[EID] Could not find the log file at " .. logLocation .. "; glitched item descriptions won't work!") + logFound = false + return + else + logFound = true + end + spawnedItems = 0 + --[[if isSave then + -- check what item ID we're on + local config = Isaac.GetItemConfig() + while config:GetCollectible(maxNumber - spawnedItems - 1) ~= nil do + spawnedItems = spawnedItems + 1 + end + -- if we exit and reload in a room with a new pedestal to spawn, that item's info is grabbable but spawnedItems would be too high + spawnedItems = spawnedItems - CountLogItems() + + print("resuming at " .. (maxNumber - spawnedItems - 1)) + end]] +end +EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, GameStartTMTRAINER) From a7ceab577837734f052b62dda345f2682e389757 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Tue, 11 Jan 2022 13:53:20 -0500 Subject: [PATCH 05/36] XML entity names --- eid_xmldata.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eid_xmldata.lua b/eid_xmldata.lua index d71bcb65..1ead3504 100644 --- a/eid_xmldata.lua +++ b/eid_xmldata.lua @@ -49,3 +49,7 @@ EID.XMLItemIsInPools = {[1] = {0, 16, 23}, [2] = {0, 16}, [3] = {0, 16, 23}, [4] EID.cardMetadata = {[0] = {mimiccharge=0}, [1] = {mimiccharge=2}, [10] = {mimiccharge=2}, [11] = {mimiccharge=6}, [12] = {mimiccharge=3}, [13] = {mimiccharge=4}, [14] = {mimiccharge=3}, [15] = {mimiccharge=6}, [16] = {mimiccharge=3}, [17] = {mimiccharge=3}, [18] = {mimiccharge=2}, [19] = {mimiccharge=2}, [2] = {mimiccharge=2}, [20] = {mimiccharge=12}, [21] = {mimiccharge=6}, [22] = {mimiccharge=3}, [23] = {mimiccharge=12}, [24] = {mimiccharge=12}, [25] = {mimiccharge=12}, [26] = {mimiccharge=12}, [27] = {mimiccharge=6}, [28] = {mimiccharge=6}, [29] = {mimiccharge=6}, [3] = {mimiccharge=2}, [30] = {mimiccharge=6}, [31] = {mimiccharge=2}, [32] = {mimiccharge=2}, [33] = {mimiccharge=12}, [34] = {mimiccharge=4}, [35] = {mimiccharge=6}, [36] = {mimiccharge=2}, [37] = {mimiccharge=4}, [38] = {mimiccharge=2}, [39] = {mimiccharge=4}, [4] = {mimiccharge=3}, [40] = {mimiccharge=3}, [41] = {mimiccharge=4}, [42] = {mimiccharge=6}, [43] = {mimiccharge=6}, [44] = {mimiccharge=1}, [45] = {mimiccharge=6}, [46] = {mimiccharge=1}, [47] = {mimiccharge=2}, [48] = {mimiccharge=1}, [49] = {mimiccharge=4}, [5] = {mimiccharge=4}, [50] = {mimiccharge=3}, [51] = {mimiccharge=4}, [52] = {mimiccharge=3}, [53] = {mimiccharge=12}, [54] = {mimiccharge=3}, [55] = {mimiccharge=1}, [56] = {mimiccharge=12}, [57] = {mimiccharge=4}, [58] = {mimiccharge=4}, [59] = {mimiccharge=4}, [6] = {mimiccharge=12}, [60] = {mimiccharge=2}, [61] = {mimiccharge=12}, [62] = {mimiccharge=4}, [63] = {mimiccharge=2}, [64] = {mimiccharge=12}, [65] = {mimiccharge=1}, [66] = {mimiccharge=4}, [67] = {mimiccharge=3}, [68] = {mimiccharge=6}, [69] = {mimiccharge=4}, [7] = {mimiccharge=6}, [70] = {mimiccharge=6}, [71] = {mimiccharge=4}, [72] = {mimiccharge=3}, [73] = {mimiccharge=12}, [74] = {mimiccharge=2}, [75] = {mimiccharge=6}, [76] = {mimiccharge=12}, [77] = {mimiccharge=2}, [78] = {mimiccharge=4}, [79] = {mimiccharge=12}, [8] = {mimiccharge=3}, [80] = {mimiccharge=6}, [81] = {mimiccharge=4}, [82] = {mimiccharge=3}, [83] = {mimiccharge=6}, [84] = {mimiccharge=3}, [85] = {mimiccharge=3}, [86] = {mimiccharge=4}, [87] = {mimiccharge=6}, [88] = {mimiccharge=6}, [89] = {mimiccharge=1}, [9] = {mimiccharge=6}, [90] = {mimiccharge=4}, [91] = {mimiccharge=3}, [92] = {mimiccharge=12}, [93] = {mimiccharge=12}, [94] = {mimiccharge=6}, [95] = {mimiccharge=4}, [96] = {mimiccharge=6}, [97] = {mimiccharge=4}, } EID.pillMetadata = {[0] = {mimiccharge=1, class="1+"}, [1] = {mimiccharge=2, class="2-"}, [10] = {mimiccharge=6, class="2+"}, [11] = {mimiccharge=4, class="3-"}, [12] = {mimiccharge=6, class="3+"}, [13] = {mimiccharge=4, class="3-"}, [14] = {mimiccharge=6, class="3+"}, [15] = {mimiccharge=4, class="3-"}, [16] = {mimiccharge=6, class="3+"}, [17] = {mimiccharge=4, class="3-"}, [18] = {mimiccharge=6, class="3+"}, [19] = {mimiccharge=1, class="1"}, [2] = {mimiccharge=12, class="2+"}, [20] = {mimiccharge=12, class="2+"}, [21] = {mimiccharge=6, class="2"}, [22] = {mimiccharge=6, class="1-"}, [23] = {mimiccharge=4, class="2+"}, [24] = {mimiccharge=2, class="1+"}, [25] = {mimiccharge=6, class="2-"}, [26] = {mimiccharge=3, class="1+"}, [27] = {mimiccharge=6, class="1-"}, [28] = {mimiccharge=2, class="1+"}, [29] = {mimiccharge=6, class="1-"}, [3] = {mimiccharge=1, class="2"}, [30] = {mimiccharge=2, class="0"}, [31] = {mimiccharge=6, class="1-"}, [32] = {mimiccharge=6, class="1"}, [33] = {mimiccharge=6, class="1"}, [34] = {mimiccharge=2, class="1+"}, [35] = {mimiccharge=2, class="1+"}, [36] = {mimiccharge=3, class="1+"}, [37] = {mimiccharge=6, class="1-"}, [38] = {mimiccharge=1, class="1+"}, [39] = {mimiccharge=1, class="0-"}, [4] = {mimiccharge=3, class="1"}, [40] = {mimiccharge=1, class="0+"}, [41] = {mimiccharge=3, class="1"}, [42] = {mimiccharge=6, class="1"}, [43] = {mimiccharge=4, class="2+"}, [44] = {mimiccharge=1, class="0"}, [45] = {mimiccharge=1, class="1+"}, [46] = {mimiccharge=6, class="2+"}, [47] = {mimiccharge=4, class="3-"}, [48] = {mimiccharge=6, class="3+"}, [49] = {mimiccharge=3, class="3"}, [5] = {mimiccharge=12, class="2+"}, [6] = {mimiccharge=4, class="3-"}, [7] = {mimiccharge=6, class="3+"}, [8] = {mimiccharge=1, class="0"}, [9] = {mimiccharge=1, class="0"}, } + +--The name of each entity, for use in glitched item descriptions +EID.XMLEntityNames = {["1.0"] = "Player", ["1.1"] = "Coplayer", ["2.0"] = "Tear", ["2.1"] = "Blood Tear", ["2.2"] = "Tooth Tear", ["2.3"] = "Metallic Tear", ["2.4"] = "Bobs Head Tear", ["2.5"] = "Fire Tear", ["2.6"] = "Dark Matter Tear", ["2.7"] = "Mysterious Tear", ["2.8"] = "Scythe Tear", ["2.9"] = "Chaos Card Tear", ["2.10"] = "Chaos Card Tear", ["2.11"] = "Tear", ["2.12"] = "Blood Tear", ["2.13"] = "Nail Tear", ["2.14"] = "Pupula Tear", ["2.15"] = "Pupula Blood Tear", ["2.16"] = "God's Flesh Tear", ["2.17"] = "God's Flesh Blood Tear", ["2.18"] = "Diamond Tear", ["2.19"] = "Explosivo Tear", ["2.20"] = "Coin Tear", ["2.21"] = "Multidimensional Tear", ["2.22"] = "Stone Tear", ["2.23"] = "Nail Blood Tear", ["2.24"] = "Glaucoma Tear", ["2.25"] = "Glaucoma Blood Tear", ["2.26"] = "Booger Tear", ["2.27"] = "Egg Tear", ["2.28"] = "Razor Tear", ["2.29"] = "Bone Tear", ["2.30"] = "Black Tooth Tear", ["2.31"] = "Needle Tear", ["2.32"] = "Belial Tear", ["2.33"] = "Pop Tear", ["2.34"] = "Pop Blood Tear", ["2.35"] = "Balloon Tear", ["2.36"] = "Hungry Tear", ["2.37"] = "Brimstone Balloon Tear", ["2.38"] = "Bomb Balloon Tear", ["3.1"] = "Brother Bobby", ["3.2"] = "Demon Baby", ["3.3"] = "Little Chubby", ["3.4"] = "Little Gish", ["3.5"] = "Little Steve", ["3.6"] = "Robo-Baby", ["3.7"] = "Sister Maggy", ["3.8"] = "Abel", ["3.9"] = "Ghost Baby", ["3.10"] = "Harlequin Baby", ["3.11"] = "Rainbow Baby", ["3.12"] = "Isaacs Head", ["3.13"] = "Blue Baby Soul", ["3.14"] = "Dead Bird", ["3.15"] = "Eves Bird Foot", ["3.16"] = "Daddys Foot", ["3.17"] = "Peepers Eye", ["3.20"] = "Bomb Bag", ["3.21"] = "Sack of Pennies", ["3.22"] = "Little C.H.A.D.", ["3.23"] = "The Relic", ["3.24"] = "Bum Fiend", ["3.25"] = "Holy Water", ["3.26"] = "Key Piece 1", ["3.27"] = "Key Piece 2", ["3.28"] = "Full Key", ["3.30"] = "Forever Alone", ["3.31"] = "Distant Admiration", ["3.32"] = "Guardian Angel", ["3.33"] = "Fly Orbital", ["3.35"] = "Sacrificial Dagger", ["3.40"] = "Dead Cat", ["3.41"] = "1UP", ["3.42"] = "Guppys Hair Ball", ["3.43"] = "Attack Fly", ["3.44"] = "Cube of Meat L1", ["3.45"] = "Cube of Meat L2", ["3.46"] = "Cube of Meat L3", ["3.47"] = "Cube of Meat L4", ["3.48"] = "Isaacs Body", ["3.50"] = "Smart Fly", ["3.51"] = "Dry Baby", ["3.52"] = "Juicy Sack", ["3.53"] = "Robo-Baby 2.0", ["3.54"] = "Rotten Baby", ["3.55"] = "Headless Baby", ["3.56"] = "Leech", ["3.57"] = "Mystery Sack", ["3.58"] = "BBF", ["3.59"] = "Bob's Brain", ["3.60"] = "Best Bud", ["3.61"] = "Lil' Brimstone", ["3.62"] = "Isaac's Heart", ["3.63"] = "Lil' Haunt", ["3.64"] = "Dark Bum", ["3.65"] = "Big Fan", ["3.66"] = "Sissy Longlegs", ["3.67"] = "Punching Bag", ["3.68"] = "Guillotine", ["3.69"] = "Ball of Bandages L1", ["3.70"] = "Ball of Bandages L2", ["3.71"] = "Ball of Bandages L3", ["3.72"] = "Ball of Bandages L4", ["3.73"] = "Blue Spider", ["3.74"] = "Mongo Baby", ["3.75"] = "Samson's Chains", ["3.78"] = "Scissors", ["3.79"] = "Gemini Familiar", ["3.76"] = "Cain's Eye", ["3.77"] = "???'s Only Friend", ["3.80"] = "Incubus", ["3.81"] = "Fate's Reward", ["3.82"] = "Lil Chest", ["3.83"] = "Sworn Protector", ["3.84"] = "Friend Zone", ["3.85"] = "Lost Fly", ["3.86"] = "Charged Baby", ["3.87"] = "Lil Gurdy", ["3.88"] = "Bumbo", ["3.89"] = "Censer", ["3.90"] = "Key Bum", ["3.91"] = "Rune Bag", ["3.92"] = "Seraphim", ["3.93"] = "GB Bug", ["3.94"] = "Spider Mod", ["3.95"] = "Farting Baby", ["3.96"] = "Succubus", ["3.97"] = "Lil Loki", ["3.98"] = "Obsessed Fan", ["3.99"] = "Papa Fly", ["3.100"] = "Milk!", ["3.101"] = "Multidimensional Baby", ["3.102"] = "Super Bum", ["3.103"] = "Tonsil", ["3.104"] = "Big Chubby", ["3.105"] = "Depression", ["3.106"] = "Shade", ["3.107"] = "Hushy", ["3.108"] = "Lil Monstro", ["3.109"] = "King Baby", ["3.110"] = "Finger!", ["3.111"] = "YO LISTEN!", ["3.112"] = "Acid Baby", ["3.113"] = "Spider Baby", ["3.114"] = "Sack of Sacks", ["3.115"] = "Brown Nugget", ["3.116"] = "Bloodshot Eye", ["3.117"] = "Mom's Razor", ["3.118"] = "Angry Fly", ["3.119"] = "Box Buddy", ["3.120"] = "Sprinkler", ["3.121"] = "Leprocy", ["3.122"] = "Lil Harbingers", ["3.123"] = "Angelic Prism", ["3.124"] = "Mystery Egg", ["3.125"] = "Lil Spewer", ["3.126"] = "Slipped Rib", ["3.127"] = "Pointy Rib", ["3.128"] = "Bone Orbital", ["3.129"] = "Hallowed Ground", ["3.130"] = "Jaw Bone", ["3.900"] = "Forgotten Body", ["4.0"] = "Bomb", ["4.1"] = "Big Bomb", ["4.2"] = "Decoy", ["4.3"] = "Troll Bomb", ["4.4"] = "Megatroll Bomb", ["4.5"] = "Poison Bomb", ["4.6"] = "Big Poison Bomb", ["4.7"] = "Sad Bomb", ["4.8"] = "Hot Bomb", ["4.9"] = "Butt Bomb", ["4.10"] = "Mr. Mega Bomb", ["4.11"] = "Bobby Bomb", ["4.12"] = "Glitter Bomb", ["5.10.1"] = "Heart", ["5.10.2"] = "Heart (half)", ["5.10.3"] = "Heart (soul)", ["5.10.4"] = "Heart (eternal)", ["5.10.5"] = "Heart (double)", ["5.10.6"] = "Black Heart", ["5.10.7"] = "Gold Heart", ["5.10.8"] = "Heart (half soul)", ["5.10.9"] = "Scared Heart", ["5.10.10"] = "Blended Heart", ["5.10.11"] = "Bone Heart", ["5.20.1"] = "Penny", ["5.20.2"] = "Nickel", ["5.20.3"] = "Dime", ["5.20.4"] = "Double Penny", ["5.20.5"] = "Lucky Penny", ["5.20.6"] = "Sticky Nickel", ["5.30.1"] = "Key", ["5.30.2"] = "Golden Key", ["5.30.3"] = "Key Ring", ["5.30.4"] = "Charged Key", ["5.40.1"] = "Bomb", ["5.40.2"] = "Double Bomb", ["5.40.3"] = "Troll Bomb", ["5.40.4"] = "Golden Bomb", ["5.40.5"] = "Megatroll Bomb", ["5.90.1"] = "Lil' Battery", ["5.90.2"] = "Micro Battery", ["5.50"] = "Chest", ["5.51"] = "Bomb Chest", ["5.52"] = "Spiked Chest", ["5.53"] = "Eternal Chest", ["5.54"] = "Mimic Chest", ["5.60"] = "Locked Chest", ["5.69.1"] = "Grab Bag", ["5.70.1"] = "Pill Blue-Blue", ["5.70.2"] = "Pill White-Blue", ["5.70.3"] = "Pill Orange-Orange", ["5.70.4"] = "Pill White-White", ["5.70.5"] = "Pill Dots-Red", ["5.70.6"] = "Pill Pink-Red", ["5.70.7"] = "Pill Blue-Cadetblue", ["5.70.8"] = "Pill Yellow-Orange", ["5.70.9"] = "Pill Dots-White", ["5.70.10"] = "Pill White-Azure", ["5.70.11"] = "Pill Black-Yellow", ["5.70.12"] = "Pill White-Black", ["5.70.13"] = "Pill White-Yellow", ["5.100"] = "Collectible", ["5.110"] = "Broken Shovel", ["5.150"] = "Shop Item", ["5.300.0"] = "Tarot Card", ["5.300.1"] = "Tarot Card", ["5.300.2"] = "Suit Card", ["5.300.3"] = "Rune#1", ["5.300.4"] = "Rune#2", ["5.300.5"] = "Emergency Contact", ["5.300.6"] = "Dice Shard", ["5.300.7"] = "Black Rune", ["5.300.8"] = "Magic Card", ["5.300.9"] = "Card Against Humanity", ["5.300.10"] = "Credit Card", ["5.300.11"] = "Holy Card", ["5.300.12"] = "Chance Card", ["5.300.13"] = "Rune Shard", ["5.340"] = "Big Chest", ["5.350"] = "Trinket", ["5.360"] = "Red Chest", ["5.370"] = "Challenge Trophy", ["5.380"] = "Isaac's Bed", ["6.1"] = "Slot Machine", ["6.2"] = "Blood Donation Machine", ["6.3"] = "Fortune Telling Machine", ["6.4"] = "Beggar", ["6.5"] = "Devil Beggar", ["6.6"] = "Shell Game", ["6.7"] = "Key Master", ["6.8"] = "Donation Machine", ["6.9"] = "Bomb Bum", ["6.10"] = "Shop Restock Machine", ["6.11"] = "Greed Donation Machine", ["6.12"] = "Mom's Dressing Table", ["7.1"] = "Laser (Thick Red)", ["7.1.3"] = "Laser (Thick Dark)", ["7.2"] = "Laser (Thin Red)", ["7.3"] = "Laser (Shoop da Whoop)", ["7.4"] = "Laser (Pride)", ["7.5"] = "Laser (Light Beam)", ["7.6"] = "Laser (Giant Red)", ["7.7"] = "Tractor Beam", ["7.8"] = "Light Ring", ["7.9"] = "Laser (Brimtech)", ["7.10"] = "Laser (Electric)", ["8.0"] = "Moms Knife", ["8.1"] = "Bone Club", ["8.2"] = "Bone Scythe", ["8.9"] = "Notched Axe", ["9.0"] = "Projectile", ["9.1"] = "Projectile", ["9.2"] = "Purple Fire Projectile", ["9.3"] = "Puke Projectile", ["9.4"] = "Tear Projectile", ["9.5"] = "Corn Projectile", ["9.6"] = "Hush Projectile", ["9.7"] = "Coin Projectile", ["9.12"] = "Steven Projectile", ["10.0"] = "Frowning Gaper", ["10.1"] = "Gaper", ["10.2"] = "Flaming Gaper", ["11.0"] = "Gusher", ["11.1"] = "Pacer", ["12.0"] = "Horf", ["13.0"] = "Fly", ["14.0"] = "Pooter", ["14.1"] = "Super Pooter", ["15.0"] = "Clotty", ["15.1"] = "Clot", ["15.2"] = "Iblob", ["16.0"] = "Mulligan", ["16.1"] = "Mulligoon", ["16.2"] = "Mulliboom", ["17.0"] = "Shopkeeper", ["17.1"] = "Secret Room Keeper", ["17.2"] = "Error Room Keeper", ["17.3"] = "Special Shopkeeper", ["17.4"] = "Special Secret Room Keeper", ["18.0"] = "Attack Fly", ["19.0"] = "Larry Jr", ["19.1"] = "The Hollow", ["20.0"] = "Monstro", ["21.0"] = "Maggot", ["22.0"] = "Hive", ["22.1"] = "Drowned Hive", ["23.0"] = "Charger", ["23.0.1"] = "My Shadow", ["23.1"] = "Drowned Charger", ["23.2"] = "Dank Charger", ["24.0"] = "Globin", ["24.1"] = "Gazing Globin", ["24.2"] = "Dank Globin", ["25.0"] = "Boom Fly", ["25.1"] = "Red Boom Fly", ["25.2"] = "Drowned Boom Fly", ["26.0"] = "Maw", ["26.1"] = "Red Maw", ["26.2"] = "Psychic Maw", ["27.0"] = "Host", ["27.1"] = "Red Host", ["28.0"] = "Chub", ["28.1"] = "Chad", ["28.2"] = "The Carrion Queen", ["29.0"] = "Hopper", ["29.1"] = "Trite", ["30.0"] = "Boil", ["30.1"] = "Gut", ["30.2"] = "Sack", ["31.0"] = "Spitty", ["32.0"] = "Brain", ["33.0"] = "Fire Place", ["33.1"] = "Red Fire Place", ["33.2"] = "Blue Fire Place", ["33.3"] = "Purple Fire Place", ["34.0"] = "Leaper", ["35.0"] = "Mr Maw", ["35.1"] = "Mr Maw Head", ["35.2"] = "Mr Red Maw", ["35.3"] = "Mr Red Maw Head", ["35.10"] = "Mr. Maw Neck", ["36.0"] = "Gurdy", ["38.0"] = "Baby", ["38.1"] = "Angelic Baby", ["38.2"] = "Ultra Pride Baby", ["39.0"] = "Vis", ["39.1"] = "Double Vis", ["39.2"] = "Chubber", ["39.22"] = "Chubber Projectile", ["39.3"] = "Scarred Double Vis", ["40.0"] = "Guts", ["40.1"] = "Scarred Guts", ["41.0"] = "Knight", ["41.1"] = "Selfless Knight", ["42.0"] = "Stone Grimace", ["42.1"] = "Vomit Grimace", ["43.0"] = "Monstro Ii", ["43.1"] = "Gish", ["44.0"] = "Poky", ["44.1"] = "Slide", ["45.0"] = "Mom", ["45.10"] = "Mom Stomp", ["46.0"] = "Sloth", ["46.1"] = "Super Sloth", ["46.2"] = "Ultra Pride", ["47.0"] = "Lust", ["47.1"] = "Super Lust", ["48.0"] = "Wrath", ["48.1"] = "Super Wrath", ["49.0"] = "Gluttony", ["49.1"] = "Super Gluttony", ["50.0"] = "Greed", ["50.1"] = "Super Greed", ["51.0"] = "Envy", ["51.10"] = "Envy (big)", ["51.20"] = "Envy (medium)", ["51.30"] = "Envy (small)", ["51.1"] = "Super Envy", ["51.11"] = "Super Envy (big)", ["51.21"] = "Super Envy (medium)", ["51.31"] = "Super Envy (small)", ["52.0"] = "Pride", ["52.1"] = "Super Pride", ["53.0"] = "Dople", ["53.1"] = "Evil Twin", ["54.0"] = "Flaming Hopper", ["55.0"] = "Leech", ["55.1"] = "Kamikaze Leech", ["55.2"] = "Holy Leech", ["56.0"] = "Lump", ["57.0"] = "Membrain", ["57.1"] = "Mama Guts", ["58.0"] = "Parabite", ["58.1"] = "Scarred Parabite", ["59.0"] = "Fred", ["60.0"] = "Eye", ["60.1"] = "Bloodshot Eye", ["61.0"] = "Sucker", ["61.1"] = "Spit", ["61.2"] = "Soul Sucker", ["62.0"] = "Pin", ["62.1"] = "Scolex", ["62.2"] = "The Frail", ["63.0"] = "Famine", ["64.0"] = "Pestilence", ["65.0"] = "War", ["65.1"] = "Conquest", ["65.10"] = "War without horse", ["66.0"] = "Death", ["66.10"] = "Death Scythe", ["66.20"] = "Death Horse", ["66.30"] = "Death without horse", ["67.0"] = "The Duke Of Flies", ["67.1"] = "The Husk", ["68.0"] = "Peep", ["68.1"] = "The Bloat", ["68.10"] = "Peep Eye", ["68.11"] = "Bloat Eye", ["69.0"] = "Loki", ["69.1"] = "Lokii", ["71.0"] = "Fistula", ["71.1"] = "Teratoma", ["72.0"] = "Fistula Medium", ["72.1"] = "Teratoma Medium", ["73.0"] = "Fistula Small", ["73.1"] = "Teratoma Small", ["74.0"] = "Blastocyst", ["75.0"] = "Blastocyst Medium", ["76.0"] = "Blastocyst Small", ["77.0"] = "Embryo", ["78.0"] = "Moms Heart", ["78.1"] = "It Lives", ["78.10"] = "Moms Guts", ["79.0"] = "Gemini", ["79.1"] = "Steven", ["79.2"] = "The Blighted Ovum", ["79.10"] = "Gemini Baby", ["79.11"] = "Steven Baby", ["79.12"] = "The Blighted Ovum Baby", ["79.20"] = "Umbilical Cord", ["80.0"] = "Moter", ["81.0"] = "The Fallen", ["81.1"] = "Krampus", ["82.0"] = "Headless Horseman", ["83.0"] = "Headless Horsemans Head", ["84.0"] = "Satan", ["84.10"] = "Satan Stomp", ["85.0"] = "Spider", ["86.0"] = "Keeper", ["87.0"] = "Gurgle", ["88.0"] = "Walking Boil", ["88.1"] = "Walking Gut", ["88.2"] = "Walking Sack", ["89.0"] = "Buttlicker", ["90.0"] = "Hanger", ["91.0"] = "Swarmer", ["92.0"] = "Heart", ["93.0"] = "Mask", ["94.0"] = "Big Spider", ["96.0"] = "Eternal Fly", ["97.0"] = "Mask Of Infamy", ["98.0"] = "Heart Of Infamy", ["99.0"] = "Gurdy Jr", ["100.0"] = "Widow", ["100.1"] = "The Wretched", ["101.0"] = "Daddy Long Legs", ["101.1"] = "Triachnid", ["102.0"] = "Isaac", ["102.1"] = "Bluebaby", ["102.2"] = "??? (Alt)", ["201.0"] = "Stone Eye", ["202.0"] = "Constant Stone Shooter", ["202.10"] = "Cross Stone Shooter", ["202.10.1"] = "Cross Stone Shooter", ["202.11"] = "Cross Stone Shooter (always on)", ["202.11.1"] = "Cross Stone Shooter (always on)", ["203.0"] = "Brimstone Head", ["204.0"] = "Mobile Host", ["205.0"] = "Nest", ["206.0"] = "Baby Long Legs", ["206.1"] = "Small Baby Long Legs", ["207.0"] = "Crazy Long Legs", ["207.1"] = "Small Crazy Long Legs", ["208.0"] = "Fatty", ["208.1"] = "Pale Fatty", ["208.2"] = "Flaming Fatty", ["209.0"] = "Fat Sack", ["210.0"] = "Blubber", ["211.0"] = "Half Sack", ["212.0"] = "Deaths Head", ["212.1"] = "Dank Deaths Head", ["213.0"] = "Moms Hand", ["214.0"] = "Level 2 Fly", ["215.0"] = "Level 2 Spider", ["216.0"] = "Swinger", ["216.1"] = "Swinger Head", ["216.10"] = "Swinger Neck", ["217.0"] = "Dip", ["217.1"] = "Corn", ["217.2"] = "Brownie Corn", ["218.0"] = "Wall Hugger", ["219.0"] = "Wizoob", ["220.0"] = "Squirt", ["220.1"] = "Dank Squirt", ["221.0"] = "Cod Worm", ["222.0"] = "Ring Fly", ["223.0"] = "Dinga", ["224.0"] = "Oob", ["225.0"] = "Black Maw", ["226.0"] = "Skinny", ["226.1"] = "Rotty", ["226.2"] = "Crispy", ["227.0"] = "Bony", ["228.0"] = "Homunculus", ["228.10"] = "Homunculus Cord", ["229.0"] = "Tumor", ["230.0"] = "Camillo Jr", ["231.0"] = "Nerve Ending", ["231.1"] = "Nerve Ending 2", ["234.0"] = "One Tooth", ["235.0"] = "Gaping Maw", ["236.0"] = "Broken Gaping Maw", ["237.0"] = "Gurgling", ["237.1"] = "Gurgling Boss", ["237.2"] = "Turdling", ["238.0"] = "Splasher", ["239.0"] = "Grub", ["240.0"] = "Wall Creep", ["241.0"] = "Rage Creep", ["242.0"] = "Blind Creep", ["243.0"] = "Conjoined Spitty", ["244.0"] = "Round Worm", ["244.1"] = "Tube Worm", ["245.0"] = "Poop", ["246.0"] = "Ragling", ["246.1"] = "Rag Man's Ragling", ["247.0"] = "Flesh Mobile Host", ["248.0"] = "Psychic Horf", ["249.0"] = "Full Fly", ["250.0"] = "Ticking Spider", ["251.0"] = "Begotten", ["251.10"] = "Begotten Chain", ["252.0"] = "Nulls", ["253.0"] = "Psy Tumor", ["254.0"] = "Floating Knight", ["255.0"] = "Night Crawler", ["256.0"] = "Dart Fly", ["257.0"] = "Conjoined Fatty", ["257.1"] = "Blue Conjoined Fatty", ["258.0"] = "Fat Bat", ["259.0"] = "Imp", ["260.0"] = "Haunt", ["260.10"] = "Lil Haunt", ["261.0"] = "Dingle", ["261.1"] = "Dangle", ["262.0"] = "Mega Maw", ["263.0"] = "The Gate", ["264.0"] = "Mega Fatty", ["265.0"] = "The Cage", ["266.0"] = "Mama Gurdy", ["266.1"] = "Mama Gurdy Left Hand", ["266.2"] = "Mama Gurdy Right Hand", ["267.0"] = "Dark One", ["268.0"] = "The Adversary", ["269.0"] = "Polycephalus", ["270.0"] = "Mr Fred", ["271.0"] = "Uriel", ["271.1"] = "Fallen Uriel", ["272.0"] = "Gabriel", ["272.1"] = "Fallen Gabriel", ["273.0"] = "The Lamb", ["273.10"] = "Lamb Body", ["274.0"] = "Mega Satan", ["274.1"] = "Mega Satan's Right Hand", ["274.2"] = "Mega Satan's Left Hand", ["275.0"] = "Mega Satan 2", ["275.1"] = "Mega Satan 2's Right Hand", ["275.2"] = "Mega Satan 2's Left Hand", ["276.0"] = "Roundy", ["277.0"] = "Black Bony", ["278.0"] = "Black Globin", ["279.0"] = "Black Globins Head", ["280.0"] = "Black Globins Body", ["281.0"] = "Swarm", ["282.0"] = "Mega Clotty", ["283.0"] = "Bone Knight", ["284.0"] = "Cyclopia", ["285.0"] = "Red Ghost", ["286.0"] = "Flesh Deaths Head", ["287.0"] = "Moms Dead Hand", ["288.0"] = "Dukie", ["289.0"] = "Ulcer", ["290.0"] = "Meatball", ["291.0"] = "Pitfall", ["291.1"] = "Suction Pitfall", ["291.2"] = "Teleport Pitfall", ["292.0"] = "Movable TNT", ["292.1"] = "Movable TNT (Mine Crafter)", ["293.0"] = "Ultra Greed Coin (Spinner)", ["293.1"] = "Ultra Greed Coin (Key)", ["293.2"] = "Ultra Greed Coin (Bomb)", ["293.3"] = "Ultra Greed Coin (Heart)", ["294.0"] = "Ultra Greed Door", ["295.0"] = "Corn Mine", ["296.0"] = "Hush Fly", ["297.0"] = "Blue Gaper", ["298.0"] = "Blue Boil", ["299.0"] = "Greed Gaper", ["300.0"] = "Mushroom", ["301.0"] = "Poison Mind", ["302.0"] = "Stoney", ["302.10"] = "Cross Stoney", ["303.0"] = "Blister", ["304.0"] = "The Thing", ["305.0"] = "Ministro", ["306.0"] = "Portal", ["307.0"] = "Tar Boy", ["307.0.1"] = "Tar Boy Mouth", ["308.0"] = "Fistuloid", ["309.0"] = "Gush", ["310.0"] = "Leper", ["310.0.1"] = "Leper Stage 2", ["310.0.2"] = "Leper Stage 3", ["310.0.3"] = "Leper Stage 4", ["310.1"] = "Leper Flesh", ["311.0"] = "Mr Mine", ["311.10"] = "Mr. Mine Neck", ["401.0"] = "The Stain", ["402.0"] = "Brownie", ["403.0"] = "The Forsaken", ["404.0"] = "Little Horn", ["404.1"] = "Dark Ball", ["405.0"] = "Rag Man", ["405.1"] = "Rag Man's Head", ["406.0"] = "Ultra Greed", ["406.1"] = "Ultra Greedier", ["407.0"] = "Hush", ["408.0"] = "Hush (Skinless)", ["409.0"] = "Rag Mega", ["409.1"] = "Purple Ball", ["409.2"] = "Rag Mega's Rebirth Pillar", ["410.0"] = "Sisters Vis", ["411.0"] = "Big Horn", ["411.1"] = "Small Hole", ["411.2"] = "Big Hole", ["412.0"] = "Delirium", ["413.0"] = "The Matriarch", ["1000.1"] = "Bomb Explosion", ["1000.2"] = "Blood Explosion", ["1000.3"] = "Fly Explosion", ["1000.4"] = "Rock Particle", ["1000.5"] = "Blood Particle", ["1000.6"] = "Devil", ["1000.7"] = "Blood Splat", ["1000.8"] = "Ladder", ["1000.9"] = "Angel", ["1000.10"] = "Blue Flame", ["1000.11"] = "Bullet Poof", ["1000.12"] = "Tear PoofA", ["1000.12.10"] = "Tear PoofA (no tear)", ["1000.13"] = "Tear PoofB", ["1000.14"] = "Ripple Poof", ["1000.14.1"] = "Ripple Poof", ["1000.15"] = "Poof01", ["1000.16"] = "Poof02", ["1000.16.1"] = "Large Ground Poof", ["1000.16.2"] = "Large Ground Poof (foreground)", ["1000.16.3"] = "Large Blood Poof", ["1000.16.4"] = "Large Blood Poof (foreground)", ["1000.16.5"] = "Blood Cloud", ["1000.16.10"] = "Forgotten Soul Poof", ["1000.16.11"] = "Holy Mantle Poof", ["1000.17"] = "Poof04", ["1000.18"] = "Bomb Crater", ["1000.19"] = "Crack The Sky", ["1000.20"] = "Scythe Break", ["1000.21"] = "Tiny Bug", ["1000.68"] = "Wall Bug", ["1000.22"] = "Creep (Red)", ["1000.23"] = "Creep (Green)", ["1000.24"] = "Creep (Yellow)", ["1000.25"] = "Creep (White)", ["1000.26"] = "Creep (Black)", ["1000.27"] = "Wood Particle", ["1000.28"] = "Monstros Tooth", ["1000.29"] = "Mom Foot Stomp", ["1000.30"] = "Dr. Fetus Target", ["1000.31"] = "Dr. Fetus Rocket", ["1000.32"] = "Lemon Mishap", ["1000.78"] = "Lemon Party", ["1000.33"] = "Tiny Fly", ["1000.34"] = "Fart", ["1000.35"] = "Tooth Particle", ["1000.36"] = "Wall Hole X-Ray", ["1000.37"] = "Player Creep (Holy Water)", ["1000.38"] = "Spider Explosion", ["1000.39"] = "Heaven Door", ["1000.41"] = "Water Droplet", ["1000.42"] = "Blood Gush", ["1000.43"] = "Poop Explosion", ["1000.44"] = "Player Creep (White)", ["1000.45"] = "Player Creep (Black)", ["1000.46"] = "Player Creep (Red)", ["1000.47"] = "Trinity Shield", ["1000.48"] = "Battery up", ["1000.49"] = "Effect Notification", ["1000.50.0"] = "Laser Impact", ["1000.50.1"] = "Brimstone Impact", ["1000.50.2"] = "Shoop Impact", ["1000.50.3"] = "Brimstone Impact CageVis", ["1000.50.4"] = "Bouncing Impact", ["1000.50.5"] = "Ring Impact", ["1000.51"] = "Fire", ["1000.52"] = "Red Flame", ["1000.53"] = "Tear Creep (Green)", ["1000.54"] = "Player Creep Holy Water Trail", ["1000.55"] = "Spike Effect", ["1000.56"] = "Brown Creep", ["1000.57"] = "Pulling Effect", ["1000.58"] = "Poop Particle", ["1000.59"] = "Dust Cloud", ["1000.60"] = "Boomerang", ["1000.61"] = "Shockwave (Radial)", ["1000.62"] = "Rock Explosion", ["1000.63.0"] = "Worm", ["1000.63.1"] = "Maggot", ["1000.63.2"] = "Leech", ["1000.64"] = "Beetle", ["1000.65"] = "Wisp", ["1000.66"] = "Ember Particle", ["1000.69"] = "Butterfly", ["1000.70"] = "Blood Drop", ["1000.71"] = "Brimstone Swirl", ["1000.74"] = "Isaac's Carpet", ["1000.76"] = "Dice Room Floor", ["1000.77"] = "Large Blood Explosion", ["1000.75"] = "Bar Particle", ["1000.67"] = "Shockwave (Directional)", ["1000.72"] = "Crackwave", ["1000.73"] = "Shockwave (Random)", ["1000.79"] = "Tear Poof small", ["1000.80"] = "Tear Poof very small", ["1000.81"] = "Friendly ball", ["1000.82"] = "Womb hole teleport", ["1000.83"] = "Spear of destiny", ["1000.84"] = "Evil Eye", ["1000.85"] = "Diamond Particle", ["1000.86"] = "Nail Particle", ["1000.87"] = "Falling Ember", ["1000.88"] = "Dark Ball Smoke Particle", ["1000.89"] = "Ultra Greed Footprint", ["1000.90"] = "Milk Puddle", ["1000.91"] = "Mom's Hand (Emergency Contact)", ["1000.92"] = "Player Creep (Black Powder)", ["1000.93"] = "Pentagram (Black Powder)", ["1000.94"] = "Slippery Brown Creep", ["1000.95"] = "Diamond Particle", ["1000.96"] = "Hush Laser", ["1000.97"] = "Impact", ["1000.98"] = "Coin Particle", ["1000.99"] = "Water Splash", ["1000.100"] = "Hush Ashes", ["1000.101"] = "Hush Laser Up", ["1000.102"] = "Bullet Poof", ["1000.103"] = "Ultra Greed Bling", ["1000.104"] = "Fireworks", ["1000.105"] = "Brown Cloud", ["1000.106"] = "Fart Ring", ["1000.107.0"] = "BlackHole", ["1000.107.1"] = "BlackHoleRay", ["1000.108"] = "Mr. Me!", ["1000.109"] = "Death Skull", ["1000.110"] = "Enemy Brimstone Swirl", ["1000.111"] = "Haemolacria Trail", ["1000.112"] = "Hallowed Ground", ["1000.113"] = "Brimstone Ball", ["1000.114"] = "Forgotten Chain", ["1000.115"] = "Broken Shovel Shadow", ["1000.116"] = "Dirt Patch", ["1000.117"] = "Forgotten Soul", ["1000.118"] = "Small Rocket", ["1000.119"] = "Timer", ["1000.120"] = "Spawner", ["1000.121"] = "Light", ["1000.122"] = "Big Horn Hole Helper", ["1000.123"] = "Halo", ["1000.123.1"] = "Telekinesis Halo", ["1000.124"] = "Tar Bubble", ["1000.125"] = "Big Horn Hand", ["1000.126"] = "Tech Dot", ["1000.127"] = "Mama Mega Explosion", ["9001.1"] = "Spidermod Text", ["2.39"] = "Fist Tear", ["2.40"] = "Grid Tear", ["2.41"] = "Ice Tear", ["2.42"] = "Rock Tear", ["2.43"] = "Key Tear", ["2.44"] = "Bloody Key Tear", ["2.45"] = "Eraser Tear", ["2.46"] = "Fire Tear", ["2.47"] = "Sword Tear", ["2.48"] = "Spore Tear", ["2.49"] = "Tech Sword Tear", ["2.50"] = "Fetus Tear", ["3.200"] = "Intruder", ["3.201"] = "Dip Familiar", ["3.201.1"] = "Dip Familiar (red)", ["3.201.2"] = "Dip Familiar (corny)", ["3.201.3"] = "Dip Familiar (gold)", ["3.201.4"] = "Dip Familiar (rainbow)", ["3.201.5"] = "Dip Familiar (black)", ["3.201.6"] = "Dip Familiar (white)", ["3.201.12"] = "Dip Familiar (stone)", ["3.201.13"] = "Dip Familiar (flaming)", ["3.201.14"] = "Dip Familiar (stinky)", ["3.201.20"] = "Dip Familiar (Brownie)", ["3.202"] = "Damocles", ["3.203"] = "Blood Oath", ["3.204"] = "Psy Fly", ["3.205"] = "Menorah", ["3.206"] = "Wisp Familiar", ["3.207"] = "Peepers Other Eye", ["3.208"] = "Boiled Baby", ["3.209"] = "Freezer Baby", ["3.210"] = "Bird Cage", ["3.211"] = "Lost Soul", ["3.212"] = "Lil Dumpy", ["3.213"] = "Knife Piece 1", ["3.214"] = "Knife Piece 2", ["3.215"] = "Knife Piece 3", ["3.216"] = "Tinytoma", ["3.217"] = "Tinytoma (small)", ["3.218"] = "Bot Fly", ["3.219"] = "Dead Bird (permanent)", ["3.220"] = "Siren Minion", ["3.221"] = "Paschal Candle", ["3.222"] = "Stitches", ["3.223"] = "Full Knife", ["3.224"] = "Baby Plum (familiar)", ["3.225"] = "Fruity Plum", ["3.226"] = "Spin to Win", ["3.227"] = "Beths Heart", ["3.228"] = "Minisaac", ["3.229"] = "Swarm Fly Orbital", ["3.230"] = "Lil Abaddon", ["3.231"] = "Abyss Locust", ["3.232"] = "Lil Portal", ["3.233"] = "Worm Friend", ["3.234"] = "Bone Spur", ["3.235"] = "Twisted Baby 1", ["3.235.1"] = "Twisted Baby 2", ["3.236"] = "Star of Bethlehem", ["3.237"] = "Item Wisp Familiar", ["3.238"] = "Blood Baby", ["3.239"] = "Cube Baby", ["3.240"] = "Umbilical Baby", ["3.241"] = "Blood Puppy", ["3.242"] = "Vanishing Twin", ["3.243"] = "Decap Attack", ["3.244"] = "Esau Jr.", ["4.13"] = "Throwable Bomb", ["4.14"] = "Small Bomb", ["4.15"] = "Brimstone Bomb", ["4.16"] = "Bloody Sad Bomb", ["4.17"] = "Giga Bomb", ["4.18"] = "Golden Troll Bomb", ["4.19"] = "Rocket", ["4.20"] = "Giga Rocket", ["5.41.0"] = "Throwable Bomb (pickup)", ["5.20.7"] = "Golden Penny", ["5.69.2"] = "Black Sack", ["5.70.14"] = "Pill Gold-Gold", ["5.70.2049"] = "Horse Pill Blue-Blue", ["5.70.2050"] = "Horse Pill White-Blue", ["5.70.2051"] = "Horse Pill Orange-Orange", ["5.70.2052"] = "Horse Pill White-White", ["5.70.2053"] = "Horse Pill Dots-Red", ["5.70.2054"] = "Horse Pill Pink-Red", ["5.70.2055"] = "Horse Pill Blue-Cadetblue", ["5.70.2056"] = "Horse Pill Yellow-Orange", ["5.70.2057"] = "Horse Pill Dots-White", ["5.70.2058"] = "Horse Pill White-Azure", ["5.70.2059"] = "Horse Pill Black-Yellow", ["5.70.2060"] = "Horse Pill White-Black", ["5.70.2061"] = "Horse Pill White-Yellow", ["5.70.2062"] = "Horse Pill Gold-Gold", ["5.10.12"] = "Rotten Heart", ["5.42.0"] = "Poop Nugget", ["5.42.1"] = "Big Poop Nugget", ["5.40.7"] = "Giga Bomb", ["5.90.3"] = "Mega Battery", ["5.90.4"] = "Golden Battery", ["5.300.14"] = "Reverse Tarot Card", ["5.300.15"] = "Cracked Key", ["5.300.16"] = "Treasure Card", ["5.300.17"] = "Unus Card", ["5.300.18"] = "Soul of Isaac", ["5.300.19"] = "Soul of Magdalene", ["5.300.20"] = "Soul of Cain", ["5.300.21"] = "Soul of Judas", ["5.300.22"] = "Soul of ???", ["5.300.23"] = "Soul of Eve", ["5.300.24"] = "Soul of Samson", ["5.300.25"] = "Soul of Azazel", ["5.300.26"] = "Soul of Lazarus", ["5.300.27"] = "Soul of Eden", ["5.300.28"] = "Soul of the Lost", ["5.300.29"] = "Soul of Lilith", ["5.300.30"] = "Soul of the Keeper", ["5.300.31"] = "Soul of Apollyon", ["5.300.32"] = "Soul of the Forgotten", ["5.300.33"] = "Soul of Bethany", ["5.300.34"] = "Soul of Jacob", ["5.380.10"] = "Mom's Bed", ["5.390"] = "Mom's Chest", ["5.55"] = "Old Chest", ["5.56"] = "Wooden Chest", ["5.57"] = "Mega Chest", ["5.58"] = "Haunted Chest", ["6.13"] = "Battery Bum", ["6.14"] = "Isaac (secret)", ["6.15"] = "Hell Game", ["6.16"] = "Crane Game", ["6.17"] = "Confessional", ["6.18"] = "Rotten Beggar", ["7.11"] = "Laser (Thicker Red)", ["7.12"] = "Laser (Thick Brown)", ["7.13"] = "Laser (Beast)", ["7.14"] = "Laser (Thicker Brimtech)", ["7.15"] = "Laser (Giant Brimtech)", ["8.3"] = "Donkey Jawbone", ["8.4"] = "Bag of Crafting", ["8.5"] = "Sumptorium", ["8.10"] = "Spirit Sword", ["8.11"] = "Tech Sword", ["9.8"] = "Grid Projectile", ["9.9"] = "Rock Projectile", ["9.11"] = "Meat Projectile", ["9.13"] = "Feather Projectile", ["9.14"] = "Lava Projectile", ["9.15"] = "Head Projectile", ["9.16"] = "Eyeball Projectile", ["10.3"] = "Rotten Gaper", ["10.3.1"] = "Rotten Gaper", ["10.3.2"] = "Rotten Gaper", ["10.3.3"] = "Rotten Gaper", ["10.3.4"] = "Rotten Gaper", ["10.3.5"] = "Rotten Gaper", ["14.2"] = "Tainted Pooter", ["15.3"] = "Grilled Clotty", ["19.2"] = "Tuff Twin", ["19.3"] = "The Shell", ["22.2"] = "Holy Mulligan", ["22.3"] = "Tainted Mulligan", ["23.3"] = "Carrion Princess", ["24.3"] = "Cursed Globin", ["25.3"] = "Dragon Fly", ["25.3.1"] = "Dragon Fly X", ["25.4"] = "Bone Fly", ["25.5"] = "Sick Boom Fly", ["25.6"] = "Tainted Boom Fly", ["27.3"] = "Hard Host", ["29.2"] = "Eggy", ["29.3"] = "Tainted Hopper", ["31.1"] = "Tainted Spitty", ["33.4"] = "White Fire Place", ["33.10"] = "Moveable Fireplace", ["33.12"] = "Moveable Blue Fireplace", ["33.13"] = "Moveable Purple Fireplace", ["34.1"] = "Sticky Leaper", ["38.1.1"] = "Angelic Baby (small)", ["38.3"] = "Wrinkly Baby", ["60.2"] = "Holy Eye", ["87.1"] = "Crackle", ["227.1"] = "Holy Bony", ["229.1"] = "Planetoid", ["244.2"] = "Tainted Round Worm", ["244.2.1"] = "Tainted Round Worm Butt", ["244.3"] = "Tainted Tube Worm", ["33.11"] = "Coal", ["33.11.1"] = "Coal", ["33.11.2"] = "Coal", ["33.11.3"] = "Coal", ["40.2"] = "Slog", ["41.2"] = "Loose Knight", ["41.3"] = "Brainless Knight", ["41.4"] = "Black Knight", ["42.2"] = "Triple Grimace", ["61.3"] = "Ink", ["57.2"] = "Dead Meat", ["61.4"] = "Mama Fly", ["61.5"] = "Bulb", ["61.6"] = "Bloodfly", ["61.7"] = "Tainted Sucker", ["62.3"] = "Wormwood", ["92.1"] = "Half Heart", ["92.1.1"] = "Half Heart", ["93.1"] = "Mask Ii", ["212.2"] = "Cursed Deaths Head", ["212.3"] = "Brimstone Deaths Head", ["212.4"] = "Redskull", ["239.100"] = "Corpse Eater", ["239.101"] = "Carrion Rider", ["240.1"] = "Soy Creep", ["240.2"] = "Rag Creep", ["240.3"] = "Tainted Soy Creep", ["241.1"] = "Split Rage Creep", ["269.1"] = "The Pile", ["306.1"] = "Lil Portal", ["802.0"] = "Blood Puppy", ["802.1"] = "Blood Puppy", ["803.0"] = "Blind Bat", ["804.0"] = "Quake Grimace", ["804.0.1"] = "Quake Grimace", ["804.0.2"] = "Quake Grimace", ["804.0.3"] = "Quake Grimace", ["805.0"] = "Bishop", ["806.0"] = "Bubbles", ["807.0"] = "Wraith", ["808.0"] = "Willo", ["809.0"] = "Bomb Grimace", ["810.0"] = "Small Leech", ["811.0"] = "Deep Gaper", ["811.0.1"] = "Deep Gaper", ["811.0.2"] = "Deep Gaper", ["811.0.3"] = "Deep Gaper", ["811.0.4"] = "Deep Gaper", ["811.0.5"] = "Deep Gaper", ["811.0.6"] = "Deep Gaper", ["812.0"] = "Sub Horf", ["812.1"] = "Tainted Sub Horf", ["813.0"] = "Blurb", ["814.0"] = "Strider", ["815.0"] = "Fissure", ["816.0"] = "Polty", ["816.1"] = "Kineti", ["817.0"] = "Prey", ["817.1"] = "Mullighoul", ["818.0"] = "Rock Spider", ["818.0.1"] = "Rock Spider", ["818.0.2"] = "Rock Spider", ["818.0.3"] = "Rock Spider", ["818.1"] = "Tinted Rock Spider", ["818.1.1"] = "Tinted Rock Spider", ["818.1.2"] = "Tinted Rock Spider", ["818.1.3"] = "Tinted Rock Spider", ["818.2"] = "Coal Spider", ["818.2.1"] = "Coal Spider", ["818.2.2"] = "Coal Spider", ["818.2.3"] = "Coal Spider", ["819.0"] = "Fly Bomb", ["819.1"] = "Eternal Fly Bomb", ["820.0"] = "Danny", ["820.1"] = "Coal Boy", ["821.0"] = "Blaster", ["822.0"] = "Bouncer", ["823.0"] = "Quakey", ["824.0"] = "Gyro", ["824.1"] = "Grilled Gyro", ["825.0"] = "Fire Worm", ["826.0"] = "Hardy", ["827.0"] = "Faceless", ["827.1"] = "Tainted Faceless", ["828.0"] = "Necro", ["829.0"] = "Mole", ["829.1"] = "Tainted Mole", ["830.0"] = "Big Bony", ["830.10"] = "Big Bone", ["831.0"] = "Gutted Fatty", ["831.10"] = "Gutted Fatty Eye", ["831.20"] = "Festering Guts", ["832.0"] = "Exorcist", ["832.1"] = "Fanatic", ["833.0"] = "Candler", ["834.0"] = "Whipper", ["834.1"] = "Snapper", ["834.2"] = "Flagellant", ["835.0"] = "Peeping Fatty", ["835.10"] = "Peeping Fatty Eye", ["836.0"] = "Vis Versa", ["837.0"] = "Henry", ["838.0"] = "Level 2 Willo", ["839.0"] = "Strifer", ["840.0"] = "Pon", ["841.0"] = "Revenant", ["841.1"] = "Quad Revenant", ["842.0"] = "Nightwatch", ["843.0"] = "Canary", ["843.1"] = "Foreigner", ["844.0"] = "Bombgagger", ["850.0"] = "Level 2 Gaper", ["850.1"] = "Level 2 Horf", ["850.2"] = "Level 2 Gusher", ["851.0"] = "Twitchy", ["852.0"] = "Spikeball", ["853.0"] = "Small Maggot", ["854.0"] = "Adult Leech", ["855.0"] = "Level 2 Charger", ["855.1"] = "Elleech", ["856.0"] = "Gasbag", ["857.0"] = "Cohort", ["858.0"] = "Vessel", ["859.0"] = "Floast", ["860.0"] = "Unborn", ["861.0"] = "Pustule", ["862.0"] = "Cyst", ["863.0"] = "Morningstar", ["863.0.1"] = "Morningstar", ["863.0.2"] = "Morningstar", ["864.0"] = "Mockulus", ["865.0"] = "Evis", ["865.10"] = "Evis Guts", ["866.0"] = "Dark Esau", ["866.0.1"] = "Darker Esau", ["866.1"] = "Dark Esau's Pit", ["867.0"] = "Mothers Shadow", ["868.0"] = "Army Fly", ["869.0"] = "Migraine", ["870.0"] = "Drip", ["871.0"] = "Splurt", ["872.0"] = "Cloggy", ["873.0"] = "Fly Trap", ["874.0"] = "Gas Dwarf", ["217.3"] = "Big Corn", ["875.0"] = "Poot Mine", ["876.0"] = "Dump", ["876.1"] = "Dump Head", ["877.0"] = "Grudge", ["878.0"] = "Butt Slicker", ["879.0"] = "Bloaty", ["880.0"] = "Flesh Maiden", ["881.0"] = "Needle", ["881.1"] = "Pasty", ["882.0"] = "Dust", ["883.0"] = "Baby Begotten", ["884.0"] = "Swarm Spider", ["885.0"] = "Cultist", ["885.1"] = "Blood Cultist", ["885.10"] = "Bone Trap", ["886.0"] = "Vis Fatty", ["886.1"] = "Fetal Demon", ["887.0"] = "Dusty Deaths Head", ["888.0"] = "Shady", ["889.0"] = "Clickety Clack", ["890.0"] = "Maze Roamer", ["890.0.1"] = "Maze Roamer", ["891.0"] = "Goat", ["891.1"] = "Black Goat", ["892.0"] = "Poofer", ["893.0"] = "Ball And Chain", ["900.0"] = "Reap Creep", ["901.0"] = "Lil Blub", ["902.0"] = "Rainmaker", ["903.0"] = "The Visage", ["903.1"] = "Visage Mask", ["903.10"] = "Visage Chain", ["903.20"] = "Visage Plasma", ["904.0"] = "Siren", ["904.1"] = "Siren's Skull", ["904.10"] = "Siren Helper Projectile", ["905.0"] = "The Heretic", ["906.0"] = "Hornfel", ["906.1"] = "Hornfel Decoy", ["907.0"] = "Great Gideon", ["907.0.1"] = "Great Gideon (defeated)", ["908.0"] = "Baby Plum", ["909.0"] = "The Scourge", ["909.10"] = "The Scourge (chain)", ["910.0"] = "Chimera", ["910.1"] = "Chimera (body)", ["910.2"] = "Chimera (head)", ["911.0"] = "Rotgut", ["911.1"] = "Rotgut (maggot)", ["911.2"] = "Rotgut (heart)", ["912.0"] = "Mother", ["912.10"] = "Mother 2", ["912.20"] = "Dead Isaac", ["912.30"] = "Mother Worm", ["912.100"] = "Mother Ball", ["912.100.1"] = "Mother Ball (Medium)", ["912.100.2"] = "Mother Ball (Small)", ["913.0"] = "Min Min", ["914.0"] = "Clog", ["915.0"] = "Singe", ["915.1"] = "Singe's Ball", ["916.0"] = "Bumbino", ["917.0"] = "Colostomia", ["918.0"] = "Turdlet", ["919.0"] = "Raglich", ["919.1"] = "Raglich Arm", ["920.0"] = "Horny Boys", ["921.0"] = "Clutch", ["921.1"] = "Clutch Orbital", ["950.0"] = "Dogma", ["950.1"] = "Dogma's TV", ["950.2"] = "Dogma Angel", ["950.10"] = "Dogma Angel Baby", ["951.1"] = "Stalactite", ["951.2"] = "Beast Rock Projectile", ["951.3"] = "Beast Soul", ["951.10"] = "Ultra Famine", ["951.11"] = "Ultra Famine Fly", ["951.20"] = "Ultra Pestilence", ["951.21"] = "Ultra Pestilence Fly", ["951.22"] = "Ultra Pestilence Maggot", ["951.23"] = "Ultra Pestilence Fly Ball", ["951.30"] = "Ultra War", ["951.31"] = "Ultra War Bomb", ["951.40"] = "Ultra Death", ["951.41"] = "Ultra Death Scythe", ["951.42"] = "Ultra Death Head", ["951.0"] = "The Beast", ["951.100"] = "Background (Beast)", ["951.101"] = "Background (Famine)", ["951.102"] = "Background (Pestilence)", ["951.103"] = "Background (War)", ["951.104"] = "Background (Death)", ["960.0"] = "Generic Prop", ["960.1"] = "Mom's Dresser", ["960.2"] = "Mom's Vanity", ["960.3"] = "Couch", ["960.4"] = "TV", ["963.0"] = "Frozen Enemy", ["964.0"] = "Dummy", ["965.0"] = "Minecart", ["966.0"] = "Siren Helper", ["967.0"] = "Hornfel Door", ["1000.12.20"] = "Key Tear Poof", ["1000.12.21"] = "Bloody Key Tear Poof", ["1000.12.22"] = "Sword Tear Poof", ["1000.12.23"] = "Tech Sword Tear Poof", ["1000.16.66"] = "Lava Splash", ["1000.16.67"] = "Lava Splash (Large)", ["1000.50.6"] = "Big Brimstone Impact", ["1000.50.7"] = "Brimstone Impact (Poop)", ["1000.123.2"] = "Monstrance Halo", ["1000.123.3"] = "Curse Halo", ["1000.123.4"] = "Static Halo", ["1000.123.5"] = "Saturnus Halo", ["1000.123.6"] = "Thorns Halo", ["1000.123.7"] = "Static Halo (Prerendered)", ["1000.123.8"] = "Dark Arts Halo", ["1000.74.1"] = "Mom's Carpet", ["1000.74.2"] = "Mom's Carpet", ["1000.130"] = "Leech Explosion", ["1000.131"] = "Maggot Explosion", ["1000.132"] = "Big Water Splash", ["1000.132.1"] = "Static Splash", ["1000.132.2"] = "Static Splash 2", ["1000.133"] = "Water Ripple", ["1000.133.1"] = "Small Water Ripple", ["1000.134"] = "Pedestal Ripple", ["1000.135"] = "Rain Drop", ["1000.136"] = "Grid Projectile Helper", ["1000.137"] = "Wormwood Hole", ["1000.137.1"] = "Wormwood Hole Spray", ["1000.138"] = "Mist", ["1000.139"] = "Trap Door Cover", ["1000.140"] = "Backdrop Decoration", ["1000.141"] = "Smoke Cloud", ["1000.142"] = "Whirlpool", ["1000.142.1"] = "Whirlpool Particle", ["1000.143"] = "Fartwave", ["1000.144"] = "Enemy Ghost", ["1000.145"] = "Rock Tear Poof", ["1000.146"] = "Dirt Pile", ["1000.147"] = "Fire Jet", ["1000.147.1"] = "Fire Jet (purple)", ["1000.148"] = "Fire Wave", ["1000.149"] = "Big Rock Explosion", ["1000.150"] = "Big Rock Wave", ["1000.151"] = "Gideon Attract Ring", ["1000.151.1"] = "Gideon Attract Trail", ["1000.151.10"] = "Shockwave Ring", ["1000.151.11"] = "Shockwave Trail", ["1000.152"] = "Hornfel Room Controller", ["1000.153"] = "Occult Target", ["1000.154"] = "Door Outline", ["1000.39.1"] = "Moonlight", ["1000.155"] = "Slippery Brown Creep (growing)", ["1000.156"] = "Tall Ladder", ["1000.156.1"] = "Stairway", ["1000.157"] = "Willo Spawner", ["1000.158"] = "Tadpole", ["1000.159"] = "Lil Ghost", ["1000.160"] = "Bishop Shield", ["1000.161"] = "Portal Teleport", ["1000.162"] = "Heretic Pentagram", ["1000.163"] = "Chain Gib", ["1000.164"] = "Siren Ring", ["1000.165"] = "Siren Charm Effect", ["1000.165.1"] = "Siren Charm Glow", ["1000.166"] = "Sprite Trail", ["1000.167"] = "Chain Lightning", ["1000.168"] = "Colostomia Puddle", ["1000.169"] = "Creep (Static)", ["1000.170"] = "Dogma Debris", ["1000.171"] = "Dogma Blackhole", ["1000.172"] = "Dogma Orb", ["1000.173"] = "Cracked Orb Poof", ["1000.174"] = "Shop Spikes", ["1000.175"] = "Kineti Beam", ["1000.176"] = "Cleaver Slash", ["1000.177"] = "Reverse Explosion", ["1000.177.1"] = "Reverse Explosion Debris", ["1000.178"] = "Urn of Souls", ["1000.178.1"] = "Urn of Souls (Belial)", ["1000.179"] = "Enemy Soul", ["1000.179.1"] = "Enemy Soul (Belial)", ["1000.180"] = "Rift", ["1000.181"] = "Lava Spawner", ["1000.182"] = "Big Knife Projectile", ["1000.183"] = "Mother Shockwave", ["1000.184"] = "Worm Friend Snare", ["1000.185"] = "Redemption", ["1000.186"] = "Hungry Soul", ["1000.187"] = "Explosion Wave", ["1000.188"] = "Divine Intervention", ["1000.189"] = "Purgatory Rift", ["1000.189.1"] = "Purgatory Soul", ["1000.190"] = "Mother Tracer", ["1000.191"] = "Pickup Ghost", ["1000.192"] = "Fissure Spawner", ["1000.193"] = "Anima Chain", ["1000.194"] = "Dark Snare", ["1000.195"] = "Liquid Poop Creep", ["1000.196"] = "Ground Glow", ["1000.197"] = "Dead Bird", ["1000.198"] = "Generic Tracer", ["1000.199"] = "Ultra Death Scythe", ["1000.200"] = "Bullet Poof (Static)", ["1000.201"] = "Umbilical Cord Helper", } + From 76a8a2d6514bfbaee904b9dfdce0935719fbba71 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Tue, 11 Jan 2022 13:53:55 -0500 Subject: [PATCH 06/36] export entity names --- scripts/lookuptable_generator.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/scripts/lookuptable_generator.py b/scripts/lookuptable_generator.py index d343bd28..b5134942 100644 --- a/scripts/lookuptable_generator.py +++ b/scripts/lookuptable_generator.py @@ -4,6 +4,7 @@ import xml.etree.ElementTree as ET filePath = "D:\\Programme\\Steam\\steamapps\\common\\The Binding of Isaac Rebirth\\resources-dlc3\\" +# filePath = "D:\\Program Files\\Steam\\steamapps\\common\\The Binding of Isaac Rebirth\\resources-dlc3\\" # take second element for sort def sortByID(elem): @@ -15,6 +16,7 @@ itemIDToPool = {} maxItemID = 0 cardMetadatas = [] pillMetadatas = [] +entityNames = [] recipeIngredients = {} #Poop, Penny @@ -90,6 +92,19 @@ for pilleffect in pocketitemsXML.findall('pilleffect'): pillMetadatas.append({ "id": pilleffect.get('id'), "mimiccharge": pilleffect.get('mimiccharge', 0), "class":pilleffect.get('class')}) pillMetadatas.sort(key=sortByID) +# Read entities2.xml +entitiesXML = ET.parse(filePath+'entities2.xml').getroot() + +for entity in entitiesXML.findall('entity'): + theID = entity.get('id') + theName = entity.get('name') + if entity.get('variant'): + theID += "." + entity.get('variant') + if entity.get('subtype'): + theID += "." + entity.get('subtype') + if theName[0] == '#': + theName = theName[1:].replace('_',' ').title() + entityNames.append({ "id": theID, "name": theName }) #Write xml file @@ -137,9 +152,15 @@ for card in cardMetadatas: newfile.write("}\n\n") newfile.write("EID.pillMetadata = {") - - for pill in pillMetadatas: newfile.write("["+pill['id']+"] = {mimiccharge="+str(pill['mimiccharge'])+", class=\""+str(pill['class'])+"\"}, ") -newfile.write("}\n") +newfile.write("}\n\n") + + +newfile.write("--The name of each entity, for use in glitched item descriptions\n") +newfile.write("EID.XMLEntityNames = {") +for entity in entityNames: + newfile.write("[\""+entity['id']+"\"] = \""+entity['name']+"\", ") +newfile.write("}\n\n") + From e2cd42f1f230dc1ea0bc57f08c49eaf8c24cb226 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Tue, 11 Jan 2022 13:57:50 -0500 Subject: [PATCH 07/36] v0.5 --- eid_tmtrainer.lua | 117 +++++++++++++++++++++------------------------- 1 file changed, 52 insertions(+), 65 deletions(-) diff --git a/eid_tmtrainer.lua b/eid_tmtrainer.lua index 50c70247..18c08136 100644 --- a/eid_tmtrainer.lua +++ b/eid_tmtrainer.lua @@ -18,41 +18,71 @@ local logLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME local logFound = false local logCursor = 0 +local debugLogLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/tmtrainerlog.txt" +local debugLog = io.open(debugLogLocation, "w+") + --currently english only local attributeConversions = { --chain = "Then: ", chain = "", - active = "On use:#", - pickup_collected = "When you collect a pickup:#", - enemy_kill = "On kill, chance to:#", - damage_taken = "When you take damage:#", - entity_spawned = "When a {T1} is spawned, chance to:#", - tear_fire = "When you fire a tear, chance to:#", - enemy_hit = "On hitting an enemy, chance to:#", - room_clear = "On room clear:#", + active = "On use:", + pickup_collected = "When you collect a pickup:", + enemy_kill = "On kill, chance to:", + damage_taken = "When you take damage:", + entity_spawned = "When a {{ColorGray}}{T1}{{ColorText}} is spawned, chance to:", + tear_fire = "When you fire a tear, chance to:", + enemy_hit = "On hitting an enemy, chance to:", + room_clear = "On room clear:", area_damage = "Deal {1} damage in an area around you", add_temporary_effect = "Gain {1} for the room", - convert_entities = "Convert all {1} in the room to {2}", + convert_entities = "Convert all {{ColorGray}}{1}{{ColorText}} in the room to {{ColorGray}}{2}{{ColorText}}", use_active_item = "Use {1}", - spawn_entity = "Spawn a {1}", + spawn_entity = "Spawn a {{ColorGray}}{1}{{ColorText}}", fart = "Fart with size {1}", } +--999.-1? +local genericEntityNames = { + ["4.-1"] = "lit Bombs", + ["5.-1"] = "pickups", + ["5.10"] = "Hearts", + ["5.20"] = "Coins", + ["5.30"] = "Keys", + ["5.40"] = "Bomb pickups", + ["5.70"] = "Pills", + ["5.300"] = "Cards", + + ["9.-1"] = "projectiles", + ["1000.-1"] = "effects", +} + local lastEffectTrigger = "chain" +local function entityToName(e) + --local name = "" + local name = genericEntityNames[e] or EID.XMLEntityNames[e] or "NO NAME" + if name == "NO NAME" then + debugLog:write(e .. " (" .. name .. ")\n") + debugLog:flush() + end + --if name == "" then return e end + return genericEntityNames[e] or EID.XMLEntityNames[e] or name +end + local function parseEffectLine(raw) local words = {} for w in string.gmatch(raw,"%S+") do table.insert(words, w) end local triggerReplacements = {} local replacements = {} + local printEffect = true -- words[1] = "[INFO]", words[2] = "-" local effectTrigger = words[3] if (string.find(effectTrigger, "entity_spawned")) then effectTrigger = "entity_spawned" - triggerReplacements[1] = string.sub(words[3], 16, -2) + triggerReplacements[1] = entityToName(string.sub(words[3], 16, -2)) end -- words[4] = "->" local effectType = words[5] @@ -72,22 +102,21 @@ local function parseEffectLine(raw) replacements[1] = "{{Collectible" .. Isaac.GetItemIdByName(name) .. "}}" .. name elseif effectType == "convert_entities" then - --figure out how to convert entity numbers - replacements[1] = words[6] - replacements[2] = words[8] + replacements[1] = entityToName(words[6]) + replacements[2] = entityToName(words[8]) elseif effectType == "spawn_entity" then - replacements[1] = words[6] + replacements[1] = entityToName(words[6]) elseif effectType == "fart" then replacements[1] = words[6] elseif effectType == "area_damage" then - --I could check for 0 damage here and not show it --It also has flags in words[8] but they don't seem very useful, usually all zeroes replacements[1] = words[6] + if words[6] == "0" then printEffect = false end end local eidString = "" - if effectTrigger ~= lastEffectTrigger then eidString = eidString .. (attributeConversions[effectTrigger] or (effectTrigger .. "#")) end - eidString = eidString .. (attributeConversions[effectType] or fullEffect) .. extraText .. "#" + if effectTrigger ~= lastEffectTrigger then eidString = eidString .. (attributeConversions[effectTrigger] or effectTrigger) .. "#" end + if printEffect then eidString = eidString .. (attributeConversions[effectType] or fullEffect) .. extraText .. "#" end for k,v in ipairs(triggerReplacements) do eidString = string.gsub(eidString, "{T" .. k .. "}", v) end for k,v in ipairs(replacements) do eidString = string.gsub(eidString, "{" .. k .. "}", v) end @@ -95,38 +124,16 @@ local function parseEffectLine(raw) return eidString end ---SOMETHING SCREWY WITH GLOWING HOURGLASS - -local function CountLogItems() - local theLog = io.open(logLocation, "r") - theLog:seek("set", logCursor) - - local itemCount = 0 - - local line = theLog:read() - while line ~= nil do - if string.find(line, "initialized with") then - itemCount = itemCount + 1 - end - line = theLog:read() - end - - theLog:close() - return itemCount -end - local function CheckLogForItems(_) if (not logFound or game:GetFrameCount() % 5 ~= 0 or not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER)) then return end local numEffects = 0 local itemScore = 0 - local effects = {} local eidDesc = "" local theLog = io.open(logLocation, "r") theLog:seek("set", logCursor) - local logLines = {} local line = theLog:read() while line ~= nil do if string.find(line, "initialized with") then @@ -134,27 +141,19 @@ local function CheckLogForItems(_) spawnedItems = spawnedItems + 1 lastEffectTrigger = "chain" eidDesc = "" - -- find the number of effects, and the score given - -- (this match gets every number in the line) + -- find the number of effects to watch for for s in string.gmatch(line, "%d*%.?%d+") do - if count == 0 then - numEffects = tonumber(s) - count = 1 - elseif count == 1 then - itemScore = tonumber(s) - end + numEffects = tonumber(s) + break end elseif numEffects > 0 then numEffects = numEffects - 1 - table.insert(effects, line) eidDesc = eidDesc .. parseEffectLine(line) - -- also display the unparsed line for debug purposes (REMOVE THIS) - --eidDesc = eidDesc .. "(" .. line .. ")#" if numEffects == 0 then -- Glowing Hour Glass type effects will cause the game to reload all items, check if our desc is equal to the first one if (EID:getDescriptionObj(5, 100, maxNumber - 1).Description == eidDesc) then spawnedItems = 1 end EID:addCollectible(maxNumber - spawnedItems, eidDesc) - print("adding " .. (maxNumber - spawnedItems)) + --print("adding " .. (maxNumber - spawnedItems)) end end @@ -166,8 +165,6 @@ local function CheckLogForItems(_) end EID:AddCallback(ModCallbacks.MC_POST_UPDATE, CheckLogForItems) --- figure out where to resume loading item descriptions when continuing a file --- unfortunately, I'm not bothering to save descriptions if you close the game local function GameStartTMTRAINER(_,isSave) local theLog = io.open(logLocation, "r") if (theLog == nil) then @@ -177,17 +174,7 @@ local function GameStartTMTRAINER(_,isSave) else logFound = true end + spawnedItems = 0 - --[[if isSave then - -- check what item ID we're on - local config = Isaac.GetItemConfig() - while config:GetCollectible(maxNumber - spawnedItems - 1) ~= nil do - spawnedItems = spawnedItems + 1 - end - -- if we exit and reload in a room with a new pedestal to spawn, that item's info is grabbable but spawnedItems would be too high - spawnedItems = spawnedItems - CountLogItems() - - print("resuming at " .. (maxNumber - spawnedItems - 1)) - end]] end EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, GameStartTMTRAINER) From e1bb22a72251a6db14f48e37136907fee6134dd0 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Wed, 12 Jan 2022 04:44:32 -0500 Subject: [PATCH 08/36] v0.6 --- eid_tmtrainer.lua | 106 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 86 insertions(+), 20 deletions(-) diff --git a/eid_tmtrainer.lua b/eid_tmtrainer.lua index 18c08136..8a7ad49a 100644 --- a/eid_tmtrainer.lua +++ b/eid_tmtrainer.lua @@ -21,18 +21,26 @@ local logCursor = 0 local debugLogLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/tmtrainerlog.txt" local debugLog = io.open(debugLogLocation, "w+") +-- all possible attributes +--local itemConfigItemAttributes = { "AchievementID", "AddBlackHearts", "AddBombs", "AddCoins", "AddHearts", "AddKeys", "AddMaxHearts", "AddSoulHearts", "CacheFlags", "ChargeType", "ClearEffectsOnRemove", "Costume", "Description", "DevilPrice", "Discharged", "GfxFileName", "Hidden", "ID", "InitCharge", "MaxCharges", "MaxCooldown", "Name", "PassiveCache", "PersistentEffect", "Quality", "ShopPrice", "Special", "Tags", "Type" } +-- the traits here will be listed in this order +local itemConfigItemAttributes = { "AddMaxHearts", "AddHearts", "AddSoulHearts", "AddBlackHearts", "AddBombs", "AddCoins", "AddKeys", "CacheFlags" } +local cacheFlagNames = { [0] = "Damage", "Fire Delay", "Shot Speed", "Range", "Speed", "Tear Effects", "Tear Color", "Flying", "Weapon", "Familiars", "Luck", "Size", "Color", "Pickup Vision", [16] = "All Stats" } + +-- cache flags: math.pow(2, i) | flags ~= 0 + --currently english only local attributeConversions = { --chain = "Then: ", chain = "", active = "On use:", - pickup_collected = "When you collect a pickup:", + pickup_collected = "When you collect a pickup:", --chance to? enemy_kill = "On kill, chance to:", - damage_taken = "When you take damage:", + damage_taken = "When you take damage:", --chance to? entity_spawned = "When a {{ColorGray}}{T1}{{ColorText}} is spawned, chance to:", tear_fire = "When you fire a tear, chance to:", enemy_hit = "On hitting an enemy, chance to:", - room_clear = "On room clear:", + room_clear = "On room clear:", --chance to? area_damage = "Deal {1} damage in an area around you", add_temporary_effect = "Gain {1} for the room", @@ -40,34 +48,52 @@ local attributeConversions = { use_active_item = "Use {1}", spawn_entity = "Spawn a {{ColorGray}}{1}{{ColorText}}", fart = "Fart with size {1}", + + AddBlackHearts = "{1} Black Heart", + AddBombs = "{1} Bomb", + AddCoins = "{1} Coin", + AddHearts = "Heals {1} Red Heart", + AddKeys = "{1} Key", + AddMaxHearts = "{1} Heart Container", + AddSoulHearts = "{1} Soul Heart", + } --999.-1? +--1000.50: Laser Impact? It couldn't find that? local genericEntityNames = { - ["4.-1"] = "lit Bombs", - ["5.-1"] = "pickups", - ["5.10"] = "Hearts", - ["5.20"] = "Coins", - ["5.30"] = "Keys", - ["5.40"] = "Bomb pickups", - ["5.70"] = "Pills", - ["5.300"] = "Cards", + ["2.-1"] = "tear", + ["4.-1"] = "lit Bomb", + ["5.-1"] = "pickup", + ["5.10"] = "Heart", + ["5.20"] = "Coin", + ["5.30"] = "Key", + ["5.40"] = "Bomb pickup", + ["5.69"] = "Grab Bag", + ["5.70"] = "Pill", + ["5.300"] = "Card", - ["9.-1"] = "projectiles", - ["1000.-1"] = "effects", + ["9.-1"] = "projectile", + ["999.-1"] = "grid-aligned object", + ["1000.0"] = "effect", } local lastEffectTrigger = "chain" -local function entityToName(e) - --local name = "" - local name = genericEntityNames[e] or EID.XMLEntityNames[e] or "NO NAME" +local function entityToName(e, plural) + -- -1 is often used as an "any of this type", so converting it to 0 can help + local eWithZero = string.gsub(e, "-1", "0") + plural = plural or false + local name = genericEntityNames[e] or EID.XMLEntityNames[e] or genericEntityNames[eWithZero] or EID.XMLEntityNames[eWithZero] or "NO NAME" if name == "NO NAME" then - debugLog:write(e .. " (" .. name .. ")\n") + debugLog:write(e .. "\n") debugLog:flush() + print(e) + elseif plural then + name = name .. "s" end - --if name == "" then return e end - return genericEntityNames[e] or EID.XMLEntityNames[e] or name + if name == "NO NAME" then return e end + return name end local function parseEffectLine(raw) @@ -102,7 +128,7 @@ local function parseEffectLine(raw) replacements[1] = "{{Collectible" .. Isaac.GetItemIdByName(name) .. "}}" .. name elseif effectType == "convert_entities" then - replacements[1] = entityToName(words[6]) + replacements[1] = entityToName(words[6], true) replacements[2] = entityToName(words[8]) elseif effectType == "spawn_entity" then replacements[1] = entityToName(words[6]) @@ -152,6 +178,46 @@ local function CheckLogForItems(_) if numEffects == 0 then -- Glowing Hour Glass type effects will cause the game to reload all items, check if our desc is equal to the first one if (EID:getDescriptionObj(5, 100, maxNumber - 1).Description == eidDesc) then spawnedItems = 1 end + + -- check for the item's ItemConfig attributes + local config = Isaac.GetItemConfig() + local item = config:GetCollectible(maxNumber - spawnedItems) + print(item) + debugLog:write((maxNumber - spawnedItems) .. "\n") + local attributes = "" + for k,v in ipairs(itemConfigItemAttributes) do + local attrib = item[v] + if attrib ~= 0 then + if (v == "CacheFlags") then + local flagString = "Might affect " + if attrib == CacheFlag.CACHE_ALL then + flagString = flagString .. cacheFlagNames[16] + else + for i=0, 13 do + if 2^i & attrib ~= 0 then + flagString = flagString .. cacheFlagNames[i] .. ", " + end + end + flagString = string.sub(flagString, 0, -3) + end + attributes = attributes .. flagString .. "#" + else + -- the Add Heart attributes count half a heart as 1, so divide the value in half + if string.find(v, "Hearts") then attrib = attrib / 2 end + -- the g flag removes .0 in numbers like 1.0 (caused by the hearts division) + local s = string.format("%.4g",attrib) + if attrib > 0 then s = "+" .. s end + attributes = attributes .. string.gsub(attributeConversions[v], "{1}", s) + --things like this don't localize well at all... + if attrib > 1 or attrib < -1 then attributes = attributes .. "s" end + attributes = attributes .. "#" + end + end + debugLog:write(v .. ": " .. tostring(item[v]) .. "\n") + end + eidDesc = attributes .. eidDesc + debugLog:flush() + EID:addCollectible(maxNumber - spawnedItems, eidDesc) --print("adding " .. (maxNumber - spawnedItems)) end From b2b927f1b1a4fb14a7fe21777738cb95808bc004 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Wed, 12 Jan 2022 21:55:12 -0500 Subject: [PATCH 09/36] Don't include the SubType if it's 0 --- eid_xmldata.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eid_xmldata.lua b/eid_xmldata.lua index 1ead3504..a25c18dd 100644 --- a/eid_xmldata.lua +++ b/eid_xmldata.lua @@ -51,5 +51,5 @@ EID.cardMetadata = {[0] = {mimiccharge=0}, [1] = {mimiccharge=2}, [10] = {mimicc EID.pillMetadata = {[0] = {mimiccharge=1, class="1+"}, [1] = {mimiccharge=2, class="2-"}, [10] = {mimiccharge=6, class="2+"}, [11] = {mimiccharge=4, class="3-"}, [12] = {mimiccharge=6, class="3+"}, [13] = {mimiccharge=4, class="3-"}, [14] = {mimiccharge=6, class="3+"}, [15] = {mimiccharge=4, class="3-"}, [16] = {mimiccharge=6, class="3+"}, [17] = {mimiccharge=4, class="3-"}, [18] = {mimiccharge=6, class="3+"}, [19] = {mimiccharge=1, class="1"}, [2] = {mimiccharge=12, class="2+"}, [20] = {mimiccharge=12, class="2+"}, [21] = {mimiccharge=6, class="2"}, [22] = {mimiccharge=6, class="1-"}, [23] = {mimiccharge=4, class="2+"}, [24] = {mimiccharge=2, class="1+"}, [25] = {mimiccharge=6, class="2-"}, [26] = {mimiccharge=3, class="1+"}, [27] = {mimiccharge=6, class="1-"}, [28] = {mimiccharge=2, class="1+"}, [29] = {mimiccharge=6, class="1-"}, [3] = {mimiccharge=1, class="2"}, [30] = {mimiccharge=2, class="0"}, [31] = {mimiccharge=6, class="1-"}, [32] = {mimiccharge=6, class="1"}, [33] = {mimiccharge=6, class="1"}, [34] = {mimiccharge=2, class="1+"}, [35] = {mimiccharge=2, class="1+"}, [36] = {mimiccharge=3, class="1+"}, [37] = {mimiccharge=6, class="1-"}, [38] = {mimiccharge=1, class="1+"}, [39] = {mimiccharge=1, class="0-"}, [4] = {mimiccharge=3, class="1"}, [40] = {mimiccharge=1, class="0+"}, [41] = {mimiccharge=3, class="1"}, [42] = {mimiccharge=6, class="1"}, [43] = {mimiccharge=4, class="2+"}, [44] = {mimiccharge=1, class="0"}, [45] = {mimiccharge=1, class="1+"}, [46] = {mimiccharge=6, class="2+"}, [47] = {mimiccharge=4, class="3-"}, [48] = {mimiccharge=6, class="3+"}, [49] = {mimiccharge=3, class="3"}, [5] = {mimiccharge=12, class="2+"}, [6] = {mimiccharge=4, class="3-"}, [7] = {mimiccharge=6, class="3+"}, [8] = {mimiccharge=1, class="0"}, [9] = {mimiccharge=1, class="0"}, } --The name of each entity, for use in glitched item descriptions -EID.XMLEntityNames = {["1.0"] = "Player", ["1.1"] = "Coplayer", ["2.0"] = "Tear", ["2.1"] = "Blood Tear", ["2.2"] = "Tooth Tear", ["2.3"] = "Metallic Tear", ["2.4"] = "Bobs Head Tear", ["2.5"] = "Fire Tear", ["2.6"] = "Dark Matter Tear", ["2.7"] = "Mysterious Tear", ["2.8"] = "Scythe Tear", ["2.9"] = "Chaos Card Tear", ["2.10"] = "Chaos Card Tear", ["2.11"] = "Tear", ["2.12"] = "Blood Tear", ["2.13"] = "Nail Tear", ["2.14"] = "Pupula Tear", ["2.15"] = "Pupula Blood Tear", ["2.16"] = "God's Flesh Tear", ["2.17"] = "God's Flesh Blood Tear", ["2.18"] = "Diamond Tear", ["2.19"] = "Explosivo Tear", ["2.20"] = "Coin Tear", ["2.21"] = "Multidimensional Tear", ["2.22"] = "Stone Tear", ["2.23"] = "Nail Blood Tear", ["2.24"] = "Glaucoma Tear", ["2.25"] = "Glaucoma Blood Tear", ["2.26"] = "Booger Tear", ["2.27"] = "Egg Tear", ["2.28"] = "Razor Tear", ["2.29"] = "Bone Tear", ["2.30"] = "Black Tooth Tear", ["2.31"] = "Needle Tear", ["2.32"] = "Belial Tear", ["2.33"] = "Pop Tear", ["2.34"] = "Pop Blood Tear", ["2.35"] = "Balloon Tear", ["2.36"] = "Hungry Tear", ["2.37"] = "Brimstone Balloon Tear", ["2.38"] = "Bomb Balloon Tear", ["3.1"] = "Brother Bobby", ["3.2"] = "Demon Baby", ["3.3"] = "Little Chubby", ["3.4"] = "Little Gish", ["3.5"] = "Little Steve", ["3.6"] = "Robo-Baby", ["3.7"] = "Sister Maggy", ["3.8"] = "Abel", ["3.9"] = "Ghost Baby", ["3.10"] = "Harlequin Baby", ["3.11"] = "Rainbow Baby", ["3.12"] = "Isaacs Head", ["3.13"] = "Blue Baby Soul", ["3.14"] = "Dead Bird", ["3.15"] = "Eves Bird Foot", ["3.16"] = "Daddys Foot", ["3.17"] = "Peepers Eye", ["3.20"] = "Bomb Bag", ["3.21"] = "Sack of Pennies", ["3.22"] = "Little C.H.A.D.", ["3.23"] = "The Relic", ["3.24"] = "Bum Fiend", ["3.25"] = "Holy Water", ["3.26"] = "Key Piece 1", ["3.27"] = "Key Piece 2", ["3.28"] = "Full Key", ["3.30"] = "Forever Alone", ["3.31"] = "Distant Admiration", ["3.32"] = "Guardian Angel", ["3.33"] = "Fly Orbital", ["3.35"] = "Sacrificial Dagger", ["3.40"] = "Dead Cat", ["3.41"] = "1UP", ["3.42"] = "Guppys Hair Ball", ["3.43"] = "Attack Fly", ["3.44"] = "Cube of Meat L1", ["3.45"] = "Cube of Meat L2", ["3.46"] = "Cube of Meat L3", ["3.47"] = "Cube of Meat L4", ["3.48"] = "Isaacs Body", ["3.50"] = "Smart Fly", ["3.51"] = "Dry Baby", ["3.52"] = "Juicy Sack", ["3.53"] = "Robo-Baby 2.0", ["3.54"] = "Rotten Baby", ["3.55"] = "Headless Baby", ["3.56"] = "Leech", ["3.57"] = "Mystery Sack", ["3.58"] = "BBF", ["3.59"] = "Bob's Brain", ["3.60"] = "Best Bud", ["3.61"] = "Lil' Brimstone", ["3.62"] = "Isaac's Heart", ["3.63"] = "Lil' Haunt", ["3.64"] = "Dark Bum", ["3.65"] = "Big Fan", ["3.66"] = "Sissy Longlegs", ["3.67"] = "Punching Bag", ["3.68"] = "Guillotine", ["3.69"] = "Ball of Bandages L1", ["3.70"] = "Ball of Bandages L2", ["3.71"] = "Ball of Bandages L3", ["3.72"] = "Ball of Bandages L4", ["3.73"] = "Blue Spider", ["3.74"] = "Mongo Baby", ["3.75"] = "Samson's Chains", ["3.78"] = "Scissors", ["3.79"] = "Gemini Familiar", ["3.76"] = "Cain's Eye", ["3.77"] = "???'s Only Friend", ["3.80"] = "Incubus", ["3.81"] = "Fate's Reward", ["3.82"] = "Lil Chest", ["3.83"] = "Sworn Protector", ["3.84"] = "Friend Zone", ["3.85"] = "Lost Fly", ["3.86"] = "Charged Baby", ["3.87"] = "Lil Gurdy", ["3.88"] = "Bumbo", ["3.89"] = "Censer", ["3.90"] = "Key Bum", ["3.91"] = "Rune Bag", ["3.92"] = "Seraphim", ["3.93"] = "GB Bug", ["3.94"] = "Spider Mod", ["3.95"] = "Farting Baby", ["3.96"] = "Succubus", ["3.97"] = "Lil Loki", ["3.98"] = "Obsessed Fan", ["3.99"] = "Papa Fly", ["3.100"] = "Milk!", ["3.101"] = "Multidimensional Baby", ["3.102"] = "Super Bum", ["3.103"] = "Tonsil", ["3.104"] = "Big Chubby", ["3.105"] = "Depression", ["3.106"] = "Shade", ["3.107"] = "Hushy", ["3.108"] = "Lil Monstro", ["3.109"] = "King Baby", ["3.110"] = "Finger!", ["3.111"] = "YO LISTEN!", ["3.112"] = "Acid Baby", ["3.113"] = "Spider Baby", ["3.114"] = "Sack of Sacks", ["3.115"] = "Brown Nugget", ["3.116"] = "Bloodshot Eye", ["3.117"] = "Mom's Razor", ["3.118"] = "Angry Fly", ["3.119"] = "Box Buddy", ["3.120"] = "Sprinkler", ["3.121"] = "Leprocy", ["3.122"] = "Lil Harbingers", ["3.123"] = "Angelic Prism", ["3.124"] = "Mystery Egg", ["3.125"] = "Lil Spewer", ["3.126"] = "Slipped Rib", ["3.127"] = "Pointy Rib", ["3.128"] = "Bone Orbital", ["3.129"] = "Hallowed Ground", ["3.130"] = "Jaw Bone", ["3.900"] = "Forgotten Body", ["4.0"] = "Bomb", ["4.1"] = "Big Bomb", ["4.2"] = "Decoy", ["4.3"] = "Troll Bomb", ["4.4"] = "Megatroll Bomb", ["4.5"] = "Poison Bomb", ["4.6"] = "Big Poison Bomb", ["4.7"] = "Sad Bomb", ["4.8"] = "Hot Bomb", ["4.9"] = "Butt Bomb", ["4.10"] = "Mr. Mega Bomb", ["4.11"] = "Bobby Bomb", ["4.12"] = "Glitter Bomb", ["5.10.1"] = "Heart", ["5.10.2"] = "Heart (half)", ["5.10.3"] = "Heart (soul)", ["5.10.4"] = "Heart (eternal)", ["5.10.5"] = "Heart (double)", ["5.10.6"] = "Black Heart", ["5.10.7"] = "Gold Heart", ["5.10.8"] = "Heart (half soul)", ["5.10.9"] = "Scared Heart", ["5.10.10"] = "Blended Heart", ["5.10.11"] = "Bone Heart", ["5.20.1"] = "Penny", ["5.20.2"] = "Nickel", ["5.20.3"] = "Dime", ["5.20.4"] = "Double Penny", ["5.20.5"] = "Lucky Penny", ["5.20.6"] = "Sticky Nickel", ["5.30.1"] = "Key", ["5.30.2"] = "Golden Key", ["5.30.3"] = "Key Ring", ["5.30.4"] = "Charged Key", ["5.40.1"] = "Bomb", ["5.40.2"] = "Double Bomb", ["5.40.3"] = "Troll Bomb", ["5.40.4"] = "Golden Bomb", ["5.40.5"] = "Megatroll Bomb", ["5.90.1"] = "Lil' Battery", ["5.90.2"] = "Micro Battery", ["5.50"] = "Chest", ["5.51"] = "Bomb Chest", ["5.52"] = "Spiked Chest", ["5.53"] = "Eternal Chest", ["5.54"] = "Mimic Chest", ["5.60"] = "Locked Chest", ["5.69.1"] = "Grab Bag", ["5.70.1"] = "Pill Blue-Blue", ["5.70.2"] = "Pill White-Blue", ["5.70.3"] = "Pill Orange-Orange", ["5.70.4"] = "Pill White-White", ["5.70.5"] = "Pill Dots-Red", ["5.70.6"] = "Pill Pink-Red", ["5.70.7"] = "Pill Blue-Cadetblue", ["5.70.8"] = "Pill Yellow-Orange", ["5.70.9"] = "Pill Dots-White", ["5.70.10"] = "Pill White-Azure", ["5.70.11"] = "Pill Black-Yellow", ["5.70.12"] = "Pill White-Black", ["5.70.13"] = "Pill White-Yellow", ["5.100"] = "Collectible", ["5.110"] = "Broken Shovel", ["5.150"] = "Shop Item", ["5.300.0"] = "Tarot Card", ["5.300.1"] = "Tarot Card", ["5.300.2"] = "Suit Card", ["5.300.3"] = "Rune#1", ["5.300.4"] = "Rune#2", ["5.300.5"] = "Emergency Contact", ["5.300.6"] = "Dice Shard", ["5.300.7"] = "Black Rune", ["5.300.8"] = "Magic Card", ["5.300.9"] = "Card Against Humanity", ["5.300.10"] = "Credit Card", ["5.300.11"] = "Holy Card", ["5.300.12"] = "Chance Card", ["5.300.13"] = "Rune Shard", ["5.340"] = "Big Chest", ["5.350"] = "Trinket", ["5.360"] = "Red Chest", ["5.370"] = "Challenge Trophy", ["5.380"] = "Isaac's Bed", ["6.1"] = "Slot Machine", ["6.2"] = "Blood Donation Machine", ["6.3"] = "Fortune Telling Machine", ["6.4"] = "Beggar", ["6.5"] = "Devil Beggar", ["6.6"] = "Shell Game", ["6.7"] = "Key Master", ["6.8"] = "Donation Machine", ["6.9"] = "Bomb Bum", ["6.10"] = "Shop Restock Machine", ["6.11"] = "Greed Donation Machine", ["6.12"] = "Mom's Dressing Table", ["7.1"] = "Laser (Thick Red)", ["7.1.3"] = "Laser (Thick Dark)", ["7.2"] = "Laser (Thin Red)", ["7.3"] = "Laser (Shoop da Whoop)", ["7.4"] = "Laser (Pride)", ["7.5"] = "Laser (Light Beam)", ["7.6"] = "Laser (Giant Red)", ["7.7"] = "Tractor Beam", ["7.8"] = "Light Ring", ["7.9"] = "Laser (Brimtech)", ["7.10"] = "Laser (Electric)", ["8.0"] = "Moms Knife", ["8.1"] = "Bone Club", ["8.2"] = "Bone Scythe", ["8.9"] = "Notched Axe", ["9.0"] = "Projectile", ["9.1"] = "Projectile", ["9.2"] = "Purple Fire Projectile", ["9.3"] = "Puke Projectile", ["9.4"] = "Tear Projectile", ["9.5"] = "Corn Projectile", ["9.6"] = "Hush Projectile", ["9.7"] = "Coin Projectile", ["9.12"] = "Steven Projectile", ["10.0"] = "Frowning Gaper", ["10.1"] = "Gaper", ["10.2"] = "Flaming Gaper", ["11.0"] = "Gusher", ["11.1"] = "Pacer", ["12.0"] = "Horf", ["13.0"] = "Fly", ["14.0"] = "Pooter", ["14.1"] = "Super Pooter", ["15.0"] = "Clotty", ["15.1"] = "Clot", ["15.2"] = "Iblob", ["16.0"] = "Mulligan", ["16.1"] = "Mulligoon", ["16.2"] = "Mulliboom", ["17.0"] = "Shopkeeper", ["17.1"] = "Secret Room Keeper", ["17.2"] = "Error Room Keeper", ["17.3"] = "Special Shopkeeper", ["17.4"] = "Special Secret Room Keeper", ["18.0"] = "Attack Fly", ["19.0"] = "Larry Jr", ["19.1"] = "The Hollow", ["20.0"] = "Monstro", ["21.0"] = "Maggot", ["22.0"] = "Hive", ["22.1"] = "Drowned Hive", ["23.0"] = "Charger", ["23.0.1"] = "My Shadow", ["23.1"] = "Drowned Charger", ["23.2"] = "Dank Charger", ["24.0"] = "Globin", ["24.1"] = "Gazing Globin", ["24.2"] = "Dank Globin", ["25.0"] = "Boom Fly", ["25.1"] = "Red Boom Fly", ["25.2"] = "Drowned Boom Fly", ["26.0"] = "Maw", ["26.1"] = "Red Maw", ["26.2"] = "Psychic Maw", ["27.0"] = "Host", ["27.1"] = "Red Host", ["28.0"] = "Chub", ["28.1"] = "Chad", ["28.2"] = "The Carrion Queen", ["29.0"] = "Hopper", ["29.1"] = "Trite", ["30.0"] = "Boil", ["30.1"] = "Gut", ["30.2"] = "Sack", ["31.0"] = "Spitty", ["32.0"] = "Brain", ["33.0"] = "Fire Place", ["33.1"] = "Red Fire Place", ["33.2"] = "Blue Fire Place", ["33.3"] = "Purple Fire Place", ["34.0"] = "Leaper", ["35.0"] = "Mr Maw", ["35.1"] = "Mr Maw Head", ["35.2"] = "Mr Red Maw", ["35.3"] = "Mr Red Maw Head", ["35.10"] = "Mr. Maw Neck", ["36.0"] = "Gurdy", ["38.0"] = "Baby", ["38.1"] = "Angelic Baby", ["38.2"] = "Ultra Pride Baby", ["39.0"] = "Vis", ["39.1"] = "Double Vis", ["39.2"] = "Chubber", ["39.22"] = "Chubber Projectile", ["39.3"] = "Scarred Double Vis", ["40.0"] = "Guts", ["40.1"] = "Scarred Guts", ["41.0"] = "Knight", ["41.1"] = "Selfless Knight", ["42.0"] = "Stone Grimace", ["42.1"] = "Vomit Grimace", ["43.0"] = "Monstro Ii", ["43.1"] = "Gish", ["44.0"] = "Poky", ["44.1"] = "Slide", ["45.0"] = "Mom", ["45.10"] = "Mom Stomp", ["46.0"] = "Sloth", ["46.1"] = "Super Sloth", ["46.2"] = "Ultra Pride", ["47.0"] = "Lust", ["47.1"] = "Super Lust", ["48.0"] = "Wrath", ["48.1"] = "Super Wrath", ["49.0"] = "Gluttony", ["49.1"] = "Super Gluttony", ["50.0"] = "Greed", ["50.1"] = "Super Greed", ["51.0"] = "Envy", ["51.10"] = "Envy (big)", ["51.20"] = "Envy (medium)", ["51.30"] = "Envy (small)", ["51.1"] = "Super Envy", ["51.11"] = "Super Envy (big)", ["51.21"] = "Super Envy (medium)", ["51.31"] = "Super Envy (small)", ["52.0"] = "Pride", ["52.1"] = "Super Pride", ["53.0"] = "Dople", ["53.1"] = "Evil Twin", ["54.0"] = "Flaming Hopper", ["55.0"] = "Leech", ["55.1"] = "Kamikaze Leech", ["55.2"] = "Holy Leech", ["56.0"] = "Lump", ["57.0"] = "Membrain", ["57.1"] = "Mama Guts", ["58.0"] = "Parabite", ["58.1"] = "Scarred Parabite", ["59.0"] = "Fred", ["60.0"] = "Eye", ["60.1"] = "Bloodshot Eye", ["61.0"] = "Sucker", ["61.1"] = "Spit", ["61.2"] = "Soul Sucker", ["62.0"] = "Pin", ["62.1"] = "Scolex", ["62.2"] = "The Frail", ["63.0"] = "Famine", ["64.0"] = "Pestilence", ["65.0"] = "War", ["65.1"] = "Conquest", ["65.10"] = "War without horse", ["66.0"] = "Death", ["66.10"] = "Death Scythe", ["66.20"] = "Death Horse", ["66.30"] = "Death without horse", ["67.0"] = "The Duke Of Flies", ["67.1"] = "The Husk", ["68.0"] = "Peep", ["68.1"] = "The Bloat", ["68.10"] = "Peep Eye", ["68.11"] = "Bloat Eye", ["69.0"] = "Loki", ["69.1"] = "Lokii", ["71.0"] = "Fistula", ["71.1"] = "Teratoma", ["72.0"] = "Fistula Medium", ["72.1"] = "Teratoma Medium", ["73.0"] = "Fistula Small", ["73.1"] = "Teratoma Small", ["74.0"] = "Blastocyst", ["75.0"] = "Blastocyst Medium", ["76.0"] = "Blastocyst Small", ["77.0"] = "Embryo", ["78.0"] = "Moms Heart", ["78.1"] = "It Lives", ["78.10"] = "Moms Guts", ["79.0"] = "Gemini", ["79.1"] = "Steven", ["79.2"] = "The Blighted Ovum", ["79.10"] = "Gemini Baby", ["79.11"] = "Steven Baby", ["79.12"] = "The Blighted Ovum Baby", ["79.20"] = "Umbilical Cord", ["80.0"] = "Moter", ["81.0"] = "The Fallen", ["81.1"] = "Krampus", ["82.0"] = "Headless Horseman", ["83.0"] = "Headless Horsemans Head", ["84.0"] = "Satan", ["84.10"] = "Satan Stomp", ["85.0"] = "Spider", ["86.0"] = "Keeper", ["87.0"] = "Gurgle", ["88.0"] = "Walking Boil", ["88.1"] = "Walking Gut", ["88.2"] = "Walking Sack", ["89.0"] = "Buttlicker", ["90.0"] = "Hanger", ["91.0"] = "Swarmer", ["92.0"] = "Heart", ["93.0"] = "Mask", ["94.0"] = "Big Spider", ["96.0"] = "Eternal Fly", ["97.0"] = "Mask Of Infamy", ["98.0"] = "Heart Of Infamy", ["99.0"] = "Gurdy Jr", ["100.0"] = "Widow", ["100.1"] = "The Wretched", ["101.0"] = "Daddy Long Legs", ["101.1"] = "Triachnid", ["102.0"] = "Isaac", ["102.1"] = "Bluebaby", ["102.2"] = "??? (Alt)", ["201.0"] = "Stone Eye", ["202.0"] = "Constant Stone Shooter", ["202.10"] = "Cross Stone Shooter", ["202.10.1"] = "Cross Stone Shooter", ["202.11"] = "Cross Stone Shooter (always on)", ["202.11.1"] = "Cross Stone Shooter (always on)", ["203.0"] = "Brimstone Head", ["204.0"] = "Mobile Host", ["205.0"] = "Nest", ["206.0"] = "Baby Long Legs", ["206.1"] = "Small Baby Long Legs", ["207.0"] = "Crazy Long Legs", ["207.1"] = "Small Crazy Long Legs", ["208.0"] = "Fatty", ["208.1"] = "Pale Fatty", ["208.2"] = "Flaming Fatty", ["209.0"] = "Fat Sack", ["210.0"] = "Blubber", ["211.0"] = "Half Sack", ["212.0"] = "Deaths Head", ["212.1"] = "Dank Deaths Head", ["213.0"] = "Moms Hand", ["214.0"] = "Level 2 Fly", ["215.0"] = "Level 2 Spider", ["216.0"] = "Swinger", ["216.1"] = "Swinger Head", ["216.10"] = "Swinger Neck", ["217.0"] = "Dip", ["217.1"] = "Corn", ["217.2"] = "Brownie Corn", ["218.0"] = "Wall Hugger", ["219.0"] = "Wizoob", ["220.0"] = "Squirt", ["220.1"] = "Dank Squirt", ["221.0"] = "Cod Worm", ["222.0"] = "Ring Fly", ["223.0"] = "Dinga", ["224.0"] = "Oob", ["225.0"] = "Black Maw", ["226.0"] = "Skinny", ["226.1"] = "Rotty", ["226.2"] = "Crispy", ["227.0"] = "Bony", ["228.0"] = "Homunculus", ["228.10"] = "Homunculus Cord", ["229.0"] = "Tumor", ["230.0"] = "Camillo Jr", ["231.0"] = "Nerve Ending", ["231.1"] = "Nerve Ending 2", ["234.0"] = "One Tooth", ["235.0"] = "Gaping Maw", ["236.0"] = "Broken Gaping Maw", ["237.0"] = "Gurgling", ["237.1"] = "Gurgling Boss", ["237.2"] = "Turdling", ["238.0"] = "Splasher", ["239.0"] = "Grub", ["240.0"] = "Wall Creep", ["241.0"] = "Rage Creep", ["242.0"] = "Blind Creep", ["243.0"] = "Conjoined Spitty", ["244.0"] = "Round Worm", ["244.1"] = "Tube Worm", ["245.0"] = "Poop", ["246.0"] = "Ragling", ["246.1"] = "Rag Man's Ragling", ["247.0"] = "Flesh Mobile Host", ["248.0"] = "Psychic Horf", ["249.0"] = "Full Fly", ["250.0"] = "Ticking Spider", ["251.0"] = "Begotten", ["251.10"] = "Begotten Chain", ["252.0"] = "Nulls", ["253.0"] = "Psy Tumor", ["254.0"] = "Floating Knight", ["255.0"] = "Night Crawler", ["256.0"] = "Dart Fly", ["257.0"] = "Conjoined Fatty", ["257.1"] = "Blue Conjoined Fatty", ["258.0"] = "Fat Bat", ["259.0"] = "Imp", ["260.0"] = "Haunt", ["260.10"] = "Lil Haunt", ["261.0"] = "Dingle", ["261.1"] = "Dangle", ["262.0"] = "Mega Maw", ["263.0"] = "The Gate", ["264.0"] = "Mega Fatty", ["265.0"] = "The Cage", ["266.0"] = "Mama Gurdy", ["266.1"] = "Mama Gurdy Left Hand", ["266.2"] = "Mama Gurdy Right Hand", ["267.0"] = "Dark One", ["268.0"] = "The Adversary", ["269.0"] = "Polycephalus", ["270.0"] = "Mr Fred", ["271.0"] = "Uriel", ["271.1"] = "Fallen Uriel", ["272.0"] = "Gabriel", ["272.1"] = "Fallen Gabriel", ["273.0"] = "The Lamb", ["273.10"] = "Lamb Body", ["274.0"] = "Mega Satan", ["274.1"] = "Mega Satan's Right Hand", ["274.2"] = "Mega Satan's Left Hand", ["275.0"] = "Mega Satan 2", ["275.1"] = "Mega Satan 2's Right Hand", ["275.2"] = "Mega Satan 2's Left Hand", ["276.0"] = "Roundy", ["277.0"] = "Black Bony", ["278.0"] = "Black Globin", ["279.0"] = "Black Globins Head", ["280.0"] = "Black Globins Body", ["281.0"] = "Swarm", ["282.0"] = "Mega Clotty", ["283.0"] = "Bone Knight", ["284.0"] = "Cyclopia", ["285.0"] = "Red Ghost", ["286.0"] = "Flesh Deaths Head", ["287.0"] = "Moms Dead Hand", ["288.0"] = "Dukie", ["289.0"] = "Ulcer", ["290.0"] = "Meatball", ["291.0"] = "Pitfall", ["291.1"] = "Suction Pitfall", ["291.2"] = "Teleport Pitfall", ["292.0"] = "Movable TNT", ["292.1"] = "Movable TNT (Mine Crafter)", ["293.0"] = "Ultra Greed Coin (Spinner)", ["293.1"] = "Ultra Greed Coin (Key)", ["293.2"] = "Ultra Greed Coin (Bomb)", ["293.3"] = "Ultra Greed Coin (Heart)", ["294.0"] = "Ultra Greed Door", ["295.0"] = "Corn Mine", ["296.0"] = "Hush Fly", ["297.0"] = "Blue Gaper", ["298.0"] = "Blue Boil", ["299.0"] = "Greed Gaper", ["300.0"] = "Mushroom", ["301.0"] = "Poison Mind", ["302.0"] = "Stoney", ["302.10"] = "Cross Stoney", ["303.0"] = "Blister", ["304.0"] = "The Thing", ["305.0"] = "Ministro", ["306.0"] = "Portal", ["307.0"] = "Tar Boy", ["307.0.1"] = "Tar Boy Mouth", ["308.0"] = "Fistuloid", ["309.0"] = "Gush", ["310.0"] = "Leper", ["310.0.1"] = "Leper Stage 2", ["310.0.2"] = "Leper Stage 3", ["310.0.3"] = "Leper Stage 4", ["310.1"] = "Leper Flesh", ["311.0"] = "Mr Mine", ["311.10"] = "Mr. Mine Neck", ["401.0"] = "The Stain", ["402.0"] = "Brownie", ["403.0"] = "The Forsaken", ["404.0"] = "Little Horn", ["404.1"] = "Dark Ball", ["405.0"] = "Rag Man", ["405.1"] = "Rag Man's Head", ["406.0"] = "Ultra Greed", ["406.1"] = "Ultra Greedier", ["407.0"] = "Hush", ["408.0"] = "Hush (Skinless)", ["409.0"] = "Rag Mega", ["409.1"] = "Purple Ball", ["409.2"] = "Rag Mega's Rebirth Pillar", ["410.0"] = "Sisters Vis", ["411.0"] = "Big Horn", ["411.1"] = "Small Hole", ["411.2"] = "Big Hole", ["412.0"] = "Delirium", ["413.0"] = "The Matriarch", ["1000.1"] = "Bomb Explosion", ["1000.2"] = "Blood Explosion", ["1000.3"] = "Fly Explosion", ["1000.4"] = "Rock Particle", ["1000.5"] = "Blood Particle", ["1000.6"] = "Devil", ["1000.7"] = "Blood Splat", ["1000.8"] = "Ladder", ["1000.9"] = "Angel", ["1000.10"] = "Blue Flame", ["1000.11"] = "Bullet Poof", ["1000.12"] = "Tear PoofA", ["1000.12.10"] = "Tear PoofA (no tear)", ["1000.13"] = "Tear PoofB", ["1000.14"] = "Ripple Poof", ["1000.14.1"] = "Ripple Poof", ["1000.15"] = "Poof01", ["1000.16"] = "Poof02", ["1000.16.1"] = "Large Ground Poof", ["1000.16.2"] = "Large Ground Poof (foreground)", ["1000.16.3"] = "Large Blood Poof", ["1000.16.4"] = "Large Blood Poof (foreground)", ["1000.16.5"] = "Blood Cloud", ["1000.16.10"] = "Forgotten Soul Poof", ["1000.16.11"] = "Holy Mantle Poof", ["1000.17"] = "Poof04", ["1000.18"] = "Bomb Crater", ["1000.19"] = "Crack The Sky", ["1000.20"] = "Scythe Break", ["1000.21"] = "Tiny Bug", ["1000.68"] = "Wall Bug", ["1000.22"] = "Creep (Red)", ["1000.23"] = "Creep (Green)", ["1000.24"] = "Creep (Yellow)", ["1000.25"] = "Creep (White)", ["1000.26"] = "Creep (Black)", ["1000.27"] = "Wood Particle", ["1000.28"] = "Monstros Tooth", ["1000.29"] = "Mom Foot Stomp", ["1000.30"] = "Dr. Fetus Target", ["1000.31"] = "Dr. Fetus Rocket", ["1000.32"] = "Lemon Mishap", ["1000.78"] = "Lemon Party", ["1000.33"] = "Tiny Fly", ["1000.34"] = "Fart", ["1000.35"] = "Tooth Particle", ["1000.36"] = "Wall Hole X-Ray", ["1000.37"] = "Player Creep (Holy Water)", ["1000.38"] = "Spider Explosion", ["1000.39"] = "Heaven Door", ["1000.41"] = "Water Droplet", ["1000.42"] = "Blood Gush", ["1000.43"] = "Poop Explosion", ["1000.44"] = "Player Creep (White)", ["1000.45"] = "Player Creep (Black)", ["1000.46"] = "Player Creep (Red)", ["1000.47"] = "Trinity Shield", ["1000.48"] = "Battery up", ["1000.49"] = "Effect Notification", ["1000.50.0"] = "Laser Impact", ["1000.50.1"] = "Brimstone Impact", ["1000.50.2"] = "Shoop Impact", ["1000.50.3"] = "Brimstone Impact CageVis", ["1000.50.4"] = "Bouncing Impact", ["1000.50.5"] = "Ring Impact", ["1000.51"] = "Fire", ["1000.52"] = "Red Flame", ["1000.53"] = "Tear Creep (Green)", ["1000.54"] = "Player Creep Holy Water Trail", ["1000.55"] = "Spike Effect", ["1000.56"] = "Brown Creep", ["1000.57"] = "Pulling Effect", ["1000.58"] = "Poop Particle", ["1000.59"] = "Dust Cloud", ["1000.60"] = "Boomerang", ["1000.61"] = "Shockwave (Radial)", ["1000.62"] = "Rock Explosion", ["1000.63.0"] = "Worm", ["1000.63.1"] = "Maggot", ["1000.63.2"] = "Leech", ["1000.64"] = "Beetle", ["1000.65"] = "Wisp", ["1000.66"] = "Ember Particle", ["1000.69"] = "Butterfly", ["1000.70"] = "Blood Drop", ["1000.71"] = "Brimstone Swirl", ["1000.74"] = "Isaac's Carpet", ["1000.76"] = "Dice Room Floor", ["1000.77"] = "Large Blood Explosion", ["1000.75"] = "Bar Particle", ["1000.67"] = "Shockwave (Directional)", ["1000.72"] = "Crackwave", ["1000.73"] = "Shockwave (Random)", ["1000.79"] = "Tear Poof small", ["1000.80"] = "Tear Poof very small", ["1000.81"] = "Friendly ball", ["1000.82"] = "Womb hole teleport", ["1000.83"] = "Spear of destiny", ["1000.84"] = "Evil Eye", ["1000.85"] = "Diamond Particle", ["1000.86"] = "Nail Particle", ["1000.87"] = "Falling Ember", ["1000.88"] = "Dark Ball Smoke Particle", ["1000.89"] = "Ultra Greed Footprint", ["1000.90"] = "Milk Puddle", ["1000.91"] = "Mom's Hand (Emergency Contact)", ["1000.92"] = "Player Creep (Black Powder)", ["1000.93"] = "Pentagram (Black Powder)", ["1000.94"] = "Slippery Brown Creep", ["1000.95"] = "Diamond Particle", ["1000.96"] = "Hush Laser", ["1000.97"] = "Impact", ["1000.98"] = "Coin Particle", ["1000.99"] = "Water Splash", ["1000.100"] = "Hush Ashes", ["1000.101"] = "Hush Laser Up", ["1000.102"] = "Bullet Poof", ["1000.103"] = "Ultra Greed Bling", ["1000.104"] = "Fireworks", ["1000.105"] = "Brown Cloud", ["1000.106"] = "Fart Ring", ["1000.107.0"] = "BlackHole", ["1000.107.1"] = "BlackHoleRay", ["1000.108"] = "Mr. Me!", ["1000.109"] = "Death Skull", ["1000.110"] = "Enemy Brimstone Swirl", ["1000.111"] = "Haemolacria Trail", ["1000.112"] = "Hallowed Ground", ["1000.113"] = "Brimstone Ball", ["1000.114"] = "Forgotten Chain", ["1000.115"] = "Broken Shovel Shadow", ["1000.116"] = "Dirt Patch", ["1000.117"] = "Forgotten Soul", ["1000.118"] = "Small Rocket", ["1000.119"] = "Timer", ["1000.120"] = "Spawner", ["1000.121"] = "Light", ["1000.122"] = "Big Horn Hole Helper", ["1000.123"] = "Halo", ["1000.123.1"] = "Telekinesis Halo", ["1000.124"] = "Tar Bubble", ["1000.125"] = "Big Horn Hand", ["1000.126"] = "Tech Dot", ["1000.127"] = "Mama Mega Explosion", ["9001.1"] = "Spidermod Text", ["2.39"] = "Fist Tear", ["2.40"] = "Grid Tear", ["2.41"] = "Ice Tear", ["2.42"] = "Rock Tear", ["2.43"] = "Key Tear", ["2.44"] = "Bloody Key Tear", ["2.45"] = "Eraser Tear", ["2.46"] = "Fire Tear", ["2.47"] = "Sword Tear", ["2.48"] = "Spore Tear", ["2.49"] = "Tech Sword Tear", ["2.50"] = "Fetus Tear", ["3.200"] = "Intruder", ["3.201"] = "Dip Familiar", ["3.201.1"] = "Dip Familiar (red)", ["3.201.2"] = "Dip Familiar (corny)", ["3.201.3"] = "Dip Familiar (gold)", ["3.201.4"] = "Dip Familiar (rainbow)", ["3.201.5"] = "Dip Familiar (black)", ["3.201.6"] = "Dip Familiar (white)", ["3.201.12"] = "Dip Familiar (stone)", ["3.201.13"] = "Dip Familiar (flaming)", ["3.201.14"] = "Dip Familiar (stinky)", ["3.201.20"] = "Dip Familiar (Brownie)", ["3.202"] = "Damocles", ["3.203"] = "Blood Oath", ["3.204"] = "Psy Fly", ["3.205"] = "Menorah", ["3.206"] = "Wisp Familiar", ["3.207"] = "Peepers Other Eye", ["3.208"] = "Boiled Baby", ["3.209"] = "Freezer Baby", ["3.210"] = "Bird Cage", ["3.211"] = "Lost Soul", ["3.212"] = "Lil Dumpy", ["3.213"] = "Knife Piece 1", ["3.214"] = "Knife Piece 2", ["3.215"] = "Knife Piece 3", ["3.216"] = "Tinytoma", ["3.217"] = "Tinytoma (small)", ["3.218"] = "Bot Fly", ["3.219"] = "Dead Bird (permanent)", ["3.220"] = "Siren Minion", ["3.221"] = "Paschal Candle", ["3.222"] = "Stitches", ["3.223"] = "Full Knife", ["3.224"] = "Baby Plum (familiar)", ["3.225"] = "Fruity Plum", ["3.226"] = "Spin to Win", ["3.227"] = "Beths Heart", ["3.228"] = "Minisaac", ["3.229"] = "Swarm Fly Orbital", ["3.230"] = "Lil Abaddon", ["3.231"] = "Abyss Locust", ["3.232"] = "Lil Portal", ["3.233"] = "Worm Friend", ["3.234"] = "Bone Spur", ["3.235"] = "Twisted Baby 1", ["3.235.1"] = "Twisted Baby 2", ["3.236"] = "Star of Bethlehem", ["3.237"] = "Item Wisp Familiar", ["3.238"] = "Blood Baby", ["3.239"] = "Cube Baby", ["3.240"] = "Umbilical Baby", ["3.241"] = "Blood Puppy", ["3.242"] = "Vanishing Twin", ["3.243"] = "Decap Attack", ["3.244"] = "Esau Jr.", ["4.13"] = "Throwable Bomb", ["4.14"] = "Small Bomb", ["4.15"] = "Brimstone Bomb", ["4.16"] = "Bloody Sad Bomb", ["4.17"] = "Giga Bomb", ["4.18"] = "Golden Troll Bomb", ["4.19"] = "Rocket", ["4.20"] = "Giga Rocket", ["5.41.0"] = "Throwable Bomb (pickup)", ["5.20.7"] = "Golden Penny", ["5.69.2"] = "Black Sack", ["5.70.14"] = "Pill Gold-Gold", ["5.70.2049"] = "Horse Pill Blue-Blue", ["5.70.2050"] = "Horse Pill White-Blue", ["5.70.2051"] = "Horse Pill Orange-Orange", ["5.70.2052"] = "Horse Pill White-White", ["5.70.2053"] = "Horse Pill Dots-Red", ["5.70.2054"] = "Horse Pill Pink-Red", ["5.70.2055"] = "Horse Pill Blue-Cadetblue", ["5.70.2056"] = "Horse Pill Yellow-Orange", ["5.70.2057"] = "Horse Pill Dots-White", ["5.70.2058"] = "Horse Pill White-Azure", ["5.70.2059"] = "Horse Pill Black-Yellow", ["5.70.2060"] = "Horse Pill White-Black", ["5.70.2061"] = "Horse Pill White-Yellow", ["5.70.2062"] = "Horse Pill Gold-Gold", ["5.10.12"] = "Rotten Heart", ["5.42.0"] = "Poop Nugget", ["5.42.1"] = "Big Poop Nugget", ["5.40.7"] = "Giga Bomb", ["5.90.3"] = "Mega Battery", ["5.90.4"] = "Golden Battery", ["5.300.14"] = "Reverse Tarot Card", ["5.300.15"] = "Cracked Key", ["5.300.16"] = "Treasure Card", ["5.300.17"] = "Unus Card", ["5.300.18"] = "Soul of Isaac", ["5.300.19"] = "Soul of Magdalene", ["5.300.20"] = "Soul of Cain", ["5.300.21"] = "Soul of Judas", ["5.300.22"] = "Soul of ???", ["5.300.23"] = "Soul of Eve", ["5.300.24"] = "Soul of Samson", ["5.300.25"] = "Soul of Azazel", ["5.300.26"] = "Soul of Lazarus", ["5.300.27"] = "Soul of Eden", ["5.300.28"] = "Soul of the Lost", ["5.300.29"] = "Soul of Lilith", ["5.300.30"] = "Soul of the Keeper", ["5.300.31"] = "Soul of Apollyon", ["5.300.32"] = "Soul of the Forgotten", ["5.300.33"] = "Soul of Bethany", ["5.300.34"] = "Soul of Jacob", ["5.380.10"] = "Mom's Bed", ["5.390"] = "Mom's Chest", ["5.55"] = "Old Chest", ["5.56"] = "Wooden Chest", ["5.57"] = "Mega Chest", ["5.58"] = "Haunted Chest", ["6.13"] = "Battery Bum", ["6.14"] = "Isaac (secret)", ["6.15"] = "Hell Game", ["6.16"] = "Crane Game", ["6.17"] = "Confessional", ["6.18"] = "Rotten Beggar", ["7.11"] = "Laser (Thicker Red)", ["7.12"] = "Laser (Thick Brown)", ["7.13"] = "Laser (Beast)", ["7.14"] = "Laser (Thicker Brimtech)", ["7.15"] = "Laser (Giant Brimtech)", ["8.3"] = "Donkey Jawbone", ["8.4"] = "Bag of Crafting", ["8.5"] = "Sumptorium", ["8.10"] = "Spirit Sword", ["8.11"] = "Tech Sword", ["9.8"] = "Grid Projectile", ["9.9"] = "Rock Projectile", ["9.11"] = "Meat Projectile", ["9.13"] = "Feather Projectile", ["9.14"] = "Lava Projectile", ["9.15"] = "Head Projectile", ["9.16"] = "Eyeball Projectile", ["10.3"] = "Rotten Gaper", ["10.3.1"] = "Rotten Gaper", ["10.3.2"] = "Rotten Gaper", ["10.3.3"] = "Rotten Gaper", ["10.3.4"] = "Rotten Gaper", ["10.3.5"] = "Rotten Gaper", ["14.2"] = "Tainted Pooter", ["15.3"] = "Grilled Clotty", ["19.2"] = "Tuff Twin", ["19.3"] = "The Shell", ["22.2"] = "Holy Mulligan", ["22.3"] = "Tainted Mulligan", ["23.3"] = "Carrion Princess", ["24.3"] = "Cursed Globin", ["25.3"] = "Dragon Fly", ["25.3.1"] = "Dragon Fly X", ["25.4"] = "Bone Fly", ["25.5"] = "Sick Boom Fly", ["25.6"] = "Tainted Boom Fly", ["27.3"] = "Hard Host", ["29.2"] = "Eggy", ["29.3"] = "Tainted Hopper", ["31.1"] = "Tainted Spitty", ["33.4"] = "White Fire Place", ["33.10"] = "Moveable Fireplace", ["33.12"] = "Moveable Blue Fireplace", ["33.13"] = "Moveable Purple Fireplace", ["34.1"] = "Sticky Leaper", ["38.1.1"] = "Angelic Baby (small)", ["38.3"] = "Wrinkly Baby", ["60.2"] = "Holy Eye", ["87.1"] = "Crackle", ["227.1"] = "Holy Bony", ["229.1"] = "Planetoid", ["244.2"] = "Tainted Round Worm", ["244.2.1"] = "Tainted Round Worm Butt", ["244.3"] = "Tainted Tube Worm", ["33.11"] = "Coal", ["33.11.1"] = "Coal", ["33.11.2"] = "Coal", ["33.11.3"] = "Coal", ["40.2"] = "Slog", ["41.2"] = "Loose Knight", ["41.3"] = "Brainless Knight", ["41.4"] = "Black Knight", ["42.2"] = "Triple Grimace", ["61.3"] = "Ink", ["57.2"] = "Dead Meat", ["61.4"] = "Mama Fly", ["61.5"] = "Bulb", ["61.6"] = "Bloodfly", ["61.7"] = "Tainted Sucker", ["62.3"] = "Wormwood", ["92.1"] = "Half Heart", ["92.1.1"] = "Half Heart", ["93.1"] = "Mask Ii", ["212.2"] = "Cursed Deaths Head", ["212.3"] = "Brimstone Deaths Head", ["212.4"] = "Redskull", ["239.100"] = "Corpse Eater", ["239.101"] = "Carrion Rider", ["240.1"] = "Soy Creep", ["240.2"] = "Rag Creep", ["240.3"] = "Tainted Soy Creep", ["241.1"] = "Split Rage Creep", ["269.1"] = "The Pile", ["306.1"] = "Lil Portal", ["802.0"] = "Blood Puppy", ["802.1"] = "Blood Puppy", ["803.0"] = "Blind Bat", ["804.0"] = "Quake Grimace", ["804.0.1"] = "Quake Grimace", ["804.0.2"] = "Quake Grimace", ["804.0.3"] = "Quake Grimace", ["805.0"] = "Bishop", ["806.0"] = "Bubbles", ["807.0"] = "Wraith", ["808.0"] = "Willo", ["809.0"] = "Bomb Grimace", ["810.0"] = "Small Leech", ["811.0"] = "Deep Gaper", ["811.0.1"] = "Deep Gaper", ["811.0.2"] = "Deep Gaper", ["811.0.3"] = "Deep Gaper", ["811.0.4"] = "Deep Gaper", ["811.0.5"] = "Deep Gaper", ["811.0.6"] = "Deep Gaper", ["812.0"] = "Sub Horf", ["812.1"] = "Tainted Sub Horf", ["813.0"] = "Blurb", ["814.0"] = "Strider", ["815.0"] = "Fissure", ["816.0"] = "Polty", ["816.1"] = "Kineti", ["817.0"] = "Prey", ["817.1"] = "Mullighoul", ["818.0"] = "Rock Spider", ["818.0.1"] = "Rock Spider", ["818.0.2"] = "Rock Spider", ["818.0.3"] = "Rock Spider", ["818.1"] = "Tinted Rock Spider", ["818.1.1"] = "Tinted Rock Spider", ["818.1.2"] = "Tinted Rock Spider", ["818.1.3"] = "Tinted Rock Spider", ["818.2"] = "Coal Spider", ["818.2.1"] = "Coal Spider", ["818.2.2"] = "Coal Spider", ["818.2.3"] = "Coal Spider", ["819.0"] = "Fly Bomb", ["819.1"] = "Eternal Fly Bomb", ["820.0"] = "Danny", ["820.1"] = "Coal Boy", ["821.0"] = "Blaster", ["822.0"] = "Bouncer", ["823.0"] = "Quakey", ["824.0"] = "Gyro", ["824.1"] = "Grilled Gyro", ["825.0"] = "Fire Worm", ["826.0"] = "Hardy", ["827.0"] = "Faceless", ["827.1"] = "Tainted Faceless", ["828.0"] = "Necro", ["829.0"] = "Mole", ["829.1"] = "Tainted Mole", ["830.0"] = "Big Bony", ["830.10"] = "Big Bone", ["831.0"] = "Gutted Fatty", ["831.10"] = "Gutted Fatty Eye", ["831.20"] = "Festering Guts", ["832.0"] = "Exorcist", ["832.1"] = "Fanatic", ["833.0"] = "Candler", ["834.0"] = "Whipper", ["834.1"] = "Snapper", ["834.2"] = "Flagellant", ["835.0"] = "Peeping Fatty", ["835.10"] = "Peeping Fatty Eye", ["836.0"] = "Vis Versa", ["837.0"] = "Henry", ["838.0"] = "Level 2 Willo", ["839.0"] = "Strifer", ["840.0"] = "Pon", ["841.0"] = "Revenant", ["841.1"] = "Quad Revenant", ["842.0"] = "Nightwatch", ["843.0"] = "Canary", ["843.1"] = "Foreigner", ["844.0"] = "Bombgagger", ["850.0"] = "Level 2 Gaper", ["850.1"] = "Level 2 Horf", ["850.2"] = "Level 2 Gusher", ["851.0"] = "Twitchy", ["852.0"] = "Spikeball", ["853.0"] = "Small Maggot", ["854.0"] = "Adult Leech", ["855.0"] = "Level 2 Charger", ["855.1"] = "Elleech", ["856.0"] = "Gasbag", ["857.0"] = "Cohort", ["858.0"] = "Vessel", ["859.0"] = "Floast", ["860.0"] = "Unborn", ["861.0"] = "Pustule", ["862.0"] = "Cyst", ["863.0"] = "Morningstar", ["863.0.1"] = "Morningstar", ["863.0.2"] = "Morningstar", ["864.0"] = "Mockulus", ["865.0"] = "Evis", ["865.10"] = "Evis Guts", ["866.0"] = "Dark Esau", ["866.0.1"] = "Darker Esau", ["866.1"] = "Dark Esau's Pit", ["867.0"] = "Mothers Shadow", ["868.0"] = "Army Fly", ["869.0"] = "Migraine", ["870.0"] = "Drip", ["871.0"] = "Splurt", ["872.0"] = "Cloggy", ["873.0"] = "Fly Trap", ["874.0"] = "Gas Dwarf", ["217.3"] = "Big Corn", ["875.0"] = "Poot Mine", ["876.0"] = "Dump", ["876.1"] = "Dump Head", ["877.0"] = "Grudge", ["878.0"] = "Butt Slicker", ["879.0"] = "Bloaty", ["880.0"] = "Flesh Maiden", ["881.0"] = "Needle", ["881.1"] = "Pasty", ["882.0"] = "Dust", ["883.0"] = "Baby Begotten", ["884.0"] = "Swarm Spider", ["885.0"] = "Cultist", ["885.1"] = "Blood Cultist", ["885.10"] = "Bone Trap", ["886.0"] = "Vis Fatty", ["886.1"] = "Fetal Demon", ["887.0"] = "Dusty Deaths Head", ["888.0"] = "Shady", ["889.0"] = "Clickety Clack", ["890.0"] = "Maze Roamer", ["890.0.1"] = "Maze Roamer", ["891.0"] = "Goat", ["891.1"] = "Black Goat", ["892.0"] = "Poofer", ["893.0"] = "Ball And Chain", ["900.0"] = "Reap Creep", ["901.0"] = "Lil Blub", ["902.0"] = "Rainmaker", ["903.0"] = "The Visage", ["903.1"] = "Visage Mask", ["903.10"] = "Visage Chain", ["903.20"] = "Visage Plasma", ["904.0"] = "Siren", ["904.1"] = "Siren's Skull", ["904.10"] = "Siren Helper Projectile", ["905.0"] = "The Heretic", ["906.0"] = "Hornfel", ["906.1"] = "Hornfel Decoy", ["907.0"] = "Great Gideon", ["907.0.1"] = "Great Gideon (defeated)", ["908.0"] = "Baby Plum", ["909.0"] = "The Scourge", ["909.10"] = "The Scourge (chain)", ["910.0"] = "Chimera", ["910.1"] = "Chimera (body)", ["910.2"] = "Chimera (head)", ["911.0"] = "Rotgut", ["911.1"] = "Rotgut (maggot)", ["911.2"] = "Rotgut (heart)", ["912.0"] = "Mother", ["912.10"] = "Mother 2", ["912.20"] = "Dead Isaac", ["912.30"] = "Mother Worm", ["912.100"] = "Mother Ball", ["912.100.1"] = "Mother Ball (Medium)", ["912.100.2"] = "Mother Ball (Small)", ["913.0"] = "Min Min", ["914.0"] = "Clog", ["915.0"] = "Singe", ["915.1"] = "Singe's Ball", ["916.0"] = "Bumbino", ["917.0"] = "Colostomia", ["918.0"] = "Turdlet", ["919.0"] = "Raglich", ["919.1"] = "Raglich Arm", ["920.0"] = "Horny Boys", ["921.0"] = "Clutch", ["921.1"] = "Clutch Orbital", ["950.0"] = "Dogma", ["950.1"] = "Dogma's TV", ["950.2"] = "Dogma Angel", ["950.10"] = "Dogma Angel Baby", ["951.1"] = "Stalactite", ["951.2"] = "Beast Rock Projectile", ["951.3"] = "Beast Soul", ["951.10"] = "Ultra Famine", ["951.11"] = "Ultra Famine Fly", ["951.20"] = "Ultra Pestilence", ["951.21"] = "Ultra Pestilence Fly", ["951.22"] = "Ultra Pestilence Maggot", ["951.23"] = "Ultra Pestilence Fly Ball", ["951.30"] = "Ultra War", ["951.31"] = "Ultra War Bomb", ["951.40"] = "Ultra Death", ["951.41"] = "Ultra Death Scythe", ["951.42"] = "Ultra Death Head", ["951.0"] = "The Beast", ["951.100"] = "Background (Beast)", ["951.101"] = "Background (Famine)", ["951.102"] = "Background (Pestilence)", ["951.103"] = "Background (War)", ["951.104"] = "Background (Death)", ["960.0"] = "Generic Prop", ["960.1"] = "Mom's Dresser", ["960.2"] = "Mom's Vanity", ["960.3"] = "Couch", ["960.4"] = "TV", ["963.0"] = "Frozen Enemy", ["964.0"] = "Dummy", ["965.0"] = "Minecart", ["966.0"] = "Siren Helper", ["967.0"] = "Hornfel Door", ["1000.12.20"] = "Key Tear Poof", ["1000.12.21"] = "Bloody Key Tear Poof", ["1000.12.22"] = "Sword Tear Poof", ["1000.12.23"] = "Tech Sword Tear Poof", ["1000.16.66"] = "Lava Splash", ["1000.16.67"] = "Lava Splash (Large)", ["1000.50.6"] = "Big Brimstone Impact", ["1000.50.7"] = "Brimstone Impact (Poop)", ["1000.123.2"] = "Monstrance Halo", ["1000.123.3"] = "Curse Halo", ["1000.123.4"] = "Static Halo", ["1000.123.5"] = "Saturnus Halo", ["1000.123.6"] = "Thorns Halo", ["1000.123.7"] = "Static Halo (Prerendered)", ["1000.123.8"] = "Dark Arts Halo", ["1000.74.1"] = "Mom's Carpet", ["1000.74.2"] = "Mom's Carpet", ["1000.130"] = "Leech Explosion", ["1000.131"] = "Maggot Explosion", ["1000.132"] = "Big Water Splash", ["1000.132.1"] = "Static Splash", ["1000.132.2"] = "Static Splash 2", ["1000.133"] = "Water Ripple", ["1000.133.1"] = "Small Water Ripple", ["1000.134"] = "Pedestal Ripple", ["1000.135"] = "Rain Drop", ["1000.136"] = "Grid Projectile Helper", ["1000.137"] = "Wormwood Hole", ["1000.137.1"] = "Wormwood Hole Spray", ["1000.138"] = "Mist", ["1000.139"] = "Trap Door Cover", ["1000.140"] = "Backdrop Decoration", ["1000.141"] = "Smoke Cloud", ["1000.142"] = "Whirlpool", ["1000.142.1"] = "Whirlpool Particle", ["1000.143"] = "Fartwave", ["1000.144"] = "Enemy Ghost", ["1000.145"] = "Rock Tear Poof", ["1000.146"] = "Dirt Pile", ["1000.147"] = "Fire Jet", ["1000.147.1"] = "Fire Jet (purple)", ["1000.148"] = "Fire Wave", ["1000.149"] = "Big Rock Explosion", ["1000.150"] = "Big Rock Wave", ["1000.151"] = "Gideon Attract Ring", ["1000.151.1"] = "Gideon Attract Trail", ["1000.151.10"] = "Shockwave Ring", ["1000.151.11"] = "Shockwave Trail", ["1000.152"] = "Hornfel Room Controller", ["1000.153"] = "Occult Target", ["1000.154"] = "Door Outline", ["1000.39.1"] = "Moonlight", ["1000.155"] = "Slippery Brown Creep (growing)", ["1000.156"] = "Tall Ladder", ["1000.156.1"] = "Stairway", ["1000.157"] = "Willo Spawner", ["1000.158"] = "Tadpole", ["1000.159"] = "Lil Ghost", ["1000.160"] = "Bishop Shield", ["1000.161"] = "Portal Teleport", ["1000.162"] = "Heretic Pentagram", ["1000.163"] = "Chain Gib", ["1000.164"] = "Siren Ring", ["1000.165"] = "Siren Charm Effect", ["1000.165.1"] = "Siren Charm Glow", ["1000.166"] = "Sprite Trail", ["1000.167"] = "Chain Lightning", ["1000.168"] = "Colostomia Puddle", ["1000.169"] = "Creep (Static)", ["1000.170"] = "Dogma Debris", ["1000.171"] = "Dogma Blackhole", ["1000.172"] = "Dogma Orb", ["1000.173"] = "Cracked Orb Poof", ["1000.174"] = "Shop Spikes", ["1000.175"] = "Kineti Beam", ["1000.176"] = "Cleaver Slash", ["1000.177"] = "Reverse Explosion", ["1000.177.1"] = "Reverse Explosion Debris", ["1000.178"] = "Urn of Souls", ["1000.178.1"] = "Urn of Souls (Belial)", ["1000.179"] = "Enemy Soul", ["1000.179.1"] = "Enemy Soul (Belial)", ["1000.180"] = "Rift", ["1000.181"] = "Lava Spawner", ["1000.182"] = "Big Knife Projectile", ["1000.183"] = "Mother Shockwave", ["1000.184"] = "Worm Friend Snare", ["1000.185"] = "Redemption", ["1000.186"] = "Hungry Soul", ["1000.187"] = "Explosion Wave", ["1000.188"] = "Divine Intervention", ["1000.189"] = "Purgatory Rift", ["1000.189.1"] = "Purgatory Soul", ["1000.190"] = "Mother Tracer", ["1000.191"] = "Pickup Ghost", ["1000.192"] = "Fissure Spawner", ["1000.193"] = "Anima Chain", ["1000.194"] = "Dark Snare", ["1000.195"] = "Liquid Poop Creep", ["1000.196"] = "Ground Glow", ["1000.197"] = "Dead Bird", ["1000.198"] = "Generic Tracer", ["1000.199"] = "Ultra Death Scythe", ["1000.200"] = "Bullet Poof (Static)", ["1000.201"] = "Umbilical Cord Helper", } +EID.XMLEntityNames = {["1.0"] = "Player", ["1.1"] = "Coplayer", ["2.0"] = "Tear", ["2.1"] = "Blood Tear", ["2.2"] = "Tooth Tear", ["2.3"] = "Metallic Tear", ["2.4"] = "Bobs Head Tear", ["2.5"] = "Fire Tear", ["2.6"] = "Dark Matter Tear", ["2.7"] = "Mysterious Tear", ["2.8"] = "Scythe Tear", ["2.9"] = "Chaos Card Tear", ["2.10"] = "Chaos Card Tear", ["2.11"] = "Tear", ["2.12"] = "Blood Tear", ["2.13"] = "Nail Tear", ["2.14"] = "Pupula Tear", ["2.15"] = "Pupula Blood Tear", ["2.16"] = "God's Flesh Tear", ["2.17"] = "God's Flesh Blood Tear", ["2.18"] = "Diamond Tear", ["2.19"] = "Explosivo Tear", ["2.20"] = "Coin Tear", ["2.21"] = "Multidimensional Tear", ["2.22"] = "Stone Tear", ["2.23"] = "Nail Blood Tear", ["2.24"] = "Glaucoma Tear", ["2.25"] = "Glaucoma Blood Tear", ["2.26"] = "Booger Tear", ["2.27"] = "Egg Tear", ["2.28"] = "Razor Tear", ["2.29"] = "Bone Tear", ["2.30"] = "Black Tooth Tear", ["2.31"] = "Needle Tear", ["2.32"] = "Belial Tear", ["2.33"] = "Pop Tear", ["2.34"] = "Pop Blood Tear", ["2.35"] = "Balloon Tear", ["2.36"] = "Hungry Tear", ["2.37"] = "Brimstone Balloon Tear", ["2.38"] = "Bomb Balloon Tear", ["3.1"] = "Brother Bobby", ["3.2"] = "Demon Baby", ["3.3"] = "Little Chubby", ["3.4"] = "Little Gish", ["3.5"] = "Little Steve", ["3.6"] = "Robo-Baby", ["3.7"] = "Sister Maggy", ["3.8"] = "Abel", ["3.9"] = "Ghost Baby", ["3.10"] = "Harlequin Baby", ["3.11"] = "Rainbow Baby", ["3.12"] = "Isaacs Head", ["3.13"] = "Blue Baby Soul", ["3.14"] = "Dead Bird", ["3.15"] = "Eves Bird Foot", ["3.16"] = "Daddys Foot", ["3.17"] = "Peepers Eye", ["3.20"] = "Bomb Bag", ["3.21"] = "Sack of Pennies", ["3.22"] = "Little C.H.A.D.", ["3.23"] = "The Relic", ["3.24"] = "Bum Fiend", ["3.25"] = "Holy Water", ["3.26"] = "Key Piece 1", ["3.27"] = "Key Piece 2", ["3.28"] = "Full Key", ["3.30"] = "Forever Alone", ["3.31"] = "Distant Admiration", ["3.32"] = "Guardian Angel", ["3.33"] = "Fly Orbital", ["3.35"] = "Sacrificial Dagger", ["3.40"] = "Dead Cat", ["3.41"] = "1UP", ["3.42"] = "Guppys Hair Ball", ["3.43"] = "Attack Fly", ["3.44"] = "Cube of Meat L1", ["3.45"] = "Cube of Meat L2", ["3.46"] = "Cube of Meat L3", ["3.47"] = "Cube of Meat L4", ["3.48"] = "Isaacs Body", ["3.50"] = "Smart Fly", ["3.51"] = "Dry Baby", ["3.52"] = "Juicy Sack", ["3.53"] = "Robo-Baby 2.0", ["3.54"] = "Rotten Baby", ["3.55"] = "Headless Baby", ["3.56"] = "Leech", ["3.57"] = "Mystery Sack", ["3.58"] = "BBF", ["3.59"] = "Bob's Brain", ["3.60"] = "Best Bud", ["3.61"] = "Lil' Brimstone", ["3.62"] = "Isaac's Heart", ["3.63"] = "Lil' Haunt", ["3.64"] = "Dark Bum", ["3.65"] = "Big Fan", ["3.66"] = "Sissy Longlegs", ["3.67"] = "Punching Bag", ["3.68"] = "Guillotine", ["3.69"] = "Ball of Bandages L1", ["3.70"] = "Ball of Bandages L2", ["3.71"] = "Ball of Bandages L3", ["3.72"] = "Ball of Bandages L4", ["3.73"] = "Blue Spider", ["3.74"] = "Mongo Baby", ["3.75"] = "Samson's Chains", ["3.78"] = "Scissors", ["3.79"] = "Gemini Familiar", ["3.76"] = "Cain's Eye", ["3.77"] = "???'s Only Friend", ["3.80"] = "Incubus", ["3.81"] = "Fate's Reward", ["3.82"] = "Lil Chest", ["3.83"] = "Sworn Protector", ["3.84"] = "Friend Zone", ["3.85"] = "Lost Fly", ["3.86"] = "Charged Baby", ["3.87"] = "Lil Gurdy", ["3.88"] = "Bumbo", ["3.89"] = "Censer", ["3.90"] = "Key Bum", ["3.91"] = "Rune Bag", ["3.92"] = "Seraphim", ["3.93"] = "GB Bug", ["3.94"] = "Spider Mod", ["3.95"] = "Farting Baby", ["3.96"] = "Succubus", ["3.97"] = "Lil Loki", ["3.98"] = "Obsessed Fan", ["3.99"] = "Papa Fly", ["3.100"] = "Milk!", ["3.101"] = "Multidimensional Baby", ["3.102"] = "Super Bum", ["3.103"] = "Tonsil", ["3.104"] = "Big Chubby", ["3.105"] = "Depression", ["3.106"] = "Shade", ["3.107"] = "Hushy", ["3.108"] = "Lil Monstro", ["3.109"] = "King Baby", ["3.110"] = "Finger!", ["3.111"] = "YO LISTEN!", ["3.112"] = "Acid Baby", ["3.113"] = "Spider Baby", ["3.114"] = "Sack of Sacks", ["3.115"] = "Brown Nugget", ["3.116"] = "Bloodshot Eye", ["3.117"] = "Mom's Razor", ["3.118"] = "Angry Fly", ["3.119"] = "Box Buddy", ["3.120"] = "Sprinkler", ["3.121"] = "Leprocy", ["3.122"] = "Lil Harbingers", ["3.123"] = "Angelic Prism", ["3.124"] = "Mystery Egg", ["3.125"] = "Lil Spewer", ["3.126"] = "Slipped Rib", ["3.127"] = "Pointy Rib", ["3.128"] = "Bone Orbital", ["3.129"] = "Hallowed Ground", ["3.130"] = "Jaw Bone", ["3.900"] = "Forgotten Body", ["4.0"] = "Bomb", ["4.1"] = "Big Bomb", ["4.2"] = "Decoy", ["4.3"] = "Troll Bomb", ["4.4"] = "Megatroll Bomb", ["4.5"] = "Poison Bomb", ["4.6"] = "Big Poison Bomb", ["4.7"] = "Sad Bomb", ["4.8"] = "Hot Bomb", ["4.9"] = "Butt Bomb", ["4.10"] = "Mr. Mega Bomb", ["4.11"] = "Bobby Bomb", ["4.12"] = "Glitter Bomb", ["5.10.1"] = "Heart", ["5.10.2"] = "Heart (half)", ["5.10.3"] = "Heart (soul)", ["5.10.4"] = "Heart (eternal)", ["5.10.5"] = "Heart (double)", ["5.10.6"] = "Black Heart", ["5.10.7"] = "Gold Heart", ["5.10.8"] = "Heart (half soul)", ["5.10.9"] = "Scared Heart", ["5.10.10"] = "Blended Heart", ["5.10.11"] = "Bone Heart", ["5.20.1"] = "Penny", ["5.20.2"] = "Nickel", ["5.20.3"] = "Dime", ["5.20.4"] = "Double Penny", ["5.20.5"] = "Lucky Penny", ["5.20.6"] = "Sticky Nickel", ["5.30.1"] = "Key", ["5.30.2"] = "Golden Key", ["5.30.3"] = "Key Ring", ["5.30.4"] = "Charged Key", ["5.40.1"] = "Bomb", ["5.40.2"] = "Double Bomb", ["5.40.3"] = "Troll Bomb", ["5.40.4"] = "Golden Bomb", ["5.40.5"] = "Megatroll Bomb", ["5.90.1"] = "Lil' Battery", ["5.90.2"] = "Micro Battery", ["5.50"] = "Chest", ["5.51"] = "Bomb Chest", ["5.52"] = "Spiked Chest", ["5.53"] = "Eternal Chest", ["5.54"] = "Mimic Chest", ["5.60"] = "Locked Chest", ["5.69.1"] = "Grab Bag", ["5.70.1"] = "Pill Blue-Blue", ["5.70.2"] = "Pill White-Blue", ["5.70.3"] = "Pill Orange-Orange", ["5.70.4"] = "Pill White-White", ["5.70.5"] = "Pill Dots-Red", ["5.70.6"] = "Pill Pink-Red", ["5.70.7"] = "Pill Blue-Cadetblue", ["5.70.8"] = "Pill Yellow-Orange", ["5.70.9"] = "Pill Dots-White", ["5.70.10"] = "Pill White-Azure", ["5.70.11"] = "Pill Black-Yellow", ["5.70.12"] = "Pill White-Black", ["5.70.13"] = "Pill White-Yellow", ["5.100"] = "Collectible", ["5.110"] = "Broken Shovel", ["5.150"] = "Shop Item", ["5.300"] = "Tarot Card", ["5.300.1"] = "Tarot Card", ["5.300.2"] = "Suit Card", ["5.300.3"] = "Rune#1", ["5.300.4"] = "Rune#2", ["5.300.5"] = "Emergency Contact", ["5.300.6"] = "Dice Shard", ["5.300.7"] = "Black Rune", ["5.300.8"] = "Magic Card", ["5.300.9"] = "Card Against Humanity", ["5.300.10"] = "Credit Card", ["5.300.11"] = "Holy Card", ["5.300.12"] = "Chance Card", ["5.300.13"] = "Rune Shard", ["5.340"] = "Big Chest", ["5.350"] = "Trinket", ["5.360"] = "Red Chest", ["5.370"] = "Challenge Trophy", ["5.380"] = "Isaac's Bed", ["6.1"] = "Slot Machine", ["6.2"] = "Blood Donation Machine", ["6.3"] = "Fortune Telling Machine", ["6.4"] = "Beggar", ["6.5"] = "Devil Beggar", ["6.6"] = "Shell Game", ["6.7"] = "Key Master", ["6.8"] = "Donation Machine", ["6.9"] = "Bomb Bum", ["6.10"] = "Shop Restock Machine", ["6.11"] = "Greed Donation Machine", ["6.12"] = "Mom's Dressing Table", ["7.1"] = "Laser (Thick Red)", ["7.1.3"] = "Laser (Thick Dark)", ["7.2"] = "Laser (Thin Red)", ["7.3"] = "Laser (Shoop da Whoop)", ["7.4"] = "Laser (Pride)", ["7.5"] = "Laser (Light Beam)", ["7.6"] = "Laser (Giant Red)", ["7.7"] = "Tractor Beam", ["7.8"] = "Light Ring", ["7.9"] = "Laser (Brimtech)", ["7.10"] = "Laser (Electric)", ["8.0"] = "Moms Knife", ["8.1"] = "Bone Club", ["8.2"] = "Bone Scythe", ["8.9"] = "Notched Axe", ["9.0"] = "Projectile", ["9.1"] = "Projectile", ["9.2"] = "Purple Fire Projectile", ["9.3"] = "Puke Projectile", ["9.4"] = "Tear Projectile", ["9.5"] = "Corn Projectile", ["9.6"] = "Hush Projectile", ["9.7"] = "Coin Projectile", ["9.12"] = "Steven Projectile", ["10.0"] = "Frowning Gaper", ["10.1"] = "Gaper", ["10.2"] = "Flaming Gaper", ["11.0"] = "Gusher", ["11.1"] = "Pacer", ["12.0"] = "Horf", ["13.0"] = "Fly", ["14.0"] = "Pooter", ["14.1"] = "Super Pooter", ["15.0"] = "Clotty", ["15.1"] = "Clot", ["15.2"] = "Iblob", ["16.0"] = "Mulligan", ["16.1"] = "Mulligoon", ["16.2"] = "Mulliboom", ["17.0"] = "Shopkeeper", ["17.1"] = "Secret Room Keeper", ["17.2"] = "Error Room Keeper", ["17.3"] = "Special Shopkeeper", ["17.4"] = "Special Secret Room Keeper", ["18.0"] = "Attack Fly", ["19.0"] = "Larry Jr", ["19.1"] = "The Hollow", ["20.0"] = "Monstro", ["21.0"] = "Maggot", ["22.0"] = "Hive", ["22.1"] = "Drowned Hive", ["23.0"] = "Charger", ["23.0.1"] = "My Shadow", ["23.1"] = "Drowned Charger", ["23.2"] = "Dank Charger", ["24.0"] = "Globin", ["24.1"] = "Gazing Globin", ["24.2"] = "Dank Globin", ["25.0"] = "Boom Fly", ["25.1"] = "Red Boom Fly", ["25.2"] = "Drowned Boom Fly", ["26.0"] = "Maw", ["26.1"] = "Red Maw", ["26.2"] = "Psychic Maw", ["27.0"] = "Host", ["27.1"] = "Red Host", ["28.0"] = "Chub", ["28.1"] = "Chad", ["28.2"] = "The Carrion Queen", ["29.0"] = "Hopper", ["29.1"] = "Trite", ["30.0"] = "Boil", ["30.1"] = "Gut", ["30.2"] = "Sack", ["31.0"] = "Spitty", ["32.0"] = "Brain", ["33.0"] = "Fire Place", ["33.1"] = "Red Fire Place", ["33.2"] = "Blue Fire Place", ["33.3"] = "Purple Fire Place", ["34.0"] = "Leaper", ["35.0"] = "Mr Maw", ["35.1"] = "Mr Maw Head", ["35.2"] = "Mr Red Maw", ["35.3"] = "Mr Red Maw Head", ["35.10"] = "Mr. Maw Neck", ["36.0"] = "Gurdy", ["38.0"] = "Baby", ["38.1"] = "Angelic Baby", ["38.2"] = "Ultra Pride Baby", ["39.0"] = "Vis", ["39.1"] = "Double Vis", ["39.2"] = "Chubber", ["39.22"] = "Chubber Projectile", ["39.3"] = "Scarred Double Vis", ["40.0"] = "Guts", ["40.1"] = "Scarred Guts", ["41.0"] = "Knight", ["41.1"] = "Selfless Knight", ["42.0"] = "Stone Grimace", ["42.1"] = "Vomit Grimace", ["43.0"] = "Monstro Ii", ["43.1"] = "Gish", ["44.0"] = "Poky", ["44.1"] = "Slide", ["45.0"] = "Mom", ["45.10"] = "Mom Stomp", ["46.0"] = "Sloth", ["46.1"] = "Super Sloth", ["46.2"] = "Ultra Pride", ["47.0"] = "Lust", ["47.1"] = "Super Lust", ["48.0"] = "Wrath", ["48.1"] = "Super Wrath", ["49.0"] = "Gluttony", ["49.1"] = "Super Gluttony", ["50.0"] = "Greed", ["50.1"] = "Super Greed", ["51.0"] = "Envy", ["51.10"] = "Envy (big)", ["51.20"] = "Envy (medium)", ["51.30"] = "Envy (small)", ["51.1"] = "Super Envy", ["51.11"] = "Super Envy (big)", ["51.21"] = "Super Envy (medium)", ["51.31"] = "Super Envy (small)", ["52.0"] = "Pride", ["52.1"] = "Super Pride", ["53.0"] = "Dople", ["53.1"] = "Evil Twin", ["54.0"] = "Flaming Hopper", ["55.0"] = "Leech", ["55.1"] = "Kamikaze Leech", ["55.2"] = "Holy Leech", ["56.0"] = "Lump", ["57.0"] = "Membrain", ["57.1"] = "Mama Guts", ["58.0"] = "Parabite", ["58.1"] = "Scarred Parabite", ["59.0"] = "Fred", ["60.0"] = "Eye", ["60.1"] = "Bloodshot Eye", ["61.0"] = "Sucker", ["61.1"] = "Spit", ["61.2"] = "Soul Sucker", ["62.0"] = "Pin", ["62.1"] = "Scolex", ["62.2"] = "The Frail", ["63.0"] = "Famine", ["64.0"] = "Pestilence", ["65.0"] = "War", ["65.1"] = "Conquest", ["65.10"] = "War without horse", ["66.0"] = "Death", ["66.10"] = "Death Scythe", ["66.20"] = "Death Horse", ["66.30"] = "Death without horse", ["67.0"] = "The Duke Of Flies", ["67.1"] = "The Husk", ["68.0"] = "Peep", ["68.1"] = "The Bloat", ["68.10"] = "Peep Eye", ["68.11"] = "Bloat Eye", ["69.0"] = "Loki", ["69.1"] = "Lokii", ["71.0"] = "Fistula", ["71.1"] = "Teratoma", ["72.0"] = "Fistula Medium", ["72.1"] = "Teratoma Medium", ["73.0"] = "Fistula Small", ["73.1"] = "Teratoma Small", ["74.0"] = "Blastocyst", ["75.0"] = "Blastocyst Medium", ["76.0"] = "Blastocyst Small", ["77.0"] = "Embryo", ["78.0"] = "Moms Heart", ["78.1"] = "It Lives", ["78.10"] = "Moms Guts", ["79.0"] = "Gemini", ["79.1"] = "Steven", ["79.2"] = "The Blighted Ovum", ["79.10"] = "Gemini Baby", ["79.11"] = "Steven Baby", ["79.12"] = "The Blighted Ovum Baby", ["79.20"] = "Umbilical Cord", ["80.0"] = "Moter", ["81.0"] = "The Fallen", ["81.1"] = "Krampus", ["82.0"] = "Headless Horseman", ["83.0"] = "Headless Horsemans Head", ["84.0"] = "Satan", ["84.10"] = "Satan Stomp", ["85.0"] = "Spider", ["86.0"] = "Keeper", ["87.0"] = "Gurgle", ["88.0"] = "Walking Boil", ["88.1"] = "Walking Gut", ["88.2"] = "Walking Sack", ["89.0"] = "Buttlicker", ["90.0"] = "Hanger", ["91.0"] = "Swarmer", ["92.0"] = "Heart", ["93.0"] = "Mask", ["94.0"] = "Big Spider", ["96.0"] = "Eternal Fly", ["97.0"] = "Mask Of Infamy", ["98.0"] = "Heart Of Infamy", ["99.0"] = "Gurdy Jr", ["100.0"] = "Widow", ["100.1"] = "The Wretched", ["101.0"] = "Daddy Long Legs", ["101.1"] = "Triachnid", ["102.0"] = "Isaac", ["102.1"] = "Bluebaby", ["102.2"] = "??? (Alt)", ["201.0"] = "Stone Eye", ["202.0"] = "Constant Stone Shooter", ["202.10"] = "Cross Stone Shooter", ["202.10.1"] = "Cross Stone Shooter", ["202.11"] = "Cross Stone Shooter (always on)", ["202.11.1"] = "Cross Stone Shooter (always on)", ["203.0"] = "Brimstone Head", ["204.0"] = "Mobile Host", ["205.0"] = "Nest", ["206.0"] = "Baby Long Legs", ["206.1"] = "Small Baby Long Legs", ["207.0"] = "Crazy Long Legs", ["207.1"] = "Small Crazy Long Legs", ["208.0"] = "Fatty", ["208.1"] = "Pale Fatty", ["208.2"] = "Flaming Fatty", ["209.0"] = "Fat Sack", ["210.0"] = "Blubber", ["211.0"] = "Half Sack", ["212.0"] = "Deaths Head", ["212.1"] = "Dank Deaths Head", ["213.0"] = "Moms Hand", ["214.0"] = "Level 2 Fly", ["215.0"] = "Level 2 Spider", ["216.0"] = "Swinger", ["216.1"] = "Swinger Head", ["216.10"] = "Swinger Neck", ["217.0"] = "Dip", ["217.1"] = "Corn", ["217.2"] = "Brownie Corn", ["218.0"] = "Wall Hugger", ["219.0"] = "Wizoob", ["220.0"] = "Squirt", ["220.1"] = "Dank Squirt", ["221.0"] = "Cod Worm", ["222.0"] = "Ring Fly", ["223.0"] = "Dinga", ["224.0"] = "Oob", ["225.0"] = "Black Maw", ["226.0"] = "Skinny", ["226.1"] = "Rotty", ["226.2"] = "Crispy", ["227.0"] = "Bony", ["228.0"] = "Homunculus", ["228.10"] = "Homunculus Cord", ["229.0"] = "Tumor", ["230.0"] = "Camillo Jr", ["231.0"] = "Nerve Ending", ["231.1"] = "Nerve Ending 2", ["234.0"] = "One Tooth", ["235.0"] = "Gaping Maw", ["236.0"] = "Broken Gaping Maw", ["237.0"] = "Gurgling", ["237.1"] = "Gurgling Boss", ["237.2"] = "Turdling", ["238.0"] = "Splasher", ["239.0"] = "Grub", ["240.0"] = "Wall Creep", ["241.0"] = "Rage Creep", ["242.0"] = "Blind Creep", ["243.0"] = "Conjoined Spitty", ["244.0"] = "Round Worm", ["244.1"] = "Tube Worm", ["245.0"] = "Poop", ["246.0"] = "Ragling", ["246.1"] = "Rag Man's Ragling", ["247.0"] = "Flesh Mobile Host", ["248.0"] = "Psychic Horf", ["249.0"] = "Full Fly", ["250.0"] = "Ticking Spider", ["251.0"] = "Begotten", ["251.10"] = "Begotten Chain", ["252.0"] = "Nulls", ["253.0"] = "Psy Tumor", ["254.0"] = "Floating Knight", ["255.0"] = "Night Crawler", ["256.0"] = "Dart Fly", ["257.0"] = "Conjoined Fatty", ["257.1"] = "Blue Conjoined Fatty", ["258.0"] = "Fat Bat", ["259.0"] = "Imp", ["260.0"] = "Haunt", ["260.10"] = "Lil Haunt", ["261.0"] = "Dingle", ["261.1"] = "Dangle", ["262.0"] = "Mega Maw", ["263.0"] = "The Gate", ["264.0"] = "Mega Fatty", ["265.0"] = "The Cage", ["266.0"] = "Mama Gurdy", ["266.1"] = "Mama Gurdy Left Hand", ["266.2"] = "Mama Gurdy Right Hand", ["267.0"] = "Dark One", ["268.0"] = "The Adversary", ["269.0"] = "Polycephalus", ["270.0"] = "Mr Fred", ["271.0"] = "Uriel", ["271.1"] = "Fallen Uriel", ["272.0"] = "Gabriel", ["272.1"] = "Fallen Gabriel", ["273.0"] = "The Lamb", ["273.10"] = "Lamb Body", ["274.0"] = "Mega Satan", ["274.1"] = "Mega Satan's Right Hand", ["274.2"] = "Mega Satan's Left Hand", ["275.0"] = "Mega Satan 2", ["275.1"] = "Mega Satan 2's Right Hand", ["275.2"] = "Mega Satan 2's Left Hand", ["276.0"] = "Roundy", ["277.0"] = "Black Bony", ["278.0"] = "Black Globin", ["279.0"] = "Black Globins Head", ["280.0"] = "Black Globins Body", ["281.0"] = "Swarm", ["282.0"] = "Mega Clotty", ["283.0"] = "Bone Knight", ["284.0"] = "Cyclopia", ["285.0"] = "Red Ghost", ["286.0"] = "Flesh Deaths Head", ["287.0"] = "Moms Dead Hand", ["288.0"] = "Dukie", ["289.0"] = "Ulcer", ["290.0"] = "Meatball", ["291.0"] = "Pitfall", ["291.1"] = "Suction Pitfall", ["291.2"] = "Teleport Pitfall", ["292.0"] = "Movable TNT", ["292.1"] = "Movable TNT (Mine Crafter)", ["293.0"] = "Ultra Greed Coin (Spinner)", ["293.1"] = "Ultra Greed Coin (Key)", ["293.2"] = "Ultra Greed Coin (Bomb)", ["293.3"] = "Ultra Greed Coin (Heart)", ["294.0"] = "Ultra Greed Door", ["295.0"] = "Corn Mine", ["296.0"] = "Hush Fly", ["297.0"] = "Blue Gaper", ["298.0"] = "Blue Boil", ["299.0"] = "Greed Gaper", ["300.0"] = "Mushroom", ["301.0"] = "Poison Mind", ["302.0"] = "Stoney", ["302.10"] = "Cross Stoney", ["303.0"] = "Blister", ["304.0"] = "The Thing", ["305.0"] = "Ministro", ["306.0"] = "Portal", ["307.0"] = "Tar Boy", ["307.0.1"] = "Tar Boy Mouth", ["308.0"] = "Fistuloid", ["309.0"] = "Gush", ["310.0"] = "Leper", ["310.0.1"] = "Leper Stage 2", ["310.0.2"] = "Leper Stage 3", ["310.0.3"] = "Leper Stage 4", ["310.1"] = "Leper Flesh", ["311.0"] = "Mr Mine", ["311.10"] = "Mr. Mine Neck", ["401.0"] = "The Stain", ["402.0"] = "Brownie", ["403.0"] = "The Forsaken", ["404.0"] = "Little Horn", ["404.1"] = "Dark Ball", ["405.0"] = "Rag Man", ["405.1"] = "Rag Man's Head", ["406.0"] = "Ultra Greed", ["406.1"] = "Ultra Greedier", ["407.0"] = "Hush", ["408.0"] = "Hush (Skinless)", ["409.0"] = "Rag Mega", ["409.1"] = "Purple Ball", ["409.2"] = "Rag Mega's Rebirth Pillar", ["410.0"] = "Sisters Vis", ["411.0"] = "Big Horn", ["411.1"] = "Small Hole", ["411.2"] = "Big Hole", ["412.0"] = "Delirium", ["413.0"] = "The Matriarch", ["1000.1"] = "Bomb Explosion", ["1000.2"] = "Blood Explosion", ["1000.3"] = "Fly Explosion", ["1000.4"] = "Rock Particle", ["1000.5"] = "Blood Particle", ["1000.6"] = "Devil", ["1000.7"] = "Blood Splat", ["1000.8"] = "Ladder", ["1000.9"] = "Angel", ["1000.10"] = "Blue Flame", ["1000.11"] = "Bullet Poof", ["1000.12"] = "Tear PoofA", ["1000.12.10"] = "Tear PoofA (no tear)", ["1000.13"] = "Tear PoofB", ["1000.14"] = "Ripple Poof", ["1000.14.1"] = "Ripple Poof", ["1000.15"] = "Poof01", ["1000.16"] = "Poof02", ["1000.16.1"] = "Large Ground Poof", ["1000.16.2"] = "Large Ground Poof (foreground)", ["1000.16.3"] = "Large Blood Poof", ["1000.16.4"] = "Large Blood Poof (foreground)", ["1000.16.5"] = "Blood Cloud", ["1000.16.10"] = "Forgotten Soul Poof", ["1000.16.11"] = "Holy Mantle Poof", ["1000.17"] = "Poof04", ["1000.18"] = "Bomb Crater", ["1000.19"] = "Crack The Sky", ["1000.20"] = "Scythe Break", ["1000.21"] = "Tiny Bug", ["1000.68"] = "Wall Bug", ["1000.22"] = "Creep (Red)", ["1000.23"] = "Creep (Green)", ["1000.24"] = "Creep (Yellow)", ["1000.25"] = "Creep (White)", ["1000.26"] = "Creep (Black)", ["1000.27"] = "Wood Particle", ["1000.28"] = "Monstros Tooth", ["1000.29"] = "Mom Foot Stomp", ["1000.30"] = "Dr. Fetus Target", ["1000.31"] = "Dr. Fetus Rocket", ["1000.32"] = "Lemon Mishap", ["1000.78"] = "Lemon Party", ["1000.33"] = "Tiny Fly", ["1000.34"] = "Fart", ["1000.35"] = "Tooth Particle", ["1000.36"] = "Wall Hole X-Ray", ["1000.37"] = "Player Creep (Holy Water)", ["1000.38"] = "Spider Explosion", ["1000.39"] = "Heaven Door", ["1000.41"] = "Water Droplet", ["1000.42"] = "Blood Gush", ["1000.43"] = "Poop Explosion", ["1000.44"] = "Player Creep (White)", ["1000.45"] = "Player Creep (Black)", ["1000.46"] = "Player Creep (Red)", ["1000.47"] = "Trinity Shield", ["1000.48"] = "Battery up", ["1000.49"] = "Effect Notification", ["1000.50"] = "Laser Impact", ["1000.50.1"] = "Brimstone Impact", ["1000.50.2"] = "Shoop Impact", ["1000.50.3"] = "Brimstone Impact CageVis", ["1000.50.4"] = "Bouncing Impact", ["1000.50.5"] = "Ring Impact", ["1000.51"] = "Fire", ["1000.52"] = "Red Flame", ["1000.53"] = "Tear Creep (Green)", ["1000.54"] = "Player Creep Holy Water Trail", ["1000.55"] = "Spike Effect", ["1000.56"] = "Brown Creep", ["1000.57"] = "Pulling Effect", ["1000.58"] = "Poop Particle", ["1000.59"] = "Dust Cloud", ["1000.60"] = "Boomerang", ["1000.61"] = "Shockwave (Radial)", ["1000.62"] = "Rock Explosion", ["1000.63"] = "Worm", ["1000.63.1"] = "Maggot", ["1000.63.2"] = "Leech", ["1000.64"] = "Beetle", ["1000.65"] = "Wisp", ["1000.66"] = "Ember Particle", ["1000.69"] = "Butterfly", ["1000.70"] = "Blood Drop", ["1000.71"] = "Brimstone Swirl", ["1000.74"] = "Isaac's Carpet", ["1000.76"] = "Dice Room Floor", ["1000.77"] = "Large Blood Explosion", ["1000.75"] = "Bar Particle", ["1000.67"] = "Shockwave (Directional)", ["1000.72"] = "Crackwave", ["1000.73"] = "Shockwave (Random)", ["1000.79"] = "Tear Poof small", ["1000.80"] = "Tear Poof very small", ["1000.81"] = "Friendly ball", ["1000.82"] = "Womb hole teleport", ["1000.83"] = "Spear of destiny", ["1000.84"] = "Evil Eye", ["1000.85"] = "Diamond Particle", ["1000.86"] = "Nail Particle", ["1000.87"] = "Falling Ember", ["1000.88"] = "Dark Ball Smoke Particle", ["1000.89"] = "Ultra Greed Footprint", ["1000.90"] = "Milk Puddle", ["1000.91"] = "Mom's Hand (Emergency Contact)", ["1000.92"] = "Player Creep (Black Powder)", ["1000.93"] = "Pentagram (Black Powder)", ["1000.94"] = "Slippery Brown Creep", ["1000.95"] = "Diamond Particle", ["1000.96"] = "Hush Laser", ["1000.97"] = "Impact", ["1000.98"] = "Coin Particle", ["1000.99"] = "Water Splash", ["1000.100"] = "Hush Ashes", ["1000.101"] = "Hush Laser Up", ["1000.102"] = "Bullet Poof", ["1000.103"] = "Ultra Greed Bling", ["1000.104"] = "Fireworks", ["1000.105"] = "Brown Cloud", ["1000.106"] = "Fart Ring", ["1000.107"] = "BlackHole", ["1000.107.1"] = "BlackHoleRay", ["1000.108"] = "Mr. Me!", ["1000.109"] = "Death Skull", ["1000.110"] = "Enemy Brimstone Swirl", ["1000.111"] = "Haemolacria Trail", ["1000.112"] = "Hallowed Ground", ["1000.113"] = "Brimstone Ball", ["1000.114"] = "Forgotten Chain", ["1000.115"] = "Broken Shovel Shadow", ["1000.116"] = "Dirt Patch", ["1000.117"] = "Forgotten Soul", ["1000.118"] = "Small Rocket", ["1000.119"] = "Timer", ["1000.120"] = "Spawner", ["1000.121"] = "Light", ["1000.122"] = "Big Horn Hole Helper", ["1000.123"] = "Halo", ["1000.123.1"] = "Telekinesis Halo", ["1000.124"] = "Tar Bubble", ["1000.125"] = "Big Horn Hand", ["1000.126"] = "Tech Dot", ["1000.127"] = "Mama Mega Explosion", ["9001.1"] = "Spidermod Text", ["2.39"] = "Fist Tear", ["2.40"] = "Grid Tear", ["2.41"] = "Ice Tear", ["2.42"] = "Rock Tear", ["2.43"] = "Key Tear", ["2.44"] = "Bloody Key Tear", ["2.45"] = "Eraser Tear", ["2.46"] = "Fire Tear", ["2.47"] = "Sword Tear", ["2.48"] = "Spore Tear", ["2.49"] = "Tech Sword Tear", ["2.50"] = "Fetus Tear", ["3.200"] = "Intruder", ["3.201"] = "Dip Familiar", ["3.201.1"] = "Dip Familiar (red)", ["3.201.2"] = "Dip Familiar (corny)", ["3.201.3"] = "Dip Familiar (gold)", ["3.201.4"] = "Dip Familiar (rainbow)", ["3.201.5"] = "Dip Familiar (black)", ["3.201.6"] = "Dip Familiar (white)", ["3.201.12"] = "Dip Familiar (stone)", ["3.201.13"] = "Dip Familiar (flaming)", ["3.201.14"] = "Dip Familiar (stinky)", ["3.201.20"] = "Dip Familiar (Brownie)", ["3.202"] = "Damocles", ["3.203"] = "Blood Oath", ["3.204"] = "Psy Fly", ["3.205"] = "Menorah", ["3.206"] = "Wisp Familiar", ["3.207"] = "Peepers Other Eye", ["3.208"] = "Boiled Baby", ["3.209"] = "Freezer Baby", ["3.210"] = "Bird Cage", ["3.211"] = "Lost Soul", ["3.212"] = "Lil Dumpy", ["3.213"] = "Knife Piece 1", ["3.214"] = "Knife Piece 2", ["3.215"] = "Knife Piece 3", ["3.216"] = "Tinytoma", ["3.217"] = "Tinytoma (small)", ["3.218"] = "Bot Fly", ["3.219"] = "Dead Bird (permanent)", ["3.220"] = "Siren Minion", ["3.221"] = "Paschal Candle", ["3.222"] = "Stitches", ["3.223"] = "Full Knife", ["3.224"] = "Baby Plum (familiar)", ["3.225"] = "Fruity Plum", ["3.226"] = "Spin to Win", ["3.227"] = "Beths Heart", ["3.228"] = "Minisaac", ["3.229"] = "Swarm Fly Orbital", ["3.230"] = "Lil Abaddon", ["3.231"] = "Abyss Locust", ["3.232"] = "Lil Portal", ["3.233"] = "Worm Friend", ["3.234"] = "Bone Spur", ["3.235"] = "Twisted Baby 1", ["3.235.1"] = "Twisted Baby 2", ["3.236"] = "Star of Bethlehem", ["3.237"] = "Item Wisp Familiar", ["3.238"] = "Blood Baby", ["3.239"] = "Cube Baby", ["3.240"] = "Umbilical Baby", ["3.241"] = "Blood Puppy", ["3.242"] = "Vanishing Twin", ["3.243"] = "Decap Attack", ["3.244"] = "Esau Jr.", ["4.13"] = "Throwable Bomb", ["4.14"] = "Small Bomb", ["4.15"] = "Brimstone Bomb", ["4.16"] = "Bloody Sad Bomb", ["4.17"] = "Giga Bomb", ["4.18"] = "Golden Troll Bomb", ["4.19"] = "Rocket", ["4.20"] = "Giga Rocket", ["5.41"] = "Throwable Bomb (pickup)", ["5.20.7"] = "Golden Penny", ["5.69.2"] = "Black Sack", ["5.70.14"] = "Pill Gold-Gold", ["5.70.2049"] = "Horse Pill Blue-Blue", ["5.70.2050"] = "Horse Pill White-Blue", ["5.70.2051"] = "Horse Pill Orange-Orange", ["5.70.2052"] = "Horse Pill White-White", ["5.70.2053"] = "Horse Pill Dots-Red", ["5.70.2054"] = "Horse Pill Pink-Red", ["5.70.2055"] = "Horse Pill Blue-Cadetblue", ["5.70.2056"] = "Horse Pill Yellow-Orange", ["5.70.2057"] = "Horse Pill Dots-White", ["5.70.2058"] = "Horse Pill White-Azure", ["5.70.2059"] = "Horse Pill Black-Yellow", ["5.70.2060"] = "Horse Pill White-Black", ["5.70.2061"] = "Horse Pill White-Yellow", ["5.70.2062"] = "Horse Pill Gold-Gold", ["5.10.12"] = "Rotten Heart", ["5.42"] = "Poop Nugget", ["5.42.1"] = "Big Poop Nugget", ["5.40.7"] = "Giga Bomb", ["5.90.3"] = "Mega Battery", ["5.90.4"] = "Golden Battery", ["5.300.14"] = "Reverse Tarot Card", ["5.300.15"] = "Cracked Key", ["5.300.16"] = "Treasure Card", ["5.300.17"] = "Unus Card", ["5.300.18"] = "Soul of Isaac", ["5.300.19"] = "Soul of Magdalene", ["5.300.20"] = "Soul of Cain", ["5.300.21"] = "Soul of Judas", ["5.300.22"] = "Soul of ???", ["5.300.23"] = "Soul of Eve", ["5.300.24"] = "Soul of Samson", ["5.300.25"] = "Soul of Azazel", ["5.300.26"] = "Soul of Lazarus", ["5.300.27"] = "Soul of Eden", ["5.300.28"] = "Soul of the Lost", ["5.300.29"] = "Soul of Lilith", ["5.300.30"] = "Soul of the Keeper", ["5.300.31"] = "Soul of Apollyon", ["5.300.32"] = "Soul of the Forgotten", ["5.300.33"] = "Soul of Bethany", ["5.300.34"] = "Soul of Jacob", ["5.380.10"] = "Mom's Bed", ["5.390"] = "Mom's Chest", ["5.55"] = "Old Chest", ["5.56"] = "Wooden Chest", ["5.57"] = "Mega Chest", ["5.58"] = "Haunted Chest", ["6.13"] = "Battery Bum", ["6.14"] = "Isaac (secret)", ["6.15"] = "Hell Game", ["6.16"] = "Crane Game", ["6.17"] = "Confessional", ["6.18"] = "Rotten Beggar", ["7.11"] = "Laser (Thicker Red)", ["7.12"] = "Laser (Thick Brown)", ["7.13"] = "Laser (Beast)", ["7.14"] = "Laser (Thicker Brimtech)", ["7.15"] = "Laser (Giant Brimtech)", ["8.3"] = "Donkey Jawbone", ["8.4"] = "Bag of Crafting", ["8.5"] = "Sumptorium", ["8.10"] = "Spirit Sword", ["8.11"] = "Tech Sword", ["9.8"] = "Grid Projectile", ["9.9"] = "Rock Projectile", ["9.11"] = "Meat Projectile", ["9.13"] = "Feather Projectile", ["9.14"] = "Lava Projectile", ["9.15"] = "Head Projectile", ["9.16"] = "Eyeball Projectile", ["10.3"] = "Rotten Gaper", ["10.3.1"] = "Rotten Gaper", ["10.3.2"] = "Rotten Gaper", ["10.3.3"] = "Rotten Gaper", ["10.3.4"] = "Rotten Gaper", ["10.3.5"] = "Rotten Gaper", ["14.2"] = "Tainted Pooter", ["15.3"] = "Grilled Clotty", ["19.2"] = "Tuff Twin", ["19.3"] = "The Shell", ["22.2"] = "Holy Mulligan", ["22.3"] = "Tainted Mulligan", ["23.3"] = "Carrion Princess", ["24.3"] = "Cursed Globin", ["25.3"] = "Dragon Fly", ["25.3.1"] = "Dragon Fly X", ["25.4"] = "Bone Fly", ["25.5"] = "Sick Boom Fly", ["25.6"] = "Tainted Boom Fly", ["27.3"] = "Hard Host", ["29.2"] = "Eggy", ["29.3"] = "Tainted Hopper", ["31.1"] = "Tainted Spitty", ["33.4"] = "White Fire Place", ["33.10"] = "Moveable Fireplace", ["33.12"] = "Moveable Blue Fireplace", ["33.13"] = "Moveable Purple Fireplace", ["34.1"] = "Sticky Leaper", ["38.1.1"] = "Angelic Baby (small)", ["38.3"] = "Wrinkly Baby", ["60.2"] = "Holy Eye", ["87.1"] = "Crackle", ["227.1"] = "Holy Bony", ["229.1"] = "Planetoid", ["244.2"] = "Tainted Round Worm", ["244.2.1"] = "Tainted Round Worm Butt", ["244.3"] = "Tainted Tube Worm", ["33.11"] = "Coal", ["33.11.1"] = "Coal", ["33.11.2"] = "Coal", ["33.11.3"] = "Coal", ["40.2"] = "Slog", ["41.2"] = "Loose Knight", ["41.3"] = "Brainless Knight", ["41.4"] = "Black Knight", ["42.2"] = "Triple Grimace", ["61.3"] = "Ink", ["57.2"] = "Dead Meat", ["61.4"] = "Mama Fly", ["61.5"] = "Bulb", ["61.6"] = "Bloodfly", ["61.7"] = "Tainted Sucker", ["62.3"] = "Wormwood", ["92.1"] = "Half Heart", ["92.1.1"] = "Half Heart", ["93.1"] = "Mask Ii", ["212.2"] = "Cursed Deaths Head", ["212.3"] = "Brimstone Deaths Head", ["212.4"] = "Redskull", ["239.100"] = "Corpse Eater", ["239.101"] = "Carrion Rider", ["240.1"] = "Soy Creep", ["240.2"] = "Rag Creep", ["240.3"] = "Tainted Soy Creep", ["241.1"] = "Split Rage Creep", ["269.1"] = "The Pile", ["306.1"] = "Lil Portal", ["802.0"] = "Blood Puppy", ["802.1"] = "Blood Puppy", ["803.0"] = "Blind Bat", ["804.0"] = "Quake Grimace", ["804.0.1"] = "Quake Grimace", ["804.0.2"] = "Quake Grimace", ["804.0.3"] = "Quake Grimace", ["805.0"] = "Bishop", ["806.0"] = "Bubbles", ["807.0"] = "Wraith", ["808.0"] = "Willo", ["809.0"] = "Bomb Grimace", ["810.0"] = "Small Leech", ["811.0"] = "Deep Gaper", ["811.0.1"] = "Deep Gaper", ["811.0.2"] = "Deep Gaper", ["811.0.3"] = "Deep Gaper", ["811.0.4"] = "Deep Gaper", ["811.0.5"] = "Deep Gaper", ["811.0.6"] = "Deep Gaper", ["812.0"] = "Sub Horf", ["812.1"] = "Tainted Sub Horf", ["813.0"] = "Blurb", ["814.0"] = "Strider", ["815.0"] = "Fissure", ["816.0"] = "Polty", ["816.1"] = "Kineti", ["817.0"] = "Prey", ["817.1"] = "Mullighoul", ["818.0"] = "Rock Spider", ["818.0.1"] = "Rock Spider", ["818.0.2"] = "Rock Spider", ["818.0.3"] = "Rock Spider", ["818.1"] = "Tinted Rock Spider", ["818.1.1"] = "Tinted Rock Spider", ["818.1.2"] = "Tinted Rock Spider", ["818.1.3"] = "Tinted Rock Spider", ["818.2"] = "Coal Spider", ["818.2.1"] = "Coal Spider", ["818.2.2"] = "Coal Spider", ["818.2.3"] = "Coal Spider", ["819.0"] = "Fly Bomb", ["819.1"] = "Eternal Fly Bomb", ["820.0"] = "Danny", ["820.1"] = "Coal Boy", ["821.0"] = "Blaster", ["822.0"] = "Bouncer", ["823.0"] = "Quakey", ["824.0"] = "Gyro", ["824.1"] = "Grilled Gyro", ["825.0"] = "Fire Worm", ["826.0"] = "Hardy", ["827.0"] = "Faceless", ["827.1"] = "Tainted Faceless", ["828.0"] = "Necro", ["829.0"] = "Mole", ["829.1"] = "Tainted Mole", ["830.0"] = "Big Bony", ["830.10"] = "Big Bone", ["831.0"] = "Gutted Fatty", ["831.10"] = "Gutted Fatty Eye", ["831.20"] = "Festering Guts", ["832.0"] = "Exorcist", ["832.1"] = "Fanatic", ["833.0"] = "Candler", ["834.0"] = "Whipper", ["834.1"] = "Snapper", ["834.2"] = "Flagellant", ["835.0"] = "Peeping Fatty", ["835.10"] = "Peeping Fatty Eye", ["836.0"] = "Vis Versa", ["837.0"] = "Henry", ["838.0"] = "Level 2 Willo", ["839.0"] = "Strifer", ["840.0"] = "Pon", ["841.0"] = "Revenant", ["841.1"] = "Quad Revenant", ["842.0"] = "Nightwatch", ["843.0"] = "Canary", ["843.1"] = "Foreigner", ["844.0"] = "Bombgagger", ["850.0"] = "Level 2 Gaper", ["850.1"] = "Level 2 Horf", ["850.2"] = "Level 2 Gusher", ["851.0"] = "Twitchy", ["852.0"] = "Spikeball", ["853.0"] = "Small Maggot", ["854.0"] = "Adult Leech", ["855.0"] = "Level 2 Charger", ["855.1"] = "Elleech", ["856.0"] = "Gasbag", ["857.0"] = "Cohort", ["858.0"] = "Vessel", ["859.0"] = "Floast", ["860.0"] = "Unborn", ["861.0"] = "Pustule", ["862.0"] = "Cyst", ["863.0"] = "Morningstar", ["863.0.1"] = "Morningstar", ["863.0.2"] = "Morningstar", ["864.0"] = "Mockulus", ["865.0"] = "Evis", ["865.10"] = "Evis Guts", ["866.0"] = "Dark Esau", ["866.0.1"] = "Darker Esau", ["866.1"] = "Dark Esau's Pit", ["867.0"] = "Mothers Shadow", ["868.0"] = "Army Fly", ["869.0"] = "Migraine", ["870.0"] = "Drip", ["871.0"] = "Splurt", ["872.0"] = "Cloggy", ["873.0"] = "Fly Trap", ["874.0"] = "Gas Dwarf", ["217.3"] = "Big Corn", ["875.0"] = "Poot Mine", ["876.0"] = "Dump", ["876.1"] = "Dump Head", ["877.0"] = "Grudge", ["878.0"] = "Butt Slicker", ["879.0"] = "Bloaty", ["880.0"] = "Flesh Maiden", ["881.0"] = "Needle", ["881.1"] = "Pasty", ["882.0"] = "Dust", ["883.0"] = "Baby Begotten", ["884.0"] = "Swarm Spider", ["885.0"] = "Cultist", ["885.1"] = "Blood Cultist", ["885.10"] = "Bone Trap", ["886.0"] = "Vis Fatty", ["886.1"] = "Fetal Demon", ["887.0"] = "Dusty Deaths Head", ["888.0"] = "Shady", ["889.0"] = "Clickety Clack", ["890.0"] = "Maze Roamer", ["890.0.1"] = "Maze Roamer", ["891.0"] = "Goat", ["891.1"] = "Black Goat", ["892.0"] = "Poofer", ["893.0"] = "Ball And Chain", ["900.0"] = "Reap Creep", ["901.0"] = "Lil Blub", ["902.0"] = "Rainmaker", ["903.0"] = "The Visage", ["903.1"] = "Visage Mask", ["903.10"] = "Visage Chain", ["903.20"] = "Visage Plasma", ["904.0"] = "Siren", ["904.1"] = "Siren's Skull", ["904.10"] = "Siren Helper Projectile", ["905.0"] = "The Heretic", ["906.0"] = "Hornfel", ["906.1"] = "Hornfel Decoy", ["907.0"] = "Great Gideon", ["907.0.1"] = "Great Gideon (defeated)", ["908.0"] = "Baby Plum", ["909.0"] = "The Scourge", ["909.10"] = "The Scourge (chain)", ["910.0"] = "Chimera", ["910.1"] = "Chimera (body)", ["910.2"] = "Chimera (head)", ["911.0"] = "Rotgut", ["911.1"] = "Rotgut (maggot)", ["911.2"] = "Rotgut (heart)", ["912.0"] = "Mother", ["912.10"] = "Mother 2", ["912.20"] = "Dead Isaac", ["912.30"] = "Mother Worm", ["912.100"] = "Mother Ball", ["912.100.1"] = "Mother Ball (Medium)", ["912.100.2"] = "Mother Ball (Small)", ["913.0"] = "Min Min", ["914.0"] = "Clog", ["915.0"] = "Singe", ["915.1"] = "Singe's Ball", ["916.0"] = "Bumbino", ["917.0"] = "Colostomia", ["918.0"] = "Turdlet", ["919.0"] = "Raglich", ["919.1"] = "Raglich Arm", ["920.0"] = "Horny Boys", ["921.0"] = "Clutch", ["921.1"] = "Clutch Orbital", ["950.0"] = "Dogma", ["950.1"] = "Dogma's TV", ["950.2"] = "Dogma Angel", ["950.10"] = "Dogma Angel Baby", ["951.1"] = "Stalactite", ["951.2"] = "Beast Rock Projectile", ["951.3"] = "Beast Soul", ["951.10"] = "Ultra Famine", ["951.11"] = "Ultra Famine Fly", ["951.20"] = "Ultra Pestilence", ["951.21"] = "Ultra Pestilence Fly", ["951.22"] = "Ultra Pestilence Maggot", ["951.23"] = "Ultra Pestilence Fly Ball", ["951.30"] = "Ultra War", ["951.31"] = "Ultra War Bomb", ["951.40"] = "Ultra Death", ["951.41"] = "Ultra Death Scythe", ["951.42"] = "Ultra Death Head", ["951.0"] = "The Beast", ["951.100"] = "Background (Beast)", ["951.101"] = "Background (Famine)", ["951.102"] = "Background (Pestilence)", ["951.103"] = "Background (War)", ["951.104"] = "Background (Death)", ["960.0"] = "Generic Prop", ["960.1"] = "Mom's Dresser", ["960.2"] = "Mom's Vanity", ["960.3"] = "Couch", ["960.4"] = "TV", ["963.0"] = "Frozen Enemy", ["964.0"] = "Dummy", ["965.0"] = "Minecart", ["966.0"] = "Siren Helper", ["967.0"] = "Hornfel Door", ["1000.12.20"] = "Key Tear Poof", ["1000.12.21"] = "Bloody Key Tear Poof", ["1000.12.22"] = "Sword Tear Poof", ["1000.12.23"] = "Tech Sword Tear Poof", ["1000.16.66"] = "Lava Splash", ["1000.16.67"] = "Lava Splash (Large)", ["1000.50.6"] = "Big Brimstone Impact", ["1000.50.7"] = "Brimstone Impact (Poop)", ["1000.123.2"] = "Monstrance Halo", ["1000.123.3"] = "Curse Halo", ["1000.123.4"] = "Static Halo", ["1000.123.5"] = "Saturnus Halo", ["1000.123.6"] = "Thorns Halo", ["1000.123.7"] = "Static Halo (Prerendered)", ["1000.123.8"] = "Dark Arts Halo", ["1000.74.1"] = "Mom's Carpet", ["1000.74.2"] = "Mom's Carpet", ["1000.130"] = "Leech Explosion", ["1000.131"] = "Maggot Explosion", ["1000.132"] = "Big Water Splash", ["1000.132.1"] = "Static Splash", ["1000.132.2"] = "Static Splash 2", ["1000.133"] = "Water Ripple", ["1000.133.1"] = "Small Water Ripple", ["1000.134"] = "Pedestal Ripple", ["1000.135"] = "Rain Drop", ["1000.136"] = "Grid Projectile Helper", ["1000.137"] = "Wormwood Hole", ["1000.137.1"] = "Wormwood Hole Spray", ["1000.138"] = "Mist", ["1000.139"] = "Trap Door Cover", ["1000.140"] = "Backdrop Decoration", ["1000.141"] = "Smoke Cloud", ["1000.142"] = "Whirlpool", ["1000.142.1"] = "Whirlpool Particle", ["1000.143"] = "Fartwave", ["1000.144"] = "Enemy Ghost", ["1000.145"] = "Rock Tear Poof", ["1000.146"] = "Dirt Pile", ["1000.147"] = "Fire Jet", ["1000.147.1"] = "Fire Jet (purple)", ["1000.148"] = "Fire Wave", ["1000.149"] = "Big Rock Explosion", ["1000.150"] = "Big Rock Wave", ["1000.151"] = "Gideon Attract Ring", ["1000.151.1"] = "Gideon Attract Trail", ["1000.151.10"] = "Shockwave Ring", ["1000.151.11"] = "Shockwave Trail", ["1000.152"] = "Hornfel Room Controller", ["1000.153"] = "Occult Target", ["1000.154"] = "Door Outline", ["1000.39.1"] = "Moonlight", ["1000.155"] = "Slippery Brown Creep (growing)", ["1000.156"] = "Tall Ladder", ["1000.156.1"] = "Stairway", ["1000.157"] = "Willo Spawner", ["1000.158"] = "Tadpole", ["1000.159"] = "Lil Ghost", ["1000.160"] = "Bishop Shield", ["1000.161"] = "Portal Teleport", ["1000.162"] = "Heretic Pentagram", ["1000.163"] = "Chain Gib", ["1000.164"] = "Siren Ring", ["1000.165"] = "Siren Charm Effect", ["1000.165.1"] = "Siren Charm Glow", ["1000.166"] = "Sprite Trail", ["1000.167"] = "Chain Lightning", ["1000.168"] = "Colostomia Puddle", ["1000.169"] = "Creep (Static)", ["1000.170"] = "Dogma Debris", ["1000.171"] = "Dogma Blackhole", ["1000.172"] = "Dogma Orb", ["1000.173"] = "Cracked Orb Poof", ["1000.174"] = "Shop Spikes", ["1000.175"] = "Kineti Beam", ["1000.176"] = "Cleaver Slash", ["1000.177"] = "Reverse Explosion", ["1000.177.1"] = "Reverse Explosion Debris", ["1000.178"] = "Urn of Souls", ["1000.178.1"] = "Urn of Souls (Belial)", ["1000.179"] = "Enemy Soul", ["1000.179.1"] = "Enemy Soul (Belial)", ["1000.180"] = "Rift", ["1000.181"] = "Lava Spawner", ["1000.182"] = "Big Knife Projectile", ["1000.183"] = "Mother Shockwave", ["1000.184"] = "Worm Friend Snare", ["1000.185"] = "Redemption", ["1000.186"] = "Hungry Soul", ["1000.187"] = "Explosion Wave", ["1000.188"] = "Divine Intervention", ["1000.189"] = "Purgatory Rift", ["1000.189.1"] = "Purgatory Soul", ["1000.190"] = "Mother Tracer", ["1000.191"] = "Pickup Ghost", ["1000.192"] = "Fissure Spawner", ["1000.193"] = "Anima Chain", ["1000.194"] = "Dark Snare", ["1000.195"] = "Liquid Poop Creep", ["1000.196"] = "Ground Glow", ["1000.197"] = "Dead Bird", ["1000.198"] = "Generic Tracer", ["1000.199"] = "Ultra Death Scythe", ["1000.200"] = "Bullet Poof (Static)", ["1000.201"] = "Umbilical Cord Helper", } From a8bef3f220cc818cd643bdf7629a252fda4d3e8c Mon Sep 17 00:00:00 2001 From: Buurazu Date: Wed, 12 Jan 2022 21:55:36 -0500 Subject: [PATCH 10/36] Don't include SubType if it's 0 --- scripts/lookuptable_generator.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/lookuptable_generator.py b/scripts/lookuptable_generator.py index b5134942..3eb9895b 100644 --- a/scripts/lookuptable_generator.py +++ b/scripts/lookuptable_generator.py @@ -9,7 +9,7 @@ filePath = "D:\\Programme\\Steam\\steamapps\\common\\The Binding of Isaac Rebirt # take second element for sort def sortByID(elem): return elem["id"] -recipies = [] +recipes = [] itemQuality = [] itempools = {} itemIDToPool = {} @@ -55,7 +55,7 @@ for recipe in recipesXML.findall('recipe'): convertedInput.sort() convertedInput = str(convertedInput).replace(" ","").replace("[","").replace("]","") - recipies.append({"input": convertedInput, "output": recipe.get('output')}) + recipes.append({"input": convertedInput, "output": recipe.get('output')}) # Read items_metadata.xml items_metadataXML = ET.parse(filePath+'items_metadata.xml').getroot() @@ -100,7 +100,7 @@ for entity in entitiesXML.findall('entity'): theName = entity.get('name') if entity.get('variant'): theID += "." + entity.get('variant') - if entity.get('subtype'): + if entity.get('subtype') and entity.get('subtype') != "0": theID += "." + entity.get('subtype') if theName[0] == '#': theName = theName[1:].replace('_',' ').title() @@ -119,7 +119,7 @@ newfile.write("EID.XMLMaxItemID = "+str(maxItemID) + "\n") newfile.write("--The fixed recipes, for use in Bag of Crafting\n") newfile.write("EID.XMLRecipes = {") -for recipe in recipies: +for recipe in recipes: newfile.write("[\""+recipe["input"]+"\"] = "+str(recipe["output"])+", ") newfile.write("}\n\n") From c3c3f3d1feb5ab6eb79da01ee96bc99a305518ca Mon Sep 17 00:00:00 2001 From: Buurazu Date: Thu, 13 Jan 2022 17:06:43 -0500 Subject: [PATCH 11/36] v0.8 --- eid_tmtrainer.lua | 174 +++++++++++++++++----------------------------- 1 file changed, 62 insertions(+), 112 deletions(-) diff --git a/eid_tmtrainer.lua b/eid_tmtrainer.lua index 8a7ad49a..601f1adb 100644 --- a/eid_tmtrainer.lua +++ b/eid_tmtrainer.lua @@ -13,6 +13,7 @@ local game = Game() -- glitched items start at 4294967295 local maxNumber = 4294967296 local spawnedItems = 0 +local lastEffectTrigger = "chain" local logLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/log.txt" local logFound = false @@ -23,76 +24,22 @@ local debugLog = io.open(debugLogLocation, "w+") -- all possible attributes --local itemConfigItemAttributes = { "AchievementID", "AddBlackHearts", "AddBombs", "AddCoins", "AddHearts", "AddKeys", "AddMaxHearts", "AddSoulHearts", "CacheFlags", "ChargeType", "ClearEffectsOnRemove", "Costume", "Description", "DevilPrice", "Discharged", "GfxFileName", "Hidden", "ID", "InitCharge", "MaxCharges", "MaxCooldown", "Name", "PassiveCache", "PersistentEffect", "Quality", "ShopPrice", "Special", "Tags", "Type" } --- the traits here will be listed in this order +-- the traits here will be checked and listed in this order local itemConfigItemAttributes = { "AddMaxHearts", "AddHearts", "AddSoulHearts", "AddBlackHearts", "AddBombs", "AddCoins", "AddKeys", "CacheFlags" } -local cacheFlagNames = { [0] = "Damage", "Fire Delay", "Shot Speed", "Range", "Speed", "Tear Effects", "Tear Color", "Flying", "Weapon", "Familiars", "Luck", "Size", "Color", "Pickup Vision", [16] = "All Stats" } - --- cache flags: math.pow(2, i) | flags ~= 0 - ---currently english only -local attributeConversions = { - --chain = "Then: ", - chain = "", - active = "On use:", - pickup_collected = "When you collect a pickup:", --chance to? - enemy_kill = "On kill, chance to:", - damage_taken = "When you take damage:", --chance to? - entity_spawned = "When a {{ColorGray}}{T1}{{ColorText}} is spawned, chance to:", - tear_fire = "When you fire a tear, chance to:", - enemy_hit = "On hitting an enemy, chance to:", - room_clear = "On room clear:", --chance to? - - area_damage = "Deal {1} damage in an area around you", - add_temporary_effect = "Gain {1} for the room", - convert_entities = "Convert all {{ColorGray}}{1}{{ColorText}} in the room to {{ColorGray}}{2}{{ColorText}}", - use_active_item = "Use {1}", - spawn_entity = "Spawn a {{ColorGray}}{1}{{ColorText}}", - fart = "Fart with size {1}", - - AddBlackHearts = "{1} Black Heart", - AddBombs = "{1} Bomb", - AddCoins = "{1} Coin", - AddHearts = "Heals {1} Red Heart", - AddKeys = "{1} Key", - AddMaxHearts = "{1} Heart Container", - AddSoulHearts = "{1} Soul Heart", - -} - ---999.-1? ---1000.50: Laser Impact? It couldn't find that? -local genericEntityNames = { - ["2.-1"] = "tear", - ["4.-1"] = "lit Bomb", - ["5.-1"] = "pickup", - ["5.10"] = "Heart", - ["5.20"] = "Coin", - ["5.30"] = "Key", - ["5.40"] = "Bomb pickup", - ["5.69"] = "Grab Bag", - ["5.70"] = "Pill", - ["5.300"] = "Card", - - ["9.-1"] = "projectile", - ["999.-1"] = "grid-aligned object", - ["1000.0"] = "effect", -} - -local lastEffectTrigger = "chain" local function entityToName(e, plural) - -- -1 is often used as an "any of this type", so converting it to 0 can help + local localizedNames = EID:getDescriptionEntry("GlitchedItemText") + -- -1 is often used as an "any of this type", even if there's only one of that type, so converting it to 0 can help find names local eWithZero = string.gsub(e, "-1", "0") plural = plural or false - local name = genericEntityNames[e] or EID.XMLEntityNames[e] or genericEntityNames[eWithZero] or EID.XMLEntityNames[eWithZero] or "NO NAME" - if name == "NO NAME" then - debugLog:write(e .. "\n") - debugLog:flush() - print(e) - elseif plural then - name = name .. "s" - end - if name == "NO NAME" then return e end + local name = localizedNames[e] or EID.XMLEntityNames[e] or localizedNames[eWithZero] or EID.XMLEntityNames[eWithZero] or e + + --debug print entities with no name yet + if name == e then print("Report this: No name found for " .. e) end + + --language check? + if plural then name = name .. localizedNames["pluralize"] end + return name end @@ -115,9 +62,6 @@ local function parseEffectLine(raw) local fullEffect = "" for i=5,#words do fullEffect = fullEffect .. words[i] .. " " end - - local extraText = "" - -- switch statement for how to handle the words after the effect type if effectType == "add_temporary_effect" or effectType == "use_active_item" then -- remainder of line = collectible name that's granted for the room local name = "" @@ -135,14 +79,15 @@ local function parseEffectLine(raw) elseif effectType == "fart" then replacements[1] = words[6] elseif effectType == "area_damage" then - --It also has flags in words[8] but they don't seem very useful, usually all zeroes replacements[1] = words[6] + -- bug with chain "Then:"! maybe we should just show the 0's since it matters if words[6] == "0" then printEffect = false end end + local localizedNames = EID:getDescriptionEntry("GlitchedItemText") local eidString = "" - if effectTrigger ~= lastEffectTrigger then eidString = eidString .. (attributeConversions[effectTrigger] or effectTrigger) .. "#" end - if printEffect then eidString = eidString .. (attributeConversions[effectType] or fullEffect) .. extraText .. "#" end + if effectTrigger ~= lastEffectTrigger then eidString = eidString .. (localizedNames[effectTrigger] or (effectTrigger .. "#")) end + if printEffect then eidString = eidString .. (localizedNames[effectType] or fullEffect) .. "#" end for k,v in ipairs(triggerReplacements) do eidString = string.gsub(eidString, "{T" .. k .. "}", v) end for k,v in ipairs(replacements) do eidString = string.gsub(eidString, "{" .. k .. "}", v) end @@ -150,6 +95,48 @@ local function parseEffectLine(raw) return eidString end +local function CheckItemConfigItem(id) + -- check for the item ID's ItemConfig attributes (hearts added on pickup, cacheflags affected) + -- unfortunately there doesn't seem to be any way to know exactly how it will affect the cacheflag stats + local localizedNames = EID:getDescriptionEntry("GlitchedItemText") + local config = Isaac.GetItemConfig() + local item = config:GetCollectible(maxNumber - spawnedItems) + local attributes = "" + for k,v in ipairs(itemConfigItemAttributes) do + local attrib = item[v] + if attrib ~= 0 then + if (v == "CacheFlags") then + local flagString = localizedNames["cacheFlagStart"] + if attrib == CacheFlag.CACHE_ALL then + flagString = flagString .. localizedNames[16] + else + for i=0, 13 do + if 2^i & attrib ~= 0 then + flagString = flagString .. localizedNames[i] .. ", " + end + end + flagString = string.sub(flagString, 0, -3) -- remove final comma + end + attributes = attributes .. flagString .. "#" + else + -- the Add Heart attributes count half a heart as 1, so divide the value in half + if string.find(v, "Hearts") then attrib = attrib / 2 end + -- the g flag removes .0 in numbers like 1.0 (caused by the hearts division) + local s = string.format("%.4g",attrib) + if attrib > 0 then s = "+" .. s end + attributes = attributes .. string.gsub(localizedNames[v], "{1}", s) + if attrib ~= 1 and attrib ~= -1 then attributes = attributes .. localizedNames["pluralize"] end + attributes = attributes .. "#" + end + end + end + return attributes +end + +--TODO: Add an option for displaying glitched item descriptions check it here +-- Move the item config part to API, it can be used without luadebug +-- bag of crafting hold use to reset bag + local function CheckLogForItems(_) if (not logFound or game:GetFrameCount() % 5 ~= 0 or not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER)) then return end @@ -176,50 +163,11 @@ local function CheckLogForItems(_) numEffects = numEffects - 1 eidDesc = eidDesc .. parseEffectLine(line) if numEffects == 0 then - -- Glowing Hour Glass type effects will cause the game to reload all items, check if our desc is equal to the first one + -- Glowing Hour Glass type effects seem to cause the game to reload all items, check if our desc is equal to the first one if (EID:getDescriptionObj(5, 100, maxNumber - 1).Description == eidDesc) then spawnedItems = 1 end - -- check for the item's ItemConfig attributes - local config = Isaac.GetItemConfig() - local item = config:GetCollectible(maxNumber - spawnedItems) - print(item) - debugLog:write((maxNumber - spawnedItems) .. "\n") - local attributes = "" - for k,v in ipairs(itemConfigItemAttributes) do - local attrib = item[v] - if attrib ~= 0 then - if (v == "CacheFlags") then - local flagString = "Might affect " - if attrib == CacheFlag.CACHE_ALL then - flagString = flagString .. cacheFlagNames[16] - else - for i=0, 13 do - if 2^i & attrib ~= 0 then - flagString = flagString .. cacheFlagNames[i] .. ", " - end - end - flagString = string.sub(flagString, 0, -3) - end - attributes = attributes .. flagString .. "#" - else - -- the Add Heart attributes count half a heart as 1, so divide the value in half - if string.find(v, "Hearts") then attrib = attrib / 2 end - -- the g flag removes .0 in numbers like 1.0 (caused by the hearts division) - local s = string.format("%.4g",attrib) - if attrib > 0 then s = "+" .. s end - attributes = attributes .. string.gsub(attributeConversions[v], "{1}", s) - --things like this don't localize well at all... - if attrib > 1 or attrib < -1 then attributes = attributes .. "s" end - attributes = attributes .. "#" - end - end - debugLog:write(v .. ": " .. tostring(item[v]) .. "\n") - end - eidDesc = attributes .. eidDesc - debugLog:flush() - + eidDesc = CheckItemConfigItem(maxNumber - spawnedItems) .. eidDesc EID:addCollectible(maxNumber - spawnedItems, eidDesc) - --print("adding " .. (maxNumber - spawnedItems)) end end @@ -235,12 +183,14 @@ local function GameStartTMTRAINER(_,isSave) local theLog = io.open(logLocation, "r") if (theLog == nil) then print("[EID] Could not find the log file at " .. logLocation .. "; glitched item descriptions won't work!") + Isaac.DebugString("[EID] Could not find the log file at " .. logLocation .. "; glitched item descriptions won't work!") logFound = false return else logFound = true end + -- luckily, when the game reloads, it also reloads all glitched items, so resuming works perfectly as long as we start at the beginning spawnedItems = 0 end EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, GameStartTMTRAINER) From 7815aeaaff6fb58879bfd34962ec2549ba0898be Mon Sep 17 00:00:00 2001 From: Buurazu Date: Thu, 13 Jan 2022 17:07:20 -0500 Subject: [PATCH 12/36] Glitched Item Descriptions text --- descriptions/rep/en_us.lua | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/descriptions/rep/en_us.lua b/descriptions/rep/en_us.lua index 3bfc7eaf..9f1bef38 100644 --- a/descriptions/rep/en_us.lua +++ b/descriptions/rep/en_us.lua @@ -951,6 +951,62 @@ EID.descriptions[languageCode].horsepills={ [9999] = {"", "Golden Pill", "Random horse pill effect#Destroys itself after a few uses"}, -- Golden Pill } +---------- Glitched Item Descriptions ---------- + +EID.descriptions[languageCode].GlitchedItemText = { + -- This will be appended to words to pluralize them, make it "" to not pluralize + pluralize = "s", + + -- Item Config info + AddBlackHearts = "{1} Black Heart", + AddBombs = "{1} Bomb", + AddCoins = "{1} Coin", + AddHearts = "Heals {1} Red Heart", + AddKeys = "{1} Key", + AddMaxHearts = "{1} Heart Container", + AddSoulHearts = "{1} Soul Heart", + + -- Cache Flag names + cacheFlagStart = "May affect ", + [0] = "Damage", "Fire Rate", "Shot Speed", "Range", "Speed", "Tear Effects", "Tear Color", "Flight", "Attack Type", "Familiars", "Luck", "Size", "Color", "Chest Contents", [16] = "All Stats", + + -- Attribute triggers + chain = "Then: ", + active = "On use:#", + pickup_collected = "When you collect a pickup:#", --chance to? + enemy_kill = "On kill, chance to:#", + damage_taken = "When you take damage:#", --chance to? + entity_spawned = "When a {{ColorGray}}{T1}{{ColorText}} is spawned:#", + tear_fire = "When you fire a tear, chance to:#", + enemy_hit = "On hitting an enemy, chance to:#", + room_clear = "On room clear:#", --chance to? + + -- Attribute effects + area_damage = "Deal {1} damage in an area around you", + add_temporary_effect = "Gain {1} for the room", + convert_entities = "Convert all {{ColorGray}}{1}{{ColorText}} in the room to {{ColorGray}}{2}{{ColorText}}", + use_active_item = "Use {1}", + spawn_entity = "Spawn a {{ColorGray}}{1}{{ColorText}}", + fart = "Fart with size {1}", + + -- Generic entity names not obtained from entities2.xml + -- This could also be a place to localize entity names; this table is read from before EID.XMLEntityNames + ["4.-1"] = "lit Bomb", + ["5.0"] = "pickup", + ["5.10"] = "Heart", + ["5.20"] = "Coin", + ["5.30"] = "Key", + ["5.40"] = "Bomb pickup", + ["5.69"] = "Grab Bag", + ["5.70"] = "Pill", + ["5.90"] = "Battery", + ["5.300"] = "Card", + ["9.-1"] = "enemy projectile", + ["999.-1"] = "grid object", + ["1000.0"] = "effect", + +} + ---------- Misc. Text ---------- EID.descriptions[languageCode].spindownError = "Item disappears" From de686bd8bc68476532396a9659b8fae22ad216c1 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Thu, 13 Jan 2022 22:45:21 -0500 Subject: [PATCH 13/36] Reduce EID:getDescriptionObj calls --- eid_bagofcrafting.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eid_bagofcrafting.lua b/eid_bagofcrafting.lua index f8a130b8..ba3bfa9e 100644 --- a/eid_bagofcrafting.lua +++ b/eid_bagofcrafting.lua @@ -784,9 +784,6 @@ function EID:handleBagOfCraftingRendering() local tableToCraftingIconsFunc = EID.tableToCraftingIconsMerged if EID.Config["BagOfCraftingDisplayIcons"] then tableToCraftingIconsFunc = EID.tableToCraftingIconsFull end - local customDescObj = EID:getDescriptionObj(5, 100, 710) - customDescObj.Description = "" - --prevent our hotkeys from triggering as they're set if not ModConfigMenu or not ModConfigMenu.IsVisible then if Input.IsButtonTriggered(EID.Config["CraftingHideKey"], 0) or Input.IsButtonTriggered(EID.Config["CraftingHideButton"], EID.player.ControllerIndex) then @@ -885,6 +882,9 @@ function EID:handleBagOfCraftingRendering() --sort by ingredient quality table.sort(itemQuery, qualitySort) + local customDescObj = EID:getDescriptionObj(5, 100, 710) + customDescObj.Description = "" + --No Recipes Mode display if EID.Config["BagOfCraftingDisplayMode"] == "Pickups Only" then EID:appendToDescription(customDescObj, getHotkeyString()) From 52f075b7e8526773006c0f2ee9b6d4330533ad4c Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 00:27:43 -0500 Subject: [PATCH 14/36] add Glitched Item Info toggle --- eid_config.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/eid_config.lua b/eid_config.lua index ac76a001..2327c8ae 100644 --- a/eid_config.lua +++ b/eid_config.lua @@ -183,6 +183,14 @@ EID.UserConfig = { -- Default = false ["ShowUnidentifiedPillDescriptions"] = false, + ------------Glitched Items-------------- + -- Toggle Display of Glitched Item (TMTRAINER) descriptions + -- Note: The --luadebug launch option is required for more detailed glitched item descriptions + -- This option allows mods to have access to your files and should be turned on at your own risk! + -- Without --luadebug, you still can see the effect the item will have on your Hearts, and what stats it might modify + -- Default = true + ["DisplayGlitchedItemInfo"] = true, + --------Sacrifice Room--------- -- Toggle Display of next Sacrifice room Payout descriptions @@ -360,6 +368,7 @@ EID.DefaultConfig = { ["DisplayPillInfoOptions?"] = true, ["DisplayObstructedPillInfo"] = false, ["ShowUnidentifiedPillDescriptions"] = false, + ["DisplayGlitchedItemInfo"] = true, ["DisplaySacrificeInfo"] = true, ["DisplayDiceInfo"] = true, ["DisplayBagOfCrafting"] = "always", From a4011cd6f9fefb463dbf17be5d024c2ca3555c46 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 01:55:32 -0500 Subject: [PATCH 15/36] remind myself for later --- eid_data.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eid_data.lua b/eid_data.lua index 6a3c7884..8b6080d0 100644 --- a/eid_data.lua +++ b/eid_data.lua @@ -227,7 +227,8 @@ EID.InlineIcons = { ["Quality2"] = {"Quality", 2, 10, 10, 0, 0}, ["Quality3"] = {"Quality", 3, 10, 10, 0, 0}, ["Quality4"] = {"Quality", 4, 10, 10, 0, 0}, - -- Controller Button Icons (XBox based) + -- Controller Button Icons dynamically return either Controller or Keyboard key sprites + --need to make not dynamic ones for bag of crafting hotkey display? ["ButtonY"] = {"XboxOne", 0, 9, 8, 3, 4, function(_) return getControllerSprite() end}, ["ButtonA"] = {"XboxOne", 1, 9, 8, 3, 4, function(_) return getControllerSprite() end}, ["ButtonB"] = {"XboxOne", 2, 9, 8, 3, 4, function(_) return getControllerSprite() end}, From da0b7b91f3455f20332b6cecc8f0a0d1cc2e77ce Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 01:56:03 -0500 Subject: [PATCH 16/36] Glitched Item Description toggle --- mod_config_menu.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mod_config_menu.lua b/mod_config_menu.lua index 141bf09f..b58d436a 100644 --- a/mod_config_menu.lua +++ b/mod_config_menu.lua @@ -604,6 +604,28 @@ if MCMLoaded then end } ) + ------------Glitched Items-------------- + MCM.AddSetting( + "EID", + "Display", + { + Type = ModConfigMenu.OptionType.BOOLEAN, + CurrentSetting = function() + return EID.Config["DisplayGlitchedItemInfo"] + end, + Display = function() + local onOff = "False" + if EID.Config["DisplayGlitchedItemInfo"] then + onOff = "True" + end + return "Glitched Item Infos: " .. onOff + end, + OnChange = function(currentBool) + EID.Config["DisplayGlitchedItemInfo"] = currentBool + end, + Info = {"Note: The --luadebug launch option is required for more detailed glitched item descriptions"} + } + ) --------Sacrifice Room--------- MCM.AddSetting( "EID", From 9210158b64a5090664f7842b05192f55ebf8cab4 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 01:57:20 -0500 Subject: [PATCH 17/36] Add Glitched Item handling --- main.lua | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/main.lua b/main.lua index 7f0e4e30..fe486372 100644 --- a/main.lua +++ b/main.lua @@ -812,6 +812,23 @@ local function onRender(t) return end + --Handle Glitched Items + if closest.Type == 5 and closest.Variant == 100 and closest.SubType > 4294960000 then + local glitchedObj = EID.getDescriptionObj(closest.Type, closest.Variant, closest.SubType) + local glitchedDesc = EID:getXMLDescription(closest.Type, closest.Variant, closest.SubType) + + -- force the default glitchy description if option is off + if not EID.Config["DisplayGlitchedItemInfo"] then + glitchedObj.Description = glitchedDesc + -- grab the Item Config info if eid_tmtrainer.lua hasn't taken care of it + elseif not debug then + glitchedObj.Description = EID:CheckGlitchedItemConfig(closest.SubType) .. glitchedDesc + end + + EID:printDescription(glitchedObj) + return + end + if closest.Type == 1000 and closest.Variant == 76 then EID:printDescription(EID:getDescriptionObj(closest.Type, closest.Variant, closest.SubType+1)) return From dce1c7903daff52fac82dfc23541d6aa6bccf5a3 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 01:58:22 -0500 Subject: [PATCH 18/36] v1.0? --- eid_tmtrainer.lua | 62 ++++++----------------------------------------- 1 file changed, 7 insertions(+), 55 deletions(-) diff --git a/eid_tmtrainer.lua b/eid_tmtrainer.lua index 601f1adb..194803ea 100644 --- a/eid_tmtrainer.lua +++ b/eid_tmtrainer.lua @@ -19,14 +19,6 @@ local logLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME local logFound = false local logCursor = 0 -local debugLogLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/tmtrainerlog.txt" -local debugLog = io.open(debugLogLocation, "w+") - --- all possible attributes ---local itemConfigItemAttributes = { "AchievementID", "AddBlackHearts", "AddBombs", "AddCoins", "AddHearts", "AddKeys", "AddMaxHearts", "AddSoulHearts", "CacheFlags", "ChargeType", "ClearEffectsOnRemove", "Costume", "Description", "DevilPrice", "Discharged", "GfxFileName", "Hidden", "ID", "InitCharge", "MaxCharges", "MaxCooldown", "Name", "PassiveCache", "PersistentEffect", "Quality", "ShopPrice", "Special", "Tags", "Type" } --- the traits here will be checked and listed in this order -local itemConfigItemAttributes = { "AddMaxHearts", "AddHearts", "AddSoulHearts", "AddBlackHearts", "AddBombs", "AddCoins", "AddKeys", "CacheFlags" } - local function entityToName(e, plural) local localizedNames = EID:getDescriptionEntry("GlitchedItemText") -- -1 is often used as an "any of this type", even if there's only one of that type, so converting it to 0 can help find names @@ -34,12 +26,10 @@ local function entityToName(e, plural) plural = plural or false local name = localizedNames[e] or EID.XMLEntityNames[e] or localizedNames[eWithZero] or EID.XMLEntityNames[eWithZero] or e - --debug print entities with no name yet - if name == e then print("Report this: No name found for " .. e) end + --print out entities with no name yet + if name == e then print("No name found for " .. e .. " (could be modded)") + elseif plural then name = name .. localizedNames["pluralize"] end - --language check? - if plural then name = name .. localizedNames["pluralize"] end - return name end @@ -80,8 +70,8 @@ local function parseEffectLine(raw) replacements[1] = words[6] elseif effectType == "area_damage" then replacements[1] = words[6] - -- bug with chain "Then:"! maybe we should just show the 0's since it matters - if words[6] == "0" then printEffect = false end + -- display area_damage 0's because they still need to be done to chain to the next thing + --if words[6] == "0" then printEffect = false end end local localizedNames = EID:getDescriptionEntry("GlitchedItemText") @@ -95,50 +85,12 @@ local function parseEffectLine(raw) return eidString end -local function CheckItemConfigItem(id) - -- check for the item ID's ItemConfig attributes (hearts added on pickup, cacheflags affected) - -- unfortunately there doesn't seem to be any way to know exactly how it will affect the cacheflag stats - local localizedNames = EID:getDescriptionEntry("GlitchedItemText") - local config = Isaac.GetItemConfig() - local item = config:GetCollectible(maxNumber - spawnedItems) - local attributes = "" - for k,v in ipairs(itemConfigItemAttributes) do - local attrib = item[v] - if attrib ~= 0 then - if (v == "CacheFlags") then - local flagString = localizedNames["cacheFlagStart"] - if attrib == CacheFlag.CACHE_ALL then - flagString = flagString .. localizedNames[16] - else - for i=0, 13 do - if 2^i & attrib ~= 0 then - flagString = flagString .. localizedNames[i] .. ", " - end - end - flagString = string.sub(flagString, 0, -3) -- remove final comma - end - attributes = attributes .. flagString .. "#" - else - -- the Add Heart attributes count half a heart as 1, so divide the value in half - if string.find(v, "Hearts") then attrib = attrib / 2 end - -- the g flag removes .0 in numbers like 1.0 (caused by the hearts division) - local s = string.format("%.4g",attrib) - if attrib > 0 then s = "+" .. s end - attributes = attributes .. string.gsub(localizedNames[v], "{1}", s) - if attrib ~= 1 and attrib ~= -1 then attributes = attributes .. localizedNames["pluralize"] end - attributes = attributes .. "#" - end - end - end - return attributes -end - --TODO: Add an option for displaying glitched item descriptions check it here -- Move the item config part to API, it can be used without luadebug -- bag of crafting hold use to reset bag local function CheckLogForItems(_) - if (not logFound or game:GetFrameCount() % 5 ~= 0 or not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER)) then return end + if not EID.Config["DisplayGlitchedItemInfo"] or not logFound or game:GetFrameCount() % 5 ~= 0 or not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER) then return end local numEffects = 0 local itemScore = 0 @@ -166,7 +118,7 @@ local function CheckLogForItems(_) -- Glowing Hour Glass type effects seem to cause the game to reload all items, check if our desc is equal to the first one if (EID:getDescriptionObj(5, 100, maxNumber - 1).Description == eidDesc) then spawnedItems = 1 end - eidDesc = CheckItemConfigItem(maxNumber - spawnedItems) .. eidDesc + eidDesc = EID:CheckGlitchedItemConfig(maxNumber - spawnedItems) .. eidDesc EID:addCollectible(maxNumber - spawnedItems, eidDesc) end end From ea0aec6a851fd0f142ed03db692193002273957b Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 01:59:17 -0500 Subject: [PATCH 19/36] fix TMTRAINER Crane Game issue, add Glitched ItemConfig func --- eid_api.lua | 54 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/eid_api.lua b/eid_api.lua index 3f99d5bb..1b2b785c 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -300,17 +300,18 @@ end -- returns the description object of the specified entity -- falls back to english if the objID isnt available function EID:getDescriptionObj(Type, Variant, SubType) + local description = {} description.ObjType = Type description.ObjVariant = Variant description.ObjSubType = SubType - description.fullItemString = Type.."."..Variant.."."..description.ObjSubType - description.Name = EID:getObjectName(Type, Variant, description.ObjSubType) + description.fullItemString = Type.."."..Variant.."."..SubType + description.Name = EID:getObjectName(Type, Variant, SubType) - local tableEntry = EID:getDescriptionData(Type, Variant, description.ObjSubType) - description.Description = tableEntry and tableEntry[3] or EID:getXMLDescription(Type, Variant, description.ObjSubType) - - description.Transformation = EID:getTransformation(Type, Variant, description.ObjSubType) + local tableEntry = EID:getDescriptionData(Type, Variant, SubType) + description.Description = tableEntry and tableEntry[3] or EID:getXMLDescription(Type, Variant, SubType) end + + description.Transformation = EID:getTransformation(Type, Variant, SubType) for k,modifier in pairs(EID.DescModifiers) do if modifier.condition(description) then @@ -498,7 +499,7 @@ function EID:hasDescription(entity) return isAllowed and entity.SubType > 0 end if entity.Type == 6 and entity.Variant == 16 and EID.Config["DisplayCraneInfo"] and REPENTANCE then - isAllowed = not entity:GetSprite():IsPlaying("Broken") and not entity:GetSprite():IsPlaying("Prize") + isAllowed = not entity:GetSprite():IsPlaying("Broken") and not entity:GetSprite():IsPlaying("Prize") and EID.CraneItemType[tostring(entity.InitSeed)] end isAllowed = isAllowed or (entity.Type == 1000 and entity.Variant == EffectVariant.DICE_FLOOR and EID.Config["DisplayDiceInfo"]) return isAllowed @@ -776,6 +777,45 @@ function EID:PlayersHaveCollectible(collectibleID) return false end +-- Obtains information about glitched items from the ItemConfig (hearts added on pickup, cacheflags affected), returns string of info +local itemConfigItemAttributes = { "AddMaxHearts", "AddHearts", "AddSoulHearts", "AddBlackHearts", "AddBombs", "AddCoins", "AddKeys", "CacheFlags" } +function EID:CheckGlitchedItemConfig(id) + local localizedNames = EID:getDescriptionEntry("GlitchedItemText") + local config = Isaac.GetItemConfig() + local item = config:GetCollectible(id) + if not item then return "" end + local attributes = "" + for k,v in ipairs(itemConfigItemAttributes) do + local val = item[v] + if val ~= 0 then + if (v == "CacheFlags") then + local flagString = localizedNames["cacheFlagStart"] + if val == CacheFlag.CACHE_ALL then + flagString = flagString .. localizedNames[16] + else + for i=0, 13 do + if 2^i & val ~= 0 then + flagString = flagString .. localizedNames[i] .. ", " + end + end + flagString = string.sub(flagString, 0, -3) -- remove final comma + end + attributes = attributes .. flagString .. "#" + else + -- the Add Heart attributes count half a heart as 1, so divide the value in half + if string.find(v, "Hearts") then val = val / 2 end + -- the g flag removes .0 in numbers like 1.0 (caused by the hearts division) + local s = string.format("%.4g",val) + if val > 0 then s = "+" .. s end + attributes = attributes .. string.gsub(localizedNames[v], "{1}", s) + if val ~= 1 and val ~= -1 then attributes = attributes .. localizedNames["pluralize"] end + attributes = attributes .. "#" + end + end + end + return attributes +end + -- Converts a given CollectibleID into the respective Spindown dice result function EID:getSpindownResult(collectibleID) if collectibleID <= 0 or collectibleID > 4294960000 then return 0 end From 148da90a495b40d7363a8b4e957942597a83b8f8 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 01:59:52 -0500 Subject: [PATCH 20/36] fix TMTRAINER Crane Game issue, add Glitched ItemConfig func --- eid_api.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/eid_api.lua b/eid_api.lua index 1b2b785c..f3b5e251 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -300,7 +300,6 @@ end -- returns the description object of the specified entity -- falls back to english if the objID isnt available function EID:getDescriptionObj(Type, Variant, SubType) - local description = {} description.ObjType = Type description.ObjVariant = Variant From cd77bb5595325d274a4f92947acfcbd2235d4df9 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 02:06:38 -0500 Subject: [PATCH 21/36] hopefully help with merging --- eid_api.lua | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/eid_api.lua b/eid_api.lua index f3b5e251..f4f24613 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -299,18 +299,20 @@ end -- returns the description object of the specified entity -- falls back to english if the objID isnt available -function EID:getDescriptionObj(Type, Variant, SubType) +-- entity is optional +function EID:getDescriptionObj(Type, Variant, SubType, entity) local description = {} description.ObjType = Type description.ObjVariant = Variant description.ObjSubType = SubType - description.fullItemString = Type.."."..Variant.."."..SubType - description.Name = EID:getObjectName(Type, Variant, SubType) + description.fullItemString = Type.."."..Variant.."."..description.ObjSubType + description.Name = EID:getObjectName(Type, Variant, description.ObjSubType) + description.Entity = entity or nil - local tableEntry = EID:getDescriptionData(Type, Variant, SubType) - description.Description = tableEntry and tableEntry[3] or EID:getXMLDescription(Type, Variant, SubType) end - - description.Transformation = EID:getTransformation(Type, Variant, SubType) + local tableEntry = EID:getDescriptionData(Type, Variant, description.ObjSubType) + description.Description = tableEntry and tableEntry[3] or EID:getXMLDescription(Type, Variant, description.ObjSubType) + + description.Transformation = EID:getTransformation(Type, Variant, description.ObjSubType) for k,modifier in pairs(EID.DescModifiers) do if modifier.condition(description) then From fb9d2e7c556aba23d967e37abd0ccd3cd9605f13 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 02:14:50 -0500 Subject: [PATCH 22/36] merge with master --- eid_config.lua | 744 +++++++++++++++++++++++++------------------------ 1 file changed, 375 insertions(+), 369 deletions(-) diff --git a/eid_config.lua b/eid_config.lua index 2327c8ae..130ae970 100644 --- a/eid_config.lua +++ b/eid_config.lua @@ -1,315 +1,320 @@ EID.UserConfig = { - -------GENERAL--------- - -- Change language of the mod. - -- Currently Supported: English = "en_us" (Default) , "en_us_detailed" - -- French = "fr" SPECIAL THANKS TO Nicolas Delvaux - -- Polish = "pl" SPECIAL THANKS TO Rickyy - -- Spanish = "spa" SPECIAL THANKS TO Lidia Arroyo Purroy - -- Portuguese = "pt" SPECIAL THANKS TO Marcelino Cruz - -- Brazilian Portuguese = "pt_br" SPECIAL THANKS TO Marcelino Cruz - -- Russian = "ru" SPECIAL THANKS TO hell2pay, fly_6 - -- Italian = "it" SPECIAL THANKS TO Denkishi, 2G - -- Bulgarian = "bul" SPECIAL THANKS TO ,Gothika_47 (WIP) - -- Turkish = "tr_tr" SPECIAL THANKS TO Mert Dutal - -- Chinese (https://steamcommunity.com/sharedfiles/filedetails/?id=836319872) - -- Italian (https://steamcommunity.com/sharedfiles/filedetails/?id=931392691) - -- If you want to make a translation, please contact me :) - ["Language"] = "en_us", - -- Toggle if item names should be displayed in your language, english or both - -- States: 1 = english , 2 = translated, 3 = both - -- Default = 2 - ["TranslateItemName"] = 2, - -- Change font type. Values are [default, borderless, inverted] - -- Default = "default" - ["FontType"] = "default", - -- Change Width of the info boxes. (In characters) - -- Default = 100 - ["TextboxWidth"] = 100, - -- Change Size of the info boxes. Range: [0,...,1] - -- Default = 1 - ["Scale"] = 1, - -- Set transparency of the background. Range: [0,...,1] - -- Default = 0.75 - ["Transparency"] = 0.75, - -- Set the HUD offset of the description. - -- This should be set to the same number of "strokes" set in the ingame options for the "hud offset" value. (Range is 0 to 10) - -- Default = 10 - ["HUDOffset"] = 10, - -- Set X Position (Width) of the descriptiontext - -- Default = 60 - ["XPosition"] = 60, - -- Set Y Position (Height) of the descriptiontext - -- Default = 45 - ["YPosition"] = 45, - -- Set the distance to an item in which informations will be displayed (in Tiles) - -- Default = 5 - ["MaxDistance"] = 5, - -- Choose between an indicator, that highlights the currently inspected object - -- Options: ["arrow","blink","border","highlight","none"]. - -- Arrow = moving arrow pointing at the item | Blink = the whole sprite blinks white | Border = Blinking white border around the sprite | Highlight = White border around the sprite | None = Disable funtion - -- Default = "none" - ["Indicator"] = "none", - -- Set the keybinding to toggle the descriptions - -- look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html - -- Default = Keyboard.KEY_F2 - ["HideKey"] = Keyboard.KEY_F2, - -- Set the controller binding to toggle the descriptions - -- Use the Controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number - -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls - -- Default = none (-1) - ["HideButton"] = -1, - -- Initial displaystate. Can be used to change the toggle behavior of the "Hide Key" event - -- Default = false - ["InitiallyHidden"] = false, - -- Hide the descriptions when in battle - -- Default = false - ["HideInBattle"] = false, - -- Toggle obstruction based hiding, when the player has flight - -- Default = true - ["DisableObstructionOnFlight"] = true, - -- If set to true, the mod will no longer display a warning if the save game doesn't have achievements unlocked - -- This also disables warnings for using an outdated game version, and for having potentially modded Bag of Crafting recipes - -- Default = false - ["DisableAchievementCheck"] = false, - - -------Display Modes--------- + -------GENERAL--------- + -- Change the language of the mod + -- Currently Supported: English = "en_us" (Default), "en_us_detailed" (More detailed descriptions) + -- French = "fr" SPECIAL THANKS TO Nicolas Delvaux + -- Polish = "pl" SPECIAL THANKS TO Rickyy + -- Spanish = "spa" SPECIAL THANKS TO Lidia Arroyo Purroy + -- Portuguese = "pt" SPECIAL THANKS TO Marcelino Cruz + -- Brazilian Portuguese = "pt_br" SPECIAL THANKS TO Marcelino Cruz + -- Russian = "ru" SPECIAL THANKS TO hell2pay, fly_6 + -- Italian = "it" SPECIAL THANKS TO Denkishi, 2G + -- Bulgarian = "bul" SPECIAL THANKS TO Gothika_47 + -- Turkish = "tr_tr" SPECIAL THANKS TO Mert Dutal + -- Korean = "ko_kr" SPECIAL THANKS TO Blackcreamtea and 미카 + -- Chinese (https://steamcommunity.com/sharedfiles/filedetails/?id=836319872) + -- Italian (https://steamcommunity.com/sharedfiles/filedetails/?id=931392691) + -- + -- If you want to make a translation, please contact me :) (wofsauge) + -- + ["Language"] = "en_us", + -- Change if item names should be displayed in English, your translated language or both + -- States: 1 = English , 2 = translated, 3 = both + -- Default = 2 + ["TranslateItemName"] = 2, + -- Change font type. Values are [default, borderless, inverted] + -- Default = "default" + ["FontType"] = "default", + -- Change the width of the info boxes (in characters). + -- Default = 100 + ["TextboxWidth"] = 100, + -- Change the size of the info boxes. Range: [0,...,1] + -- Default = 1 + ["Scale"] = 1, + -- Set the background transparency. Range: [0,...,1] + -- Default = 0.75 + ["Transparency"] = 0.75, + -- Set the HUD offset of the descriptions + -- This should be set to the same number of "strokes" set in the in-game options for the "hud offset" value (range is 0 to 10) + -- Default = 10 + ["HUDOffset"] = 10, + -- Set the X Position (width) of the description texts + -- Default = 60 + ["XPosition"] = 60, + -- Set the Y Position (height) of the description texts + -- Default = 45 + ["YPosition"] = 45, + -- Set the distance between an item and its information display (in tiles) + -- Default = 5 + ["MaxDistance"] = 5, + -- Select the type of the indicator that highlights the currently inspected object + -- Options: ["arrow", "blink", "border", "highlight", "none"]. + -- Arrow = Moving arrow pointing at the item | Blink = The whole sprite blinks white | Border = Blinking white border around the sprite | Highlight = White border around the sprite | None = No indicator + -- Default = "none" + ["Indicator"] = "none", + -- Set the keybind to toggle the description display + -- Look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html + -- Default = Keyboard.KEY_F2 + ["HideKey"] = Keyboard.KEY_F2, + -- Set the controller binding to toggle the description display + -- Use the controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number + -- Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls + -- Default = none (-1) + ["HideButton"] = -1, + -- Initial display state. Can be used to change the toggle behavior of the "Hide Key" event + -- Default = false + ["InitiallyHidden"] = false, + -- Hide the descriptions when in battle + -- Default = false + ["HideInBattle"] = false, + -- Toggle obstruction based hiding, when the player has flight + -- Default = true + ["DisableObstructionOnFlight"] = true, + -- If set to true, the mod will no longer display a warning if the save game doesn't have achievements unlocked + -- This also disables warnings for using an outdated game version and for having potentially modded Bag of Crafting recipes + -- Default = false + ["DisableAchievementCheck"] = false, - -- Sets the display mode of the description text. - -- possible values: default, local - -- "default": text will be displayed in the top-left of the screen. - -- "local": text will be displayed under the described object. - -- Default = "default" - ["DisplayMode"] = "default", - -- Change Size of the info boxes for LocalMode. - -- Default = 0.5 - ["LocalScale"] = 0.5, - -- Changes the position of the text in local mode, relative to the described object to be centered. Set to false to make it left-aligned - -- Default = true - ["LocalModeCentered"] = true, - - -------------CURSE------------- + -------display Modes--------- - -- Disable informations when the floor has curse of the blind ( ? - Items) - -- Default = true - ["DisableOnCurse"] = true, - -- Disable Item informations for the second Treasure room item on alt paths - -- REPENTANCE ONLY!!! - -- Default = true - ["DisableOnAltPath"] = true, - -- Disable Item informations on the April fools challenge - -- Default = true - ["DisableOnAprilFoolsChallenge"] = true, - - ----------ITEM NAMES----------- + -- Sets the display mode of the description text + -- Possible values: default, local + -- "default": text will be displayed in the top left of the screen + -- "local": text will be displayed under the described object + -- Default = "default" + ["DisplayMode"] = "default", + -- Change the size of the info boxes for local mode + -- Default = 0.5 + ["LocalScale"] = 0.5, + -- Changes the position of the text in local mode, relative to the described object to be centered. Set to false to make it left-aligned + -- Default = true + ["LocalModeCentered"] = true, - -- Toggle Display of Collectible / Card and Pill names - -- Default = true - ["ShowItemName"] = true, - -- Toggle Display of the Item Type and Maximum Charges as an icon - -- Default = true - ["ShowItemType"] = true, - -- Toggle Display of Collectible / Trinket Icon next to Itemname - -- Default = true - ["ShowItemIcon"] = true, - -- Toggle Display of Collectible / Item descriptions - -- Default = true - ["DisplayItemInfo"] = true, - -- Toggle Display of Trinket descriptions - -- Default = true - ["DisplayTrinketInfo"] = true, - -- Set the color-name of the Itemname description text. Color names can be found& defined in "eid_data.lua" - -- Default = "ColorEIDObjName" - ["ItemNameColor"] = "ColorEIDObjName", - -- Show ID of described object in the format "Type.Variant.SubType" next to the name - -- Default = false - ["ShowObjectID"] = false, - -- Enables or disables item quality after item name - -- REPENTANCE ONLY!!! - -- Default = true - ["ShowQuality"] = true, - - -------TRANSFORMATIONS--------- + -------------CURSE------------- - -- Toggle Display of Transformation text - -- Default = true - ["TransformationText"] = true, - -- Toggle Display of Transformation icons - -- Default = true - ["TransformationIcons"] = true, - -- Set the color-name of the Transformation description text. Color names can be found& defined in "eid_data.lua" - -- Default = "ColorEIDTransform" - ["TransformationColor"] = "ColorEIDTransform", - - ------------CARDS-------------- + -- Disable descriptions when the floor has Curse of the Blind + -- Default = true + ["DisableOnCurse"] = true, + -- Disable descriptions for the second Treasure Room item on the alt path + -- REPENTANCE ONLY!!! + -- Default = true + ["DisableOnAltPath"] = true, + -- Disable descriptions for the April Fools challenge + -- Default = true + ["DisableOnAprilFoolsChallenge"] = true, - -- Toggle Display of Card / Rune descriptions - -- Default = true - ["DisplayCardInfo"] = true, - -- Toggle Display of Card / Rune descriptions when its a shop item - -- Default = false - ["DisplayCardInfoShop"] = false, - -- Toggle Display of Soulstone descriptions when its a shop item - -- REPENTANCE ONLY!!! - -- Default = true - ["DisplaySoulstoneInfoShop"] = true, - -- Toggle Display of Card / Rune descriptions when its not accessable with walking. AKA behind rock, blocks, spikes - -- Default = false - ["DisplayObstructedCardInfo"] = false, - -- Toggle Display of Soulstone descriptions when its not accessable with walking. AKA behind rock, blocks, spikes - -- REPENTANCE ONLY!!! - -- Default = true - ["DisplayObstructedSoulstoneInfo"] = true, - -- Toggle Display of Card / Rune descriptions that are spawned with the Options? item - -- REPENTANCE ONLY!!! - -- Default = false - ["DisplayCardInfoOptions?"] = false, - - ------------PILLS-------------- + ----------ITEM NAMES----------- - -- Toggle Display of Pill descriptions - -- Default = true - ["DisplayPillInfo"] = true, - -- Toggle Display of Pill descriptions when its a shop item - -- Default = true - ["DisplayPillInfoShop"] = true, - -- Toggle Display of Pill descriptions when its not accessable with walking. AKA behind rock, blocks, spikes - -- Default = false - ["DisplayObstructedPillInfo"] = false, - -- Toggle Display of Pill descriptions that are spawned with the Options? item - -- REPENTANCE ONLY!!! - -- Default = true - ["DisplayPillInfoOptions?"] = true, - -- Toggle Display of Pill descriptions that arent known to you yet - -- Default = false - ["ShowUnidentifiedPillDescriptions"] = false, - - ------------Glitched Items-------------- - -- Toggle Display of Glitched Item (TMTRAINER) descriptions - -- Note: The --luadebug launch option is required for more detailed glitched item descriptions - -- This option allows mods to have access to your files and should be turned on at your own risk! - -- Without --luadebug, you still can see the effect the item will have on your Hearts, and what stats it might modify - -- Default = true - ["DisplayGlitchedItemInfo"] = true, - - --------Sacrifice Room--------- + -- Toggle display of collectible or Card and Pill names + -- Default = true + ["ShowItemName"] = true, + -- Toggle display of item type and maximum charge icons + -- Default = true + ["ShowItemType"] = true, + -- Toggle display of collectible or trinket icons next to the item name + -- Default = true + ["ShowItemIcon"] = true, + -- Toggle display of collectible descriptions + -- Default = true + ["DisplayItemInfo"] = true, + -- Toggle display of trinket descriptions + -- Default = true + ["DisplayTrinketInfo"] = true, + -- Set the color of the item name text + -- Color names are defined in "eid_data.lua" (line 300) + -- Default = "ColorEIDObjName" + ["ItemNameColor"] = "ColorEIDObjName", + -- Display the ID of described object in the format "Type.Variant.SubType" next to the name + -- Default = false + ["ShowObjectID"] = false, + -- Enables or disables item quality icon after item name + -- REPENTANCE ONLY!!! + -- Default = true + ["ShowQuality"] = true, - -- Toggle Display of next Sacrifice room Payout descriptions - -- Default = true - ["DisplaySacrificeInfo"] = true, - - --------Dice Room--------- + -------TRANSFORMATIONS--------- - -- Toggle Display of Diceroom descriptions - -- Default = true - ["DisplayDiceInfo"] = true, - - --------Crane Game--------- - -- REPENTANCE ONLY!!! - - -- Toggle Display for items inside of a Crane Game - -- Default = true - ["DisplayCraneInfo"] = true, - - ---------Bag of Crafting----------- - -- REPENTANCE ONLY!!! - - -- When to show the Bag of Crafting display - -- Options: "always", "hold", "never" - -- "always" = Always show Results, "hold" = Show when holding up bag, "never" = Never show results - -- Default = "always" - ["DisplayBagOfCrafting"] = "always", - -- Display modes for the Bag of Crafting display - -- Options: "Recipe List", "Preview Only", "No Recipes", "Pickups Only" - -- The recipe list is a detailed calculated list of recipes based on what you have available on the floor - -- Preview Only shows the description of the item you can currently craft in your bag - -- No Recipes shows percentages of what item you might get from your bag / best option on the floor, for a more intended experience - -- Pickups Only just shows the room/floor pickup count - -- (No Recipes is recommended if you have modded items) - -- Default = "Recipe List" - ["BagOfCraftingDisplayMode"] = "Recipe List", - -- Hide the recipe list when in battle - -- Default = true - ["BagOfCraftingHideInBattle"] = true, - -- Changes the number of Results shown in the Bag of crafting description - -- Higher numbers can cause more lag! - -- Default = 7 - ["BagOfCraftingResults"] = 7, - -- Changes the number of ingredients for which every combination is checked - -- Higher numbers will cause lag spikes on new pickup sets! - -- Default = 12 - ["BagOfCraftingCombinationMax"] = 12, - -- Changes the number of random recipes calculated - -- Higher numbers will cause lag spikes on new pickup sets! - -- Default = 400 - ["BagOfCraftingRandomResults"] = 400, - -- Set the keybinding to toggle the scroll feature of the bag of crafting descriptions - -- look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/ButtonAction.html - -- Default = ButtonAction.ACTION_MAP - ["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP, - -- Display craftable item names, moving the recipe to a new line - -- Default = false - ["BagOfCraftingDisplayNames"] = false, - -- Display recipes as 8 icons instead of grouped ingredients - -- Default = false - ["BagOfCraftingDisplayIcons"] = false, - -- Set the keybinding to toggle the crafting display, so you can see descriptions of items/pickups on the floor - -- look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html - -- Default = Keyboard.KEY_F3 - ["CraftingHideKey"] = Keyboard.KEY_F3, - -- Set the controller binding to toggle the crafting display, so you can see descriptions of items/pickups on the floor - -- Use the Controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number - -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls - -- Default = none (-1) - ["CraftingHideButton"] = -1, - -- Set the keybinding to toggle viewing the description of the item ready to be crafted in the bag - -- look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html - -- Default = Keyboard.KEY_F3 - ["CraftingResultKey"] = Keyboard.KEY_F4, - -- Set the controller binding to toggle viewing the description of the item ready to be crafted in the bag - -- Use the Controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number - -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls - -- Default = none (-1) - ["CraftingResultButton"] = -1, - - ---------Mouse Controls----------- - - -- Toggles HUD descriptions based on the mouse position - -- Default = false - ["EnableMouseControls"] = false, - - -- Toggles the custom mouse cursor - -- Default = false - ["ShowCursor"] = false, - - -------------MISC--------------- - - -- Changes the number of Results shown for the additional Spindown dice description - -- REPENTANCE ONLY!!! - -- Default = 3 - ["SpindownDiceResults"] = 3, - - -- Spindown dice preview can skip over locked items, however the method for determining an item's locked status is not perfect - -- REPENTANCE ONLY!!! - -- Default = false - ["SpindownDiceSkipLocked"] = false, + -- Toggle display of transformation names + -- Default = true + ["TransformationText"] = true, + -- Toggle display of transformation icons + -- Default = true + ["TransformationIcons"] = true, + -- Set the color of the Transformation description text + -- Color names are defined in "eid_data.lua" (line 300) + -- Default = "ColorEIDTransform" + ["TransformationColor"] = "ColorEIDTransform", - -- Error message displayed when an error occurs - -- Default = [Effect not defined] - ["ErrorMessage"] = "[Effect not defined]", - -- Set the color-name of the default description text. Color names can be found& defined in "eid_data.lua" - -- Default = "ColorEIDText" - ["TextColor"] = "ColorEIDText", - -- Set the color-name of the Error description text. Color names can be found& defined in "eid_data.lua" - -- Default = "ColorEIDError" - ["ErrorColor"] = "ColorEIDError", - -- Enables or disables custom Descriptions for entities - -- Default = true - ["EnableEntityDescriptions"] = true, + ------------CARDS-------------- + + -- Toggle display of Card or Rune descriptions + -- Default = true + ["DisplayCardInfo"] = true, + -- Toggle display of Card or Rune descriptions when they're sold in shops + -- Default = false + ["DisplayCardInfoShop"] = false, + -- Toggle display of Soul Stone descriptions when they're sold in shops + -- REPENTANCE ONLY!!! + -- Default = true + ["DisplaySoulstoneInfoShop"] = true, + -- Toggle display of Card or Rune descriptions when they're not accessible without flight, e.g. when they are behind rocks, blocks, spikes, etc. + -- Default = false + ["DisplayObstructedCardInfo"] = false, + -- Toggle display of Soul Stone descriptions when they're not accessible without flight, e.g. when they are behind rocks, blocks, spikes, etc. + -- REPENTANCE ONLY!!! + -- Default = true + ["DisplayObstructedSoulstoneInfo"] = true, + -- Toggle display of Card or Rune descriptions when they spawn from the Options? item + -- REPENTANCE ONLY!!! + -- Default = false + ["DisplayCardInfoOptions?"] = false, + + ------------PILLS-------------- + + -- Toggle display of Pill descriptions + -- Default = true + ["DisplayPillInfo"] = true, + -- Toggle display of Pill descriptions when they're a shop item + -- Default = true + ["DisplayPillInfoShop"] = true, + -- Toggle display of Pill descriptions when they're not accessible without flight, e.g. when they are behind rocks, blocks, spikes, etc. + -- Default = false + ["DisplayObstructedPillInfo"] = false, + -- Toggle display of Pill descriptions when they spawn from the Options? item + -- REPENTANCE ONLY!!! + -- Default = true + ["DisplayPillInfoOptions?"] = true, + -- Toggle display of description for Pills that haven't been identified yet + -- Default = false + ["ShowUnidentifiedPillDescriptions"] = false, + + ------------Glitched Items-------------- + -- Toggle Display of Glitched Item (TMTRAINER) descriptions + -- Note: The --luadebug launch option is required for more detailed glitched item descriptions + -- This option allows mods to have access to your files and should be turned on at your own risk! + -- Without --luadebug, you still can see the effect the item will have on your Hearts, and what stats it might modify + -- Default = true + ["DisplayGlitchedItemInfo"] = true, + + --------Sacrifice Room--------- + + -- Toggle display of the next Sacrifice Room payout description + -- Default = true + ["DisplaySacrificeInfo"] = true, + + --------Dice Room--------- + + -- Toggle display of Dice Room descriptions + -- Default = true + ["DisplayDiceInfo"] = true, + + --------Crane Game--------- + -- REPENTANCE ONLY!!! + + -- Toggle display for items inside of a Crane Game + -- Default = true + ["DisplayCraneInfo"] = true, + + ---------Bag of Crafting----------- + -- REPENTANCE ONLY!!! + + -- When to show the Bag of Crafting display + -- Options: "always", "hold", "never" + -- "always" = Always show results, "hold" = Show when holding up bag, "never" = Never show results + -- Default = "always" + ["DisplayBagOfCrafting"] = "always", + -- Display modes for the Bag of Crafting display + -- Options: "Recipe List", "Preview Only", "No Recipes", "Pickups Only" + -- The recipe list is a detailed calculated list of recipes based on what you have available on the floor + -- Preview Only shows the description of the item you can currently craft in your bag + -- No Recipes shows percentages of what item you might get from your bag / best option on the floor, for a more intended experience + -- Pickups Only just shows the room/floor pickup count + -- (No Recipes is recommended if you have modded items) + -- Default = "Recipe List" + ["BagOfCraftingDisplayMode"] = "Recipe List", + -- Hide the recipe list when in battle + -- Default = true + ["BagOfCraftingHideInBattle"] = true, + -- Changes the amount of results shown in the Bag of Crafting description + -- Higher numbers can cause more lag! + -- Default = 7 + ["BagOfCraftingResults"] = 7, + -- Changes the amount of ingredients for which every combination is checked + -- Higher numbers will cause lag spikes on new pickup sets! + -- Default = 12 + ["BagOfCraftingCombinationMax"] = 12, + -- Changes the amount of how many random recipes get calculated + -- Higher numbers will cause lag spikes on new pickup sets! + -- Default = 400 + ["BagOfCraftingRandomResults"] = 400, + -- Set the keybinding to toggle the scroll feature of the Bag of Crafting descriptions + -- Look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/ButtonAction.html + -- Default = ButtonAction.ACTION_MAP + ["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP, + -- Display craftable item names, moving the recipe to a new line + -- Default = false + ["BagOfCraftingDisplayNames"] = false, + -- Display recipes as 8 icons instead of grouped ingredients + -- Default = false + ["BagOfCraftingDisplayIcons"] = false, + -- Set the keybinding to toggle the crafting display, so you can see descriptions of items/pickups on the floor + -- Look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html + -- Default = Keyboard.KEY_F3 + ["CraftingHideKey"] = Keyboard.KEY_F3, + -- Set the controller binding to toggle the crafting display, so you can see descriptions of items/pickups on the floor + -- Use the Controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number + -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls + -- Default = none (-1) + ["CraftingHideButton"] = -1, + -- Set the keybinding to toggle viewing the description of the item ready to be crafted in the bag + -- Look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html + -- Default = Keyboard.KEY_F3 + ["CraftingResultKey"] = Keyboard.KEY_F4, + -- Set the controller binding to toggle viewing the description of the item ready to be crafted in the bag + -- Use the controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number + -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls + -- Default = none (-1) + ["CraftingResultButton"] = -1, + + ---------Mouse Controls----------- + + -- Toggles HUD descriptions based on the mouse position + -- Default = false + ["EnableMouseControls"] = false, + -- Toggles the custom mouse cursor + -- Default = false + ["ShowCursor"] = false, + + -------------MISC--------------- + + -- Changes the number of results shown for the additional Spindown Dice description + -- REPENTANCE ONLY!!! + -- Default = 3 + ["SpindownDiceResults"] = 3, + -- Spindown Dice preview can skip over locked items, however the method for determining an item's locked status is not perfect + -- REPENTANCE ONLY!!! + -- Default = false + ["SpindownDiceSkipLocked"] = false, + + -- Error message displayed when an error occurs + -- Default = [Effect not defined] + ["ErrorMessage"] = "[Effect not defined]", + -- Set the color of the default description text + -- Color names are defined in "eid_data.lua" (line 300) + -- Default = "ColorEIDText" + ["TextColor"] = "ColorEIDText", + -- Set the color of the error description text + -- Color names are defined in "eid_data.lua" (line 300) + -- Default = "ColorEIDError" + ["ErrorColor"] = "ColorEIDError", + -- Enables or disables custom descriptions for entities + -- Default = true + ["EnableEntityDescriptions"] = true } ---END CONFIG-- ------------ ------------ +-- END CONFIG-- +-------------- +-------------- -------------------------------------------------- -------------------------------------------------- @@ -322,75 +327,76 @@ EID.UserConfig = { -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- + EID.DefaultConfig = { - ["Language"] = "en_us", - ["TranslateItemName"] = 2, - ["FontType"] = "default", - ["TextboxWidth"] = 100, - ["Scale"] = 1, - ["Transparency"] = 0.75, - ["HUDOffset"] = 10, - ["XPosition"] = 60, - ["YPosition"] = 45, - ["DisplayMode"] = "default", - ["LocalScale"] = 0.5, - ["LocalModeCentered"] = true, - ["MaxDistance"] = 5, - ["Indicator"] = "none", - ["HideKey"] = Keyboard.KEY_F2, - ["HideButton"] = -1, - ["InitiallyHidden"] = false, - ["HideInBattle"] = false, - ["DisableObstructionOnFlight"] = true, - ["DisableAchievementCheck"] = false, - ["DisableOnCurse"] = true, - ["DisableOnAltPath"] = true, - ["DisableOnAprilFoolsChallenge"] = true, - ["ShowItemName"] = true, - ["ShowItemType"] = true, - ["ShowItemIcon"] = true, - ["DisplayItemInfo"] = true, - ["DisplayTrinketInfo"] = true, - ["ItemNameColor"] = "ColorEIDObjName", - ["ShowQuality"] = true, - ["ShowObjectID"] = false, - ["TransformationText"] = true, - ["TransformationIcons"] = true, - ["TransformationColor"] = "ColorEIDTransform", - ["DisplayCardInfo"] = true, - ["DisplayCardInfoShop"] = false, - ["DisplaySoulstoneInfoShop"] = true, - ["DisplayObstructedCardInfo"] = false, - ["DisplayObstructedSoulstoneInfo"] = true, - ["DisplayCardInfoOptions?"] = false, - ["DisplayPillInfo"] = true, - ["DisplayPillInfoShop"] = true, - ["DisplayPillInfoOptions?"] = true, - ["DisplayObstructedPillInfo"] = false, - ["ShowUnidentifiedPillDescriptions"] = false, + ["Language"] = "en_us", + ["TranslateItemName"] = 2, + ["FontType"] = "default", + ["TextboxWidth"] = 100, + ["Scale"] = 1, + ["Transparency"] = 0.75, + ["HUDOffset"] = 10, + ["XPosition"] = 60, + ["YPosition"] = 45, + ["DisplayMode"] = "default", + ["LocalScale"] = 0.5, + ["LocalModeCentered"] = true, + ["MaxDistance"] = 5, + ["Indicator"] = "none", + ["HideKey"] = Keyboard.KEY_F2, + ["HideButton"] = -1, + ["InitiallyHidden"] = false, + ["HideInBattle"] = false, + ["DisableObstructionOnFlight"] = true, + ["DisableAchievementCheck"] = false, + ["DisableOnCurse"] = true, + ["DisableOnAltPath"] = true, + ["DisableOnAprilFoolsChallenge"] = true, + ["ShowItemName"] = true, + ["ShowItemType"] = true, + ["ShowItemIcon"] = true, + ["DisplayItemInfo"] = true, + ["DisplayTrinketInfo"] = true, + ["ItemNameColor"] = "ColorEIDObjName", + ["ShowQuality"] = true, + ["ShowObjectID"] = false, + ["TransformationText"] = true, + ["TransformationIcons"] = true, + ["TransformationColor"] = "ColorEIDTransform", + ["DisplayCardInfo"] = true, + ["DisplayCardInfoShop"] = false, + ["DisplaySoulstoneInfoShop"] = true, + ["DisplayObstructedCardInfo"] = false, + ["DisplayObstructedSoulstoneInfo"] = true, + ["DisplayCardInfoOptions?"] = false, + ["DisplayPillInfo"] = true, + ["DisplayPillInfoShop"] = true, + ["DisplayPillInfoOptions?"] = true, + ["DisplayObstructedPillInfo"] = false, + ["ShowUnidentifiedPillDescriptions"] = false, ["DisplayGlitchedItemInfo"] = true, - ["DisplaySacrificeInfo"] = true, - ["DisplayDiceInfo"] = true, - ["DisplayBagOfCrafting"] = "always", - ["DisplayCraneInfo"] = true, - ["BagOfCraftingResults"] = 7, - ["BagOfCraftingCombinationMax"] = 12, - ["BagOfCraftingRandomResults"] = 400, - ["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP, - ["BagOfCraftingDisplayNames"] = false, - ["BagOfCraftingDisplayIcons"] = false, - ["BagOfCraftingHideInBattle"] = true, - ["BagOfCraftingDisplayMode"] = "Recipe List", - ["CraftingHideKey"] = Keyboard.KEY_F3, - ["CraftingHideButton"] = -1, - ["CraftingResultKey"] = Keyboard.KEY_F4, - ["CraftingResultButton"] = -1, - ["SpindownDiceResults"] = 3, - ["SpindownDiceSkipLocked"] = false, - ["EnableMouseControls"] = false, - ["ShowCursor"] = false, - ["ErrorMessage"] = "[Effect not defined]", - ["TextColor"] = "ColorEIDText", - ["ErrorColor"] = "ColorEIDError", - ["EnableEntityDescriptions"] = true, + ["DisplaySacrificeInfo"] = true, + ["DisplayDiceInfo"] = true, + ["DisplayBagOfCrafting"] = "always", + ["DisplayCraneInfo"] = true, + ["BagOfCraftingResults"] = 7, + ["BagOfCraftingCombinationMax"] = 12, + ["BagOfCraftingRandomResults"] = 400, + ["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP, + ["BagOfCraftingDisplayNames"] = false, + ["BagOfCraftingDisplayIcons"] = false, + ["BagOfCraftingHideInBattle"] = true, + ["BagOfCraftingDisplayMode"] = "Recipe List", + ["CraftingHideKey"] = Keyboard.KEY_F3, + ["CraftingHideButton"] = -1, + ["CraftingResultKey"] = Keyboard.KEY_F4, + ["CraftingResultButton"] = -1, + ["SpindownDiceResults"] = 3, + ["SpindownDiceSkipLocked"] = false, + ["EnableMouseControls"] = false, + ["ShowCursor"] = false, + ["ErrorMessage"] = "[Effect not defined]", + ["TextColor"] = "ColorEIDText", + ["ErrorColor"] = "ColorEIDError", + ["EnableEntityDescriptions"] = true } From a6b4f386da034dd0093be271f07eaf76ad905e1b Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 02:20:41 -0500 Subject: [PATCH 23/36] Update eid_api.lua --- eid_api.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/eid_api.lua b/eid_api.lua index f4f24613..76e1ed67 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -299,15 +299,13 @@ end -- returns the description object of the specified entity -- falls back to english if the objID isnt available --- entity is optional -function EID:getDescriptionObj(Type, Variant, SubType, entity) +function EID:getDescriptionObj(Type, Variant, SubType) local description = {} description.ObjType = Type description.ObjVariant = Variant description.ObjSubType = SubType description.fullItemString = Type.."."..Variant.."."..description.ObjSubType description.Name = EID:getObjectName(Type, Variant, description.ObjSubType) - description.Entity = entity or nil local tableEntry = EID:getDescriptionData(Type, Variant, description.ObjSubType) description.Description = tableEntry and tableEntry[3] or EID:getXMLDescription(Type, Variant, description.ObjSubType) From 8907651cd12739f78a1bb3ae1136c6e5aa853a07 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 02:22:20 -0500 Subject: [PATCH 24/36] curse you tab->space change --- eid_config.lua | 737 ++++++++++++++++++++++++------------------------- 1 file changed, 361 insertions(+), 376 deletions(-) diff --git a/eid_config.lua b/eid_config.lua index 130ae970..ac76a001 100644 --- a/eid_config.lua +++ b/eid_config.lua @@ -1,320 +1,307 @@ EID.UserConfig = { - -------GENERAL--------- - -- Change the language of the mod - -- Currently Supported: English = "en_us" (Default), "en_us_detailed" (More detailed descriptions) - -- French = "fr" SPECIAL THANKS TO Nicolas Delvaux - -- Polish = "pl" SPECIAL THANKS TO Rickyy - -- Spanish = "spa" SPECIAL THANKS TO Lidia Arroyo Purroy - -- Portuguese = "pt" SPECIAL THANKS TO Marcelino Cruz - -- Brazilian Portuguese = "pt_br" SPECIAL THANKS TO Marcelino Cruz - -- Russian = "ru" SPECIAL THANKS TO hell2pay, fly_6 - -- Italian = "it" SPECIAL THANKS TO Denkishi, 2G - -- Bulgarian = "bul" SPECIAL THANKS TO Gothika_47 - -- Turkish = "tr_tr" SPECIAL THANKS TO Mert Dutal - -- Korean = "ko_kr" SPECIAL THANKS TO Blackcreamtea and 미카 - -- Chinese (https://steamcommunity.com/sharedfiles/filedetails/?id=836319872) - -- Italian (https://steamcommunity.com/sharedfiles/filedetails/?id=931392691) - -- - -- If you want to make a translation, please contact me :) (wofsauge) - -- - ["Language"] = "en_us", - -- Change if item names should be displayed in English, your translated language or both - -- States: 1 = English , 2 = translated, 3 = both - -- Default = 2 - ["TranslateItemName"] = 2, - -- Change font type. Values are [default, borderless, inverted] - -- Default = "default" - ["FontType"] = "default", - -- Change the width of the info boxes (in characters). - -- Default = 100 - ["TextboxWidth"] = 100, - -- Change the size of the info boxes. Range: [0,...,1] - -- Default = 1 - ["Scale"] = 1, - -- Set the background transparency. Range: [0,...,1] - -- Default = 0.75 - ["Transparency"] = 0.75, - -- Set the HUD offset of the descriptions - -- This should be set to the same number of "strokes" set in the in-game options for the "hud offset" value (range is 0 to 10) - -- Default = 10 - ["HUDOffset"] = 10, - -- Set the X Position (width) of the description texts - -- Default = 60 - ["XPosition"] = 60, - -- Set the Y Position (height) of the description texts - -- Default = 45 - ["YPosition"] = 45, - -- Set the distance between an item and its information display (in tiles) - -- Default = 5 - ["MaxDistance"] = 5, - -- Select the type of the indicator that highlights the currently inspected object - -- Options: ["arrow", "blink", "border", "highlight", "none"]. - -- Arrow = Moving arrow pointing at the item | Blink = The whole sprite blinks white | Border = Blinking white border around the sprite | Highlight = White border around the sprite | None = No indicator - -- Default = "none" - ["Indicator"] = "none", - -- Set the keybind to toggle the description display - -- Look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html - -- Default = Keyboard.KEY_F2 - ["HideKey"] = Keyboard.KEY_F2, - -- Set the controller binding to toggle the description display - -- Use the controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number - -- Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls - -- Default = none (-1) - ["HideButton"] = -1, - -- Initial display state. Can be used to change the toggle behavior of the "Hide Key" event - -- Default = false - ["InitiallyHidden"] = false, - -- Hide the descriptions when in battle - -- Default = false - ["HideInBattle"] = false, - -- Toggle obstruction based hiding, when the player has flight - -- Default = true - ["DisableObstructionOnFlight"] = true, - -- If set to true, the mod will no longer display a warning if the save game doesn't have achievements unlocked - -- This also disables warnings for using an outdated game version and for having potentially modded Bag of Crafting recipes - -- Default = false - ["DisableAchievementCheck"] = false, + -------GENERAL--------- + -- Change language of the mod. + -- Currently Supported: English = "en_us" (Default) , "en_us_detailed" + -- French = "fr" SPECIAL THANKS TO Nicolas Delvaux + -- Polish = "pl" SPECIAL THANKS TO Rickyy + -- Spanish = "spa" SPECIAL THANKS TO Lidia Arroyo Purroy + -- Portuguese = "pt" SPECIAL THANKS TO Marcelino Cruz + -- Brazilian Portuguese = "pt_br" SPECIAL THANKS TO Marcelino Cruz + -- Russian = "ru" SPECIAL THANKS TO hell2pay, fly_6 + -- Italian = "it" SPECIAL THANKS TO Denkishi, 2G + -- Bulgarian = "bul" SPECIAL THANKS TO ,Gothika_47 (WIP) + -- Turkish = "tr_tr" SPECIAL THANKS TO Mert Dutal + -- Chinese (https://steamcommunity.com/sharedfiles/filedetails/?id=836319872) + -- Italian (https://steamcommunity.com/sharedfiles/filedetails/?id=931392691) + -- If you want to make a translation, please contact me :) + ["Language"] = "en_us", + -- Toggle if item names should be displayed in your language, english or both + -- States: 1 = english , 2 = translated, 3 = both + -- Default = 2 + ["TranslateItemName"] = 2, + -- Change font type. Values are [default, borderless, inverted] + -- Default = "default" + ["FontType"] = "default", + -- Change Width of the info boxes. (In characters) + -- Default = 100 + ["TextboxWidth"] = 100, + -- Change Size of the info boxes. Range: [0,...,1] + -- Default = 1 + ["Scale"] = 1, + -- Set transparency of the background. Range: [0,...,1] + -- Default = 0.75 + ["Transparency"] = 0.75, + -- Set the HUD offset of the description. + -- This should be set to the same number of "strokes" set in the ingame options for the "hud offset" value. (Range is 0 to 10) + -- Default = 10 + ["HUDOffset"] = 10, + -- Set X Position (Width) of the descriptiontext + -- Default = 60 + ["XPosition"] = 60, + -- Set Y Position (Height) of the descriptiontext + -- Default = 45 + ["YPosition"] = 45, + -- Set the distance to an item in which informations will be displayed (in Tiles) + -- Default = 5 + ["MaxDistance"] = 5, + -- Choose between an indicator, that highlights the currently inspected object + -- Options: ["arrow","blink","border","highlight","none"]. + -- Arrow = moving arrow pointing at the item | Blink = the whole sprite blinks white | Border = Blinking white border around the sprite | Highlight = White border around the sprite | None = Disable funtion + -- Default = "none" + ["Indicator"] = "none", + -- Set the keybinding to toggle the descriptions + -- look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html + -- Default = Keyboard.KEY_F2 + ["HideKey"] = Keyboard.KEY_F2, + -- Set the controller binding to toggle the descriptions + -- Use the Controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number + -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls + -- Default = none (-1) + ["HideButton"] = -1, + -- Initial displaystate. Can be used to change the toggle behavior of the "Hide Key" event + -- Default = false + ["InitiallyHidden"] = false, + -- Hide the descriptions when in battle + -- Default = false + ["HideInBattle"] = false, + -- Toggle obstruction based hiding, when the player has flight + -- Default = true + ["DisableObstructionOnFlight"] = true, + -- If set to true, the mod will no longer display a warning if the save game doesn't have achievements unlocked + -- This also disables warnings for using an outdated game version, and for having potentially modded Bag of Crafting recipes + -- Default = false + ["DisableAchievementCheck"] = false, + + -------Display Modes--------- - -------display Modes--------- + -- Sets the display mode of the description text. + -- possible values: default, local + -- "default": text will be displayed in the top-left of the screen. + -- "local": text will be displayed under the described object. + -- Default = "default" + ["DisplayMode"] = "default", + -- Change Size of the info boxes for LocalMode. + -- Default = 0.5 + ["LocalScale"] = 0.5, + -- Changes the position of the text in local mode, relative to the described object to be centered. Set to false to make it left-aligned + -- Default = true + ["LocalModeCentered"] = true, + + -------------CURSE------------- - -- Sets the display mode of the description text - -- Possible values: default, local - -- "default": text will be displayed in the top left of the screen - -- "local": text will be displayed under the described object - -- Default = "default" - ["DisplayMode"] = "default", - -- Change the size of the info boxes for local mode - -- Default = 0.5 - ["LocalScale"] = 0.5, - -- Changes the position of the text in local mode, relative to the described object to be centered. Set to false to make it left-aligned - -- Default = true - ["LocalModeCentered"] = true, + -- Disable informations when the floor has curse of the blind ( ? - Items) + -- Default = true + ["DisableOnCurse"] = true, + -- Disable Item informations for the second Treasure room item on alt paths + -- REPENTANCE ONLY!!! + -- Default = true + ["DisableOnAltPath"] = true, + -- Disable Item informations on the April fools challenge + -- Default = true + ["DisableOnAprilFoolsChallenge"] = true, + + ----------ITEM NAMES----------- - -------------CURSE------------- + -- Toggle Display of Collectible / Card and Pill names + -- Default = true + ["ShowItemName"] = true, + -- Toggle Display of the Item Type and Maximum Charges as an icon + -- Default = true + ["ShowItemType"] = true, + -- Toggle Display of Collectible / Trinket Icon next to Itemname + -- Default = true + ["ShowItemIcon"] = true, + -- Toggle Display of Collectible / Item descriptions + -- Default = true + ["DisplayItemInfo"] = true, + -- Toggle Display of Trinket descriptions + -- Default = true + ["DisplayTrinketInfo"] = true, + -- Set the color-name of the Itemname description text. Color names can be found& defined in "eid_data.lua" + -- Default = "ColorEIDObjName" + ["ItemNameColor"] = "ColorEIDObjName", + -- Show ID of described object in the format "Type.Variant.SubType" next to the name + -- Default = false + ["ShowObjectID"] = false, + -- Enables or disables item quality after item name + -- REPENTANCE ONLY!!! + -- Default = true + ["ShowQuality"] = true, + + -------TRANSFORMATIONS--------- - -- Disable descriptions when the floor has Curse of the Blind - -- Default = true - ["DisableOnCurse"] = true, - -- Disable descriptions for the second Treasure Room item on the alt path - -- REPENTANCE ONLY!!! - -- Default = true - ["DisableOnAltPath"] = true, - -- Disable descriptions for the April Fools challenge - -- Default = true - ["DisableOnAprilFoolsChallenge"] = true, + -- Toggle Display of Transformation text + -- Default = true + ["TransformationText"] = true, + -- Toggle Display of Transformation icons + -- Default = true + ["TransformationIcons"] = true, + -- Set the color-name of the Transformation description text. Color names can be found& defined in "eid_data.lua" + -- Default = "ColorEIDTransform" + ["TransformationColor"] = "ColorEIDTransform", + + ------------CARDS-------------- - ----------ITEM NAMES----------- + -- Toggle Display of Card / Rune descriptions + -- Default = true + ["DisplayCardInfo"] = true, + -- Toggle Display of Card / Rune descriptions when its a shop item + -- Default = false + ["DisplayCardInfoShop"] = false, + -- Toggle Display of Soulstone descriptions when its a shop item + -- REPENTANCE ONLY!!! + -- Default = true + ["DisplaySoulstoneInfoShop"] = true, + -- Toggle Display of Card / Rune descriptions when its not accessable with walking. AKA behind rock, blocks, spikes + -- Default = false + ["DisplayObstructedCardInfo"] = false, + -- Toggle Display of Soulstone descriptions when its not accessable with walking. AKA behind rock, blocks, spikes + -- REPENTANCE ONLY!!! + -- Default = true + ["DisplayObstructedSoulstoneInfo"] = true, + -- Toggle Display of Card / Rune descriptions that are spawned with the Options? item + -- REPENTANCE ONLY!!! + -- Default = false + ["DisplayCardInfoOptions?"] = false, + + ------------PILLS-------------- - -- Toggle display of collectible or Card and Pill names - -- Default = true - ["ShowItemName"] = true, - -- Toggle display of item type and maximum charge icons - -- Default = true - ["ShowItemType"] = true, - -- Toggle display of collectible or trinket icons next to the item name - -- Default = true - ["ShowItemIcon"] = true, - -- Toggle display of collectible descriptions - -- Default = true - ["DisplayItemInfo"] = true, - -- Toggle display of trinket descriptions - -- Default = true - ["DisplayTrinketInfo"] = true, - -- Set the color of the item name text - -- Color names are defined in "eid_data.lua" (line 300) - -- Default = "ColorEIDObjName" - ["ItemNameColor"] = "ColorEIDObjName", - -- Display the ID of described object in the format "Type.Variant.SubType" next to the name - -- Default = false - ["ShowObjectID"] = false, - -- Enables or disables item quality icon after item name - -- REPENTANCE ONLY!!! - -- Default = true - ["ShowQuality"] = true, + -- Toggle Display of Pill descriptions + -- Default = true + ["DisplayPillInfo"] = true, + -- Toggle Display of Pill descriptions when its a shop item + -- Default = true + ["DisplayPillInfoShop"] = true, + -- Toggle Display of Pill descriptions when its not accessable with walking. AKA behind rock, blocks, spikes + -- Default = false + ["DisplayObstructedPillInfo"] = false, + -- Toggle Display of Pill descriptions that are spawned with the Options? item + -- REPENTANCE ONLY!!! + -- Default = true + ["DisplayPillInfoOptions?"] = true, + -- Toggle Display of Pill descriptions that arent known to you yet + -- Default = false + ["ShowUnidentifiedPillDescriptions"] = false, + + --------Sacrifice Room--------- - -------TRANSFORMATIONS--------- + -- Toggle Display of next Sacrifice room Payout descriptions + -- Default = true + ["DisplaySacrificeInfo"] = true, + + --------Dice Room--------- - -- Toggle display of transformation names - -- Default = true - ["TransformationText"] = true, - -- Toggle display of transformation icons - -- Default = true - ["TransformationIcons"] = true, - -- Set the color of the Transformation description text - -- Color names are defined in "eid_data.lua" (line 300) - -- Default = "ColorEIDTransform" - ["TransformationColor"] = "ColorEIDTransform", + -- Toggle Display of Diceroom descriptions + -- Default = true + ["DisplayDiceInfo"] = true, + + --------Crane Game--------- + -- REPENTANCE ONLY!!! + + -- Toggle Display for items inside of a Crane Game + -- Default = true + ["DisplayCraneInfo"] = true, + + ---------Bag of Crafting----------- + -- REPENTANCE ONLY!!! + + -- When to show the Bag of Crafting display + -- Options: "always", "hold", "never" + -- "always" = Always show Results, "hold" = Show when holding up bag, "never" = Never show results + -- Default = "always" + ["DisplayBagOfCrafting"] = "always", + -- Display modes for the Bag of Crafting display + -- Options: "Recipe List", "Preview Only", "No Recipes", "Pickups Only" + -- The recipe list is a detailed calculated list of recipes based on what you have available on the floor + -- Preview Only shows the description of the item you can currently craft in your bag + -- No Recipes shows percentages of what item you might get from your bag / best option on the floor, for a more intended experience + -- Pickups Only just shows the room/floor pickup count + -- (No Recipes is recommended if you have modded items) + -- Default = "Recipe List" + ["BagOfCraftingDisplayMode"] = "Recipe List", + -- Hide the recipe list when in battle + -- Default = true + ["BagOfCraftingHideInBattle"] = true, + -- Changes the number of Results shown in the Bag of crafting description + -- Higher numbers can cause more lag! + -- Default = 7 + ["BagOfCraftingResults"] = 7, + -- Changes the number of ingredients for which every combination is checked + -- Higher numbers will cause lag spikes on new pickup sets! + -- Default = 12 + ["BagOfCraftingCombinationMax"] = 12, + -- Changes the number of random recipes calculated + -- Higher numbers will cause lag spikes on new pickup sets! + -- Default = 400 + ["BagOfCraftingRandomResults"] = 400, + -- Set the keybinding to toggle the scroll feature of the bag of crafting descriptions + -- look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/ButtonAction.html + -- Default = ButtonAction.ACTION_MAP + ["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP, + -- Display craftable item names, moving the recipe to a new line + -- Default = false + ["BagOfCraftingDisplayNames"] = false, + -- Display recipes as 8 icons instead of grouped ingredients + -- Default = false + ["BagOfCraftingDisplayIcons"] = false, + -- Set the keybinding to toggle the crafting display, so you can see descriptions of items/pickups on the floor + -- look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html + -- Default = Keyboard.KEY_F3 + ["CraftingHideKey"] = Keyboard.KEY_F3, + -- Set the controller binding to toggle the crafting display, so you can see descriptions of items/pickups on the floor + -- Use the Controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number + -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls + -- Default = none (-1) + ["CraftingHideButton"] = -1, + -- Set the keybinding to toggle viewing the description of the item ready to be crafted in the bag + -- look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html + -- Default = Keyboard.KEY_F3 + ["CraftingResultKey"] = Keyboard.KEY_F4, + -- Set the controller binding to toggle viewing the description of the item ready to be crafted in the bag + -- Use the Controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number + -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls + -- Default = none (-1) + ["CraftingResultButton"] = -1, + + ---------Mouse Controls----------- + + -- Toggles HUD descriptions based on the mouse position + -- Default = false + ["EnableMouseControls"] = false, + + -- Toggles the custom mouse cursor + -- Default = false + ["ShowCursor"] = false, + + -------------MISC--------------- + + -- Changes the number of Results shown for the additional Spindown dice description + -- REPENTANCE ONLY!!! + -- Default = 3 + ["SpindownDiceResults"] = 3, + + -- Spindown dice preview can skip over locked items, however the method for determining an item's locked status is not perfect + -- REPENTANCE ONLY!!! + -- Default = false + ["SpindownDiceSkipLocked"] = false, - ------------CARDS-------------- - - -- Toggle display of Card or Rune descriptions - -- Default = true - ["DisplayCardInfo"] = true, - -- Toggle display of Card or Rune descriptions when they're sold in shops - -- Default = false - ["DisplayCardInfoShop"] = false, - -- Toggle display of Soul Stone descriptions when they're sold in shops - -- REPENTANCE ONLY!!! - -- Default = true - ["DisplaySoulstoneInfoShop"] = true, - -- Toggle display of Card or Rune descriptions when they're not accessible without flight, e.g. when they are behind rocks, blocks, spikes, etc. - -- Default = false - ["DisplayObstructedCardInfo"] = false, - -- Toggle display of Soul Stone descriptions when they're not accessible without flight, e.g. when they are behind rocks, blocks, spikes, etc. - -- REPENTANCE ONLY!!! - -- Default = true - ["DisplayObstructedSoulstoneInfo"] = true, - -- Toggle display of Card or Rune descriptions when they spawn from the Options? item - -- REPENTANCE ONLY!!! - -- Default = false - ["DisplayCardInfoOptions?"] = false, - - ------------PILLS-------------- - - -- Toggle display of Pill descriptions - -- Default = true - ["DisplayPillInfo"] = true, - -- Toggle display of Pill descriptions when they're a shop item - -- Default = true - ["DisplayPillInfoShop"] = true, - -- Toggle display of Pill descriptions when they're not accessible without flight, e.g. when they are behind rocks, blocks, spikes, etc. - -- Default = false - ["DisplayObstructedPillInfo"] = false, - -- Toggle display of Pill descriptions when they spawn from the Options? item - -- REPENTANCE ONLY!!! - -- Default = true - ["DisplayPillInfoOptions?"] = true, - -- Toggle display of description for Pills that haven't been identified yet - -- Default = false - ["ShowUnidentifiedPillDescriptions"] = false, - - ------------Glitched Items-------------- - -- Toggle Display of Glitched Item (TMTRAINER) descriptions - -- Note: The --luadebug launch option is required for more detailed glitched item descriptions - -- This option allows mods to have access to your files and should be turned on at your own risk! - -- Without --luadebug, you still can see the effect the item will have on your Hearts, and what stats it might modify - -- Default = true - ["DisplayGlitchedItemInfo"] = true, - - --------Sacrifice Room--------- - - -- Toggle display of the next Sacrifice Room payout description - -- Default = true - ["DisplaySacrificeInfo"] = true, - - --------Dice Room--------- - - -- Toggle display of Dice Room descriptions - -- Default = true - ["DisplayDiceInfo"] = true, - - --------Crane Game--------- - -- REPENTANCE ONLY!!! - - -- Toggle display for items inside of a Crane Game - -- Default = true - ["DisplayCraneInfo"] = true, - - ---------Bag of Crafting----------- - -- REPENTANCE ONLY!!! - - -- When to show the Bag of Crafting display - -- Options: "always", "hold", "never" - -- "always" = Always show results, "hold" = Show when holding up bag, "never" = Never show results - -- Default = "always" - ["DisplayBagOfCrafting"] = "always", - -- Display modes for the Bag of Crafting display - -- Options: "Recipe List", "Preview Only", "No Recipes", "Pickups Only" - -- The recipe list is a detailed calculated list of recipes based on what you have available on the floor - -- Preview Only shows the description of the item you can currently craft in your bag - -- No Recipes shows percentages of what item you might get from your bag / best option on the floor, for a more intended experience - -- Pickups Only just shows the room/floor pickup count - -- (No Recipes is recommended if you have modded items) - -- Default = "Recipe List" - ["BagOfCraftingDisplayMode"] = "Recipe List", - -- Hide the recipe list when in battle - -- Default = true - ["BagOfCraftingHideInBattle"] = true, - -- Changes the amount of results shown in the Bag of Crafting description - -- Higher numbers can cause more lag! - -- Default = 7 - ["BagOfCraftingResults"] = 7, - -- Changes the amount of ingredients for which every combination is checked - -- Higher numbers will cause lag spikes on new pickup sets! - -- Default = 12 - ["BagOfCraftingCombinationMax"] = 12, - -- Changes the amount of how many random recipes get calculated - -- Higher numbers will cause lag spikes on new pickup sets! - -- Default = 400 - ["BagOfCraftingRandomResults"] = 400, - -- Set the keybinding to toggle the scroll feature of the Bag of Crafting descriptions - -- Look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/ButtonAction.html - -- Default = ButtonAction.ACTION_MAP - ["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP, - -- Display craftable item names, moving the recipe to a new line - -- Default = false - ["BagOfCraftingDisplayNames"] = false, - -- Display recipes as 8 icons instead of grouped ingredients - -- Default = false - ["BagOfCraftingDisplayIcons"] = false, - -- Set the keybinding to toggle the crafting display, so you can see descriptions of items/pickups on the floor - -- Look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html - -- Default = Keyboard.KEY_F3 - ["CraftingHideKey"] = Keyboard.KEY_F3, - -- Set the controller binding to toggle the crafting display, so you can see descriptions of items/pickups on the floor - -- Use the Controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number - -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls - -- Default = none (-1) - ["CraftingHideButton"] = -1, - -- Set the keybinding to toggle viewing the description of the item ready to be crafted in the bag - -- Look into the AB+ or Repentance documentation for the key names here: https://wofsauge.github.io/IsaacDocs/rep/enums/Keyboard.html - -- Default = Keyboard.KEY_F3 - ["CraftingResultKey"] = Keyboard.KEY_F4, - -- Set the controller binding to toggle viewing the description of the item ready to be crafted in the bag - -- Use the controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number - -- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls - -- Default = none (-1) - ["CraftingResultButton"] = -1, - - ---------Mouse Controls----------- - - -- Toggles HUD descriptions based on the mouse position - -- Default = false - ["EnableMouseControls"] = false, - -- Toggles the custom mouse cursor - -- Default = false - ["ShowCursor"] = false, - - -------------MISC--------------- - - -- Changes the number of results shown for the additional Spindown Dice description - -- REPENTANCE ONLY!!! - -- Default = 3 - ["SpindownDiceResults"] = 3, - -- Spindown Dice preview can skip over locked items, however the method for determining an item's locked status is not perfect - -- REPENTANCE ONLY!!! - -- Default = false - ["SpindownDiceSkipLocked"] = false, - - -- Error message displayed when an error occurs - -- Default = [Effect not defined] - ["ErrorMessage"] = "[Effect not defined]", - -- Set the color of the default description text - -- Color names are defined in "eid_data.lua" (line 300) - -- Default = "ColorEIDText" - ["TextColor"] = "ColorEIDText", - -- Set the color of the error description text - -- Color names are defined in "eid_data.lua" (line 300) - -- Default = "ColorEIDError" - ["ErrorColor"] = "ColorEIDError", - -- Enables or disables custom descriptions for entities - -- Default = true - ["EnableEntityDescriptions"] = true + -- Error message displayed when an error occurs + -- Default = [Effect not defined] + ["ErrorMessage"] = "[Effect not defined]", + -- Set the color-name of the default description text. Color names can be found& defined in "eid_data.lua" + -- Default = "ColorEIDText" + ["TextColor"] = "ColorEIDText", + -- Set the color-name of the Error description text. Color names can be found& defined in "eid_data.lua" + -- Default = "ColorEIDError" + ["ErrorColor"] = "ColorEIDError", + -- Enables or disables custom Descriptions for entities + -- Default = true + ["EnableEntityDescriptions"] = true, } --- END CONFIG-- --------------- --------------- +--END CONFIG-- +----------- +----------- -------------------------------------------------- -------------------------------------------------- @@ -327,76 +314,74 @@ EID.UserConfig = { -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - EID.DefaultConfig = { - ["Language"] = "en_us", - ["TranslateItemName"] = 2, - ["FontType"] = "default", - ["TextboxWidth"] = 100, - ["Scale"] = 1, - ["Transparency"] = 0.75, - ["HUDOffset"] = 10, - ["XPosition"] = 60, - ["YPosition"] = 45, - ["DisplayMode"] = "default", - ["LocalScale"] = 0.5, - ["LocalModeCentered"] = true, - ["MaxDistance"] = 5, - ["Indicator"] = "none", - ["HideKey"] = Keyboard.KEY_F2, - ["HideButton"] = -1, - ["InitiallyHidden"] = false, - ["HideInBattle"] = false, - ["DisableObstructionOnFlight"] = true, - ["DisableAchievementCheck"] = false, - ["DisableOnCurse"] = true, - ["DisableOnAltPath"] = true, - ["DisableOnAprilFoolsChallenge"] = true, - ["ShowItemName"] = true, - ["ShowItemType"] = true, - ["ShowItemIcon"] = true, - ["DisplayItemInfo"] = true, - ["DisplayTrinketInfo"] = true, - ["ItemNameColor"] = "ColorEIDObjName", - ["ShowQuality"] = true, - ["ShowObjectID"] = false, - ["TransformationText"] = true, - ["TransformationIcons"] = true, - ["TransformationColor"] = "ColorEIDTransform", - ["DisplayCardInfo"] = true, - ["DisplayCardInfoShop"] = false, - ["DisplaySoulstoneInfoShop"] = true, - ["DisplayObstructedCardInfo"] = false, - ["DisplayObstructedSoulstoneInfo"] = true, - ["DisplayCardInfoOptions?"] = false, - ["DisplayPillInfo"] = true, - ["DisplayPillInfoShop"] = true, - ["DisplayPillInfoOptions?"] = true, - ["DisplayObstructedPillInfo"] = false, - ["ShowUnidentifiedPillDescriptions"] = false, - ["DisplayGlitchedItemInfo"] = true, - ["DisplaySacrificeInfo"] = true, - ["DisplayDiceInfo"] = true, - ["DisplayBagOfCrafting"] = "always", - ["DisplayCraneInfo"] = true, - ["BagOfCraftingResults"] = 7, - ["BagOfCraftingCombinationMax"] = 12, - ["BagOfCraftingRandomResults"] = 400, - ["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP, - ["BagOfCraftingDisplayNames"] = false, - ["BagOfCraftingDisplayIcons"] = false, - ["BagOfCraftingHideInBattle"] = true, - ["BagOfCraftingDisplayMode"] = "Recipe List", - ["CraftingHideKey"] = Keyboard.KEY_F3, - ["CraftingHideButton"] = -1, - ["CraftingResultKey"] = Keyboard.KEY_F4, - ["CraftingResultButton"] = -1, - ["SpindownDiceResults"] = 3, - ["SpindownDiceSkipLocked"] = false, - ["EnableMouseControls"] = false, - ["ShowCursor"] = false, - ["ErrorMessage"] = "[Effect not defined]", - ["TextColor"] = "ColorEIDText", - ["ErrorColor"] = "ColorEIDError", - ["EnableEntityDescriptions"] = true + ["Language"] = "en_us", + ["TranslateItemName"] = 2, + ["FontType"] = "default", + ["TextboxWidth"] = 100, + ["Scale"] = 1, + ["Transparency"] = 0.75, + ["HUDOffset"] = 10, + ["XPosition"] = 60, + ["YPosition"] = 45, + ["DisplayMode"] = "default", + ["LocalScale"] = 0.5, + ["LocalModeCentered"] = true, + ["MaxDistance"] = 5, + ["Indicator"] = "none", + ["HideKey"] = Keyboard.KEY_F2, + ["HideButton"] = -1, + ["InitiallyHidden"] = false, + ["HideInBattle"] = false, + ["DisableObstructionOnFlight"] = true, + ["DisableAchievementCheck"] = false, + ["DisableOnCurse"] = true, + ["DisableOnAltPath"] = true, + ["DisableOnAprilFoolsChallenge"] = true, + ["ShowItemName"] = true, + ["ShowItemType"] = true, + ["ShowItemIcon"] = true, + ["DisplayItemInfo"] = true, + ["DisplayTrinketInfo"] = true, + ["ItemNameColor"] = "ColorEIDObjName", + ["ShowQuality"] = true, + ["ShowObjectID"] = false, + ["TransformationText"] = true, + ["TransformationIcons"] = true, + ["TransformationColor"] = "ColorEIDTransform", + ["DisplayCardInfo"] = true, + ["DisplayCardInfoShop"] = false, + ["DisplaySoulstoneInfoShop"] = true, + ["DisplayObstructedCardInfo"] = false, + ["DisplayObstructedSoulstoneInfo"] = true, + ["DisplayCardInfoOptions?"] = false, + ["DisplayPillInfo"] = true, + ["DisplayPillInfoShop"] = true, + ["DisplayPillInfoOptions?"] = true, + ["DisplayObstructedPillInfo"] = false, + ["ShowUnidentifiedPillDescriptions"] = false, + ["DisplaySacrificeInfo"] = true, + ["DisplayDiceInfo"] = true, + ["DisplayBagOfCrafting"] = "always", + ["DisplayCraneInfo"] = true, + ["BagOfCraftingResults"] = 7, + ["BagOfCraftingCombinationMax"] = 12, + ["BagOfCraftingRandomResults"] = 400, + ["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP, + ["BagOfCraftingDisplayNames"] = false, + ["BagOfCraftingDisplayIcons"] = false, + ["BagOfCraftingHideInBattle"] = true, + ["BagOfCraftingDisplayMode"] = "Recipe List", + ["CraftingHideKey"] = Keyboard.KEY_F3, + ["CraftingHideButton"] = -1, + ["CraftingResultKey"] = Keyboard.KEY_F4, + ["CraftingResultButton"] = -1, + ["SpindownDiceResults"] = 3, + ["SpindownDiceSkipLocked"] = false, + ["EnableMouseControls"] = false, + ["ShowCursor"] = false, + ["ErrorMessage"] = "[Effect not defined]", + ["TextColor"] = "ColorEIDText", + ["ErrorColor"] = "ColorEIDError", + ["EnableEntityDescriptions"] = true, } From d593c5d581451c4cc67a016b8bb250476b8a9a93 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 02:23:50 -0500 Subject: [PATCH 25/36] add Glitched Item toggle --- eid_config.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/eid_config.lua b/eid_config.lua index 78ed9ded..5d6c3cd4 100644 --- a/eid_config.lua +++ b/eid_config.lua @@ -188,6 +188,14 @@ EID.UserConfig = { -- Default = false ["ShowUnidentifiedPillDescriptions"] = false, + ------------Glitched Items-------------- + -- Toggle Display of Glitched Item (TMTRAINER) descriptions + -- Note: The --luadebug launch option is required for more detailed glitched item descriptions + -- This option allows mods to have access to your files and should be turned on at your own risk! + -- Without --luadebug, you still can see the effect the item will have on your Hearts, and what stats it might modify + -- Default = true + ["DisplayGlitchedItemInfo"] = true, + --------Sacrifice Room--------- -- Toggle display of the next Sacrifice Room payout description @@ -366,6 +374,7 @@ EID.DefaultConfig = { ["DisplayPillInfoOptions?"] = true, ["DisplayObstructedPillInfo"] = false, ["ShowUnidentifiedPillDescriptions"] = false, + ["DisplayGlitchedItemInfo"] = true, ["DisplaySacrificeInfo"] = true, ["DisplayDiceInfo"] = true, ["DisplayBagOfCrafting"] = "always", From 065ddadaabad68634ae204c6437ef3fb2e425a98 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 02:24:56 -0500 Subject: [PATCH 26/36] more consistent variable usage --- eid_api.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eid_api.lua b/eid_api.lua index b814438f..606b2c65 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -311,14 +311,14 @@ function EID:getDescriptionObj(Type, Variant, SubType, entity) description.ObjType = Type description.ObjVariant = Variant description.ObjSubType = SubType - description.fullItemString = Type.."."..Variant.."."..description.ObjSubType - description.Name = EID:getObjectName(Type, Variant, description.ObjSubType) + description.fullItemString = Type.."."..Variant.."."..SubType + description.Name = EID:getObjectName(Type, Variant, SubType) description.Entity = entity or nil - local tableEntry = EID:getDescriptionData(Type, Variant, description.ObjSubType) - description.Description = tableEntry and tableEntry[3] or EID:getXMLDescription(Type, Variant, description.ObjSubType) + local tableEntry = EID:getDescriptionData(Type, Variant, SubType) + description.Description = tableEntry and tableEntry[3] or EID:getXMLDescription(Type, Variant, SubType) - description.Transformation = EID:getTransformation(Type, Variant, description.ObjSubType) + description.Transformation = EID:getTransformation(Type, Variant, SubType) for k,modifier in pairs(EID.DescModifiers) do if modifier.condition(description) then From a68107681e9335cfab732e0e7d88eb68a48d83dd Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 03:01:01 -0500 Subject: [PATCH 27/36] Fix reloading after a mod change --- eid_tmtrainer.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/eid_tmtrainer.lua b/eid_tmtrainer.lua index 194803ea..2c393c90 100644 --- a/eid_tmtrainer.lua +++ b/eid_tmtrainer.lua @@ -121,6 +121,10 @@ local function CheckLogForItems(_) eidDesc = EID:CheckGlitchedItemConfig(maxNumber - spawnedItems) .. eidDesc EID:addCollectible(maxNumber - spawnedItems, eidDesc) end + elseif string.find(line, "Game ended;") then + spawnedItems = 0 + lastEffectTrigger = "chain" + eidDesc = "" end line = theLog:read() @@ -146,3 +150,9 @@ local function GameStartTMTRAINER(_,isSave) spawnedItems = 0 end EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, GameStartTMTRAINER) + +local function GameEndTMTRAINER() + -- Our cursor spot in the log gets wiped if mods are reloaded; can't think of a better way than this + Isaac.DebugString("[EID] Game ended; ignore previous glitched items in the log!") +end +EID:AddCallback(ModCallbacks.MC_PRE_GAME_EXIT, GameEndTMTRAINER) From 3201bce59a8109330610dee31c3306a64ca2f6c4 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 03:24:59 -0500 Subject: [PATCH 28/36] Swap Q and E --- resources/gfx/eid_inline_icons.png | Bin 12602 -> 14964 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/gfx/eid_inline_icons.png b/resources/gfx/eid_inline_icons.png index 62133e0b09772a74ad6f62ab62441674f6443ec3..11097ebec6aaf1058e5c7e6fd3ae080b749ba7ae 100644 GIT binary patch literal 14964 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 YuYaO=#NY8i{tN-gORGrLNSFrw4^2TztpET3 From 695197b174bc44cc8290dc9e3c8f1c9e05ebe877 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 04:03:28 -0500 Subject: [PATCH 29/36] add hotkey for Reset Bag --- eid_bagofcrafting.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/eid_bagofcrafting.lua b/eid_bagofcrafting.lua index ba3bfa9e..3a4c289d 100644 --- a/eid_bagofcrafting.lua +++ b/eid_bagofcrafting.lua @@ -664,6 +664,7 @@ local refreshPosition = 0 local bagOfCraftingRefreshes = 0 local downHeld = 0 local upHeld = 0 +local resetBagCounter = 0 local craftingIsHidden = false local showCraftingResult = false @@ -1020,7 +1021,7 @@ function EID:handleBagOfCraftingRendering() local resultDesc = EID:getDescriptionEntry("CraftingResults") EID:appendToDescription(customDescObj, resultDesc) if Input.IsActionPressed(EID.Config["BagOfCraftingToggleKey"], EID.player.ControllerIndex) then - EID.player:SetShootingCooldown(2) + EID.player.ControlsCooldown = 2 if Input.IsActionTriggered(ButtonAction.ACTION_SHOOTDOWN, EID.player.ControllerIndex) then bagOfCraftingOffset = math.min(numResults-(numResults%EID.Config["BagOfCraftingResults"]), bagOfCraftingOffset + EID.Config["BagOfCraftingResults"]) downHeld = Isaac.GetTime() @@ -1045,6 +1046,16 @@ function EID:handleBagOfCraftingRendering() bagOfCraftingOffset = math.max(0, bagOfCraftingOffset - EID.Config["BagOfCraftingResults"]) upHeld = Isaac.GetTime() - 700 end + --reset bag contents when holding Use Pill/Card + if Input.IsActionPressed(ButtonAction.ACTION_PILLCARD, EID.player.ControllerIndex) then + resetBagCounter = resetBagCounter + 1 + if resetBagCounter > 120 then + EID.BagItems = {} + resetBagCounter = 0 + end + else + resetBagCounter = 0 + end end --fix bug with being allowed to go to an empty page if recipe count = multiple of page size (or if we refresh on last page) if (bagOfCraftingOffset >= numResults) then bagOfCraftingOffset = bagOfCraftingOffset - EID.Config["BagOfCraftingResults"] end From 4bbba8d5b50d83bfa8b993dcf06933245b61e3c4 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 04:03:52 -0500 Subject: [PATCH 30/36] Add Reset Bag to Bag hotkey string --- descriptions/rep/en_us.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/descriptions/rep/en_us.lua b/descriptions/rep/en_us.lua index c14bf645..60a9bb6c 100644 --- a/descriptions/rep/en_us.lua +++ b/descriptions/rep/en_us.lua @@ -1022,7 +1022,7 @@ EID.descriptions[languageCode].CraftingHideKey = "Hide:" EID.descriptions[languageCode].CraftingPreviewKey = "Preview:" EID.descriptions[languageCode].CraftingPreviewBackup = "!!! If this item's locked, it will turn into" -EID.descriptions[languageCode].CraftingResults = "(Scroll: hold {{CONFIG_BoC_Toggle}} + {{ButtonY}} {{ButtonA}},#Lock: {{ButtonX}}, Refresh: {{ButtonB}})" +EID.descriptions[languageCode].CraftingResults = "(Scroll: Hold {{CONFIG_BoC_Toggle}} + {{ButtonY}} {{ButtonA}}, Lock: {{ButtonX}}, Refresh: {{ButtonB}}, Reset Bag: Hold {{ButtonRB}})" EID.descriptions[languageCode].BlankCardCharge = "Blank Card charge:" EID.descriptions[languageCode].BlankCardQCard = "Teleport to I Am Error Room#Blank Card and ?-Card will be destroyed" From 9d5d36768fe5406232ac196a4b514b6d83ffa515 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 14:27:34 -0500 Subject: [PATCH 31/36] Move Entity ID display code --- eid_modifiers.lua | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/eid_modifiers.lua b/eid_modifiers.lua index 2c2930eb..548bf009 100644 --- a/eid_modifiers.lua +++ b/eid_modifiers.lua @@ -262,20 +262,6 @@ local game = Game() EID:addDescriptionModifier("Golden Trinket", GoldenTrinketCondition, GoldenTrinketCallback) - - -- Handle ItemID - local function ItemIDCondition(descObj) - return EID.Config["ShowObjectID"] and descObj.ObjType > 0 - end - - local function ItemIDCallback(descObj) - descObj.Name = descObj.Name.."{{ColorGray}} "..descObj.ObjType.."."..descObj.ObjVariant.."."..descObj.ObjSubType - return descObj - end - EID:addDescriptionModifier("ItemID", ItemIDCondition, ItemIDCallback) - - - -- Handle Blank Card description addition local blankCardHidden = {[32]=true,[33]=true,[34]=true,[35]=true,[36]=true,[37]=true,[38]=true,[39]=true,[40]=true,[41]=true,[49]=true,[50]=true,[55]=true,[78]=true} local function BlankCardCondition(descObj) From b6eb67eca1705166a7caa59978900418afc2ef19 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 14:28:52 -0500 Subject: [PATCH 32/36] Fix Current + English issues --- main.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/main.lua b/main.lua index 46a615af..ea1ab76a 100644 --- a/main.lua +++ b/main.lua @@ -354,10 +354,15 @@ function EID:printDescription(desc) EID.Config["Language"] = curLanguage if EID.Config["TranslateItemName"] == 1 then curName = englishName - elseif EID.Config["TranslateItemName"] == 3 and curName ~= englishName then + elseif EID.Config["TranslateItemName"] == 3 and curName ~= englishName and not EID.isDisplayingPermanent then curName = curName.." ("..englishName..")" end end + -- Display Entity ID + if EID.Config["ShowObjectID"] and desc.ObjType > 0 then + curName = curName.." {{ColorGray}}"..desc.ObjType.."."..desc.ObjVariant.."."..desc.ObjSubType + end + -- Display Quality if REPENTANCE and EID.Config["ShowQuality"] and desc.ObjVariant == PickupVariant.PICKUP_COLLECTIBLE then local quality = tonumber(EID.itemConfig:GetCollectible(tonumber(desc.ObjSubType)).Quality) curName = curName.." - {{Quality"..quality.."}}" @@ -865,7 +870,7 @@ local function onRender(t) --Handle Glitched Items if closest.Type == 5 and closest.Variant == 100 and closest.SubType > 4294960000 then - local glitchedObj = EID.getDescriptionObj(closest.Type, closest.Variant, closest.SubType) + local glitchedObj = EID:getDescriptionObj(closest.Type, closest.Variant, closest.SubType) local glitchedDesc = EID:getXMLDescription(closest.Type, closest.Variant, closest.SubType) -- force the default glitchy description if option is off From 3fab192269e7a4cfa777bc52e794668e334d5dbf Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 14:29:51 -0500 Subject: [PATCH 33/36] remove unnecessary false --- descriptions/rep/transformations.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/descriptions/rep/transformations.lua b/descriptions/rep/transformations.lua index c565956f..936a867d 100644 --- a/descriptions/rep/transformations.lua +++ b/descriptions/rep/transformations.lua @@ -93,4 +93,4 @@ local repTransformations = { -- Trinkets ["5.350.169"] = "1", } -EID:updateDescriptionsViaTable(repTransformations, EID.EntityTransformations, false) +EID:updateDescriptionsViaTable(repTransformations, EID.EntityTransformations) From 15657e0b276cb2acc555208af6ccbbee15e4c6c9 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 16:35:47 -0500 Subject: [PATCH 34/36] remove reminder comment --- eid_data.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/eid_data.lua b/eid_data.lua index 935e845a..bcc4aa17 100644 --- a/eid_data.lua +++ b/eid_data.lua @@ -228,7 +228,6 @@ EID.InlineIcons = { ["Quality3"] = {"Quality", 3, 10, 10, 0, 0}, ["Quality4"] = {"Quality", 4, 10, 10, 0, 0}, -- Controller Button Icons dynamically return either Controller or Keyboard key sprites - --need to make not dynamic ones for bag of crafting hotkey display? ["ButtonY"] = {"XboxOne", 0, 9, 8, 3, 4, function(_) return getControllerSprite() end}, ["ButtonA"] = {"XboxOne", 1, 9, 8, 3, 4, function(_) return getControllerSprite() end}, ["ButtonB"] = {"XboxOne", 2, 9, 8, 3, 4, function(_) return getControllerSprite() end}, From ffe82599f6b90ce91b1865369fc6c25989a5b7e5 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 16:42:29 -0500 Subject: [PATCH 35/36] Add controller hotkey display support --- eid_bagofcrafting.lua | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/eid_bagofcrafting.lua b/eid_bagofcrafting.lua index 3a4c289d..7b30cead 100644 --- a/eid_bagofcrafting.lua +++ b/eid_bagofcrafting.lua @@ -715,23 +715,41 @@ for key,num in pairs(Keyboard) do keyString = string.gsub(keyString, "_", " ") HotkeyToString[num] = keyString end +--convert controller enum to buttons +local ControllerToString = { [0] = "{{ButtonDLeft}}", "{{ButtonDRight}}", "{{ButtonDUp}}", "{{ButtonDDown}}", +"{{ButtonA}}", "{{ButtonB}}", "{{ButtonX}}", "{{ButtonY}}", "{{ButtonLB}}", "{{ButtonLT}}", "{{ButtonLStick}}", +"{{ButtonRB}}", "{{ButtonRT}}", "{{ButtonRStick}}", "{{ButtonSelect}}", "{{ButtonMenu}}" } local function getHotkeyString() local hotkeyString = "" local hideDesc = EID:getDescriptionEntry("CraftingHideKey") local previewDesc = EID:getDescriptionEntry("CraftingPreviewKey") - --we have a binding for a keyboard hide key - if HotkeyToString[EID.Config["CraftingHideKey"]] then - hotkeyString = hideDesc .. " " .. HotkeyToString[EID.Config["CraftingHideKey"]] + + local controllerEnabled = EID.player.ControllerIndex > 0 + local hideKey = HotkeyToString[EID.Config["CraftingHideKey"]] + local hideButton = controllerEnabled and ControllerToString[EID.Config["CraftingHideButton"]] + local previewKey = HotkeyToString[EID.Config["CraftingResultKey"]] + local previewButton = controllerEnabled and ControllerToString[EID.Config["CraftingResultButton"]] + + if hideKey or hideButton then hotkeyString = hideDesc .. " " end + if hideKey and hideButton then + hotkeyString = hotkeyString .. hideKey .. "/" .. hideButton + else + hotkeyString = hotkeyString .. (hideKey or hideButton) end - --we have a binding for a keyboard preview toggle key, and a full bag, and aren't on Preview Only mode - if #EID.BagItems >= 8 and EID.Config["BagOfCraftingDisplayMode"] ~= "Preview Only" and HotkeyToString[EID.Config["CraftingResultKey"]] then - if hotkeyString ~= "" then hotkeyString = hotkeyString .. ", " end - hotkeyString = hotkeyString .. previewDesc .. " " .. HotkeyToString[EID.Config["CraftingResultKey"]] + + if #EID.BagItems >= 8 and EID.Config["BagOfCraftingDisplayMode"] ~= "Preview Only" then + if previewKey or previewButton then hotkeyString = hotkeyString .. ", " .. previewDesc .. " " end + if previewKey and previewButton then + hotkeyString = hotkeyString .. previewKey .. "/" .. previewButton + else + hotkeyString = hotkeyString .. (previewKey or previewButton) + end end if hotkeyString ~= "" then hotkeyString = "!!! " .. hotkeyString .. "#" end + return hotkeyString end From 0b4186939c45155e0f8469ae517b755a5c1eeb61 Mon Sep 17 00:00:00 2001 From: Buurazu Date: Fri, 14 Jan 2022 16:48:39 -0500 Subject: [PATCH 36/36] Improve Description #1 detection --- eid_tmtrainer.lua | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/eid_tmtrainer.lua b/eid_tmtrainer.lua index 2c393c90..dfd08327 100644 --- a/eid_tmtrainer.lua +++ b/eid_tmtrainer.lua @@ -14,6 +14,7 @@ local game = Game() local maxNumber = 4294967296 local spawnedItems = 0 local lastEffectTrigger = "chain" +local descOne = "" local logLocation = os.getenv("SYSTEMDRIVE") .. "/Users/" .. os.getenv("USERNAME") .. "/Documents/My Games/Binding of Isaac Repentance/log.txt" local logFound = false @@ -85,10 +86,6 @@ local function parseEffectLine(raw) return eidString end ---TODO: Add an option for displaying glitched item descriptions check it here --- Move the item config part to API, it can be used without luadebug --- bag of crafting hold use to reset bag - local function CheckLogForItems(_) if not EID.Config["DisplayGlitchedItemInfo"] or not logFound or game:GetFrameCount() % 5 ~= 0 or not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER) then return end @@ -116,10 +113,11 @@ local function CheckLogForItems(_) eidDesc = eidDesc .. parseEffectLine(line) if numEffects == 0 then -- Glowing Hour Glass type effects seem to cause the game to reload all items, check if our desc is equal to the first one - if (EID:getDescriptionObj(5, 100, maxNumber - 1).Description == eidDesc) then spawnedItems = 1 end + if (descOne == eidDesc) then spawnedItems = 1 end eidDesc = EID:CheckGlitchedItemConfig(maxNumber - spawnedItems) .. eidDesc EID:addCollectible(maxNumber - spawnedItems, eidDesc) + if spawnedItems == 1 then descOne = eidDesc end end elseif string.find(line, "Game ended;") then spawnedItems = 0