diff --git a/eid_api.lua b/eid_api.lua index 87926dc2..4a0b5c5c 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -491,6 +491,9 @@ function EID:hasDescription(entity) isAllowed = isAllowed or (entity.Variant == PickupVariant.PICKUP_PILL and EID.Config["DisplayPillInfo"]) 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") + end isAllowed = isAllowed or (entity.Type == 1000 and entity.Variant == EffectVariant.DICE_FLOOR and EID.Config["DisplayDiceInfo"]) return isAllowed end diff --git a/eid_config.lua b/eid_config.lua index 280cd321..4ccc7b68 100644 --- a/eid_config.lua +++ b/eid_config.lua @@ -195,6 +195,13 @@ EID.UserConfig = { -- 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!!! @@ -355,6 +362,7 @@ EID.DefaultConfig = { ["DisplaySacrificeInfo"] = true, ["DisplayDiceInfo"] = true, ["DisplayBagOfCrafting"] = "always", + ["DisplayCraneInfo"] = true, ["BagOfCraftingResults"] = 7, ["BagOfCraftingCombinationMax"] = 12, ["BagOfCraftingRandomResults"] = 400, diff --git a/main.lua b/main.lua index e5ad0a69..49d97653 100644 --- a/main.lua +++ b/main.lua @@ -28,6 +28,7 @@ EID.sacrificeCounter = {} EID.itemConfig = Isaac.GetItemConfig() EID.effectList = {["76"] = true} EID.itemUnlockStates = {} +EID.CraneItemType = {} -- Sprite inits EID.IconSprite = Sprite() @@ -137,6 +138,7 @@ function EID:onNewFloor() if REPENTANCE then EID.bagOfCraftingRoomQueries = {} EID.bagOfCraftingFloorQuery = {} + EID.CraneItemType = {} end end EID:AddCallback(ModCallbacks.MC_POST_NEW_LEVEL, EID.onNewFloor) @@ -213,6 +215,22 @@ function EID:IsAltChoice(pickup) return true end +--------------------------------------------------------------------------- +-------------------------Handle Crane Game----------------------------- + +function EID:postGetCollectible(selectedCollectible, itemPoolType, decrease, seed) + if itemPoolType == ItemPoolType.POOL_CRANE_GAME then + for _, crane in ipairs(Isaac.FindByType(6, 16, -1, true, false)) do + if not crane:GetSprite():IsPlaying("Broken") then + if not EID.CraneItemType[tostring(crane.InitSeed)] then + EID.CraneItemType[tostring(crane.InitSeed)] = selectedCollectible + end + end + end + end +end +EID:AddCallback(ModCallbacks.MC_POST_GET_COLLECTIBLE, EID.postGetCollectible) + --------------------------------------------------------------------------- ---------------------------Printing Functions------------------------------ @@ -542,6 +560,7 @@ EID.hasValidWalkingpath = true function EID:onGameUpdate() EID:setPlayer() + --Fix Overlapping Pedestals local curPositions = {} for _, entity in ipairs(Isaac.FindByType(5, 100, -1, true, false)) do @@ -556,6 +575,14 @@ function EID:onGameUpdate() table.insert(curPositions, {entity, entity.Position}) end + for _, crane in ipairs(Isaac.FindByType(6, 16, -1, true, false)) do + if EID.CraneItemType[tostring(crane.InitSeed)] then + if crane:GetSprite():IsPlaying("Prize") then + EID.CraneItemType[tostring(crane.InitSeed)] = nil + end + end + end + if not EID.Config["DisplayObstructedCardInfo"] or not EID.Config["DisplayObstructedPillInfo"] or not EID.Config["DisplayObstructedSoulstoneInfo"] then if EID.lastDescriptionEntity == nil or (EID.Config["DisableObstructionOnFlight"] and EID.player.CanFly) then if EID.pathCheckerEntity ~= nil then @@ -755,12 +782,30 @@ local function onRender(t) EID:printDescription(origDesc) return end - + if closest.Type == 1000 and closest.Variant == 76 then EID:printDescription(EID:getDescriptionObj(closest.Type, closest.Variant, closest.SubType+1)) return end + if closest.Type == 6 and closest.Variant == 16 then + --Handle Crane Game + + if EID.CraneItemType[tostring(closest.InitSeed)] then + if EID:getEntityData(closest, "EID_DontHide") ~= true then + if (EID:hasCurseBlind() and EID.Config["DisableOnCurse"]) or (game.Challenge == Challenge.CHALLENGE_APRILS_FOOL and EID.Config["DisableOnAprilFoolsChallenge"]) then + EID:renderQuestionMark() + return + end + end + local collectibleID = EID.CraneItemType[tostring(closest.InitSeed)] + local descriptionObj = EID:getDescriptionObj(5, 100, collectibleID) + + EID:printDescription(descriptionObj) + return + end + end + if closest.Variant == PickupVariant.PICKUP_TRINKET then --Handle Trinkets local trinketID = closest.SubType @@ -851,8 +896,10 @@ if EID.MCMLoaded or REPENTANCE then if REPENTANCE and isSave then EID.BagItems = savedEIDConfig["BagContent"] EID.bagOfCraftingRoomQueries = savedEIDConfig["BagFloorContent"] + EID.CraneItemType = savedEIDConfig["CraneItemType"] savedEIDConfig["BagContent"] = nil savedEIDConfig["BagFloorContent"] = nil + savedEIDConfig["CraneItemType"] = nil else EID.BagItems = {} end @@ -896,6 +943,7 @@ if EID.MCMLoaded or REPENTANCE then if REPENTANCE then EID.Config["BagContent"] = EID.BagItems or {} EID.Config["BagFloorContent"] = EID.bagOfCraftingRoomQueries or {} + EID.Config["CraneItemType"] = EID.CraneItemType or {} end EID.SaveData(EID, json.encode(EID.Config)) EID:hidePermanentText() diff --git a/mod_config_menu.lua b/mod_config_menu.lua index a1f6c421..7c3c619c 100644 --- a/mod_config_menu.lua +++ b/mod_config_menu.lua @@ -619,9 +619,33 @@ if MCMLoaded then } ) + + local diceSteps = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} if REPENTANCE then + --------Crane Game--------- + MCM.AddSetting( + "EID", + "Display", + { + Type = ModConfigMenu.OptionType.BOOLEAN, + CurrentSetting = function() + return EID.Config["DisplayCraneInfo"] + end, + Display = function() + local onOff = "False" + if EID.Config["DisplayCraneInfo"] then + onOff = "True" + end + return "Crane Game Infos: " .. onOff + end, + OnChange = function(currentBool) + EID.Config["DisplayCraneInfo"] = currentBool + end + } + ) + MCM.AddSpace("EID", "Display") -- Spindown Dice results