diff --git a/descriptions/ab+/en_us.lua b/descriptions/ab+/en_us.lua index ffa7f579..bcb7ec98 100644 --- a/descriptions/ab+/en_us.lua +++ b/descriptions/ab+/en_us.lua @@ -37,7 +37,7 @@ EID.descriptions[languageCode].collectibles={ {"18", "A Dollar", "+99 coins"}, {"19", "Boom!", "+10 Bombs"}, {"20", "Transcendence", "Flight!"}, - {"21", "The Compass", "Reveals all icons on the map#Does not show the layout of the map"}, + {"21", "The Compass", "Reveals icons on the map#Does not show the layout of the map"}, {"22", "Lunch", "↑ +1 Health up"}, {"23", "Dinner", "↑ +1 Health up"}, {"24", "Dessert", "↑ +1 Health up"}, @@ -200,7 +200,7 @@ EID.descriptions[languageCode].collectibles={ {"181", "White Pony", "Grants flight while held#Sets your speed to 1.5 if you have less than 1.5#Holy Dash on use"}, {"182", "Sacred Heart", "↑ +1 Health up#Full health#↑ 230% + 1 Damage up#↓ -0.4 Tears down#↓ -0.25 Shot Speed down#↑ +0.38 Range up#↑ +0.75 Tear Height#Homing tears"}, {"183", "Tooth Picks", "↑ +0.7 Tears up#↑ +0.16 Shot Speed up"}, - {"184", "Holy Grail", "Grants flight#↑ +1 Health up"}, + {"184", "Holy Grail", "Flight#↑ +1 Health up"}, {"185", "Dead Dove", "Flight#Spectral tears"}, {"186", "Blood Rights", "↑ Deal 40 damage to every enemy#↓ Deals 1 heart of damage to you#Prioritizes Red Hearts"}, {"187", "Guppy's Hairball", "Growing hairball#Swings around you#Grows when it kills an enemy#Bigger ball deals more damage"}, @@ -385,7 +385,7 @@ EID.descriptions[languageCode].collectibles={ {"366", "Scatter Bombs", "+5 bombs#Causes your bombs to explode into 2-4 tiny bombs"}, {"367", "Sticky Bombs", "+5 bombs#When a bomb kills an enemy, it spawns blue spiders#Causes your bombs to stick to enemies"}, {"368", "Epiphora", "Shooting in one direction gradually decreases your tear delay by up to 200%"}, - {"369", "Continuum", "↑ +2.25 Range up#↑ +1.5 Tear Height#Tears travel through walls and appear out of the opposite wall"}, + {"369", "Continuum", "↑ +2.25 Range up#↑ +1.5 Tear Height#Spectral tears#Tears travel through walls and appear out of the opposite wall"}, {"370", "Mr. Dolly", "↑ +0.7 Tears up#↑ +5.25 Range up#↑ +0.5 Tear Height#Spawns 3 random hearts when picked up"}, {"371", "Curse of the Tower", "Spawn 6 troll bombs every time you get hit#These are affected by bomb items"}, {"372", "Charged Baby", "Random chance to drop a battery or freeze all enemies in the room#Chance to add one charge to your active item"}, @@ -476,7 +476,7 @@ EID.descriptions[languageCode].collectibles={ {"457", "Cone Head", "+1 Soul Heart#20% chance to ignore damage"}, {"458", "Belly Button", "Spawns a random trinket on pickup#Grants 1 extra trinket slot"}, {"459", "Sinus Infection", "20% chance to shoot sticky poison tears#Deals your damage each second#Sticks for 60 seconds"}, - {"460", "Glaucoma", "5% chance to shoot concussive tears"}, + {"460", "Glaucoma", "5% chance to shoot concussive tears#Makes the screen slightly darker"}, {"461", "Parasitoid", "15% chance to shoot egg sacks#Spawns slowing creep on hit#Spawns a blue spider or fly on hit"}, {"462", "Eye of Belial", "↑ +1.5 Range up#↑ +1 Tear Height#Grants piercing tears#After hitting the first enemy, the tear deals double damage and gains a homing effect"}, {"463", "Sulfuric Acid", "↑ +0.3 Damage up#Chance to destroy rocks and open doors with your tears"}, @@ -537,7 +537,7 @@ EID.descriptions[languageCode].collectibles={ {"518", "Buddy in a Box", "Familiar which looks like a random coop Baby#Has a random tear effect#Will be randomized every floor"}, {"519", "Lil Delirium", "A familiar that transforms into other random familiars every 10 seconds"}, {"520", "Jumper Cables", "+1 charge for your active item for every 15 enemies killed"}, - {"521", "Coupon", "When used, causes one random item in the {{Shop}}Shop or {{DevilRoom}}Devil Room to become free"}, + {"521", "Coupon", "When used, causes one random item in the {{Shop}}Shop or {{DevilRoom}}Devil Room to become free#While held, guarantees one Shop item will be on sale"}, {"522", "Telekinesis", "Enemy projectiles close to you are held in place for 3 seconds#They get thrown away from you afterwards#Recharges after 3 seconds"}, {"523", "Moving Box", "When used, stores all pickups from the current room#Using it again will put them back on the floor again#This allows you to move things between rooms"}, {"524", "Technology Zero", "Tears will be connected with beams of electricity#Electricity damage equals your damage"}, @@ -745,7 +745,7 @@ EID.descriptions[languageCode].cards={ {"38", "Berkano", "Summons 3 blue spiders and 3 blue flies"}, {"39", "Algiz", "Invincibility for 30 seconds"}, {"40", "Blank Rune", "Random rune effect#25% chance to drop itself again"}, - {"41", "Black Rune", "Deals 40 damage to all enemies#Random stat up for every pedestal items in the room#(Destroys all pedestals in room)"}, + {"41", "Black Rune", "Deals 40 damage to all enemies#Converts all pedestal items in the room into random stat ups#Converts all pickups in the room into blue flies"}, {"42", "Chaos Card", "Throwable instant kill-card"}, {"43", "Credit Card", "Removes the price from all items in the current shop or Devil deal, making everything free"}, {"44", "Rules Card", "Displays \"helpful\" tips on use"}, diff --git a/descriptions/rep/en_us.lua b/descriptions/rep/en_us.lua index 528812b3..3bfc7eaf 100644 --- a/descriptions/rep/en_us.lua +++ b/descriptions/rep/en_us.lua @@ -145,7 +145,7 @@ local repCollectibles={ [360] = {"360", "Incubus", "Gain a demonic familiar that shoots the same tears as Isaac#Deals 75% of your damage unless playing as Lilith"}, -- Incubus [366] = {"366", "Scatter Bombs", "+5 bombs#Causes your bombs to explode into 4-5 tiny bombs"}, -- Scatter Bombs [368] = {"368", "Epiphora", "Shooting in one direction gradually increases your fire rate by up to 200%"}, -- Epiphora - [369] = {"369", "Continuum", "↑ +3 Range up#Tears travel through walls and appear out of the opposite wall"}, -- Continuum + [369] = {"369", "Continuum", "↑ +3 Range up#Spectral tears#Tears travel through walls and appear out of the opposite wall"}, -- Continuum [370] = {"370", "Mr. Dolly", "↑ +0.7 Tears up#↑ +1.5 Range up#Spawns 3 random hearts when picked up"}, -- Mr. Dolly [372] = {"372", "Charged Baby", "Random chance to drop a battery or freeze all enemies in the room#Chance to add one charge to your active item"}, -- Charged Baby [374] = {"374", "Holy Light", "10% chance to shoot Holy tears, which will spawn a beam of light on hit#The beam deals 3x your damage#50% chance at 9 Luck"}, -- Holy Light @@ -375,7 +375,7 @@ local repCollectibles={ [723] = {"723", "Spindown Dice", "Transforms all items in the room by decreasing their internal ID number by one"}, -- Spindown Dice [724] = {"724", "Hypercoagulation", "Upon taking enemy damage, drop a half or full Red Heart#Spawned hearts launch out and despawn after 1.5 seconds"}, -- Hypercoagulation [725] = {"725", "IBS", "After dealing enough damage:#Throw poop#Create buffing creep#Fart#Drop 5 live bombs"}, -- IBS - [726] = {"726", "Hemoptysis", "Double-tap a fire button to sneeze blood#Deals 150% your damage to enemies in front of you#1 second cooldown"}, -- Hemoptysis + [726] = {"726", "Hemoptysis", "Double-tap a fire button to sneeze blood#Deals 150% your damage to enemies in front of you#1 second cooldown#Affected enemies take extra damage from Brimstone beams"}, -- Hemoptysis [727] = {"727", "Ghost Bombs", "+5 bombs#Bombs spawn ghosts that deal contact damage and explode after 10 seconds"}, -- Ghost Bombs [728] = {"728", "Gello", "Spawns a demon familiar that's attached to Isaac#Mimics Isaac's tears, stats and effects"}, -- Gello [729] = {"729", "Decap Attack", "Throws Isaac's head, dealing contact damage and shooting tears from where it lands#Reactivating the item or stepping on the head reattaches it"}, -- Decap Attack @@ -421,7 +421,7 @@ EID.descriptions[languageCode].birthright ={ {"Tainted Lazarus", "", "The other version of T. Lazarus will be available as a ghost#He is immune to damage, but can fire tears#Both characters receive the Birthright effect"}, {"Tainted Eden", "", "Passive and active items gained before Birthright will not be rerolled upon taking damage#Active items stop being protected if dropped"}, {"Tainted Lost", "", "Grants an extra life that revives Tainted Lost in the same room and deals 200 damage to nearby enemies#Can hit the same enemy multiple times"}, - {"Tainted Lilith", "", "Familiars that normally follow Tainted Lilith will instead act like her {{Collectible728}}Gello"}, + {"Tainted Lilith", "", "Familiars that normally follow Tainted Lilith will instead act like her {{Collectible728}}Gello#The melee attack does 3 more damage per familiar"}, {"Tainted Keeper", "", "Strongly attracts the coins dropped by defeating enemies from a short distance#No effect on other coins"}, {"Tainted Apollyon", "", "If the fire button is held, locusts will continuously damage enemies instead of returning"}, {"Tainted Forgotten", "", "Tainted Soul gains the {{Collectible714}}Recall ability, to retrieve the Tainted Forgotten from a distance"}, @@ -892,7 +892,7 @@ local repPills={ [48] = {"47", "Shot Speed Down", "↓ -0.15 Shot Speed down"}, -- Shot Speed Down [49] = {"48", "Shot Speed Up", "↑ +0.15 Shot Speed up"}, -- Shot Speed Up - [50] = {"49", "Experimental Pill", "↑ Increases 1 random stat#↓ Decreases 1 random other stat#Will not decrease with {{Collectible75}}PHD#Will not increase with {{Collectible654}}False PHD"}, -- Experimental Pill + [50] = {"49", "Experimental Pill", "↑ Increases 1 random stat#↓ Decreases 1 random other stat#Will not decrease with {{Collectible75}}PHD, {{Collectible46}}Lucky Foot or {{Collectible303}}Virgo#Will not increase with {{Collectible654}}False PHD"}, -- Experimental Pill [9999] = {"", "Golden Pill", "Random pill effect#Destroys itself after a few uses"}, -- golden Pill } EID:updateDescriptionsViaTable(repPills, EID.descriptions[languageCode].pills) @@ -947,7 +947,7 @@ EID.descriptions[languageCode].horsepills={ {"46", "Vurp!", "Spawns last used pill as a horse pill"}, -- Vurp! {"47", "Shot Speed Down", "↓ -0.3 Shot Speed down"}, -- Shot Speed Down {"48", "Shot Speed Up", "↑ +0.3 Shot Speed up"}, -- Shot Speed Up - {"49", "Experimental Pill", "↑ Increases 1 random stat two times#↓ Decreases 1 random other stat two times#Will not decrease with {{Collectible75}}PHD#Will not increase with {{Collectible654}}False PHD"}, -- Experimental Pill + {"49", "Experimental Pill", "↑ Increases 1 random stat two times#↓ Decreases 1 random other stat two times#Will not decrease with {{Collectible75}}PHD, {{Collectible46}}Lucky Foot or {{Collectible303}}Virgo#Will not increase with {{Collectible654}}False PHD"}, -- Experimental Pill [9999] = {"", "Golden Pill", "Random horse pill effect#Destroys itself after a few uses"}, -- Golden Pill } diff --git a/eid_api.lua b/eid_api.lua index 713e1084..3f99d5bb 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -765,6 +765,17 @@ function EID:updateDescriptionsViaTable(changeTable, tableToUpdate) end end +-- Checks if any player has a given collectible ID, for modifiers +function EID:PlayersHaveCollectible(collectibleID) + for i = 0, game:GetNumPlayers() - 1 do + local player = Isaac.GetPlayer(i) + if player:HasCollectible(collectibleID) then + return true + end + end + return false +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 diff --git a/eid_bagofcrafting.lua b/eid_bagofcrafting.lua index d8a1057e..f8a130b8 100644 --- a/eid_bagofcrafting.lua +++ b/eid_bagofcrafting.lua @@ -1,4 +1,5 @@ local game = Game() + local pickupValues = { 0x00000000, -- 0 None -- Hearts @@ -491,7 +492,7 @@ local moddedCrafting = false -- Check for modded items past the known max item ID on game start (can also support game updates) -- Only works if the new items are at Weight 1.0 in their item pools, but better than nothing local function GameStartCrafting() - if EID.itemConfig:GetCollectible(EID.XMLMaxItemID+1) ~= nil then + if not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER) and EID.itemConfig:GetCollectible(EID.XMLMaxItemID+1) ~= nil then -- Items past max ID detected; copy our XML tables so we can add to them CraftingMaxItemID = EID.XMLMaxItemID CraftingItemPools = deepcopy(EID.XMLItemPools) @@ -509,19 +510,11 @@ local function GameStartCrafting() for i=1,EID.XMLMaxItemID do itemPool:AddRoomBlacklist(i) end local collID = itemPool:GetCollectible(poolNum, false, 1, 25) - local idsToAdd = {} - while collID ~= 25 do - table.insert(idsToAdd, {collID, 1.0}) + while collID ~= 25 and collID > 0 do + table.insert(CraftingItemPools[poolNum+1], {collID, 1.0}) itemPool:AddRoomBlacklist(collID) collID = itemPool:GetCollectible(poolNum, false, 1, 25) end - -- sort ids since thats the most likely way people add items to the itempool - table.sort(idsToAdd, function (a,b) - return a[1] < b[1] - end) - for _,v in ipairs(idsToAdd) do - table.insert(CraftingItemPools[poolNum+1], v) - end itemPool:ResetRoomBlacklist() end diff --git a/eid_modifiers.lua b/eid_modifiers.lua index 89e72e3d..8ac027b3 100644 --- a/eid_modifiers.lua +++ b/eid_modifiers.lua @@ -32,11 +32,8 @@ local game = Game() if descObj.ObjType ~= 5 or descObj.ObjVariant ~= PickupVariant.PICKUP_COLLECTIBLE then return false end - for i = 0,game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_BINGE_EATER) then - return true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_BINGE_EATER) then + return true end return false end @@ -86,11 +83,8 @@ local game = Game() if descObj.ObjType ~= 5 or descObj.ObjVariant ~= PickupVariant.PICKUP_COLLECTIBLE then return false end - for i = 0,game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_BOOK_OF_VIRTUES) then - return true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_BOOK_OF_VIRTUES) then + return true end return false end @@ -112,11 +106,8 @@ local game = Game() if descObj.ObjType ~= 5 or descObj.ObjVariant ~= PickupVariant.PICKUP_COLLECTIBLE then return false end - for i = 0,game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_SPINDOWN_DICE) then - return true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_SPINDOWN_DICE) then + return true end return false end @@ -158,11 +149,8 @@ local game = Game() if descObj.ObjType ~= 5 or descObj.ObjVariant ~= PickupVariant.PICKUP_TAROTCARD then return false end - for i = 0,game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_TAROT_CLOTH) then - return true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TAROT_CLOTH) then + return true end return false end @@ -192,11 +180,8 @@ local game = Game() if descObj.ObjSubType > TrinketType.TRINKET_GOLDEN_FLAG then isGolden = true end - for i = 0,game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_MOMS_BOX) then - hasBox = true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_MOMS_BOX) then + hasBox = true end return isGolden or hasBox end @@ -297,11 +282,8 @@ local game = Game() if not REPENTANCE or descObj.ObjType ~= 5 or descObj.ObjVariant ~= PickupVariant.PICKUP_TAROTCARD or blankCardHidden[descObj.ObjSubType] or descObj.ObjSubType > 80 then return false end - for i = 0, game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_BLANK_CARD) then - return true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_BLANK_CARD) then + return true end return false end @@ -330,11 +312,8 @@ local game = Game() if not REPENTANCE or descObj.ObjType ~= 5 or descObj.ObjVariant ~= PickupVariant.PICKUP_TAROTCARD or not runeIDs[descObj.ObjSubType] then return false end - for i = 0, game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_CLEAR_RUNE) then - return true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_CLEAR_RUNE) then + return true end return false end @@ -357,11 +336,8 @@ local game = Game() if not REPENTANCE or descObj.ObjType ~= 5 or descObj.ObjVariant ~= PickupVariant.PICKUP_PILL then return false end - for i = 0, game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_PLACEBO) then - return true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_PLACEBO) then + return true end return false end @@ -383,11 +359,8 @@ local game = Game() if not REPENTANCE or descObj.ObjType ~= 5 or descObj.ObjVariant ~= PickupVariant.PICKUP_PILL then return false end - for i = 0, game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_FALSE_PHD) then - return true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_FALSE_PHD) then + return true end return false end @@ -419,11 +392,8 @@ local game = Game() if not REPENTANCE or descObj.ObjType ~= 5 or descObj.ObjVariant ~= PickupVariant.PICKUP_COLLECTIBLE then return false end - for i = 0, game:GetNumPlayers() - 1 do - local player = Isaac.GetPlayer(i) - if player:HasCollectible(CollectibleType.COLLECTIBLE_ABYSS) then - return true - end + if EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_ABYSS) then + return true end return false end diff --git a/main.lua b/main.lua index a62fd887..51fdbdb3 100644 --- a/main.lua +++ b/main.lua @@ -656,7 +656,7 @@ local function renderAchievementInfo() -- Achievements Locked Check (do we have Cube of Meat or Book of Revelations unlocked?) local characterID = Game():GetPlayer(0):GetPlayerType() --ID 21 = Tainted Isaac. Tainted characters have definitely beaten Mom! (Fixes Tainted Lost's item pools ruining this check) - if characterID < 21 and game.Challenge == 0 then + if characterID < 21 and game.Challenge == 0 and not EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_TMTRAINER) then local hasBookOfRevelationsUnlocked = EID:isCollectibleUnlockedAnyPool(CollectibleType.COLLECTIBLE_BOOK_OF_REVELATIONS or CollectibleType.COLLECTIBLE_BOOK_REVELATIONS) if not hasBookOfRevelationsUnlocked then local hasCubeOfMeatUnlocked = EID:isCollectibleUnlockedAnyPool(CollectibleType.COLLECTIBLE_CUBE_OF_MEAT)