diff --git a/descriptions/ab+/en_us.lua b/descriptions/ab+/en_us.lua index 397d42fa..3eeb534c 100644 --- a/descriptions/ab+/en_us.lua +++ b/descriptions/ab+/en_us.lua @@ -101,7 +101,7 @@ EID.descriptions[languageCode].collectibles={ {"78", "Book of Revelations", "{{SoulHeart}} +1 Soul Heart#{{AngelDevilChance}} +17.5% Devil/Angel Room chance while held#Higher horseman boss chance if used"}, {"79", "The Mark", "↑ {{Speed}} +0.2 Speed#↑ {{Damage}} +1 Damage#{{SoulHeart}} +1 Soul Heart"}, {"80", "The Pact", "↑ {{Tears}} +0.7 Tears#↑ {{Damage}} +0.5 Damage#{{SoulHeart}} +2 Soul Hearts"}, - {"81", "Dead Cat", "↑ +9 Lives#Isaac respawns with 1 heart container on death#{{Warning}} Sets Isaac's heart containers to 1 when picked up#Characters that can't have Red Hearts get set to 1 Soul/Black Heart"}, + {"81", "Dead Cat", "↑ +9 Lives#Isaac respawns with 1 heart container on death#{{Warning}} Sets Isaac's heart containers to 1 when picked up"}, {"82", "Lord of the Pit", "↑ {{Speed}} +0.3 Speed#Flight"}, {"83", "The Nail", "{{SoulHeart}} +1 Soul Heart#{{Timer}} Receive for the room:#↑ {{Damage}} +0.7 Damage#↓ {{Speed}} -0.18 Speed#Isaac deals 40 contact damage per second#Allows Isaac to destroy rocks by walking into them"}, {"84", "We Need To Go Deeper!", "Opens a trapdoor to the next floor#{{LadderRoom}} 10% chance to open a crawlspace trapdoor"}, @@ -155,7 +155,7 @@ EID.descriptions[languageCode].collectibles={ {"132", "A Lump of Coal", "{{Damage}} Tears deal more damage the further they travel"}, {"133", "Guppy's Paw", "{{SoulHeart}} Converts 1 heart container into 3 Soul Hearts"}, {"134", "Guppy's Tail", "{{Chest}} 33% chance to replace the room clear reward with a chest#33% chance to spawn no room clear reward"}, - {"135", "IV Bag", "{{Coin}} Hurts Isaac for half a heart and spawns 1-3 coins#{{Player14}} Spawns 0-1 coin as Keeper"}, + {"135", "IV Bag", "{{Coin}} Hurts Isaac for half a heart and spawns 1-2 coins"}, {"136", "Best Friend", "Spawns a decoy Isaac that attracts enemies and explodes after 5 seconds"}, {"137", "Remote Detonator", "{{Bomb}} +5 Bombs#Isaac's bombs no longer explode automatically#Using the item detonates all of Isaac's bombs at once"}, {"138", "Stigmata", "↑ {{Heart}} +1 Health#↑ {{Damage}} +0.3 Damage"}, @@ -261,7 +261,7 @@ EID.descriptions[languageCode].collectibles={ {"238", "Key Piece 1", "{{Warning}} Getting both parts of the key opens a big golden door#{{AngelChance}} +25% Angel Room chance#{{EternalHeart}} +2% chance for Eternal Hearts"}, {"239", "Key Piece 2", "{{Warning}} Getting both parts of the key opens a big golden door#{{AngelChance}} +25% Angel Room chance#{{EternalHeart}} +2% chance for Eternal Hearts"}, {"240", "Experimental Treatment", "↑ Increases 4 random stats#↓ Decreases 2 random stats"}, - {"241", "Contract from Below", "Doubles all room clear rewards#33% chance for no room clear reward#{{GreedMode}} Doesn't affect Greed Mode"}, + {"241", "Contract from Below", "Doubles all room clear rewards#33% chance for no room clear reward"}, {"242", "Infamy", "50% chance to block enemy shots"}, {"243", "Trinity Shield", "Blocks enemy shots coming from the direction Isaac is shooting"}, {"244", "Tech.5", "Occasionally shoot lasers in addition to Isaac's tears"}, @@ -464,7 +464,7 @@ EID.descriptions[languageCode].collectibles={ {"439", "Mom's Box", "{{Trinket}} Spawns a random trinket#While held:#↑ {{Luck}} +1 Luck#{{Trinket}} Doubles trinket effects"}, {"440", "Kidney Stone", "↑ +2 Tear height#↓ {{Speed}} -0.2 Speed#↓ {{Range}} -17 Range#Isaac occasionally stops firing and charges an attack that releases a burst of tears and a kidney stone"}, {"441", "Mega Blast", "{{Timer}} Fires a huge Mega Satan blood beam for 15 seconds#The beam persists between rooms and floors"}, - {"442", "Dark Prince's Crown", "While at 1 full Red Heart:#↑ {{Tears}} +0.75 Tears#↑ {{Range}} +1.5 Range#↑ +1 Tear height#↑ {{Shotspeed}} +0.2 Shot speed#Does not work on characters without Red Hearts"}, -- Dark Princes Crown (apostrophe added to the name in Repentance) + {"442", "Dark Prince's Crown", "While at 1 full Red Heart:#↑ {{Tears}} +0.75 Tears#↑ {{Range}} +1.5 Range#↑ +1 Tear height#↑ {{Shotspeed}} +0.2 Shot speed"}, -- Dark Princes Crown (apostrophe added to the name in Repentance) {"443", "Apple!", "↑ {{Tears}} +0.3 Tears#{{Damage}} 6.66% chance to shoot razor blades that deal 4x Isaac's damage#{{Luck}} 100% chance at 14 luck"}, {"444", "Lead Pencil", "Isaac shoots a cluster of tears every 15 tears#Tears in the cluster deal double damage"}, {"445", "Dog Tooth", "↑ {{Speed}} +0.1 Speed#↑ {{Damage}} +0.3 Damage#{{SecretRoom}}{{SuperSecretRoom}} A wolf howls in rooms adjacent to a Secret/Super Secret Room#{{LadderRoom}} A dog barks in rooms with a crawlspace under a rock"}, @@ -631,7 +631,7 @@ EID.descriptions[languageCode].trinkets={ {"20", "Monkey Paw", "{{BlackHeart}} Spawns 1 Black Heart when Isaac's health is reduced to half a heart#{{Warning}} Disappears after spawning 3 Black Hearts"}, {"21", "Mysterious Paper", "Randomly grants the effect of: #{{Collectible327}} The Polaroid#{{Collectible328}} The Negative#{{Trinket48}} A Missing Page#{{Trinket23}} Missing Poster"}, {"22", "Daemon's Tail", "{{Heart}} Decreases spawn rate of hearts to 20%#{{BlackHeart}} All Heart pickups turn into Black Hearts#{{Key}} Increases the drop chance of keys"}, - {"23", "Missing Poster", "{{Player10}} Respawn as The Lost on death#{{Warning}} Dying in a {{SacrificeRoom}} Sacrifice Room while holding this trinket unlocks The Lost"}, + {"23", "Missing Poster", "{{Player10}} Respawn as The Lost on death"}, {"24", "Butt Penny", "{{Coin}} 20% higher chance for coins to spawn from poop#Picking up coins makes Isaac fart"}, {"25", "Mysterious Candy", "Isaac farts or spawns poop every 30 seconds"}, {"26", "Hook Worm", "↑ {{Range}} +10 Range#Isaac's tears move in angular patterns"}, @@ -755,7 +755,7 @@ EID.descriptions[languageCode].cards={ {"12", "XI - Strength", "{{Timer}} Receive for the room:#↑ {{Heart}} +1 Health#↑ {{Speed}} +0.3 Speed#↑ {{Damage}} +0.3 Damage#↑ {{Damage}} x1.5 Damage multiplier#↑ {{Range}} +5.25 Range#↑ +0.5 Tear height"}, {"13", "XII - The Hanged Man", "{{Timer}} Flight for the room"}, {"14", "XIII - Death", "Deals 40 damage to all enemies in the room"}, - {"15", "XIV - Temperance", "{{DonationMachine}} Spawns a Blood Donation Machine#{{GreedMode}} Spawns a Devil Beggar in Greed Mode"}, + {"15", "XIV - Temperance", "{{DonationMachine}} Spawns a Blood Donation Machine"}, {"16", "XV - The Devil", "{{Timer}} Receive for the room:#↑ {{Damage}} +2 Damage"}, {"17", "XVI - The Tower", "Spawns 6 Troll Bombs"}, {"18", "XVII - The Stars", "{{TreasureRoom}} Teleports Isaac to the Treasure Room"}, @@ -955,3 +955,13 @@ EID.descriptions[languageCode].PickupNames = { ["5.350"] = "{{Trinket}} Trinket", } + +EID.descriptions[languageCode].ConditionalDescs = { + ["5.100.81"] = "Characters that can't have Red Hearts get set to 1 Soul/Black Heart", -- Dead Cat + ["5.100.241"] = "{{GreedMode}} Doesn't affect Greed Mode", -- Contract From Below + ["5.100.135 (Keeper)"] = "{{Player14}} Spawns 0-1 coin as Keeper", -- IV Bag Keeper + ["5.100.135 (PHD)"] = "{{Collectible75}} Spawns 2-3 coins if you have PHD", -- IV Bag PHD + ["5.100.442"] = "No effect for characters that can't have Red Hearts", -- Dark Prince's Crown + ["5.300.15"] = "{{DemonBeggar}} Spawns a Devil Beggar", -- Temperance (Greed Mode effect) + ["5.350.23"] = "{{Warning}} Dying in a {{SacrificeRoom}} Sacrifice Room while holding this trinket unlocks The Lost", -- Missing Poster (Unlock The Lost) +} diff --git a/descriptions/rep/en_us.lua b/descriptions/rep/en_us.lua index f390e1b8..c0d15e38 100644 --- a/descriptions/rep/en_us.lua +++ b/descriptions/rep/en_us.lua @@ -61,7 +61,6 @@ local repCollectibles={ [123] = {"123", "Monster Manual", "{{Timer}} Spawns a random familiar for the floor"}, -- Monster Manual [126] = {"126", "Razor Blade", "↑ {{Damage}} +1.2 Damage for the room#{{Warning}} Deals 1 heart of damage to Isaac#After the first use in a room, deals half a heart instead#{{Heart}} Removes Red Hearts first"}, -- Razor Blade [129] = {"129", "Bucket of Lard", "↑ {{Heart}} +2 Health#↓ {{Speed}} -0.2 Speed"}, -- Bucket of Lard - [135] = {"135", "IV Bag", "{{Coin}} Hurts Isaac for half a heart and spawns 1-2 coins#{{HardMode}} Spawns 1 coin on Hard Mode#{{Player14}} Spawns 0-1 coin as Keeper"}, -- IV Bag [138] = {"138", "Stigmata", "↑ {{Heart}} +1 Health#↑ {{Damage}} +0.3 Damage#{{Heart}} Heals 1 heart"}, -- Stigmata [139] = {"139", "Mom's Purse", "{{Trinket}} Spawns 1 random trinket#{{Trinket}} Isaac can hold 2 trinkets"}, -- Mom's Purse [140] = {"140", "Bob's Curse", "{{Bomb}} +5 Bombs#{{Poison}} Isaac's bombs create a cloud of poison#{{Poison}} Poison immunity"}, -- Bob's Curse @@ -73,7 +72,6 @@ local repCollectibles={ [153] = {"153", "Mutant Spider", "↓ {{Tears}} x0.42 Fire rate multiplier#Isaac shoots 4 tears at once"}, -- Mutant Spider [155] = {"155", "The Peeper", "↑ {{Damage}} x1.35 Damage multiplier for the left eye#Floats around the room#Deals 17.1 contact damage per second"}, -- The Peeper [158] = {"158", "Crystal Ball", "Spawns a {{SoulHeart}} Soul Heart, {{Rune}} rune or {{Card}} card#{{Timer}} Full mapping effect for the floor (except {{SuperSecretRoom}} Super Secret Room)#While held:#{{PlanetariumChance}} +15% Planetarium chance#{{PlanetariumChance}} +100% if a {{TreasureRoom}} Treasure Room was skipped"}, -- Crystal Ball - [161] = {"161", "Ankh", "{{Player4}} Respawn as ??? (Blue Baby) on death#{{Player25}} Tainted ??? simply revives"}, [169] = {"169", "Polyphemus", "↑ {{Damage}} +4 Damage#↑ {{Damage}} x2 Damage multiplier#↓ {{Tears}} x0.42 Fire rate multiplier#Tears pierce killed enemies if there is leftover damage"}, --Polyphemus [171] = {"171", "Spider Butt", "{{Slow}} Slows down enemies for 4 seconds#Deals 10 damage to all enemies#Enemies killed by the item spawn blue spiders"}, -- Spider Butt [172] = {"172", "Sacrificial Dagger", "Orbital#Blocks enemy shots#Deals 112.5 damage per second"}, -- Sacrificial Dagger @@ -139,7 +137,6 @@ local repCollectibles={ [308] = {"308", "Aquarius", "Isaac leaves a trail of creep#{{Damage}} The creep deals 66% of Isaac's damage per second and inherits his tear effects"}, -- Aquarius [309] = {"309", "Pisces", "↑ {{Tears}} +0.5 Fire rate#↑ {{Tearsize}} +0.12 Tear size#Increases tear knockback"}, --Pisces [310] = {"310", "Eve's Mascara", "↑ {{Damage}} x2 Damage multiplier#↓ {{Tears}} x0.66 Tear multiplier#↓ {{Shotspeed}} -0.5 Shot speed"}, - [311] = {"311", "Judas' Shadow", "{{Player12}} When dead, respawn as Dark Judas with a 2x damage multiplier#{{Player24}} Tainted Judas simply revives"}, --Judas' Shadow [314] = {"314", "Thunder Thighs", "↑ {{Heart}} +1 Health#↓ {{Speed}} -0.4 Speed#{{Heart}} Heals 1 heart#Isaac can destroy rocks by walking into them"}, -- Thunder Thighs [315] = {"315", "Strange Attractor", "Isaac's tears attract enemies, pickups and trinkets#The attraction effect is much stronger at the end of the tears' path"}, -- Strange Attractor [316] = {"316", "Cursed Eye", "Charged wave of 5 tears#{{Warning}} Taking damage while partially charged teleports Isaac to a random room#{{Collectible260}} Black Candle removes the teleportation effect"}, -- Cursed Eye @@ -150,7 +147,6 @@ local repCollectibles={ [328] = {"328", "The Negative", "↑ {{Damage}} +1 Damage#Taking damage at half a Red Heart or none damages all enemies in the room"}, -- The Negative [330] = {"330", "Soy Milk", "↑ {{Tears}} x5.5 Fire rate multiplier#↓ {{Damage}} x0.2 Damage multiplier#↓ {{Tearsize}} -0.3 Tear size#Drastically reduces knockback"}, -- Soy Milk [331] = {"331", "Godhead", "↑ {{Damage}} +0.5 Damage#↓ {{Tears}} -0.3 Tears#↓ {{Shotspeed}} -0.3 Shot speed#Homing tears#Tears gain an aura that deals 60 damage per second"}, -- Godhead - [332] = {"332", "Lazarus' Rags", "{{Player11}} When dead, revive as Lazarus (Risen)#{{Player29}} Tainted Lazarus simply revives"}, [336] = {"336", "Dead Onion", "↑ {{Tearsize}} +0.22 Tear size#↓ {{Range}} -1.5 Range#↓ {{Shotspeed}} -0.4 Shot speed#Piercing + spectral tears"}, -- Dead Onion [339] = {"339", "Safety Pin", "↑ {{Range}} +2.5 Range#↑ {{Shotspeed}} +0.16 Shot speed#{{BlackHeart}} +1 Black Heart"}, -- Safety Pin [342] = {"342", "Blue Cap", "↑ {{Heart}} +1 Health#↑ {{Tears}} +0.7 Tears#↓ {{Shotspeed}} -0.16 Shot speed#{{Heart}} Heals 1 heart"}, -- Blue Cap @@ -355,12 +351,12 @@ local repCollectibles={ [668] = {"668", "Dad's Note", "Begins the Ascent#Trinkets left in previous {{TreasureRoom}} Treasure or {{BossRoom}} Boss Rooms turn into {{Card78}} Cracked Keys"}, -- Dad's Note [669] = {"669", "Sausage", "↑ {{Heart}} +1 Health#↑ {{Speed}} +0.2 Speed#↑ {{Tears}} +0.5 Tears#↑ {{Damage}} +0.5 Damage#↑ {{Range}} +2.5 Range#↑ {{Shotspeed}} +0.16 Shot speed#↑ {{Luck}} +1 Luck#{{Heart}} Full health#↑ {{AngelDevilChance}} +6.9% Devil/Angel Room chance#↑ {{PlanetariumChance}} +6.9% Planetarium chance"}, -- Sausage [670] = {"670", "Options?", "Allows Isaac to choose from two different room clear rewards"}, -- Options? - [671] = {"671", "Candy Heart", "↑ Picking up {{Heart}} Red Hearts grants random permanent stat ups#{{Heart}} Spawns a Red Heart"}, -- Candy Heart + [671] = {"671", "Candy Heart", "↑ Healing with {{Heart}} Red Hearts grants random permanent stat ups#{{Heart}} Spawns a Red Heart"}, -- Candy Heart [672] = {"672", "A Pound of Flesh", "{{DevilRoom}} Devil Room items cost coins#{{Shop}} Shop items cost hearts#Consumables in shops are surrounded by spikes"}, -- A Pound of Flesh [673] = {"673", "Redemption", "{{DevilRoom}} Entering a new floor after visiting a Devil Room and not taking any item/pickup grants:#↑ {{Damage}} +1 Damage#{{SoulHeart}} +1 Soul Heart"}, -- Redemption [674] = {"674", "Spirit Shackles", "Taking fatal damage transforms Isaac into a ghost chained to his dead body and allows him to continue to fight with half a heart#If the ghost survives, Isaac revives after 10 seconds#Must be recharged by picking up a Soul Heart"}, -- Spirit Shackles [675] = {"675", "Cracked Orb", "Taking damage:#Unlocks all locked doors in the room#Reveals a random room on the map#Destroys all tinted and crawlspace rocks"}, -- Cracked Orb - [676] = {"676", "Empty Heart", "{{EmptyHeart}} +1 Empty heart container when at 1 Red Heart or less at the start of a new floor#No effect for characters that can't have Red Hearts"}, -- Empty Heart + [676] = {"676", "Empty Heart", "{{EmptyHeart}} +1 Empty heart container when at 1 Red Heart or less at the start of a new floor"}, -- Empty Heart [677] = {"677", "Astral Projection", "{{Timer}} Taking damage in an uncleared room grants for the fight:#Spectral tears#Flight#Negates the next damage taken#Stops time for 2 seconds#Greatly increases speed and fire rate for 2 seconds"}, -- Astral Projection [678] = {"678", "C Section", "{{Chargeable}} Replaces Isaac's tears with a charge attack that shoots homing, spectral fetus tears#{{Damage}} Fetus tears deal about 2.8x Isaac's damage per second"}, -- C Section [679] = {"679", "Lil Abaddon", "{{Collectible399}} Familiar that charges and unleashes a Maw of the Void circle"}, -- Lil Abaddon @@ -732,12 +728,10 @@ EID:updateDescriptionsViaTable(repCarBattery, EID.descriptions[languageCode].car ---------- Trinkets ---------- local repTrinkets={ - [1] = {"1", "Swallowed Penny", "{{Coin}} Taking damage spawns 1 coin#{{Player14}} 0-1 as Keeper"}, -- Swallowed Penny [10] = {"10", "Wiggle Worm", "↑ {{Tears}} +0.4 Tears#Spectral tears#Isaac's tears move in waves"}, -- Wiggle Worm [11] = {"11", "Ring Worm", "↑ {{Tears}} +0.47 Tears#Spectral tears#Isaac's tears move in spirals with high speed"}, -- Ring Worm [15] = {"15", "Lucky Rock", "{{Coin}} Destroying rocks has a 33% chance to spawn a coin"},-- Lucky Rock [16] = {"16", "Mom's Toenail", "Mom's Foot stomps a random spot in the room every 20 seconds"}, -- Mom's Toenail - [23] = {"23", "Missing Poster", "{{Player10}} Respawn as The Lost on death#{{Player31}} Tainted Lost simply revives#{{Warning}} Dying in a {{SacrificeRoom}} Sacrifice Room while holding this trinket unlocks The Lost"}, -- Missing Poster [24] = {"24", "Butt Penny", "{{Coin}} 20% higher chance for coins to spawn from poop#{{Poison}} Picking up coins makes Isaac fart, which poisons and knocks back enemies and projectiles"}, -- Butt Penny [26] = {"26", "Hook Worm", "↑ {{Tears}} +0.4 Tears#↑ {{Range}} +1.5 Range#Spectral tears#Isaac's tears move in angular patterns"}, -- Hook Worm [32] = {"32", "Liberty Cap", "25% chance for a random mushroom effect per room"}, -- Liberty Cap @@ -782,7 +776,7 @@ local repTrinkets={ [146] = {"146", "Devil's Crown", "{{RedTreasureRoom}} Treasure Room items are replaced with devil deals"}, -- Devil's Crown [147] = {"147", "Charged Penny", "{{Battery}} Picking up a coin has a 17% chance to add 1 charge to the active item"}, -- Charged Penny [148] = {"148", "Friendship Necklace", "All familiars orbit around Isaac"}, -- Friendship Necklace - [149] = {"149", "Panic Button", "Taking damage uses the active item if it is charged"}, -- Panic Button + [149] = {"149", "Panic Button", "Right before taking damage, uses the active item if it is charged"}, -- Panic Button [150] = {"150", "Blue Key", "Locked doors can be opened for free, but Isaac has to clear a room from the Hush floor before accessing the room behind them"}, -- Blue Key [151] = {"151", "Flat File", "Retracts most spikes, rendering them harmless#Also affects {{CursedRoom}} Curse Room doors, mimics and any spike obstacle"}, -- Flat File [152] = {"152", "Telescope Lens", "{{PlanetariumChance}} +9% Planetarium chance#Additional +15% chance if a Planetarium hasn't been entered yet#Planetariums can spawn in the Womb and Corpse"}, -- Telescope Lens @@ -956,7 +950,7 @@ EID.descriptions[languageCode].tarotClothBuffs = { [11] = {"Spawns {{ColorShinyPurple}}2{{CR}} {{Slotmachine}} Slot Machines or {{FortuneTeller}} Fortune Machines"}, -- X - Wheel of Fortune [12] = {1, 2, 0.3, 0.6, 0.3, 0.6, 2.5, 5}, -- XI - Strength [14] = {40, 80}, -- XIII - Death - [15] = {"{{DonationMachine}} Spawns {{ColorShinyPurple}}2{{CR}} Blood Donation Machines#{{GreedMode}} Spawns {{ColorShinyPurple}}2{{CR}} Devil Beggars in Greed Mode"}, -- XIV - Temperance + [15] = {"{{DonationMachine}} Spawns {{ColorShinyPurple}}2{{CR}} Blood Donation Machines"}, -- XIV - Temperance [16] = {2, 4}, -- XV - The Devil [17] = {6, 12}, -- XVI - The Tower [18] = "If the Treasure Room hasn't been entered yet, it will have two items to choose from", -- XVII - The Stars @@ -1008,7 +1002,7 @@ local repPills={ [43] = {"42", "I'm Excited!!", "{{Timer}} Speeds up Isaac and all enemies in the room#Triggers again after 30 and 60 seconds"}, -- I'm Excited!! [48] = {"47", "Shot speed Down", "↓ {{Shotspeed}} -0.15 Shot speed"}, -- Shot speed Down [49] = {"48", "Shot speed Up", "↑ {{Shotspeed}} +0.15 Shot speed"}, -- Shot speed Up - [50] = {"49", "Experimental Pill", "↑ Increases 1 random stat#↓ Decreases 1 random stat#No stat decrease with {{Collectible75}}PHD, {{Collectible46}}Lucky Foot or {{Collectible303}}Virgo#No stat increase with {{Collectible654}}False PHD"}, -- Experimental Pill + [50] = {"49", "Experimental Pill", "↑ Increases 1 random stat#↓ Decreases 1 random stat"}, -- Experimental Pill [9999] = {"", "Golden Pill", "Random pill effect#Has a chance to destroy itself with each use"}, -- golden Pill } EID:updateDescriptionsViaTable(repPills, EID.descriptions[languageCode].pills) @@ -1063,7 +1057,7 @@ EID.descriptions[languageCode].horsepills={ {"46", "Vurp!", "Spawns the last pill Isaac used as a horse pill"}, -- Vurp! {"47", "Shot speed Down", "↓ {{Shotspeed}} -0.3 Shot speed"}, -- Shot speed Down {"48", "Shot speed Up", "↑ {{Shotspeed}} +0.3 Shot speed"}, -- Shot speed Up - {"49", "Experimental Pill", "↑ Increases 1 random stat twice#↓ Decreases 1 random stat twice#No stat decrease with {{Collectible75}} PHD, {{Collectible46}} Lucky Foot or {{Collectible303}} Virgo#No stat increase with {{Collectible654}} False PHD"}, -- Experimental Pill + {"49", "Experimental Pill", "↑ Increases 1 random stat twice#↓ Decreases 1 random stat twice"}, -- Experimental Pill [9999] = {"", "Golden Pill", "Random horse pill effect#Has a chance to destroy itself with each use"}, -- Golden Pill } @@ -1179,6 +1173,9 @@ EID.descriptions[languageCode].FalsePHDHeart = "Spawns 1 {{BlackHeart}} Black He EID.descriptions[languageCode].FalsePHDDamage = "↑ {{Damage}} +0.6 Damage" EID.descriptions[languageCode].FalsePHDHorseDamage = "↑ {{Damage}} +1.2 Damage" +EID.descriptions[languageCode].ExperimentalPillPHD = "No stat decrease" +EID.descriptions[languageCode].ExperimentalPillFalsePHD = "No random stat increase" + EID.descriptions[languageCode].PandorasBoxStrangeKeyEffect = "Instead, consumes the key and spawns 6 items from random pools" EID.descriptions[languageCode].AchievementWarningTitle = "{{ColorYellow}}{{Warning}} WARNING {{Warning}}" @@ -1190,6 +1187,21 @@ EID.descriptions[languageCode].ModdedRecipesWarningText = "Modded items could ma EID.descriptions[languageCode].ResultsWithX = "(Results with {1})" + +local repConditions={ + ["5.100.161"] = "{{Player25}} Tainted ??? simply revives", -- Ankh + ["5.350.28"] = "{{Player25}} Tainted ??? simply revives", -- Broken Ankh + ["5.100.311"] = "{{Player24}} Tainted Judas simply revives", -- Judas's Shadow + ["5.100.332"] = "{{Player29}} Tainted Lazarus simply revives", -- Lazarus's Rags + ["5.350.23 (Tainted Lost)"] = "{{Player31}} Tainted Lost simply revives", -- Missing Poster + ["5.100.676"] = "No effect for characters that can't have Red Hearts", -- Empty Heart + ["5.300.15 (Tarot)"] = "{{DemonBeggar}} Spawns {{ColorShinyPurple}}2{{CR}} Devil Beggars", -- Temperance (Greed Mode + Tarot Cloth effect) + ["5.350.1"] = "{{Player14}} Spawns 0-1 coin as Keeper", -- Swallowed Penny + ["5.100.135 (Hard Mode)"] = {"1-2 coins", "1 coin", "2-3 coins", "2 coins"}, -- IV Bag Hard Mode (modify the PHD text too) +} +EID:updateDescriptionsViaTable(repConditions, EID.descriptions[languageCode].ConditionalDescs) + + -- If Debug enabled, add overwrite tables to the languagepack in order for the language completion script to be able to compare them if EID.enableDebug then EID.descriptions[languageCode].repCollectibles = repCollectibles diff --git a/eid_api.lua b/eid_api.lua index 6ec86523..9105047a 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -395,6 +395,7 @@ function EID:getDescriptionObj(Type, Variant, SubType, entity, checkModifiers) EID:getObjectItemTypeAndCharge(description) if checkModifiers ~= false then + description = EID:applyConditionals(description) description = EID:applyDescriptionModifier(description, SubType) end return description @@ -482,7 +483,8 @@ end -- falls back to english if it doesnt exist, unless specified otherwise function EID:getDescriptionEntry(objTable, objID, noFallback) if not objID then - return EID.descriptions[EID:getLanguage()][objTable] or EID.descriptions["en_us"][objTable] + if noFallback then return EID.descriptions[EID:getLanguage()][objTable] + else return EID.descriptions[EID:getLanguage()][objTable] or EID.descriptions["en_us"][objTable] end else local translatedTable = EID.descriptions[EID:getLanguage()][objTable] if noFallback then return translatedTable and translatedTable[objID] @@ -1156,13 +1158,17 @@ function EID:PlayersHaveTrinket(trinketID) return false end --- Checks if someone playing as certain character, for modifiers -function EID:PlayersHaveCharacter(playerType) +-- Checks if someone is playing as a certain character, for modifiers +-- includeTainted means we don't care if the player is Tainted or not (for things that, say, apply to Lost/Tainted Lost) +function EID:PlayersHaveCharacter(playerType, includeTainted) for i = 0, game:GetNumPlayers() - 1 do local player = Isaac.GetPlayer(i) if player:GetPlayerType() == playerType then return true, player end + if includeTainted and REPENTANCE and Isaac.GetPlayerTypeByName(player:GetName()) == playerType then + return true, player + end end return false end diff --git a/eid_bagofcrafting.lua b/eid_bagofcrafting.lua index ad7264e7..4ee391b9 100644 --- a/eid_bagofcrafting.lua +++ b/eid_bagofcrafting.lua @@ -995,6 +995,9 @@ function EID:handleBagOfCraftingRendering(ignoreRefreshRate) if REPENTOGON then EID.BoC.BagItems = EID.bagPlayer:GetBagOfCraftingContent() + for i=1,8 do + if EID.BoC.BagItems[i] == 0 then EID.BoC.BagItems[i] = nil end + end end local bagItems = EID.BoC.BagItemsOverride or EID.BoC.BagItems -- Display the result of the 8 items in our bag if applicable diff --git a/eid_conditionals.lua b/eid_conditionals.lua new file mode 100644 index 00000000..cf91941f --- /dev/null +++ b/eid_conditionals.lua @@ -0,0 +1,181 @@ +local game = Game() + +--[[ Descs that need a variant: + respawn items that respawn you as the tainted version of yourself + tainted isaac Consolation Prize, Experimental Treatment + things that apply only to Lost/Tainted Lost (broken heart card, magic skin) + spoilers descs + lachyphragy in co-op? tech zero in co-op? yum heart and such obviously + black candle + cursed penny / cursed eye + healing stuff for keeper? + iron bar + notched axe + IV bag in hard mode + IV bag for keeper (hmm, two different modifiers needed!) + swallowed penny keeper + experimental pill phd / false phd / phd + falsephd prints nothing + iv bag also has interaction with PHD... + Items that have synergies with other specific items + Items that override other items (brimstone, mom's knife, epic fetus stuff) + + + TODO: new config options for spoiler descs, and for hiding the "needed for collection" stuff +]] + +-- silly function but I don't want to mess with Game() colon functions in the conditions table +function EID:IsGreedMode() + return game:IsGreedMode() +end +function EID:IsHardMode() + if game.Difficulty == 1 or game.Difficulty == 3 then return true + else return false end +end + +-- Character IDs that aren't allowed to have Red Health: ???, The Lost, The Soul +local noRedPlayerIDs = { [4] = true, [10] = true, [17] = true } +-- ???, The Lost, Black Judas, The Soul, Tainted Judas, Tainted ???, Tainted Lost, Tainted Forgotten, Tainted Bethany, Tainted Soul +if REPENTANCE then + noRedPlayerIDs = { [4] = true, [10] = true, [12] = true, [17] = true, [24] = true, [25] = true, [31] = true, [35] = true, [36] = true, [40] = true } +end +-- Check if we have any characters that can't have Red Health, to print additions to descs like Dead Cat +function EID:CheckForNoRedHealthPlayer() + for i = 0, game:GetNumPlayers() - 1 do + local player = Isaac.GetPlayer(i) + if noRedPlayerIDs[player:GetPlayerType()] then + return true + end + end + return false +end + +-- Check for multiple players existing for items like Yum Heart and Extension Cord, includes J&E +function EID:MultiplePlayerCharacters() + return #EID.coopAllPlayers > 1 +end + +-- Check the bestiary/character list if we have REPENTOGON, to help avoid spoilers. Otherwise just return true +function EID:HaveEncountered(monsterType, monsterVariant) + if not REPENTOGON then return true end + return Isaac.GetPersistentGameData():GetBestiaryEncounterCount(monsterType, monsterVariant) > 0 +end +function EID:HaveNotEncountered(monsterType, monsterVariant) + if not REPENTOGON then return true end + return not EID:HaveEncountered(monsterType, monsterVariant) +end + +function EID:HaveUnlockedAchievement(achID) + if not REPENTOGON then return true end + return Isaac.GetPersistentGameData():Unlocked(achID) +end + +function EID:HaveNotUnlockedAchievement(achID) + if not REPENTOGON then return true end + return not EID:HaveUnlockedAchievement(achID) +end + +--EID:PlayersHaveCharacter is already in the api to use for things like Swallowed Penny + + + +--[[ (The conditions table has to be down here so that the functions exist) + +func: The function that will be called to check if the condition is true +vars: A table of values that will be passed into func +type: A string denoting what kind of description change this is + "append": Add new lines to the end of the description (default) + "replaceAll": The entire description is replaced with a new one + "findReplace": Find a phrase and replace it with a new one (the text in the localization file will be a table) +repOnly: Don't check this on Afterbirth+ (not always necessary, because AB+ won't have the text anyway) +abpOnly: Don't check this on Repentance +modifierText: Text to add to find a specific string in the localization file (for items with multiple modifiers) + +Due to co-op, it's best for replacing text in descriptions to only be used for things like Greed/Hard Mode +Otherwise, appending is better so that players not affected by the change can still see what it will be for them +]] +local conditionsTable = { + -- No Red HP + ["5.100.81"] = {func = EID.CheckForNoRedHealthPlayer}, -- Dead Cat + ["5.100.442"] = {func = EID.CheckForNoRedHealthPlayer}, -- Dark Prince's Crown + ["5.100.676"] = {func = EID.CheckForNoRedHealthPlayer}, -- Empty Heart + + -- Keeper + ["5.100.135"] = { -- IV Bag is complicated + {func = EID.PlayersHaveCollectible, vars = {75}, modifierText = "PHD"}, + {func = EID.PlayersHaveCharacter, vars = {14, true}, modifierText = "Keeper"}, + {func = EID.IsHardMode, type = "findReplace", modifierText = "Hard Mode"}, }, + ["5.350.1"] = {func = EID.PlayersHaveCharacter, vars = {14, true}}, -- Swallowed Penny + + -- Revives + ["5.100.161"] = {func = EID.PlayersHaveCharacter, vars = {25}}, -- Ankh + ["5.350.28"] = {func = EID.PlayersHaveCharacter, vars = {25}}, -- Broken Ankh + ["5.100.311"] = {func = EID.PlayersHaveCharacter, vars = {24}}, -- Judas's Shadow + ["5.100.332"] = {func = EID.PlayersHaveCharacter, vars = {29}}, -- Lazarus's Rags + ["5.350.23"] = { -- Missing Poster (revive, plus Unlock The Lost text) + {func = EID.PlayersHaveCharacter, vars = {31}, modifierText = "Tainted Lost"}, + {func = EID.HaveNotUnlockedAchievement, vars = {Achievement.THE_LOST} } }, + + -- Greed Mode + ["5.100.241"] = {func = EID.IsGreedMode}, -- Contract From Below + ["5.300.15"] = {func = EID.IsGreedMode, type = "replaceAll"}, -- Temperance: spawns beggar in greed mode + ["5.300.15 (Tarot)"] = {func = EID.IsGreedMode, type = "replaceAll"}, -- Temperance + Tarot Cloth + Greed Mode + +} + +-- thing to fix find/replace pairs with hyphens (like "1-2") breaking because hyphen is a special char +-- https://stackoverflow.com/questions/29072601/lua-string-gsub-with-a-hyphen +local function replace(str, what, with, count) + what = string.gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern + with = string.gsub(with, "[%%]", "%%%%") -- escape replacement + return string.gsub(str, what, with, count) +end + +function EID:applyConditionals(descObj, modifierText) + local typeVarSub = descObj.ObjType.."."..descObj.ObjVariant.."."..descObj.ObjSubType + if modifierText then typeVarSub = typeVarSub .. " (" .. modifierText .. ")" end + + local conds = conditionsTable[typeVarSub] + if not conds then return descObj end + + -- Check every condition we need to check for this item (usually 1) + if #conds == 0 then conds = { conds } end + for i,cond in ipairs(conds) do + local tvs = typeVarSub + if cond.modifierText then tvs = tvs .. " (" .. cond.modifierText .. ")" end + local text = EID:getDescriptionEntry("ConditionalDescs", nil, true)[tvs] + if (text ~= nil) and (not repOnly or REPENTANCE) and (not abpOnly or not REPENTANCE) then + -- is there a way to pass all a table's values into a function aside from this? it's fine for now... + cond.vars = cond.vars or {} + if cond.func(EID, cond.vars[1], cond.vars[2], cond.vars[3], cond.vars[4]) then + if (cond.type == "append" or cond.type == nil) then + descObj.Description = descObj.Description .. "#" .. text + elseif (cond.type == "replaceAll") then + descObj.Description = text + elseif (cond.type == "findReplace") then + -- Entry 1 is replaced with entry 2, entry 3 is replaced with entry 4, etc. + local pos = 1 + while pos < #text do + local toFind = text[pos] + local replaceWith = text[pos+1] + + --"%d*%.?%d+" will grab every number group (1, 10, 0.5), this will allow us to not replace the "1" in "10" erroneously + if (type(toFind) == "number") then + local count = 0 + descObj.Description = string.gsub(descObj.Description, "%d*%.?%d+", function(s) + if (s == tostring(toFind) and count == 0) then + count = count + 1 + return replaceWith + end + end) + -- Basic find+replace for non-numbers + else + descObj.Description = replace(descObj.Description, tostring(toFind), replaceWith, 1) + end + pos = pos + 2 + end + end + end + end + end + + + return descObj +end diff --git a/eid_modifiers.lua b/eid_modifiers.lua index d0c36b63..5b3c0f7f 100644 --- a/eid_modifiers.lua +++ b/eid_modifiers.lua @@ -501,7 +501,7 @@ if EID.isRepentance then end end end - return descObj + return EID:applyConditionals(descObj,"Tarot") end @@ -670,6 +670,49 @@ if EID.isRepentance then end return descObj end + + -- Handle Experimental Pill description addition + local function ExperimentalPillCallback(descObj) + local adjustedID = EID:getAdjustedSubtype(descObj.ObjType, descObj.ObjVariant, descObj.ObjSubType) + if adjustedID - 1 ~= PillEffect.PILLEFFECT_EXPERIMENTAL then return descObj end + local horse = descObj.ObjSubType > 2048 + + for i = 1,#EID.coopAllPlayers do + local player = EID.coopAllPlayers[i] + local playerID = EID:getPlayerID(player) + local playerType = player:GetPlayerType() + local pillModifierID = 0 + local goodAndBad = false + + -- Check for PHD, Lucky Foot, Virgo, and False PHD + if player:HasCollectible(75) then pillModifierID = 75 + elseif player:HasCollectible(46) then pillModifierID = 46 + elseif player:HasCollectible(303) then pillModifierID = 303 + end + -- Check for False PHD, and if we have good AND bad pills, just print the damage up text + if player:HasCollectible(654) then + if pillModifierID ~= 0 then goodAndBad = true end + pillModifierID = 654 + end + if pillModifierID ~= 0 then + local expPillString = "" + if pillModifierID == 654 then + local damageUpString = "" + if horse then damageUpString = EID:getDescriptionEntry("FalsePHDHorseDamage") + else damageUpString = EID:getDescriptionEntry("FalsePHDDamage") end + if goodAndBad then + expPillString = damageUpString + else + expPillString = EID:getDescriptionEntry("ExperimentalPillFalsePHD") .. "#{{Collectible654}} " .. damageUpString + end + else expPillString = EID:getDescriptionEntry("ExperimentalPillPHD") end + EID:appendToDescription(descObj, "#") + if #EID.coopAllPlayers > 1 then EID:appendToDescription(descObj, (EID:getIcon("Player"..playerType) ~= EID.InlineIcons["ERROR"] and "{{Player"..playerType.."}} " or ("P" .. i .. ": "))) end + EID:appendToDescription(descObj, "{{Collectible" .. pillModifierID .. "}} " .. expPillString) + end + end + return descObj + end -- Handle False PHD description addition local function FalsePHDCallback(descObj) @@ -677,7 +720,7 @@ if EID.isRepentance then local horse = descObj.ObjSubType > 2048 local data = EID.pillMetadata[adjustedID-1] if data ~= nil then - local damageUp = string.find(data.class,"3") and (string.find(data.class,"-") or adjustedID-1 == PillEffect.PILLEFFECT_EXPERIMENTAL) + local damageUp = string.find(data.class,"3") and string.find(data.class,"-") if adjustedID-1 == PillEffect.PILLEFFECT_SHOT_SPEED_DOWN then damageUp = true end -- why doesn't I'm Excited have a - in the xml data yet spawn a black heart... local blackHeart = (string.find(data.class,"2") or string.find(data.class,"1")) and (string.find(data.class,"-") or adjustedID-1 == PillEffect.PILLEFFECT_IM_EXCITED) @@ -793,6 +836,7 @@ if EID.isRepentance then if EID.collectiblesOwned[654] then table.insert(callbacks, FalsePHDCallback) end if EID.collectiblesOwned[348] then table.insert(callbacks, PlaceboCallback) end table.insert(callbacks, VurpCallback) + table.insert(callbacks, ExperimentalPillCallback) if EID.pillPlayer == nil and #EID.coopAllPlayers > 1 then table.insert(callbacks, CoopPillCallback) diff --git a/main.lua b/main.lua index be8fa083..f266d0e2 100644 --- a/main.lua +++ b/main.lua @@ -112,6 +112,7 @@ require("eid_mcm") require("eid_data") require("eid_xmldata") require("eid_api") +require("eid_conditionals") require("eid_modifiers") require("eid_holdmapdesc") require("eid_itemprediction")