13 files changed
+504
-66
No files matched your search
@@ -234,7 +234,7 @@ EID.descriptions[languageCode].collectibles={
|
||||
{"212", "Guppy's Collar", "50% chance to revive with half a heart on death"},
|
||||
{"213", "Lost Contact", "Shielded tears#Tears block enemy shots#↓ {{Shotspeed}} -0.15 Shot Speed down"},
|
||||
{"214", "Anemic", "↑ {{Range}} +5 Range up#Leave a trail of damaging creep after taking damage"},
|
||||
{"215", "Goat Head", "{{AngelDevilChance}} 100% chance for Devil/Angel Rooms"},
|
||||
{"215", "Goat Head", "{{AngelDevilChance}} 100% chance for Devil/Angel Rooms to spawn"},
|
||||
{"216", "Ceremonial Robes", "↑ {{Damage}} +1 Damage up#{{BlackHeart}} +3 Black Hearts"},
|
||||
{"217", "Mom's Wig", "Random chance to spawn blue spider when shooting tears#{{Heart}} Heals 1 Red Heart"},
|
||||
{"218", "Placenta", "↑ {{Heart}} +1 Health up#{{HalfHeart}} Chance to heal half a heart every minute"},
|
||||
@@ -256,7 +256,7 @@ EID.descriptions[languageCode].collectibles={
|
||||
{"234", "Infestation 2", "Spawn spiders when you kill an enemy"},
|
||||
{"235", "", "<item does not exist>"},
|
||||
{"236", "E. Coli", "On touch, turn enemies into poop"},
|
||||
{"237", "Death's Touch", "Scythe tears!#↑ +1.5 Damage up#↓ -0.3 Tears down#Piercing tears"},
|
||||
{"237", "Death's Touch", "Scythe tears!#↑ +1.5 Damage up#↑ Tear size up#↓ -0.3 Tears down#Piercing tears"},
|
||||
{"238", "Key Piece 1", "!!! Key piece for Mega Satan door!#{{AngelChance}} 25% higher Angel Room chance"},
|
||||
{"239", "Key Piece 2", "!!! Key piece for Mega Satan door!#{{AngelChance}} 25% higher Angel Room chance"},
|
||||
{"240", "Experimental Treatment", "All Stats ↑/↓ a random number"},
|
||||
@@ -345,7 +345,7 @@ EID.descriptions[languageCode].collectibles={
|
||||
{"321", "Samson's Chains", "Draggable ball that can destroy rocks#Deals 10.7 contact damage per second"},
|
||||
{"322", "Mongo Baby", "Copies the effect of one of your familiars#Deals double its damage"},
|
||||
{"323", "Isaac's Tears", "Shoot 8 tears in all directions when used#Recharges by shooting"},
|
||||
{"324", "Undefined", "Teleports you to the {{TreasureRoom}} Treasure, {{SecretRoom}} Secret, {{SuperSecretRoom}} Super Secret or I AM ERROR Room"},
|
||||
{"324", "Undefined", "Teleports you to the {{TreasureRoom}} Treasure, {{SecretRoom}} Secret, {{SuperSecretRoom}} Super Secret or {{ErrorRoom}} I AM ERROR Room"},
|
||||
{"325", "Scissors", "Cut off your head#Head turns into stationary familiar#Control your body separately"},
|
||||
{"326", "Breath of Life", "Hold down space until chargebar is empty for invincibility#!!! Don't hold it for too long or you will start taking damage!"},
|
||||
{"327", "The Polaroid", "Invincibility when getting hit and at half a Red Heart or none"},
|
||||
@@ -440,7 +440,7 @@ EID.descriptions[languageCode].collectibles={
|
||||
{"416", "Deep Pockets", "Allows you to carry two cards/pills/runes"},
|
||||
{"417", "Succubus", "Bounces around the room with a damaging aura, dealing 129% of your damage every second#↑ {{Damage}} +50% Damage while standing in the aura"},
|
||||
{"418", "Fruit Cake", "Gives you a different tear effect with every tear that you fire"},
|
||||
{"419", "Teleport 2.0", "Teleports you to another random room that has not been cleared yet#Hierarchy: {{Room}}>{{BossRoom}}>{{SuperSecretRoom}}>{{Shop}}>{{TreasureRoom}}>{{SacrificeRoom}}> {{DiceRoom}}>{{Library}}>{{CursedRoom}}>{{MiniBoss}}>{{ChallengeRoom}}>{{IsaacsRoom}}> {{ArcadeRoom}}>{{ChestRoom}}>{{SecretRoom}}>{{DevilRoom}}{{AngelRoom}}> Error-Room"},
|
||||
{"419", "Teleport 2.0", "Teleports you to another random room that has not been cleared yet#Hierarchy: {{Room}}>{{BossRoom}}>{{SuperSecretRoom}}>{{Shop}}>{{TreasureRoom}}>{{SacrificeRoom}}> {{DiceRoom}}>{{Library}}>{{CursedRoom}}>{{MiniBoss}}>{{ChallengeRoom}}{{BossRushRoom}}>{{IsaacsRoom}}{{BarrenRoom}}> {{ArcadeRoom}}>{{ChestRoom}}>{{SecretRoom}}>{{DevilRoom}}{{AngelRoom}}>{{ErrorRoom}}"},
|
||||
{"420", "Black Powder", "Walking in a circle will spawn a pentagram symbol on the floor, which deals 10 damage per tick"},
|
||||
{"421", "Kidney Bean", "{{Charm}} Applies charm effect to any enemies in close range and deals 5 damage to them"},
|
||||
{"422", "Glowing Hour Glass", "Rewind time and put you back in the previous room, in the same state you were in at that moment"},
|
||||
@@ -508,7 +508,7 @@ EID.descriptions[languageCode].collectibles={
|
||||
{"484", "Wait What?", "Upon use, pushes enemies away and spawn a wave of rocks#Can open rooms and break rocks"},
|
||||
{"485", "Crooked Penny", "50% chance to double all items, consumables and chests in room#50% chance to remove items / pickups in room and spawn 1 coin"},
|
||||
{"486", "Dull Razor", "Hurts you without damaging you#Can trigger item effects"},
|
||||
{"487", "Potato Peeler", "Removes one Red Heart Container and gives you: #↑ {{Damage}} +0.2 Damage#{{Collectible73}} A Cube of Meat"},
|
||||
{"487", "Potato Peeler", "Removes one Red Heart Container and gives you: #↑ {{Damage}} +0.2 Damage up#{{Collectible73}} A Cube of Meat#↑ {{Range}} +5 Range and leave a trail of blood creep for the current room"},
|
||||
{"488", "Metronome", "Grants a random item's effect for the current room"},
|
||||
{"489", "D Infinity", "Random dice effect each use"},
|
||||
{"490", "Eden's Soul", "!!! SINGLE USE !!!#Spawns 2 random items depending on the current room's item pool#Starts with no charges"},
|
||||
@@ -520,7 +520,7 @@ EID.descriptions[languageCode].collectibles={
|
||||
{"496", "Euthanasia", "3.33% chance to shoot needles#100% chance at 15 Luck#Needles kill normal enemies instantly, bursting them into 10 tears#Needles deal 3x damage against bosses"},
|
||||
{"497", "Camo Undies", "When you enter a room, camouflage yourself and confuse all enemies until you start shooting"},
|
||||
{"498", "Duality", "{{AngelDevilChance}} If an Angel or Devil room would spawn, both will spawn#When entering one, the other disappears"},
|
||||
{"499", "Eucharist", "{{AngelChance}} 100% chance to find an {{AngelRoom}}Angel Room"},
|
||||
{"499", "Eucharist", "{{AngelChance}} 100% chance for Angel Rooms to spawn"},
|
||||
{"500", "Sack of Sacks", "Spawns a sack every 5-6 rooms"},
|
||||
{"501", "Greed's Gullet", "Gain 1 Heart Container for every 25 coins you gain after picking up Greed's Gullet#{{Player14}} Keeper can gain additional Coin Hearts"},
|
||||
{"502", "Large Zit", "While firing, occasionally shoot a white creep tear that deals double damage#Shoot a white creep tear when damaged"},
|
||||
@@ -751,7 +751,7 @@ EID.descriptions[languageCode].cards={
|
||||
{"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#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"},
|
||||
{"42", "Chaos Card", "Upon use, throw the card in the direction you're moving#Instantly kills ANY enemy it touches (except Delirium)"},
|
||||
{"43", "Credit Card", "Removes the price from all items in the current {{Shop}} shop or {{DevilRoom}} Devil deal, making everything free"},
|
||||
{"44", "Rules Card", "Displays \"helpful\" tips on use"},
|
||||
{"45", "A Card Against Humanity", "Fills the whole room with poop"},
|
||||
@@ -789,7 +789,7 @@ EID.descriptions[languageCode].pills={
|
||||
{"16", "Tears Up", "↑ {{Tears}} +0.35 Tears up"},
|
||||
{"17", "Luck Down", "↓ {{Luck}} -1 Luck down"},
|
||||
{"18", "Luck Up", "↑ {{Luck}} +1 Luck up"},
|
||||
{"19", "Telepills", "Teleports you to a random room#Small chance to teleport you to the I AM ERROR room"},
|
||||
{"19", "Telepills", "Teleports you to a random room#{{ErrorRoom}} Small chance to teleport you to the I AM ERROR room"},
|
||||
{"20", "48 Hour Energy!", "Fully recharges your active item#Drops 1-2 batteries"},
|
||||
{"21", "Hematemesis", "Drains all but one heart container#Spawns 1-4 Red Hearts"},
|
||||
{"22", "Paralysis", "You can't move for 2 seconds"},
|
||||
@@ -882,3 +882,9 @@ EID.descriptions[languageCode].MCM = {
|
||||
DemoObjectTransformation = "Demo Transformation",
|
||||
DemoObjectText = "This text is in english#A very cool and long description to simulate linebreaks caused by EID textbox width!#{{Collectible4}} This is also a cool line#{{Heart}} This line loves you#{{AngelDevilChance}} This line can be your angel or your devil#\1 {{Damage}} +1 Stat Change up",
|
||||
}
|
||||
|
||||
-- the Hold Map description will predict the abilities of items with a header like "Item Name Result"
|
||||
EID.descriptions[languageCode].HoldMapHeader = " Result"
|
||||
-- includes Planetarium even though it's unused in AB+ for convenience
|
||||
EID.descriptions[languageCode].Teleport2RoomNames = { "Normal Room","Boss Room","Super Secret Room","Shop","Treasure Room","Sacrifice Room","Dice Room","Library","Curse Room","Miniboss Room","Challenge/Boss Challenge Room","Isaac's Room","Barren Room","Arcade Room","Chest Room","Planetarium","Secret Room","Special Red Room","Angel/Devil Room","I AM ERROR Room" }
|
||||
EID.descriptions[languageCode].Teleport2GreedRoomNames = { "Main Room", "Boss Room", "Shop", "Silver/Gold Treasure Room", "Curse Room", "Exit Room", "Super Secret Room", "Angel/Devil Room", "I AM ERROR Room" }
|
||||
+28
-13
@@ -177,7 +177,7 @@ local repCollectibles={
|
||||
[415] = {"415", "Crown Of Light", "{{SoulHeart}} +2 Soul Hearts#If you don't have any damaged Red Heart containers:#↑ {{Damage}} +100% Damage up#↑ {{Range}} +1.5 Range up#↓ {{Shotspeed}} -0.3 Shot Speed down#Deactivates for the current room when damaged at all"}, -- Crown Of Light
|
||||
[416] = {"416", "Deep Pockets", "Spawns 1-3 coins if a room didn't yield a reward#{{Coin}} Increases coin cap to 999"}, -- Deep Pockets
|
||||
[417] = {"417", "Succubus", "Bounces around the room with a damaging aura, dealing 7.5-10 damage every second#↑ {{Damage}} +50% Damage while standing in the aura"}, -- Succubus
|
||||
[419] = {"419", "Teleport 2.0", "Teleports you to another random room that has not been cleared yet#Hierarchy: {{Room}}>{{BossRoom}}>{{SuperSecretRoom}}>{{Shop}}>{{TreasureRoom}}>{{SacrificeRoom}}> {{DiceRoom}}>{{Library}}>{{CursedRoom}}>{{MiniBoss}}>{{ChallengeRoom}}>{{IsaacsRoom}}> {{ArcadeRoom}}>{{ChestRoom}}>{{Planetarium}}>{{SecretRoom}}>{{DevilRoom}}{{AngelRoom}}> Error-Room"}, -- Teleport 2.0
|
||||
[419] = {"419", "Teleport 2.0", "Teleports you to another random room that has not been cleared yet#Hierarchy: {{Room}}>{{BossRoom}}>{{SuperSecretRoom}}>{{Shop}}>{{TreasureRoom}}>{{SacrificeRoom}}> {{DiceRoom}}>{{Library}}>{{CursedRoom}}>{{MiniBoss}}>{{ChallengeRoom}}{{BossRushRoom}}>{{IsaacsRoom}}{{BarrenRoom}}> {{ArcadeRoom}}>{{ChestRoom}}>{{Planetarium}}>{{SecretRoom}}>{{DevilRoom}}{{AngelRoom}}>{{ErrorRoom}}"}, -- Teleport 2.0
|
||||
[421] = {"421", "Kidney Bean", "{{Charm}} Applies charm effect to any enemies in close range"}, -- Kidney Bean
|
||||
[426] = {"426", "Obsessed Fan", "Follows your exact movement on a 0.66 second delay#Deals 30 contact damage per second"}, -- Obsessed Fan
|
||||
[430] = {"430", "Papa Fly", "Follows your movement pattern on a 0.66 second delay#Fires tears at nearby enemies that deal damage equal to your damage"}, -- Papa Fly
|
||||
@@ -199,6 +199,7 @@ local repCollectibles={
|
||||
[474] = {"474", "Broken Glass Cannon", "Turns into Glass Cannon when used"}, -- Broken Glass Cannon
|
||||
[476] = {"476", "D1", "Duplicates 1 random pickup in the current room#Duplicated pickups may not be identical to the original"}, -- D1
|
||||
[477] = {"477", "Void", "!!! When used, consumes all pedestal items in the room#Active item: Its effect will activate every future use of Void#↑ Passive item: Small stat upgrade to two random stats"},
|
||||
[487] = {"487", "Potato Peeler", "Removes one Red Heart Container and gives you: #↑ {{Damage}} +0.2 Damage up#{{Collectible73}} A Cube of Meat#↑ {{Range}} +1.5 Range and leave a trail of blood creep for the current room"},
|
||||
[489] = {"489", "D Infinity", "Acts as any die item except for {{Collectible723}} Spindown Dice#Change the current die with {{ButtonRT}}#Charge time varies based on the current die and updates when used"}, -- D Infinity
|
||||
[491] = {"491", "Acid Baby", "{{Pill}} Drops a random pill every 7 rooms#Using a pill poisons all enemies in the room"}, -- Acid Baby
|
||||
[493] = {"493", "Adrenaline", "↑ {{Damage}} Damage up for every empty Red Heart container#Follows a formula, some examples are:#+0.3 at 1#+0.92 at 2#+1.76 at 3#+2.79 at 4#+3.98 at 5"}, -- Adrenaline
|
||||
@@ -249,16 +250,16 @@ local repCollectibles={
|
||||
[577] = {"577", "Damocles", "{{Warning}} SINGLE USE {{Warning}}#Spawns a sword above your head, which doubles all item pedestals#Does not double Shop, Chest, or Devil deal items#!!! Kills you at a random time after taking damage from an enemy"}, -- Damocles
|
||||
[578] = {"578", "Free Lemonade", "Creates a large pool of yellow creep"}, -- Free Lemonade
|
||||
[579] = {"579", "Spirit Sword", "Instead of tears, Isaac swings a sword#Deals 3x your damage#{{Chargeable}} Does a spin attack + projectile shot on charge up#Fire projectiles with normal swings on full health"}, -- Spirit Sword
|
||||
[580] = {"580", "Red Key", "Creates a new room adjacent to a viable wall, indicated by an outline of a door#Rooms can be special rooms#A room outside the 13x13 floor map will teleport you to the I AM ERROR room"}, -- Red Key
|
||||
[580] = {"580", "Red Key", "Creates a new room adjacent to a viable wall, indicated by an outline of a door#Rooms can be special rooms#{{ErrorRoom}} A room outside the 13x13 floor map will teleport you to the I AM ERROR room"}, -- Red Key
|
||||
[581] = {"581", "Psy Fly", "Fly orbital familiar#Chases and deflects projectiles#Deals 15 contact damage per second"}, -- Psy Fly
|
||||
[582] = {"582", "Wavy Cap", "↑ {{Tears}} +0.75 Fire Rate up#↓ {{Speed}} -0.03 Speed down#Distorts the screen#Effect can be stacked"}, -- Wavy Cap
|
||||
[583] = {"583", "Rocket in a Jar", "{{Bomb}} +5 bombs#If shooting, placed bombs turn into rockets that fire in the shooting direction"}, -- Rocket in a Jar
|
||||
[584] = {"584", "Book of Virtues", "Spawns an orbital wisp familiar that fires spectral tears but can be destroyed#Can be combined with a second active item to create themed wisps#{{DevilRoom}} Turns the first Devil Room into an {{AngelRoom}} Angel Room#{{AngelChance}} 12.5% higher Angel Room chance#{{AngelChance}} Allows Angel Rooms to spawn even if you've taken a Devil deal"}, -- Book of Virtues
|
||||
[585] = {"585", "Alabaster Box", "Upon use, Spawns: #{{SoulHeart}} Three Soul Hearts#{{AngelRoom}} Two Angel Room items#{{SoulHeart}} Must be charged by picking up Soul Hearts#{{DevilRoom}} Only spawns 2 Soul Hearts and 1 Angel item if a Devil deal was taken previously"}, -- Alabaster Box
|
||||
[585] = {"585", "Alabaster Box", "Upon use, spawns: #{{SoulHeart}} Three Soul Hearts#{{AngelRoom}} Two Angel Room items#Must be charged by picking up Soul Hearts#{{DevilRoom}} Only spawns 2 Soul Hearts and 1 Angel item if a Devil deal was taken previously"}, -- Alabaster Box
|
||||
[586] = {"586", "The Stairway", "Spawns a ladder at the start of every floor#It leads to a unique {{AngelRoom}} Angel Room shop with items and consumables"}, -- The Stairway
|
||||
[587] = {"587", "Menorah (Unused but scripted)", "<Item does not exist>"}, -- Menorah (Unused but scripted)
|
||||
[588] = {"588", "Sol", "{{BossRoom}} Reveals the location of the Boss Room#Upon defeating a boss, for the rest of the floor: #{{Card20}} Activates The Sun#{{Battery}} Fully recharges your active item#{{CurseBlind}} Removes any Curses#↑ {{Damage}} +3 Damage#↑ {{Luck}} +1 Luck"}, -- Sol
|
||||
[589] = {"589", "Luna", "Adds an extra {{SecretRoom}} Secret Room and {{SuperSecretRoom}} Super Secret Room to each floor#{{SecretRoom}} Secret Rooms contain a beam of light that give: #{{Tears}} Tears up for the current floor#{{HalfSoulHeart}} Half soul heart#{{SecretRoom}} Reveals one Secret Room each floor"}, -- Luna
|
||||
[589] = {"589", "Luna", "Adds an extra {{SecretRoom}} Secret Room and {{SuperSecretRoom}} Super Secret Room to each floor#Reveals one Secret Room each floor#Secret Rooms contain a beam of light that give:#{{HalfSoulHeart}} A Half Soul Heart#↑ {{Tears}} +0.5 Fire Rate up for the current floor#↑ {{Tears}} Additional +0.5 Fire Rate up from the first beam per floor"}, -- Luna
|
||||
[590] = {"590", "Mercurius", "↑ {{Speed}} +0.4 Speed up#Doors stay open after entering a room"}, -- Mercurius
|
||||
[591] = {"591", "Venus", "↑ {{Heart}} +1 Health up#{{Heart}} Heals 1 Red Heart#{{Charm}} Close enemies become charmed"}, -- Venus
|
||||
[592] = {"592", "Terra", "↑ {{Damage}} +1 Damage up#Replaces tears with rocks#They deal variable damage#Can destroy obstacles#Increased knockback"}, -- Terra
|
||||
@@ -361,7 +362,7 @@ local repCollectibles={
|
||||
[689] = {"689", "Glitched Crown", "Item pedestals quickly cycle between 5 random items"}, -- Glitched Crown
|
||||
[690] = {"690", "Belly Jelly", "Causes enemies to bounce off of Isaac#Bouncing them against obstacles deals damage#50% chance that Isaac ignores contact damage#50% chance to deflect enemy projectiles"}, -- Belly Jelly
|
||||
[691] = {"691", "Sacred Orb", "Prevents Quality {{Quality0}}/{{Quality1}} items from spawning#33% chance to reroll items with Quality {{Quality2}} to Quality {{Quality3}} or {{Quality4}}"}, -- Sacred Orb
|
||||
[692] = {"692", "Sanguine Bond", "Spawns a set of spikes in the {{DevilRoom}}Devil Room#Taking damage from the spikes can grant a reward:#35%: Nothing#33%: ↑ {{Damage}} +0.5 Damage up#15%: {{Coin}} 6 pennies#10%: {{BlackHeart}} 2 Black Hearts#5%: {{DevilRoom}} Random Devil item#2%: Leviathan transformation"}, -- Sanguine Bond //PERCENTAGES NOT CONFIRMED, updated in patch, taken from Wiki
|
||||
[692] = {"692", "Sanguine Bond", "Spawns a set of spikes in the {{DevilRoom}}Devil Room#Take damage on the spikes to get a reward:#35%: Nothing#33%: ↑ {{Damage}} +0.5 Damage up#15%: {{Coin}} 6 pennies#10%: {{BlackHeart}} 2 Black Hearts#5%: {{DevilRoom}} Random Devil item#2%: Leviathan transformation"}, -- Sanguine Bond
|
||||
[693] = {"693", "The Swarm", "Grants 8 orbital flies which turn into Blue Flies after they block a shot#Spawns a new fly every room cleared"}, -- The Swarm
|
||||
[694] = {"694", "Heartbreak", "{{BrokenHeart}} Grants 3 broken hearts#↑ {{Damage}} +0.25 Damage for every broken heart#Every fatal hit will add 2 more broken hearts#You die at 12 broken hearts"}, -- Heartbreak
|
||||
[695] = {"695", "Bloody Gust", "When taking damage, gain {{Speed}} speed and {{Tears}} tears up for the current floor#Up to +1.02 Speed and +3 Fire Rate possible"}, -- Bloody Gust
|
||||
@@ -373,7 +374,7 @@ local repCollectibles={
|
||||
[701] = {"701", "Isaac's Tomb", "Spawns an {{DirtyChest}} Old Chest at the start of every floor which requires a key to unlock#Can contain {{SoulHeart}} Soul Hearts, trinkets or items#Items are from the {{AngelRoom}} Angel Room pool and Mom and Dad themed"}, -- Isaac's Tomb
|
||||
[702] = {"702", "Vengeful Spirit", "After taking damage, spawns an orbital wisp that lasts for the entire floor#Maximum of 6#They fire tears but do not block shots"}, -- Vengeful Spirit
|
||||
[703] = {"703", "Esau Jr.", "Swaps between the current character and Esau Jr., who has {{BlackHeart}} 3 Black Hearts, {{Damage}} +2 Damage and flight#Characters have independent items and health#On first use, he gains random passive items equal to how many you have#{{Warning}} Dying as either character ends the run"}, -- Esau Jr.
|
||||
[704] = {"704", "Berserk!", "On use, enter Berserk mode for 5 seconds:#↑ {{Speed}} +0.4 Speed up#↑ {{Tears}} Tears up#↑ {{Damage}} +3 Damage up#Restricts attacks to a melee weapon"}, -- Berserk!
|
||||
[704] = {"704", "Berserk!", "Item charges by dealing damage#On use, go berserk for 5 seconds:#↑ {{Speed}} +0.4 Speed up#↑ {{Damage}} +3 Damage up#Restricts attacks to a melee weapon#Kills while berserk increase its duration by 1 second"}, -- Berserk!
|
||||
[705] = {"705", "Dark Arts", "On use, gain {{Speed}} +1 Speed and walk through enemies and bullets for 1 second#On touch, deal 2x your damage + 3.5 damage per touched enemy#Explosion on effect end that deals damage equal to how much you dealt"}, -- Dark Arts
|
||||
[706] = {"706", "Abyss", "Destroys all items in the room and spawns an attack fly familiar for each#Effects of fly depends on the items"}, -- Abyss
|
||||
[707] = {"707", "Supper", "↑ {{Heart}} +1 Health up#{{Heart}} Heals 1 Red Heart"}, -- Supper
|
||||
@@ -384,7 +385,7 @@ local repCollectibles={
|
||||
[712] = {"712", "Lemegeton", "Spawns an orbital wisp familiar that grants an item's effect but can be destroyed#The items have a 25% chance to be from the current room's item pool, or from the Treasure, Boss or Shop pools otherwise"}, -- Lemegeton
|
||||
[713] = {"713", "Sumptorium", "Removes half a heart and creates a Clot familiar#Each type of heart generates a Clot with different HP, damage and tear effect"}, -- Sumptorium
|
||||
[714] = {"714", "Recall", "Retrieves the Forgotten's body from any distance"}, -- Recall
|
||||
[715] = {"715", "Hold", "Preserves one poop bomb inside that can be used later"}, -- Hold
|
||||
[715] = {"715", "Hold", "Preserves one Poop spell inside that can be used later"}, -- Hold
|
||||
[716] = {"716", "Keeper's Sack", "Spawns {{Coin}} 3 random coins and {{Key}} 1 key#{{Shop}} Every 3 coins spent when buying items gives one of the following:#↑ {{Damage}} +0.5 Damage up#↑ {{Range}} +0.25 Range up#↑ {{Speed}} +0.03 Speed up"}, -- Keeper's Sack
|
||||
[717] = {"717", "Keeper's Kin", "Rocks and props spawn 2 blue spiders when destroyed#Rocks can occasionally spawn blue spiders when in a hostile room"}, -- Keeper's Kin
|
||||
[718] = {"718", "Keeper's Rope (Cut item)", "<Item does not exist>"}, -- Keepers Rope (Cut item)
|
||||
@@ -830,11 +831,12 @@ local repCards={
|
||||
[30] = {"30", "Ace of Hearts", "{{Heart}} Turns all pickups, chests and non-boss enemies into hearts"}, -- Ace of Hearts
|
||||
[34] = {"34", "Ehwaz", "Spawns a trapdoor to the next floor#Spawns a {{LadderRoom}} crawlspace if used on a decorative floor tile (grass, small rocks, papers, gems, etc.)"},
|
||||
[39] = {"39", "Algiz", "Invincibility for 20 seconds"}, -- Algiz
|
||||
[42] = {"42", "Chaos Card", "Upon use, throw the card in the direction you're moving#Instantly kills ANY enemy it touches (except Delirium or The Beast)"}, -- Chaos Card
|
||||
[51] = {"51", "Holy Card", "{{HolyMantle}} Grants the Holy Mantle effect#(Prevents damage once)#Effect lasts until damage is taken"}, -- Holy Card
|
||||
[52] = {"52", "Huge Growth", "↑ {{Damage}} +7 Damage up#↑ {{Range}} +3 Range up#Destroy rocks when walking over them#Size up#Effect lasts for current room"}, -- Huge Growth
|
||||
[54] = {"54", "Era Walk", "{{Slow}} Slow down enemies#↑ {{Speed}} +0.5 Speed up#↓ {{Shotspeed}} -1 Shot Speed down#Effect lasts for current room"},
|
||||
[55] = {"55", "Rune Shard", "{{Rune}} Activates a random rune effect#The rune effect is weaker"}, -- Rune Shard
|
||||
[56] = {"56", "0 - The Fool?", "Drops all your hearts and pickups on the floor, leaving you with half a heart#Coins and bombs may be dropped as {{Collectible74}}The Quarter or {{Collectible19}}Boom! if possible"}, -- 0 - The Fool?
|
||||
[56] = {"56", "0 - The Fool?", "Drops all your hearts and pickups on the floor, leaving you with half a heart#Coins and bombs are dropped as {{Collectible74}}The Quarter or {{Collectible19}}Boom! if possible"}, -- 0 - The Fool?
|
||||
[57] = {"57", "I - The Magician?", "Grants an aura that repels enemies and projectiles for 1 minute"}, -- I - The Magician?
|
||||
[58] = {"58", "II - The High Priestess?", "Mom's Foot stomps down repeatedly for 1 minute"}, -- II - The High Priestess?
|
||||
[59] = {"59", "III - The Empress?", "Grants for 1 minute: #↑ {{Heart}} +2 Health up#↑ {{Tears}} +1.35 Tears up"}, -- III - The Empress?
|
||||
@@ -865,7 +867,7 @@ local repCards={
|
||||
[84] = {"84", "Soul of Judas", "Turns Isaac into a phantom that can pass through enemies to paralyze them#After a few seconds, will attack them all, gaining damage bonus per target"}, -- Soul of Judas
|
||||
[85] = {"85", "Soul of ???", "{{Poison}} Causes 8 poison farts with brown creep#Then plants trail of 7 Butt Bombs#Standing in the creep gives: # {{Tears}} +1.35 Tears#↑ {{Damage}} +1 Damage"}, -- Soul of ???
|
||||
[86] = {"86", "Soul of Eve", "14 Dead Bird familiars fly in and attack enemies# Lasts for current room"}, -- Soul of Eve
|
||||
[87] = {"87", "Soul of Samson", "Turn into a berserk Samson with melee attack for 10 seconds#↑ +0.4 Speed up#↑ Tears up#↑ +3 Damage up"}, -- Soul of Samson
|
||||
[87] = {"87", "Soul of Samson", "Go berserk for 10 seconds:#↑ {{Speed}} +0.4 Speed up#↑ {{Damage}} +3 Damage up#Restricts attacks to a melee weapon#Kills while berserk increase its duration by 1 second"}, -- Soul of Samson
|
||||
[88] = {"88", "Soul of Azazel", "{{Collectible441}} Activates Mega Blast for 7.5 seconds"}, -- Soul of Azazel
|
||||
[89] = {"89", "Soul of Lazarus", "Die and immediately revive at half a heart with some invincibility time#Item is automatically used upon taking fatal damage (like an extra life)"}, -- Soul of Lazarus
|
||||
[90] = {"90", "Soul of Eden", "Rerolls pedestals and pickups in current room#The rerolled items use random pools"}, -- Soul of Eden
|
||||
@@ -962,7 +964,7 @@ EID.descriptions[languageCode].horsepills={
|
||||
{"22", "Paralysis", "You can't move for 4 seconds"}, -- Paralysis
|
||||
{"23", "I can see forever!", "{{SecretRoom}} Opens secret room entrances on current floor#Grants full mapping"}, -- I can see forever!
|
||||
{"24", "Pheromones", "{{Charm}} Turns every enemy in the room permanently friendly"}, -- Pheromones
|
||||
{"25", "Amnesia", "Hides the floor map"}, -- Amnesia
|
||||
{"25", "Amnesia", "{{CurseLost}} Hides the floor map"}, -- Amnesia
|
||||
{"26", "Lemon Party", "Spawns room filling puddle on the ground which damages enemies"}, -- Lemon Party
|
||||
{"27", "R U a Wizard?", "Shoot diagonally for 60 seconds"}, -- R U a Wizard?
|
||||
{"28", "Percs!", "Take only half the damage for current room"}, -- Percs!
|
||||
@@ -973,7 +975,7 @@ EID.descriptions[languageCode].horsepills={
|
||||
{"33", "One makes you small", "You get a lot smaller#Your hitbox gets smaller"}, -- One makes you small
|
||||
{"34", "Infested!", "Spawn 2 blue spiders per poop in room"}, -- Infested!
|
||||
{"35", "Infested?", "Spawn 2 blue spiders per enemy in room#Spawns 2-6 blue spiders when no enemy is in the room"}, -- Infested?
|
||||
{"36", "Power Pill!", "Short invincibility effect#↑ {{Damage}} 7 Damage up#↑ {{Range}} +3 Range up#Persists for current room"}, -- Power Pill!
|
||||
{"36", "Power Pill!", "Short invincibility effect#↑ {{Damage}} +7 Damage up#↑ {{Range}} +3 Range up#Persists for current room"}, -- Power Pill!
|
||||
{"37", "Retro Vision", "Pixelates the screen for 90 seconds"}, -- Retro Vision
|
||||
{"38", "Friends Till The End!", "Spawns 6 blue flies"}, -- Friends Till The End!
|
||||
{"39", "X-Lax", "Spawn pool of long lasting slippery creep"}, -- X-Lax
|
||||
@@ -1048,11 +1050,24 @@ EID.descriptions[languageCode].GlitchedItemText = {
|
||||
|
||||
---------- Misc. Text ----------
|
||||
|
||||
EID.descriptions[languageCode].poopSpells = {
|
||||
{"Poop", "Normal poop that can drop pickups"},
|
||||
{"Corny Poop", "Spawns blue flies while intact"},
|
||||
{"Burning Poop", "Deals contact damage while intact#Leaves a fire behind when destroyed"},
|
||||
{"Stone Poop", "Can deal damage 3 times when thrown#Takes a lot of hits to destroy"},
|
||||
{"Stinky Poop", "Emits a toxic cloud#!!! The cloud will explode if it touches fire!"},
|
||||
{"Black Poop", "Creates slowing creep#Deals 10 damage and confuses all enemies when destroyed"},
|
||||
{"Holy Poop", "{{Collectible543}} Create a white poop#While inside the poop's aura:#↑ {{Damage}} +20% Damage up#↑ {{Tears}} +150% Fire Rate up#Homing tears#Chance to block damage"},
|
||||
{"Brown Creep", "Leave a trail of creep#Standing on the creep increases your fire rate and damage#If the creep is touching other poops, it gains their attribute"},
|
||||
{"Fart", "Push nearby enemies and bullets back, and spawn a toxic cloud#!!! The cloud will explode if it touches fire!"},
|
||||
{"Bomb", "Normal throwable bomb"},
|
||||
{"Explosive Diarrhea", "Spawn 5 lit bombs at your position over the next few seconds"},
|
||||
}
|
||||
|
||||
EID.descriptions[languageCode].VoidShopText = "If absorbed right after pickup, gain:"
|
||||
EID.descriptions[languageCode].VoidOptionText = " will be absorbed instead"
|
||||
EID.descriptions[languageCode].VoidNames = {"Speed up", "Fire Rate up", "Damage up", "Range up", "Shot Speed up", "Luck up"}
|
||||
|
||||
|
||||
EID.descriptions[languageCode].spindownError = "Item disappears"
|
||||
|
||||
EID.descriptions[languageCode].CraftingBagContent = "Bag:"
|
||||
@@ -1072,7 +1087,7 @@ EID.descriptions[languageCode].BlankCardCharge = "Blank Card charge:"
|
||||
EID.descriptions[languageCode].BlankCardQCard = "Teleport to I AM ERROR Room#Blank Card and ?-Card will be destroyed"
|
||||
EID.descriptions[languageCode].ClearRuneCharge = "Clear Rune charge:"
|
||||
EID.descriptions[languageCode].PlaceboCharge = "Placebo charge:"
|
||||
EID.descriptions[languageCode].FlipItemToggleInfo = "(Hold {{ButtonSelect}} (Map) to show description)"
|
||||
EID.descriptions[languageCode].FlipItemToggleInfo = "(Hold {{CONFIG_BoC_Toggle}} to show description)"
|
||||
|
||||
|
||||
EID.descriptions[languageCode].FalsePHDHeart = "{{BlackHeart}} Spawns 1 Black Heart"
|
||||
|
||||
+30
-21
@@ -30,7 +30,7 @@ local dynamicSpriteCache = {} -- used to store sprite objects of collectible ico
|
||||
function EID:addCollectible(id, description, itemName, language)
|
||||
itemName = itemName or nil
|
||||
language = language or "en_us"
|
||||
modName = EID._currentMod
|
||||
local modName = EID._currentMod
|
||||
-- Glitched Items exception so they don't have a mod name
|
||||
if id > 4294960000 then modName = nil end
|
||||
EID.descriptions[language].custom["5.100." .. id] = {id, itemName, description, modName}
|
||||
@@ -1519,8 +1519,8 @@ end
|
||||
-- Returns true if any player is pressing the given button (you can also specify any of the input functions)
|
||||
function EID:PlayersActionPressed(button, inputFunc)
|
||||
inputFunc = inputFunc or Input.IsActionPressed
|
||||
for k,_ in pairs(EID.controllerIndexes) do
|
||||
if inputFunc(button, k) then return true end
|
||||
for k,v in pairs(EID.controllerIndexes) do
|
||||
if inputFunc(button, k) then return true, v end
|
||||
end
|
||||
return false
|
||||
end
|
||||
@@ -1624,7 +1624,9 @@ function EID:evaluateTransformationProgress(transformation)
|
||||
end
|
||||
|
||||
-- Watch for a player's queued item (holding an item over their head) to track active item touches
|
||||
-- Used for Transformation Progress and for tracking Recently Touched Items
|
||||
EID.PlayerItemInteractions = {}
|
||||
EID.RecentlyTouchedItems = {}
|
||||
local hadQueuedItem = {}
|
||||
function EID:evaluateQueuedItems()
|
||||
--initialize the interactions table for all players if it isn't already
|
||||
@@ -1633,6 +1635,7 @@ function EID:evaluateQueuedItems()
|
||||
if not EID.PlayerItemInteractions[i] then
|
||||
EID.PlayerItemInteractions[i] = {LastTouch = 0, actives = {}, pills = {}, altActives = {}, altPills = {}}
|
||||
end
|
||||
EID.RecentlyTouchedItems[i] = EID.RecentlyTouchedItems[i] or {}
|
||||
end
|
||||
for i = 0, game:GetNumPlayers() - 1 do
|
||||
local player = Isaac.GetPlayer(i)
|
||||
@@ -1647,25 +1650,31 @@ function EID:evaluateQueuedItems()
|
||||
else
|
||||
EID.PlayerItemInteractions[i].LastTouch = 0
|
||||
end
|
||||
|
||||
if not player.QueuedItem.Touched and player.QueuedItem.Item and player.QueuedItem.Item.Type == ItemType.ITEM_ACTIVE then
|
||||
local itemID = tostring(player.QueuedItem.Item.ID)
|
||||
-- A new active item was touched; initiate its touch count to 0 for all players
|
||||
-- (Fixes co-op bugs, compared to only initiating it for the toucher)
|
||||
for j = 0, game:GetNumPlayers() - 1 do
|
||||
local player = Isaac.GetPlayer(j)
|
||||
EID.PlayerItemInteractions[j].actives[itemID] = EID.PlayerItemInteractions[j].actives[itemID] or 0
|
||||
EID.PlayerItemInteractions[j].altActives[itemID] = EID.PlayerItemInteractions[j].altActives[itemID] or 0
|
||||
end
|
||||
|
||||
-- Dead Tainted Lazarus exceptions
|
||||
local activesTable = EID.PlayerItemInteractions[i].actives
|
||||
if player:GetPlayerType() == 38 then
|
||||
activesTable = EID.PlayerItemInteractions[i].altActives or activesTable
|
||||
end
|
||||
EID.ForceRefreshCache = true
|
||||
activesTable[itemID] = activesTable[itemID] + 1
|
||||
|
||||
if not player.QueuedItem.Touched and player.QueuedItem.Item then
|
||||
EID.PlayerItemInteractions[i].LastTouch = game:GetFrameCount()
|
||||
|
||||
if player.QueuedItem.Item.Type == ItemType.ITEM_ACTIVE then
|
||||
local itemID = tostring(player.QueuedItem.Item.ID)
|
||||
-- A new active item was touched; initiate its touch count to 0 for all players
|
||||
-- (Fixes co-op bugs, compared to only initiating it for the toucher)
|
||||
for j = 0, game:GetNumPlayers() - 1 do
|
||||
local player = Isaac.GetPlayer(j)
|
||||
EID.PlayerItemInteractions[j].actives[itemID] = EID.PlayerItemInteractions[j].actives[itemID] or 0
|
||||
EID.PlayerItemInteractions[j].altActives[itemID] = EID.PlayerItemInteractions[j].altActives[itemID] or 0
|
||||
end
|
||||
|
||||
-- Dead Tainted Lazarus exceptions
|
||||
local activesTable = EID.PlayerItemInteractions[i].actives
|
||||
if player:GetPlayerType() == 38 then
|
||||
activesTable = EID.PlayerItemInteractions[i].altActives or activesTable
|
||||
end
|
||||
EID.ForceRefreshCache = true
|
||||
activesTable[itemID] = activesTable[itemID] + 1
|
||||
elseif player.QueuedItem.Item.Type ~= ItemType.ITEM_TRINKET then
|
||||
-- Put non-active item pickups into the recent item list, for printing in the Item Reminder
|
||||
table.insert(EID.RecentlyTouchedItems[i], player.QueuedItem.Item.ID)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -610,6 +610,7 @@ end)
|
||||
|
||||
--Tainted Cain "hold to craft" check
|
||||
local holdCounter = 0
|
||||
local icount = 0
|
||||
local function trackBagHolding()
|
||||
if not IsTaintedCain() then return end
|
||||
local isCardHold = Input.IsActionPressed(ButtonAction.ACTION_PILLCARD, EID.bagPlayer.ControllerIndex)
|
||||
@@ -907,6 +908,7 @@ function EID:handleBagOfCraftingUpdating()
|
||||
|
||||
-- Check for Hold Tab key inputs
|
||||
if displayingRecipeList and Input.IsActionPressed(EID.Config["BagOfCraftingToggleKey"], EID.bagPlayer.ControllerIndex) then
|
||||
EID.TabDescThisFrame = true
|
||||
EID.bagPlayer.ControlsCooldown = 2
|
||||
if Input.IsActionTriggered(ButtonAction.ACTION_SHOOTDOWN, EID.bagPlayer.ControllerIndex) then
|
||||
bagOfCraftingOffset = math.min(numResults-(numResults%EID.Config["BagOfCraftingResults"]), bagOfCraftingOffset + EID.Config["BagOfCraftingResults"])
|
||||
|
||||
+43
-6
@@ -281,7 +281,38 @@ EID.UserConfig = {
|
||||
-- Toggle display of what stats will increase on Void absorption
|
||||
-- Default = false
|
||||
["DisplayVoidStatInfo"] = false,
|
||||
|
||||
|
||||
---------- Item Reminder Description ------------
|
||||
--Hold Map (or the button action chosen below) to show a description of your active item's effect, recently picked up items, and things like Teleport 2.0's destination and Void's absorbed items
|
||||
["ItemReminderEnabled"] = true,
|
||||
-- Set the keybinding that's held to show the Item Reminder description, Flip/Spindown Dice preview descriptions, and interacting with the Bag of Crafting recipe list
|
||||
-- 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,
|
||||
-- Show recently acquired item descriptions in the Item Reminder (good for Curse of the Blind!)
|
||||
-- Default = 1
|
||||
["ItemReminderShowRecentItem"] = 1,
|
||||
-- Show your active item description(s) in the Item Reminder
|
||||
-- Default = 1, max = 2
|
||||
["ItemReminderShowActiveDesc"] = 1,
|
||||
-- Show your pocket item (card, pill, active) description in the Item Reminder
|
||||
-- Default = 1, max = 4 (2 in AB+)
|
||||
["ItemReminderShowPocketDesc"] = 1,
|
||||
-- Show your trinket description(s) in the Item Reminder
|
||||
-- Default = 2, max = 2
|
||||
["ItemReminderShowTrinketDesc"] = 2,
|
||||
-- Show your next Poop Spell's description in the Item Reminder
|
||||
-- REPENTANCE ONLY!!!
|
||||
-- Default = 1, max = 6
|
||||
["ItemReminderShowPoopDesc"] = 1,
|
||||
-- Items that grant you items without saying what they are (like Zodiac, Liberty Cap) can have their current granted item revealed in the Item Reminder
|
||||
-- Default = false
|
||||
["ItemReminderShowHiddenInfo"] = false,
|
||||
-- Some items (like Crooked Penny) can have their next result predicted and shown in the Item Reminder
|
||||
-- Default = false
|
||||
["ItemReminderShowRNGCheats"] = false,
|
||||
|
||||
|
||||
---------- Bag of Crafting ------------
|
||||
|
||||
-- REPENTANCE ONLY!!!
|
||||
@@ -315,10 +346,6 @@ EID.UserConfig = {
|
||||
-- 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,
|
||||
@@ -492,7 +519,6 @@ EID.DefaultConfig = {
|
||||
["BagOfCraftingResults"] = 7,
|
||||
["BagOfCraftingCombinationMax"] = 12,
|
||||
["BagOfCraftingRandomResults"] = 400,
|
||||
["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP,
|
||||
["BagOfCraftingDisplayNames"] = false,
|
||||
["BagOfCraftingDisplayIcons"] = false,
|
||||
["BagOfCraftingHideInBattle"] = true,
|
||||
@@ -502,6 +528,17 @@ EID.DefaultConfig = {
|
||||
["CraftingHideButton"] = -1,
|
||||
["CraftingResultKey"] = Keyboard.KEY_F4,
|
||||
["CraftingResultButton"] = -1,
|
||||
|
||||
["ItemReminderEnabled"] = true,
|
||||
["BagOfCraftingToggleKey"] = ButtonAction.ACTION_MAP,
|
||||
["ItemReminderShowRecentItem"] = 1,
|
||||
["ItemReminderShowActiveDesc"] = 1,
|
||||
["ItemReminderShowPocketDesc"] = 1,
|
||||
["ItemReminderShowTrinketDesc"] = 2,
|
||||
["ItemReminderShowPoopDesc"] = 1,
|
||||
["ItemReminderShowHiddenInfo"] = false,
|
||||
["ItemReminderShowRNGCheats"] = false,
|
||||
|
||||
["SpindownDiceResults"] = 3,
|
||||
["SpindownDiceDisplayID"] = false,
|
||||
["SpindownDiceDisplayName"] = false,
|
||||
|
||||
@@ -278,6 +278,7 @@ EID.InlineIcons = {
|
||||
["HolyChestRoomIcon"] = {"roomicons", 32, 6, 9, 0, 4},
|
||||
["WoodenChestRoomIcon"] = {"roomicons", 33, 6, 9, 0, 4},
|
||||
["Teleporter"] = {"roomicons", 34, 9, 9, 0, 2},
|
||||
["ErrorRoom"] = {"roomicons", 35, 9, 9, 0, 2},
|
||||
|
||||
-- Roomshape Icons
|
||||
["Room"] = {"roomshape", 0, 10, 9, 0, 2},
|
||||
@@ -292,6 +293,7 @@ EID.InlineIcons = {
|
||||
["RoomLTopLeft"] = {"roomshape", 9, 11, 10, 0, 1},
|
||||
["RoomLBottomLeft"] = {"roomshape", 10, 11, 10, 0, 1},
|
||||
["RoomLBottomRight"] = {"roomshape", 11, 11, 10, 0, 1},
|
||||
["RedRoom"] = {"roomshape", 12, 10, 9, 0, 2},
|
||||
|
||||
-- Transformation Icons
|
||||
["CustomTransformation"] = {"TransformationCustom", 0, 16, 16, -5, -1, EID.IconSprite},
|
||||
@@ -371,6 +373,19 @@ EID.InlineIcons = {
|
||||
["Crafting29"] = {"Crafting", 29, 14, 16, 0, -1},
|
||||
["Crafting30"] = {"Crafting", 30, 14, 16, 0},
|
||||
|
||||
--Poop Spells
|
||||
["PoopSpell1"] = {"PoopSpells", 1, 16, 16, -2, -2}, --Normal
|
||||
["PoopSpell2"] = {"PoopSpells", 2, 16, 16, -2, -2}, --Corn
|
||||
["PoopSpell3"] = {"PoopSpells", 3, 16, 16, -2, -2}, --Burning
|
||||
["PoopSpell4"] = {"PoopSpells", 4, 16, 16, -2, -2}, --Stone
|
||||
["PoopSpell5"] = {"PoopSpells", 5, 16, 16, -2, -2}, --Stinky
|
||||
["PoopSpell6"] = {"PoopSpells", 6, 16, 16, -2, -2}, --Black
|
||||
["PoopSpell7"] = {"PoopSpells", 7, 16, 16, -2, -2}, --Holy
|
||||
["PoopSpell8"] = {"PoopSpells", 8, 16, 16, -2, -2}, --Creep
|
||||
["PoopSpell9"] = {"PoopSpells", 9, 16, 16, -2, -2}, --Fart
|
||||
["PoopSpell10"] = {"PoopSpells", 10, 16, 16, -2, -2}, --Bomb
|
||||
["PoopSpell11"] = {"PoopSpells", 11, 16, 16, -2, -2}, --Explosive Diarrhea
|
||||
|
||||
-- Use the Stat Icon name without REP or AB to display the stat icon for the dlc the user is using right now. Example: {{Damage}}
|
||||
-- Stats (Repentance)
|
||||
["DamageREP"] = {"Stats", 0, 12, 16, 0, -1},
|
||||
|
||||
@@ -0,0 +1,264 @@
|
||||
local game = Game()
|
||||
local level
|
||||
local currentRoom
|
||||
local blacklist
|
||||
local holdMapDesc
|
||||
|
||||
-- Rainbow Worm's trinket IDs it grants, in order
|
||||
local rainbowWormEffects = { [0] = 9, 11, 65, 27, 10, 12, 26, 66, 96, 144 }
|
||||
-- Mysterious Paper does not play well with displaying Error 404's effect
|
||||
local mysteriousPaperBlacklist = { [23] = true, [48] = true }
|
||||
|
||||
-- Simple function to help with adding properly formatted sections to the desc
|
||||
local function append(icon, title, newDesc)
|
||||
holdMapDesc = holdMapDesc .. (icon or "{{Blank}}") .. " {{ColorEIDObjName}}" .. title .. "#" .. newDesc .. "#"
|
||||
end
|
||||
|
||||
-- Helper function to easily add an item's stock description to the desc
|
||||
-- Don't use if you need to customize the desc! (Like Sanguine Bond's result highlighting)
|
||||
-- extraIcon is for when we want a special icon before the line (like {{Dice Bag Icon}} {{Dice Item Icon}})
|
||||
local variantToName = { [70] = "Pill", [100] = "Collectible", [300] = "Card", [350] = "Trinket" }
|
||||
local function addObjectDesc(type, variant, subtype, extraIcon)
|
||||
local objectID = type .. "." .. variant .. "." .. subtype
|
||||
if not blacklist[objectID] then
|
||||
blacklist[objectID] = true
|
||||
local demoDescObj = EID:getDescriptionObj(type, variant, subtype)
|
||||
local iconString = "{{" .. variantToName[variant] .. subtype .. "}}"
|
||||
if extraIcon then iconString = extraIcon .. " " .. iconString end
|
||||
append(iconString, demoDescObj.Name, demoDescObj.Description)
|
||||
end
|
||||
end
|
||||
|
||||
-- General RNG functions for RNG predicting
|
||||
local function RNGNext(num, shift1, shift2, shift3)
|
||||
num = num ~ ((num >> shift1) & 4294967295)
|
||||
num = num ~ ((num << shift2) & 4294967295)
|
||||
num = num ~ ((num >> shift3) & 4294967295)
|
||||
return num >> 0;
|
||||
end
|
||||
local function SeedToFloat(seed)
|
||||
local multi = 2.3283061589829401E-10;
|
||||
return seed * multi;
|
||||
end
|
||||
|
||||
-- Teleport 2 Destination Prediction --
|
||||
local teleport2Order = { 1,5,8,2,4,13,21,12,10,6,11,18,19,9,20,24,7,666,14,3 }
|
||||
local teleport2GreedOrder = { 1,5,2,4,10,23,8,14,3 }
|
||||
local teleport2Icons = { "{{Room}}","{{BossRoom}}","{{SuperSecretRoom}}","{{Shop}}","{{TreasureRoom}}","{{SacrificeRoom}}","{{DiceRoom}}","{{Library}}","{{CursedRoom}}","{{MiniBoss}}","{{ChallengeRoom}}","{{IsaacsRoom}}","{{BarrenRoom}}","{{ArcadeRoom}}","{{ChestRoom}}","{{Planetarium}}","{{SecretRoom}}","{{RedRoom}}","{{AngelDevilChance}}","{{ErrorRoom}}" }
|
||||
local teleport2GreedIcons = { "{{RoomLongVertical}}","{{BossRoom}}","{{Shop}}","{{TreasureRoom}}","{{CursedRoom}}","{{Room}}","{{SuperSecretRoom}}","{{AngelDevilChance}}","{{ErrorRoom}}" }
|
||||
|
||||
local function teleport2Prediction()
|
||||
local level = game:GetLevel()
|
||||
local rooms = level:GetRooms()
|
||||
--I AM ERROR Room always considered uncleared
|
||||
local unclearedTypes = {[3] = true}
|
||||
for i = 0, rooms.Size - 1 do
|
||||
local room = rooms:Get(i)
|
||||
|
||||
if not room.Clear then
|
||||
-- Check for Special Red Rooms, which get ordered differently than their non-red version
|
||||
if REPENTANCE and room.Data.Type ~= 1 and room.Flags & 1024 == 1024 then unclearedTypes[666] = true
|
||||
else unclearedTypes[room.Data.Type] = true end
|
||||
end
|
||||
end
|
||||
--Angel/Devil Room check (it lives off the map)
|
||||
if not level:GetRoomByIdx(-1).Clear then unclearedTypes[14] = true end
|
||||
|
||||
local greed = game:IsGreedMode()
|
||||
local roomOrder = (greed and teleport2GreedOrder) or teleport2Order
|
||||
local roomIcons = (greed and teleport2GreedIcons) or teleport2Icons
|
||||
local roomNames = (greed and EID:getDescriptionEntry("Teleport2GreedRoomNames")) or EID:getDescriptionEntry("Teleport2RoomNames")
|
||||
|
||||
for i,v in ipairs(roomOrder) do
|
||||
if unclearedTypes[v] then
|
||||
append("{{Collectible419}}", EID:getObjectName(5, 100, 419) .. EID:getDescriptionEntry("HoldMapHeader"), roomIcons[i] .. " " .. roomNames[i])
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Sanguine Bond Chance Display / Prediction --
|
||||
--order of checking: 15% Pennies, 48% Damage, 58% Hearts, 63% Item, 65% Leviathan, 100% Nothing
|
||||
local sanguineResults = { { 0.15, 3 }, { 0.48, 2 }, { 0.58, 4 }, { 0.63, 5 }, { 0.65, 6 }, { 1, 1 } }
|
||||
|
||||
local function sanguinePrediction()
|
||||
local spikes = currentRoom:GetGridEntity(67)
|
||||
if not spikes then return end -- don't display anything if we can't find the spikes!
|
||||
local cheatResult = nil
|
||||
if spikes and EID.Config["ItemReminderShowRNGCheats"] then
|
||||
local spikeSeed = currentRoom:GetGridEntity(67):GetRNG():GetSeed()
|
||||
spikeSeed = RNGNext(spikeSeed, 5, 9, 7)
|
||||
spikeSeed = RNGNext(spikeSeed, 1, 5, 0x13)
|
||||
local nextFloat = SeedToFloat(spikeSeed)
|
||||
|
||||
for _,v in ipairs(sanguineResults) do
|
||||
if nextFloat < v[1] then cheatResult = v[2] break end
|
||||
end
|
||||
end
|
||||
|
||||
local descObj = EID:getDescriptionObj(5, 100, 692)
|
||||
local resultsDesc = ""
|
||||
|
||||
local lineCount = 0
|
||||
-- separate sanguine's description by # or semicolons
|
||||
for w in string.gmatch(descObj.Description, "([^#;]+)") do
|
||||
-- we only care about groups that contain a percent sign
|
||||
if string.find(w,"%%") then
|
||||
lineCount = lineCount + 1
|
||||
if cheatResult == lineCount then resultsDesc = resultsDesc .. "{{ColorBagComplete}}" end
|
||||
resultsDesc = resultsDesc .. w .. "#"
|
||||
end
|
||||
end
|
||||
|
||||
append("{{Collectible692}}", descObj.Name, resultsDesc)
|
||||
end
|
||||
|
||||
function EID:getHoldMapDescription(player, checkingTwin)
|
||||
-- Starting Blacklist: Recall, Hold
|
||||
blacklist = { ["5.100.714"] = true, ["5.100.715"] = true, }
|
||||
holdMapDesc = ""
|
||||
|
||||
level = game:GetLevel()
|
||||
currentRoom = level:GetCurrentRoom()
|
||||
|
||||
-- TODO:
|
||||
-- D1, crooked penny cheats. 404/liberty cap/etc. "what item is it"
|
||||
-- (Zodiac and Modeling Clay have functions for it?)
|
||||
-- pandora's box? it shows the whole desc which is kinda useful but too big
|
||||
-- Void's absorbed items list
|
||||
-- D Infinity current dice; track our Drop presses and resync it each time D Infinity is used by watching for the next dice effect triggered (Predict its next dice in AB+?)
|
||||
|
||||
-- Tainted ??? Poop Descriptions
|
||||
if REPENTANCE and EID.Config["ItemReminderShowPoopDesc"] > 0 and player:GetPlayerType() == 25 then
|
||||
for i = 0, EID.Config["ItemReminderShowPoopDesc"]-1 do
|
||||
local poopInfo = EID:getDescriptionEntry("poopSpells")
|
||||
local nextPoop = player:GetPoopSpell(i)
|
||||
append("{{PoopSpell" .. nextPoop .. "}}", poopInfo[nextPoop][1], poopInfo[nextPoop][2])
|
||||
end
|
||||
end
|
||||
|
||||
-- Sanguine Bond Possible Results
|
||||
if REPENTANCE and player:HasCollectible(CollectibleType.COLLECTIBLE_SANGUINE_BOND) and game:GetRoom():GetType() == RoomType.ROOM_DEVIL then
|
||||
sanguinePrediction()
|
||||
end
|
||||
|
||||
-- Teleport 2.0 location
|
||||
if player:HasCollectible(CollectibleType.COLLECTIBLE_TELEPORT_2) and not EID.isMirrorRoom then
|
||||
blacklist["5.100.419"] = true
|
||||
teleport2Prediction()
|
||||
end
|
||||
|
||||
-- Recently Acquired Item Descriptions
|
||||
if EID.Config["ItemReminderShowRecentItem"] > 0 then
|
||||
local printedItems = 0
|
||||
local playerNum = EID:getPlayerID(player)
|
||||
if EID.RecentlyTouchedItems[playerNum] then
|
||||
for i = #EID.RecentlyTouchedItems[playerNum], 1, -1 do
|
||||
if printedItems >= EID.Config["ItemReminderShowRecentItem"] then break end
|
||||
printedItems = printedItems + 1
|
||||
local recentID = EID.RecentlyTouchedItems[playerNum][i] % 4294967296
|
||||
addObjectDesc(5, 100, recentID)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Active Item Descriptions
|
||||
if EID.Config["ItemReminderShowActiveDesc"] > 0 then
|
||||
for i = 0, EID.Config["ItemReminderShowActiveDesc"]-1 do
|
||||
local heldActive = player:GetActiveItem(i) % 4294967296
|
||||
if heldActive > 0 then
|
||||
addObjectDesc(5, 100, heldActive)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Pocket Item Descriptions
|
||||
-- Annoying because there's no easy way to just get the info of a slot
|
||||
if EID.Config["ItemReminderShowPocketDesc"] > 0 then
|
||||
local numPrinted = 0
|
||||
-- I don't think we can actually know what slot the player is on, so, save these to display (if they exist) for when Card and Pill in a slot are both 0, to attempt to always show them in slot order
|
||||
local dicePrinted = false
|
||||
local diceBag = REPENTANCE and player:GetActiveItem(3) or 0
|
||||
local pocketPrinted = false
|
||||
local pocketActive = REPENTANCE and player:GetActiveItem(2) or 0
|
||||
for i = 0, EID.Config["ItemReminderShowPocketDesc"]-1 do
|
||||
local heldCard = player:GetCard(i)
|
||||
local heldPill = player:GetPill(i)
|
||||
if heldCard > 0 then
|
||||
addObjectDesc(5, 300, heldCard)
|
||||
elseif heldPill > 0 then
|
||||
-- Check if our held pill is identified
|
||||
EID.pillPlayer = player
|
||||
local identified = game:GetItemPool():IsPillIdentified(heldPill)
|
||||
if REPENTANCE and heldPill % PillColor.PILL_GIANT_FLAG == PillColor.PILL_GOLD then identified = true end
|
||||
if (identified or EID.Config["ShowUnidentifiedPillDescriptions"]) then
|
||||
addObjectDesc(5, 70, heldPill)
|
||||
end
|
||||
EID.pillPlayer = nil
|
||||
elseif diceBag > 0 and not dicePrinted then
|
||||
dicePrinted = true
|
||||
addObjectDesc(5, 100, diceBag, "{{Trinket154}}")
|
||||
elseif pocketActive > 0 and not pocketPrinted then
|
||||
pocketPrinted = true
|
||||
addObjectDesc(5, 100, pocketActive)
|
||||
-- we'll have to add tainted char specific text for their actives with unique effects for that character!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Trinket Descriptions
|
||||
if EID.Config["ItemReminderShowTrinketDesc"] > 0 then
|
||||
for i = 0, EID.Config["ItemReminderShowTrinketDesc"]-1 do
|
||||
local heldActive = player:GetTrinket(i)
|
||||
if heldActive > 0 and not blacklist["5.350." .. heldActive] then
|
||||
-- Rainbow Worm
|
||||
if EID.Config["ItemReminderShowHiddenInfo"] and heldActive == 64 then
|
||||
blacklist["5.350.64"] = true
|
||||
local rainbowWormEffect = rainbowWormEffects[math.floor(game.TimeCounter / 30 / 3) % (REPENTANCE and 10 or 8)]
|
||||
addObjectDesc(5, 350, rainbowWormEffect, "{{Trinket64}}")
|
||||
-- 404 Error
|
||||
-- Unfortunately, includes other temporary trinket givers, such as Glitched Items. We'd need to predict 404's result using RNG to actually know which it specifically is granting
|
||||
-- And unfortunately, HasTrinket can't differentiate between real and fake trinkets in AB+
|
||||
elseif EID.Config["ItemReminderShowHiddenInfo"] and REPENTANCE and heldActive == 75 then
|
||||
blacklist["5.350.75"] = true
|
||||
-- Don't display Mysterious Paper's 1-frame temporary trinket granting
|
||||
local hasPaper = player:HasTrinket(21)
|
||||
for i = 1, TrinketType.NUM_TRINKETS - 1 do
|
||||
local tempTrinketFound = EID.player:HasTrinket(i, true) ~= EID.player:HasTrinket(i, false)
|
||||
if tempTrinketFound and (not mysteriousPaperBlacklist[i] or not hasPaper) then
|
||||
addObjectDesc(5, 350, i, "{{Trinket75}}")
|
||||
end
|
||||
end
|
||||
else
|
||||
addObjectDesc(5, 350, heldActive)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
|
||||
-- Finally, check the twin player of this controller
|
||||
-- If both twins have a desc, show their player icon / name to separate the two descs
|
||||
if REPENTANCE and not checkingTwin then
|
||||
local twin = player:GetOtherTwin()
|
||||
local mainTwinDesc = holdMapDesc
|
||||
local otherTwinDesc = ""
|
||||
if twin then otherTwinDesc = EID:getHoldMapDescription(twin, true) end
|
||||
if otherTwinDesc ~= "" then
|
||||
-- Only the other twin had a desc
|
||||
if mainTwinDesc == "" then holdMapDesc = otherTwinDesc
|
||||
else
|
||||
-- Both twins had a desc; merge them with player icon headers
|
||||
holdMapDesc = (EID:getIcon("Player"..player:GetPlayerType()) ~= EID.InlineIcons["ERROR"] and "{{Player"..player:GetPlayerType().."}}" or "{{CustomTransformation}}") .. " {{ColorGray}}" .. player:GetName() .. "#" .. mainTwinDesc .. "#"
|
||||
holdMapDesc = holdMapDesc .. (EID:getIcon("Player"..twin:GetPlayerType()) ~= EID.InlineIcons["ERROR"] and "{{Player"..twin:GetPlayerType().."}}" or "{{CustomTransformation}}") .. " {{ColorGray}}" .. twin:GetName() .. "#" .. otherTwinDesc
|
||||
end
|
||||
else
|
||||
-- Only the main twin had a desc
|
||||
holdMapDesc = mainTwinDesc
|
||||
end
|
||||
end
|
||||
|
||||
return holdMapDesc
|
||||
end
|
||||
+30
-1
@@ -389,9 +389,38 @@ if MCMLoaded then
|
||||
---------------------------------------------------------------------------
|
||||
---------------------------------Display-----------------------------------
|
||||
|
||||
|
||||
-- Item Reminder Settings --
|
||||
|
||||
EID:AddBooleanSetting("Display", "ItemReminderEnabled", "Item Reminder Description", {offText = "Disabled", onText = "Enabled", infoText = "Hold Map to show your active item's effect, recently picked up items, and much more"})
|
||||
|
||||
local actionToName = { [0] = "Move Left", "Move Right", "Move Up", "Move Down", "Shoot Left", "Shoot Right", "Shoot Up", "Shoot Down", "Bomb", "Item", "Pill/Card", "Drop", "Pause", "Map" }
|
||||
|
||||
EID:AddNumberSetting("Display", "BagOfCraftingToggleKey", "Hold to Show", 8, 13, {displayTable = actionToName,
|
||||
infoText = {"Hold this key to display the Item Reminder description, show Flip/Spindown previews and control the Bag of Crafting recipe list"}})
|
||||
|
||||
local itemSlotReminders = { [0] = "No", "Yes (max 1)", "Yes (max 2)", "Yes (max 3)", "Yes (max 4)", "Yes (max 5)",
|
||||
"Yes (max 6)", "Yes (max 7)", "Yes (max 8)" }
|
||||
|
||||
|
||||
-- should these be organized in the order they're shown in the map desc code?
|
||||
EID:AddNumberSetting("Display", "ItemReminderShowRecentItem", "Recent Item Descriptions", 0, 4, { displayTable = itemSlotReminders, infoText = {"Show recently acquired item descriptions in the Item Reminder (good for Curse of the Blind!)"}})
|
||||
EID:AddNumberSetting("Display", "ItemReminderShowActiveDesc", "Active Item Descriptions", 0, 2, { displayTable = itemSlotReminders, infoText = "Show your active item descriptions in the Item Reminder"})
|
||||
EID:AddNumberSetting("Display", "ItemReminderShowPocketDesc", "Pocket Item Descriptions", 0, 4, { displayTable = itemSlotReminders, infoText = "Show your pocket item (card, pill, active) descriptions in the Item Reminder"})
|
||||
EID:AddNumberSetting("Display", "ItemReminderShowTrinketDesc", "Trinket Descriptions", 0, 2, { displayTable = itemSlotReminders, infoText = "Show your trinket descriptions in the Item Reminder"})
|
||||
|
||||
EID:AddNumberSetting("Display", "ItemReminderShowPoopDesc", "Poop Descriptions", 0, 6, { repOnly = true, displayTable = itemSlotReminders, infoText = "Show Tainted ???'s next Poop Spell descriptions in the Item Reminder"})
|
||||
|
||||
EID:AddBooleanSetting("Display", "ItemReminderShowHiddenInfo", "Show Hidden Information", { infoText = "Items like 404 Error can have their current granted item revealed in the Item Reminder"})
|
||||
EID:AddBooleanSetting("Display", "ItemReminderShowRNGCheats", "Show RNG Predictions", { infoText = "Some items can have their next result predicted and shown in the Item Reminder"})
|
||||
MCM.AddSpace("EID", "Display")
|
||||
|
||||
--
|
||||
|
||||
|
||||
local refreshRateSteps = {1, 2, 3, 4, 6, 10, 12, 15, 20, 30, 60}
|
||||
EID:AddScrollSetting("Display", "RefreshRate", "Description Refresh Rate", refreshRateSteps,
|
||||
{infoText = "How many times per second that EID updates what description to show"})
|
||||
{displayingTab = "", infoText = "How many times per second that EID updates what description to show"})
|
||||
EID:AddBooleanSetting("Display", "CoopDescriptions", "Co-op Player Descriptions",
|
||||
{infoText = "Allow Players 2, 3, and 4 to display descriptions in Co-op"})
|
||||
EID:AddBooleanSetting("Display", "PairedPlayerDescriptions", "Paired Player Descriptions", {repOnly = true,
|
||||
|
||||
+8
-1
@@ -3,6 +3,8 @@ local game = Game()
|
||||
EID.TabPreviewID = 0
|
||||
-- Modifiers switching the previewed description can cause infinite loops or undesired text, use this to help prevent it
|
||||
EID.inModifierPreview = false
|
||||
-- The "Hold Map Helper" needs to know if it shouldn't display because we're in a Hold Tab desc
|
||||
EID.TabDescThisFrame = false
|
||||
|
||||
-- List of collectible IDs for us to check if a player owns them; feel free to add to this in mods that add description modifiers!
|
||||
EID.collectiblesToCheck = { CollectibleType.COLLECTIBLE_VOID, }
|
||||
@@ -60,8 +62,11 @@ function EID:CheckPlayersCollectibles()
|
||||
end
|
||||
end
|
||||
|
||||
-- Handle description changes that occur while holding Map
|
||||
local function TabCallback(descObj)
|
||||
if EID.TabPreviewID == 0 then return descObj end
|
||||
EID.TabDescThisFrame = true
|
||||
|
||||
EID.inModifierPreview = true
|
||||
local descEntry = EID:getDescriptionObj(5, 100, EID.TabPreviewID)
|
||||
EID.inModifierPreview = false
|
||||
@@ -476,6 +481,8 @@ if REPENTANCE then
|
||||
|
||||
-- Handle co-op players seeing different pill effects
|
||||
local function CoopPillCallback(descObj)
|
||||
-- Don't do this check when holding Tab for pill effects
|
||||
if not descObj.Entity then return descObj end
|
||||
local printedDescs = { [descObj.Name] = true }
|
||||
|
||||
for i = 1,#EID.coopAllPlayers do
|
||||
@@ -614,7 +621,7 @@ EID:addDescriptionModifier("EID Afterbirth+", EIDConditionsAB, nil)
|
||||
|
||||
-- should this be done differently so that mods can add tab previews? (tab conditions is done last, but would be done before callbacks mods add, maybe tab should be checked in EID:getDescriptionObj
|
||||
local function TabConditions(descObj)
|
||||
if EID:PlayersActionPressed(ButtonAction.ACTION_MAP) and not EID.inModifierPreview then return true end
|
||||
if EID:PlayersActionPressed(EID.Config["BagOfCraftingToggleKey"]) and not EID.inModifierPreview then return true end
|
||||
EID.TabPreviewID = 0
|
||||
return false
|
||||
end
|
||||
|
||||
@@ -113,6 +113,7 @@ local function CheckLogForItems(_)
|
||||
local eidDesc = ""
|
||||
|
||||
local theLog = io.open(logLocation, "r")
|
||||
if theLog == nil then return end
|
||||
theLog:seek("set", logCursor)
|
||||
|
||||
local line = theLog:read()
|
||||
|
||||
@@ -41,6 +41,8 @@ local altPathItemChecked = {}
|
||||
local alwaysUseLocalMode = false -- set to true after drawing a non-local mode description this frame
|
||||
EID.ForceRefreshCache = false -- set to true to force-refresh descriptions, currently used for potential transformation text changes
|
||||
local preHourglassStatus = {}
|
||||
EID.holdTabPlayer = 0
|
||||
EID.holdTabCounter = 0
|
||||
|
||||
EID.GameUpdateCount = 0
|
||||
EID.GameRenderCount = 0
|
||||
@@ -103,6 +105,7 @@ require("eid_data")
|
||||
require("eid_xmldata")
|
||||
require("eid_api")
|
||||
require("eid_modifiers")
|
||||
require("eid_holdmapdesc")
|
||||
|
||||
-- load Repentence descriptions
|
||||
if REPENTANCE then
|
||||
@@ -460,10 +463,11 @@ local function resetDescCache()
|
||||
end
|
||||
|
||||
|
||||
function EID:addDescriptionToPrint(desc)
|
||||
function EID:addDescriptionToPrint(desc, insertLoc)
|
||||
if desc.Entity and EID.entitiesToPrint[GetPtrHash(desc.Entity)] then return end
|
||||
if #EID.descriptionsToPrint == EID.Config["MaxDescriptionsToDisplay"] then return end
|
||||
table.insert(EID.descriptionsToPrint, desc)
|
||||
if insertLoc then table.insert(EID.descriptionsToPrint, insertLoc, desc)
|
||||
else table.insert(EID.descriptionsToPrint, desc) end
|
||||
if desc.Entity then EID.entitiesToPrint[GetPtrHash(desc.Entity)] = true end
|
||||
end
|
||||
|
||||
@@ -666,9 +670,10 @@ function EID:printDescription(desc, cachedID)
|
||||
EID:evaluateTransformationProgress(transform)
|
||||
transformationName = transformationName .. " "
|
||||
for _, player in ipairs(EID.coopAllPlayers) do
|
||||
if player:GetPlayerType() ~= PlayerType.PLAYER_THESOUL_B then
|
||||
local playerType = player:GetPlayerType()
|
||||
if playerType ~= PlayerType.PLAYER_THESOUL_B and player:GetBabySkin() == -1 then
|
||||
if #EID.coopAllPlayers > 1 then
|
||||
local playerIcon = EID:getIcon("Player"..player.SubType) ~= EID.InlineIcons["ERROR"] and "{{Player"..player.SubType.."}}" or "{{CustomTransformation}}"
|
||||
local playerIcon = EID:getIcon("Player"..playerType) ~= EID.InlineIcons["ERROR"] and "{{Player"..playerType.."}}" or "{{CustomTransformation}}"
|
||||
transformationName = transformationName .. playerIcon
|
||||
end
|
||||
local numCollected = EID.TransformationProgress[EID:getPlayerID(player)] and EID.TransformationProgress[EID:getPlayerID(player)][transform] or 0
|
||||
@@ -726,8 +731,8 @@ function EID:printBulletPoints(description, renderPos)
|
||||
end
|
||||
---------------------------------------------------------------------------
|
||||
----------------------------Handle New Room--------------------------------
|
||||
local isMirrorRoom = false
|
||||
local isDeathCertRoom = false
|
||||
EID.isMirrorRoom = false
|
||||
EID.isDeathCertRoom = false
|
||||
if REPENTANCE then
|
||||
function EID:AssignFlipItems()
|
||||
EID.flipMaxIndex = -1
|
||||
@@ -745,8 +750,8 @@ if REPENTANCE then
|
||||
end
|
||||
function EID:onNewRoomRep()
|
||||
local level = game:GetLevel()
|
||||
isMirrorRoom = level:GetCurrentRoom():IsMirrorWorld()
|
||||
isDeathCertRoom = EID:GetDimension(level) == 2
|
||||
EID.isMirrorRoom = level:GetCurrentRoom():IsMirrorWorld()
|
||||
EID.isDeathCertRoom = EID:GetDimension(level) == 2
|
||||
|
||||
-- Handle Flip Item
|
||||
initialItemNext = false
|
||||
@@ -758,6 +763,8 @@ end
|
||||
|
||||
-- On new room, save the status of any variables that need to be rewound upon Glowing Hourglass usage
|
||||
function EID:onNewRoom()
|
||||
EID.RecentlyTouchedItems = {}
|
||||
|
||||
local curRoomIndex = game:GetLevel():GetCurrentRoomIndex()
|
||||
preHourglassStatus = {}
|
||||
|
||||
@@ -840,7 +847,7 @@ function EID:renderIndicator(entity, playerNum)
|
||||
local sprite = entity:GetSprite()
|
||||
if REPENTANCE then
|
||||
repDiv = 255
|
||||
if isMirrorRoom then
|
||||
if EID.isMirrorRoom then
|
||||
local screenCenter = EID:getScreenSize()/2
|
||||
entityPos.X = entityPos.X - (entityPos-screenCenter).X * 2
|
||||
arrowPos.X = arrowPos.X - (arrowPos-screenCenter).X * 2
|
||||
@@ -878,7 +885,7 @@ function EID:renderIndicator(entity, playerNum)
|
||||
EID:renderEntity(entity, sprite, entityPos)
|
||||
end
|
||||
end
|
||||
if isMirrorRoom then
|
||||
if EID.isMirrorRoom then
|
||||
sprite.FlipX = false
|
||||
end
|
||||
end
|
||||
@@ -891,7 +898,7 @@ function EID:PositionLocalMode(entity)
|
||||
local textBoxWidth = EID.Config["LocalModeCentered"] and tonumber(EID.Config["TextboxWidth"])/2 * EID.Scale or -30
|
||||
local textPosOffset = Vector(-textBoxWidth, 20)
|
||||
EID:alterTextPos(Isaac.WorldToScreen(entity.Position + textPosOffset))
|
||||
if isMirrorRoom then
|
||||
if EID.isMirrorRoom then
|
||||
EID:alterTextPos(Isaac.WorldToScreen(entity.Position + textPosOffset * Vector(-1,0)))
|
||||
local screenCenter = EID:getScreenSize()/2
|
||||
EID.UsedPosition.X = EID.UsedPosition.X - (EID.UsedPosition-screenCenter).X * 2
|
||||
@@ -969,6 +976,7 @@ function EID:setPlayer()
|
||||
EID.coopMainPlayers = { EID.player }
|
||||
EID.coopAllPlayers = EID.players
|
||||
EID.controllerIndexes[p.ControllerIndex] = 1
|
||||
EID.isMultiplayer = false
|
||||
return
|
||||
end
|
||||
|
||||
@@ -1203,6 +1211,7 @@ local function onRender(t)
|
||||
end
|
||||
end
|
||||
EID.TabPreviewID = 0
|
||||
EID.TabDescThisFrame = false
|
||||
|
||||
-- If MCM is open, don't show anything unless we're in a tab labeled as "Visuals" or "Crafting"
|
||||
if ModConfigMenu and ModConfigMenu.IsVisible and ModConfigMenu.Config["Mod Config Menu"].HideHudInMenu and EID.MCMCompat_isDisplayingEIDTab ~= "Visuals" and EID.MCMCompat_isDisplayingEIDTab ~= "Crafting" then
|
||||
@@ -1244,6 +1253,15 @@ local function onRender(t)
|
||||
return
|
||||
end
|
||||
|
||||
local tabHeld, playerHoldingTab = EID:PlayersActionPressed(EID.Config["BagOfCraftingToggleKey"])
|
||||
if tabHeld then
|
||||
EID.holdTabPlayer = EID.coopMainPlayers[playerHoldingTab]
|
||||
EID.holdTabCounter = EID.holdTabCounter + 1
|
||||
else
|
||||
EID.holdTabPlayer = nil
|
||||
EID.holdTabCounter = 0
|
||||
end
|
||||
|
||||
if EID.ForceRefreshCache then
|
||||
resetDescCache()
|
||||
end
|
||||
@@ -1326,7 +1344,7 @@ local function onRender(t)
|
||||
inRangeEntities = { EID.lastDescriptionEntity }
|
||||
end
|
||||
-- Only display the indicator for the primary (closest / crafting) description
|
||||
if EID.lastDescriptionEntity and not displayedCrafting then
|
||||
if EID.lastDescriptionEntity then
|
||||
EID:renderIndicator(EID.lastDescriptionEntity, EID.controllerIndexes[player.ControllerIndex] or 1)
|
||||
table.insert(EID.CachedIndicators, {EID.lastDescriptionEntity, EID.controllerIndexes[player.ControllerIndex]})
|
||||
end
|
||||
@@ -1337,7 +1355,7 @@ local function onRender(t)
|
||||
if EID.Config["EnableEntityDescriptions"] and EID:getEntityData(closest, "EID_Description") then
|
||||
local desc = EID:getEntityData(closest, "EID_Description")
|
||||
local origDesc = EID:getDescriptionObjByEntity(closest)
|
||||
if type(desc) == "table" then
|
||||
if desc ~= nil and type(desc) == "table" then
|
||||
origDesc.Description = desc.Description or origDesc.Description
|
||||
origDesc.Name = desc.Name or origDesc.Name
|
||||
origDesc.Transformation = desc.Transformation or origDesc.Transformation
|
||||
@@ -1349,7 +1367,7 @@ local function onRender(t)
|
||||
-- Handle Glitched Items
|
||||
elseif closest.Type == 5 and closest.Variant == 100 and closest.SubType > 4294960000 then
|
||||
if EID:getEntityData(closest, "EID_DontHide") ~= true then
|
||||
if (EID:hasCurseBlind() and not closest:ToPickup().Touched and EID.Config["DisableOnCurse"] and not isDeathCertRoom) or (EID.Config["DisableOnAltPath"] and not closest:ToPickup().Touched and EID:IsAltChoice(closest)) or (game.Challenge == Challenge.CHALLENGE_APRILS_FOOL and EID.Config["DisableOnAprilFoolsChallenge"]) then
|
||||
if (EID:hasCurseBlind() and not closest:ToPickup().Touched and EID.Config["DisableOnCurse"] and not EID.isDeathCertRoom) or (EID.Config["DisableOnAltPath"] and not closest:ToPickup().Touched and EID:IsAltChoice(closest)) or (game.Challenge == Challenge.CHALLENGE_APRILS_FOOL and EID.Config["DisableOnAprilFoolsChallenge"]) then
|
||||
EID:addDescriptionToPrint({ Description = "QuestionMark", Entity = closest})
|
||||
end
|
||||
end
|
||||
@@ -1407,7 +1425,7 @@ local function onRender(t)
|
||||
elseif closest.Variant == PickupVariant.PICKUP_COLLECTIBLE then
|
||||
--Handle Collectibles
|
||||
if EID:getEntityData(closest, "EID_DontHide") ~= true then
|
||||
if (EID:hasCurseBlind() and not closest:ToPickup().Touched and EID.Config["DisableOnCurse"] and not isDeathCertRoom) or (EID.Config["DisableOnAltPath"] and not closest:ToPickup().Touched and EID:IsAltChoice(closest)) or (game.Challenge == Challenge.CHALLENGE_APRILS_FOOL and EID.Config["DisableOnAprilFoolsChallenge"]) then
|
||||
if (EID:hasCurseBlind() and not closest:ToPickup().Touched and EID.Config["DisableOnCurse"] and not EID.isDeathCertRoom) or (EID.Config["DisableOnAltPath"] and not closest:ToPickup().Touched and EID:IsAltChoice(closest)) or (game.Challenge == Challenge.CHALLENGE_APRILS_FOOL and EID.Config["DisableOnAprilFoolsChallenge"]) then
|
||||
EID:addDescriptionToPrint({ Description = "QuestionMark", Entity = closest})
|
||||
end
|
||||
end
|
||||
@@ -1482,6 +1500,15 @@ local function onRender(t)
|
||||
end
|
||||
end
|
||||
|
||||
-- handle showing the Hold Map Helper description
|
||||
if EID.Config["ItemReminderEnabled"] and EID.holdTabCounter >= 30 and EID.TabDescThisFrame == false and EID.holdTabPlayer ~= nil then
|
||||
--have we done anything that makes AB+ get angry? still need to test AB+!
|
||||
local demoDescObj = EID:getDescriptionObj(-999, -1, 1)
|
||||
demoDescObj.Name = ""
|
||||
demoDescObj.Description = EID:getHoldMapDescription(EID.holdTabPlayer)
|
||||
if (demoDescObj.Description ~= "") then EID:addDescriptionToPrint(demoDescObj, 1) end
|
||||
end
|
||||
|
||||
EID:printDescriptions()
|
||||
end
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<AnimatedActor>
|
||||
<Info CreatedBy="Unknown" CreatedOn="3/23/2022 6:30:33 AM" Version="183" Fps="30"/>
|
||||
<Info CreatedBy="Unknown" CreatedOn="6/5/2022 1:39:49 AM" Version="187" Fps="30"/>
|
||||
<Content>
|
||||
<Spritesheets>
|
||||
<Spritesheet Path="eid_inline_icons.png" Id="0"/>
|
||||
@@ -191,6 +191,7 @@
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="209" YCrop="256" Width="5" Height="4" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="215" YCrop="261" Width="5" Height="4" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="33" YCrop="68" Width="8" Height="7" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="149" YCrop="67" Width="9" Height="8" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
</LayerAnimation>
|
||||
<LayerAnimation LayerId="1" Visible="true"/>
|
||||
</LayerAnimations>
|
||||
@@ -241,6 +242,7 @@
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="100" YCrop="78" Width="10" Height="10" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="111" YCrop="78" Width="10" Height="10" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="122" YCrop="78" Width="10" Height="10" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="133" YCrop="78" Width="9" Height="9" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
</LayerAnimation>
|
||||
<LayerAnimation LayerId="1" Visible="true"/>
|
||||
</LayerAnimations>
|
||||
@@ -601,5 +603,29 @@
|
||||
<NullAnimations/>
|
||||
<Triggers/>
|
||||
</Animation>
|
||||
<Animation Name="PoopSpells" FrameNum="1" Loop="false">
|
||||
<RootAnimation>
|
||||
<Frame XPosition="0" YPosition="0" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
</RootAnimation>
|
||||
<LayerAnimations>
|
||||
<LayerAnimation LayerId="0" Visible="true">
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="0" YCrop="285" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="false" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="0" YCrop="285" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="16" YCrop="285" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="32" YCrop="285" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="48" YCrop="285" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="64" YCrop="285" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="80" YCrop="285" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="96" YCrop="285" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="112" YCrop="285" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="0" YCrop="301" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="16" YCrop="301" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
<Frame XPosition="0" YPosition="0" XPivot="0" YPivot="0" XCrop="32" YCrop="301" Width="16" Height="16" XScale="100" YScale="100" Delay="1" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
|
||||
</LayerAnimation>
|
||||
<LayerAnimation LayerId="1" Visible="true"/>
|
||||
</LayerAnimations>
|
||||
<NullAnimations/>
|
||||
<Triggers/>
|
||||
</Animation>
|
||||
</Animations>
|
||||
</AnimatedActor>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 29 KiB |
Reference in new issue
Block a user