Merge pull request #479 from Buurazu/master
Teleport/Metronome prediction + Sanguine improvement
This commit is contained in:
12 files changed
+208
-58
No files matched your search
@@ -873,7 +873,8 @@ EID.descriptions[languageCode].transformations={
|
|||||||
---------- MISC ----------
|
---------- MISC ----------
|
||||||
|
|
||||||
EID.descriptions[languageCode].VoidText = "If absorbed, gain:"
|
EID.descriptions[languageCode].VoidText = "If absorbed, gain:"
|
||||||
EID.descriptions[languageCode].VoidNames = {"Speed up", "Tears up", "Damage up", "Range up", "Shot Speed up", "Luck up"}
|
-- {1} will become the number text (like "{1} Tears up" -> "+0.5 Tears up")
|
||||||
|
EID.descriptions[languageCode].VoidNames = {"{1} Speed up", "{1} Tears up", "{1} Damage up", "{1} Range up", "{1} Shot Speed up", "{1} Luck up"}
|
||||||
|
|
||||||
EID.descriptions[languageCode].CollectionPageInfo = "This item needs to be picked up for the collection page!"
|
EID.descriptions[languageCode].CollectionPageInfo = "This item needs to be picked up for the collection page!"
|
||||||
|
|
||||||
@@ -885,6 +886,9 @@ EID.descriptions[languageCode].MCM = {
|
|||||||
|
|
||||||
-- the Hold Map description will predict the abilities of items with a header like "Item Name Result"
|
-- the Hold Map description will predict the abilities of items with a header like "Item Name Result"
|
||||||
EID.descriptions[languageCode].HoldMapHeader = " 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" }
|
-- https://wofsauge.github.io/IsaacDocs/rep/enums/RoomType.html
|
||||||
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" }
|
-- Includes Repentance room types for localization convenience
|
||||||
|
EID.descriptions[languageCode].RoomTypeNames = { "Normal Room", "Shop", "I AM ERROR Room", "Treasure Room", "Boss Room", "Miniboss Room", "Secret Room", "Super Secret Room", "Arcade Room", "Curse Room", "Challenge Room", "Library", "Sacrifice Room", "Devil Room", "Angel Room", "Crawlspace Room", "Boss Rush Room", "Isaac's Room", "Barren Room", "Chest Room", "Dice Room", "Black Market", "Exit Room", "Planetarium", "Teleporter Entrance", "Teleporter Exit", "Alt Path Trapdoor", "Blue Key Room", "Ultra Secret Room",
|
||||||
|
-- Not technically room types but still potentially useful to have localized
|
||||||
|
[666] = "Angel/Devil Room", [1024] = "Red Room", [1025] = "Special Red Room" }
|
||||||
@@ -35,7 +35,7 @@ local repCollectibles={
|
|||||||
[52] = {"52", "Dr. Fetus", "{{Bomb}} Bomb tears#{{Damage}} Each bomb deals 10x your damage#If that results in over 60 damage, it instead deals 5x your damage + 30#↓ {{Tears}} -60% Fire Rate down"}, --Dr. Fetus
|
[52] = {"52", "Dr. Fetus", "{{Bomb}} Bomb tears#{{Damage}} Each bomb deals 10x your damage#If that results in over 60 damage, it instead deals 5x your damage + 30#↓ {{Tears}} -60% Fire Rate down"}, --Dr. Fetus
|
||||||
[53] = {"53", "Magneto", "Magnetic attraction for pickups#Opens chests remotely, ignoring damage of spike chests"}, -- Magneto
|
[53] = {"53", "Magneto", "Magnetic attraction for pickups#Opens chests remotely, ignoring damage of spike chests"}, -- Magneto
|
||||||
[55] = {"55", "Mom's Eye", "50% chance to shoot a tear backwards#{{Luck}} 100% chance at 5 Luck"}, -- Mom's Eye
|
[55] = {"55", "Mom's Eye", "50% chance to shoot a tear backwards#{{Luck}} 100% chance at 5 Luck"}, -- Mom's Eye
|
||||||
[59] = {"59", "The Book of Belial", "<Item not obtainable>"}, -- The Book of Belial (Judas's Birthright Version)
|
[59] = {"59", "The Book of Belial", "↑ {{Damage}} +2 Damage up#{{Collectible7}} +50% Damage if you have Blood of the Martyr#{{AngelDevilChance}} +12.5% Devil/Angel Room chance while held"}, -- The Book of Belial (Judas's Birthright Version)
|
||||||
[62] = {"62", "Charm of the Vampire", "↑ {{Damage}} +0.3 Damage up#{{HalfHeart}} Heals half a heart for every 13 enemies killed"}, -- Charm of the Vampire
|
[62] = {"62", "Charm of the Vampire", "↑ {{Damage}} +0.3 Damage up#{{HalfHeart}} Heals half a heart for every 13 enemies killed"}, -- Charm of the Vampire
|
||||||
[64] = {"64", "Steam Sale", "{{Shop}} -50% discount on Shop items#Getting this item multiple times reduces the price further"}, -- Steam Sale
|
[64] = {"64", "Steam Sale", "{{Shop}} -50% discount on Shop items#Getting this item multiple times reduces the price further"}, -- Steam Sale
|
||||||
[67] = {"67", "Sister Maggy", "Normal tear familiar#Deals 6 damage per tear"}, -- Sister Maggy
|
[67] = {"67", "Sister Maggy", "Normal tear familiar#Deals 6 damage per tear"}, -- Sister Maggy
|
||||||
@@ -326,7 +326,7 @@ local repCollectibles={
|
|||||||
[653] = {"653", "Vade Retro", "While held, non-ghost enemies spawn small red ghosts on death#On use, causes the ghosts to explode"}, -- Vade Retro
|
[653] = {"653", "Vade Retro", "While held, non-ghost enemies spawn small red ghosts on death#On use, causes the ghosts to explode"}, -- Vade Retro
|
||||||
[654] = {"654", "False PHD", "{{BlackHeart}} +1 Black Heart#{{Pill}} Identifies all pills#Converts good pills into bad pills#↑ {{Damage}} Stat down pills also grant Damage up#{{BlackHeart}} Other bad pills drop Black Hearts on use"}, -- False PHD
|
[654] = {"654", "False PHD", "{{BlackHeart}} +1 Black Heart#{{Pill}} Identifies all pills#Converts good pills into bad pills#↑ {{Damage}} Stat down pills also grant Damage up#{{BlackHeart}} Other bad pills drop Black Hearts on use"}, -- False PHD
|
||||||
[655] = {"655", "Spin to Win", "Adds spinning top orbital that blocks enemy shots#Deals 10.5 contact damage per second#When used, {{Speed}} ↑ +0.5 speed and greatly increases the rotation speed of orbitals"}, -- Spin to Win
|
[655] = {"655", "Spin to Win", "Adds spinning top orbital that blocks enemy shots#Deals 10.5 contact damage per second#When used, {{Speed}} ↑ +0.5 speed and greatly increases the rotation speed of orbitals"}, -- Spin to Win
|
||||||
[656] = {"656", "Damocles", "<Item not obtainable>"}, -- Damocles
|
[656] = {"656", "Damocles", "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
|
||||||
[657] = {"657", "Vasculitis", "Enemies explode into tears upon death, which inherit the effects of Isaac's tears"}, -- Vasculitis
|
[657] = {"657", "Vasculitis", "Enemies explode into tears upon death, which inherit the effects of Isaac's tears"}, -- Vasculitis
|
||||||
[658] = {"658", "Giant Cell", "Spawn Minisaacs when taking damage#They chase and shoot at nearby enemies"}, -- Giant Cell
|
[658] = {"658", "Giant Cell", "Spawn Minisaacs when taking damage#They chase and shoot at nearby enemies"}, -- Giant Cell
|
||||||
[659] = {"659", "Tropicamide", "↑ {{Range}} +1.5 Range up#↑ {{Tearsize}} Tear Size up"}, -- Tropicamide
|
[659] = {"659", "Tropicamide", "↑ {{Range}} +1.5 Range up#↑ {{Tearsize}} Tear Size up"}, -- Tropicamide
|
||||||
@@ -1066,7 +1066,7 @@ EID.descriptions[languageCode].poopSpells = {
|
|||||||
|
|
||||||
EID.descriptions[languageCode].VoidShopText = "If absorbed right after pickup, gain:"
|
EID.descriptions[languageCode].VoidShopText = "If absorbed right after pickup, gain:"
|
||||||
EID.descriptions[languageCode].VoidOptionText = " will be absorbed instead"
|
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].VoidNames[2] = "{1} Fire Rate up"
|
||||||
|
|
||||||
EID.descriptions[languageCode].spindownError = "Item disappears"
|
EID.descriptions[languageCode].spindownError = "Item disappears"
|
||||||
|
|
||||||
|
|||||||
+5
-4
@@ -1711,10 +1711,11 @@ function EID:AddIconToObject(eType, eVariant, eSubType, iconName)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- reimplementation of RNG Seed shift feature used by the game. Mostly used for RNG Prediction features
|
-- reimplementation of RNG Seed shift feature used by the game. Mostly used for RNG Prediction features
|
||||||
|
-- Default RNG shift values for many things are 5, 9, 7
|
||||||
function EID:RNGNext(rngNum, shift1, shift2, shift3)
|
function EID:RNGNext(rngNum, shift1, shift2, shift3)
|
||||||
rngNum = rngNum ~ ((rngNum >> shift1) & 4294967295)
|
rngNum = rngNum ~ ((rngNum >> (shift1 or 5)) & 4294967295)
|
||||||
rngNum = rngNum ~ ((rngNum << shift2) & 4294967295)
|
rngNum = rngNum ~ ((rngNum << (shift2 or 9)) & 4294967295)
|
||||||
rngNum = rngNum ~ ((rngNum >> shift3) & 4294967295)
|
rngNum = rngNum ~ ((rngNum >> (shift3 or 7)) & 4294967295)
|
||||||
return rngNum >> 0;
|
return rngNum >> 0;
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1722,4 +1723,4 @@ end
|
|||||||
function EID:SeedToFloat(seed)
|
function EID:SeedToFloat(seed)
|
||||||
local multi = 2.3283061589829401E-10;
|
local multi = 2.3283061589829401E-10;
|
||||||
return seed * multi;
|
return seed * multi;
|
||||||
end
|
end
|
||||||
@@ -217,6 +217,7 @@ local recheckPickups = false
|
|||||||
local customRNGSeed = 0x77777770
|
local customRNGSeed = 0x77777770
|
||||||
local customRNGShift = {0,0,0}
|
local customRNGShift = {0,0,0}
|
||||||
|
|
||||||
|
-- Use local RNG functions to possibly reduce processing time a little bit
|
||||||
local function RNGNext()
|
local function RNGNext()
|
||||||
local num = customRNGSeed
|
local num = customRNGSeed
|
||||||
num = num ~ ((num >> customRNGShift[1]) & 4294967295)
|
num = num ~ ((num >> customRNGShift[1]) & 4294967295)
|
||||||
@@ -542,7 +543,9 @@ local function GameStartCrafting()
|
|||||||
for i=1,EID.XMLMaxItemID do itemPool:AddRoomBlacklist(i) end
|
for i=1,EID.XMLMaxItemID do itemPool:AddRoomBlacklist(i) end
|
||||||
|
|
||||||
local collID = itemPool:GetCollectible(poolNum, false, 1, 25)
|
local collID = itemPool:GetCollectible(poolNum, false, 1, 25)
|
||||||
while collID ~= 25 and collID > 0 do
|
local attempts = CraftingMaxItemID
|
||||||
|
while collID ~= 25 and collID ~= 642 and collID > 0 and attempts > 0 do
|
||||||
|
attempts = attempts - 1
|
||||||
table.insert(CraftingItemPools[poolNum+1], {collID, 1.0})
|
table.insert(CraftingItemPools[poolNum+1], {collID, 1.0})
|
||||||
itemPool:AddRoomBlacklist(collID)
|
itemPool:AddRoomBlacklist(collID)
|
||||||
collID = itemPool:GetCollectible(poolNum, false, 1, 25)
|
collID = itemPool:GetCollectible(poolNum, false, 1, 25)
|
||||||
|
|||||||
+16
-3
@@ -264,6 +264,17 @@ EID.UserConfig = {
|
|||||||
-- Default = true
|
-- Default = true
|
||||||
["DisplaySacrificeInfo"] = true,
|
["DisplaySacrificeInfo"] = true,
|
||||||
|
|
||||||
|
---------- Sanguine Bond ----------
|
||||||
|
|
||||||
|
-- Toggle display of Sanguine Bond's list of possible payouts in Devil Rooms
|
||||||
|
-- REPENTANCE ONLY!
|
||||||
|
-- Default = true
|
||||||
|
["DisplaySanguineInfo"] = true,
|
||||||
|
-- Highlight what Sanguine Bond's next payout will be
|
||||||
|
-- REPENTANCE ONLY!
|
||||||
|
-- Default = false
|
||||||
|
["PredictionSanguineBond"] = false,
|
||||||
|
|
||||||
---------- Dice Room ----------
|
---------- Dice Room ----------
|
||||||
|
|
||||||
-- Toggle display of Dice Room descriptions
|
-- Toggle display of Dice Room descriptions
|
||||||
@@ -309,9 +320,9 @@ EID.UserConfig = {
|
|||||||
-- 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
|
-- 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
|
-- Default = false
|
||||||
["ItemReminderShowHiddenInfo"] = false,
|
["ItemReminderShowHiddenInfo"] = false,
|
||||||
-- Some items (like Sanguine Bond) can have their next result predicted and shown in the Item Reminder
|
-- Some items (like Teleport!) can have their next result predicted and shown in the Item Reminder
|
||||||
-- Default = false
|
-- Default = false
|
||||||
["PredictionSanguineBond"] = false,
|
["ItemReminderShowRNGCheats"] = false,
|
||||||
|
|
||||||
|
|
||||||
---------- Bag of Crafting ------------
|
---------- Bag of Crafting ------------
|
||||||
@@ -513,6 +524,8 @@ EID.DefaultConfig = {
|
|||||||
["ShowUnidentifiedPillDescriptions"] = false,
|
["ShowUnidentifiedPillDescriptions"] = false,
|
||||||
["DisplayGlitchedItemInfo"] = debug and true or false,
|
["DisplayGlitchedItemInfo"] = debug and true or false,
|
||||||
["DisplaySacrificeInfo"] = true,
|
["DisplaySacrificeInfo"] = true,
|
||||||
|
["DisplaySanguineInfo"] = true,
|
||||||
|
["PredictionSanguineBond"] = false,
|
||||||
["DisplayDiceInfo"] = true,
|
["DisplayDiceInfo"] = true,
|
||||||
["DisplayBagOfCrafting"] = "always",
|
["DisplayBagOfCrafting"] = "always",
|
||||||
["DisplayCraneInfo"] = true,
|
["DisplayCraneInfo"] = true,
|
||||||
@@ -538,7 +551,7 @@ EID.DefaultConfig = {
|
|||||||
["ItemReminderShowTrinketDesc"] = 2,
|
["ItemReminderShowTrinketDesc"] = 2,
|
||||||
["ItemReminderShowPoopDesc"] = 1,
|
["ItemReminderShowPoopDesc"] = 1,
|
||||||
["ItemReminderShowHiddenInfo"] = false,
|
["ItemReminderShowHiddenInfo"] = false,
|
||||||
["PredictionSanguineBond"] = false,
|
["ItemReminderShowRNGCheats"] = false,
|
||||||
|
|
||||||
["SpindownDiceResults"] = 3,
|
["SpindownDiceResults"] = 3,
|
||||||
["SpindownDiceDisplayID"] = false,
|
["SpindownDiceDisplayID"] = false,
|
||||||
|
|||||||
@@ -133,6 +133,12 @@ EID.InlineIcons = {
|
|||||||
["ArrowDown"] = {"ArrowDown", 0, 10, 9, 1},
|
["ArrowDown"] = {"ArrowDown", 0, 10, 9, 1},
|
||||||
["Warning"] = {"Warning", 0, 10, 9, 3},
|
["Warning"] = {"Warning", 0, 10, 9, 3},
|
||||||
["Blank"] = {"Blank", 0, 0, 0},
|
["Blank"] = {"Blank", 0, 0, 0},
|
||||||
|
|
||||||
|
["ArrowGrayUp"] = {"ArrowGray", 0, 10, 9, 1},
|
||||||
|
["ArrowGrayRight"] = {"ArrowGray", 1, 10, 9, 1},
|
||||||
|
["ArrowGrayDown"] = {"ArrowGray", 2, 10, 9, 1},
|
||||||
|
["ArrowGrayLeft"] = {"ArrowGray", 3, 10, 9, 1},
|
||||||
|
|
||||||
["IconGreenTint"] = function(_)
|
["IconGreenTint"] = function(_)
|
||||||
EID._NextIconModifier = function(sprite)
|
EID._NextIconModifier = function(sprite)
|
||||||
sprite.Color = Color(1, 1, 1, EID.Config["Transparency"] * 0.5, 0, 0.5, 0)
|
sprite.Color = Color(1, 1, 1, EID.Config["Transparency"] * 0.5, 0, 0.5, 0)
|
||||||
@@ -803,3 +809,7 @@ EID.TransformationData = {
|
|||||||
[tostring(EID.TRANSFORMATION.SUPERBUM)] = {},
|
[tostring(EID.TRANSFORMATION.SUPERBUM)] = {},
|
||||||
[tostring(EID.TRANSFORMATION.STOMPY)] = {VanillaForm = REPENTANCE and PlayerForm.PLAYERFORM_STOMPY}
|
[tostring(EID.TRANSFORMATION.STOMPY)] = {VanillaForm = REPENTANCE and PlayerForm.PLAYERFORM_STOMPY}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EID.RoomShapeToMarkup = { "{{Room}}", "{{RoomSmallHorizontal}}", "{{RoomSmallVertical}}", "{{RoomLongVertical}}", "{{RoomLongThinVertical}}","{{RoomLongHorizontal}}", "{{RoomLongThinHorizontal}}", "{{RoomXL}}", "{{RoomLTopLeft}}", "{{RoomL}}", "{{RoomLBottomLeft}}", "{{RoomLBottomRight}}" }
|
||||||
|
EID.RoomTypeToMarkup = { "{{Room}}", "{{Shop}}", "{{ErrorRoom}}", "{{TreasureRoom}}", "{{BossRoom}}", "{{MiniBoss}}", "{{SecretRoom}}", "{{SuperSecretRoom}}", "{{ArcadeRoom}}", "{{CursedRoom}}", "{{ChallengeRoom}}", "{{Library}}", "{{SacrificeRoom}}", "{{DevilRoom}}", "{{AngelRoom}}", "{{LadderRoom}}", "{{Room}}" --[[boss rush]], "{{IsaacsRoom}}", "{{BarrenRoom}}", "{{ChestRoom}}", "{{DiceRoom}}", "{{Shop}}", "{{Room}}", --[[Black Market / Greed Exit]] "{{Planetarium}}", "{{Teleporter}}","{{Teleporter}}", "{{Room}}", "{{Room}}" --[[Blue Key rooms]], "{{UltraSecretRoom}}" }
|
||||||
+113
-29
@@ -3,6 +3,7 @@ local level
|
|||||||
local currentRoom
|
local currentRoom
|
||||||
local blacklist
|
local blacklist
|
||||||
local holdMapDesc
|
local holdMapDesc
|
||||||
|
local currentPlayer
|
||||||
|
|
||||||
-- Rainbow Worm's trinket IDs it grants, in order
|
-- Rainbow Worm's trinket IDs it grants, in order
|
||||||
local rainbowWormEffects = { [0] = 9, 11, 65, 27, 10, 12, 26, 66, 96, 144 }
|
local rainbowWormEffects = { [0] = 9, 11, 65, 27, 10, 12, 26, 66, 96, 144 }
|
||||||
@@ -29,23 +30,96 @@ local function addObjectDesc(type, variant, subtype, extraIcon)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- General RNG functions for RNG predicting
|
-- Banned items: Metronome, Plan C, Glowing Hour Glass, Breath of Life, Clicker, R Key
|
||||||
local function RNGNext(num, shift1, shift2, shift3)
|
-- Reduced chance: Death Certificate (15%), Genesis (25%)
|
||||||
num = num ~ ((num >> shift1) & 4294967295)
|
-- I saw something in the code about rerolling Forget Me Now but not sure what the criteria was
|
||||||
num = num ~ ((num << shift2) & 4294967295)
|
local metronomeBlacklist = {[488] = 1, [475] = 1, [422] = 1} --AB+ can choose Clicker lol rip
|
||||||
num = num ~ ((num >> shift3) & 4294967295)
|
if REPENTANCE then metronomeBlacklist = {[488] = 1, [475] = 1, [422] = 1, [326] = 1, [482] = 1, [636] = 1, [628] = 0.85, [622] = 0.75 } end
|
||||||
return num >> 0;
|
|
||||||
|
-- Should we account for Car Battery? (Both if we have it, and if it grants it which immediately uses it again)
|
||||||
|
function EID:MetronomePrediction()
|
||||||
|
local itemConfig = Isaac.GetItemConfig()
|
||||||
|
local numCollectibles = EID:GetMaxCollectibleID()
|
||||||
|
local metronomeRNG = currentPlayer:GetCollectibleRNG(CollectibleType.COLLECTIBLE_METRONOME):GetSeed()
|
||||||
|
local rerollChance = 0
|
||||||
|
if REPENTANCE then
|
||||||
|
metronomeRNG = EID:RNGNext(metronomeRNG)
|
||||||
|
rerollChance = metronomeRNG
|
||||||
|
end
|
||||||
|
local attempts = 15
|
||||||
|
while attempts > 0 do
|
||||||
|
attempts = attempts - 1
|
||||||
|
metronomeRNG = EID:RNGNext(metronomeRNG)
|
||||||
|
local sel = metronomeRNG % numCollectibles + 1
|
||||||
|
if itemConfig:GetCollectible(sel) ~= nil then
|
||||||
|
if metronomeBlacklist[sel] then
|
||||||
|
-- A few items have a reroll chance in Repentance
|
||||||
|
if metronomeBlacklist[sel] < 1 then
|
||||||
|
rerollChance = EID:RNGNext(rerollChance, 0x02, 0x0F, 0x11)
|
||||||
|
local rerollFloat = EID:SeedToFloat(rerollChance)
|
||||||
|
if rerollFloat < 1 - metronomeBlacklist[sel] then
|
||||||
|
-- We succeeded the reroll chance
|
||||||
|
return "{{Collectible" .. sel .. "}} {{ColorGray}}" .. EID:getObjectName(5,100,sel) .. "#" .. EID:getDescriptionObj(5,100,sel).Description
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return "{{Collectible" .. sel .. "}} {{ColorGray}}" .. EID:getObjectName(5,100,sel) .. "#" .. EID:getDescriptionObj(5,100,sel).Description
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- as the code puts it, [warn] No Collectible found for Metronome!
|
||||||
|
return "None"
|
||||||
end
|
end
|
||||||
local function SeedToFloat(seed)
|
|
||||||
local multi = 2.3283061589829401E-10;
|
-- Teleport! Destination Prediction --
|
||||||
return seed * multi;
|
local function teleport1Prediction()
|
||||||
|
if REPENTANCE and currentPlayer:GetSprite():GetAnimation() == "TeleportUp" then return end
|
||||||
|
local level = game:GetLevel()
|
||||||
|
local currentRoomIndex = level:GetCurrentRoomDesc().SafeGridIndex
|
||||||
|
local possibleRooms = {}
|
||||||
|
for i = 0, 168 do
|
||||||
|
local room = level:GetRoomByIdx(i)
|
||||||
|
-- Currently, any non-red room on the grid that we aren't in is a valid choice
|
||||||
|
-- Is there more criteria to look out for?
|
||||||
|
if room.GridIndex >= 0 and room.SafeGridIndex ~= currentRoomIndex and room.Data.Type ~= 29 and (not REPENTANCE or room.Flags & 1024 ~= 1024) then
|
||||||
|
table.insert(possibleRooms, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local teleSeed = currentPlayer:GetCollectibleRNG(CollectibleType.COLLECTIBLE_TELEPORT):GetSeed()
|
||||||
|
teleSeed = EID:RNGNext(teleSeed, 5, 9, 7)
|
||||||
|
teleSeed = EID:RNGNext(teleSeed, 0x02, 0x0F, 0x19) -- magic disassembled numbers!
|
||||||
|
|
||||||
|
local resultRoomIndex = possibleRooms[(teleSeed % #possibleRooms) + 1]
|
||||||
|
local resultRoom = level:GetRoomByIdx(resultRoomIndex)
|
||||||
|
local resultSafeIndex = resultRoom.SafeGridIndex
|
||||||
|
|
||||||
|
local roomIcon = EID.RoomTypeToMarkup[resultRoom.Data.Type]
|
||||||
|
if resultRoom.Data.Type == 1 then roomIcon = EID.RoomShapeToMarkup[resultRoom.Data.Shape] end
|
||||||
|
local roomNames = EID:getDescriptionEntry("RoomTypeNames")
|
||||||
|
local roomName = roomNames[resultRoom.Data.Type]
|
||||||
|
-- Find our X/Y difference from the target location, if we're on the map
|
||||||
|
local d = ""
|
||||||
|
if currentRoomIndex >= 0 then
|
||||||
|
local myPos = Vector(currentRoomIndex % 13, math.floor(currentRoomIndex / 13))
|
||||||
|
local newPos = Vector(resultSafeIndex % 13, math.floor(resultSafeIndex / 13))
|
||||||
|
local diffX = math.floor(newPos.X - myPos.X)
|
||||||
|
local diffY = math.floor(newPos.Y - myPos.Y)
|
||||||
|
|
||||||
|
if diffY > 0 then d = d .. "{{ArrowGrayDown}} " .. diffY
|
||||||
|
elseif diffY < 0 then d = d .. "{{ArrowGrayUp}} " .. math.abs(diffY) end
|
||||||
|
if d ~= "" and diffX ~= 0 then d = d .. "," end
|
||||||
|
if diffX > 0 then d = d .. "{{ArrowGrayRight}} " .. diffX
|
||||||
|
elseif diffX < 0 then d = d .. "{{ArrowGrayLeft}} " .. math.abs(diffX) end
|
||||||
|
end
|
||||||
|
if d ~= "" then d = "#{{Blank}} " .. d end
|
||||||
|
|
||||||
|
append("{{Collectible44}}", EID:getObjectName(5, 100, 44) .. EID:getDescriptionEntry("HoldMapHeader"), roomIcon .. " " .. roomName .. d)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Teleport 2 Destination Prediction --
|
-- 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 teleport2Order = { 1,5,8,2,4,13,21,12,10,6,11,18,19,9,20,24,7,1025,666,3 }
|
||||||
local teleport2GreedOrder = { 1,5,2,4,10,23,8,14,3 }
|
local teleport2GreedOrder = { 1,5,2,4,10,23,8,666,3 }
|
||||||
local teleport2Icons = { "{{Room}}","{{BossRoom}}","{{SuperSecretRoom}}","{{Shop}}","{{TreasureRoom}}","{{SacrificeRoom}}","{{DiceRoom}}","{{Library}}","{{CursedRoom}}","{{MiniBoss}}","{{ChallengeRoom}}","{{IsaacsRoom}}","{{BarrenRoom}}","{{ArcadeRoom}}","{{ChestRoom}}","{{Planetarium}}","{{SecretRoom}}","{{RedRoom}}","{{AngelDevilChance}}","{{ErrorRoom}}" }
|
local teleport2Icons = { [1025] = "{{RedRoom}}", [666] = "{{AngelDevilChance}}" }
|
||||||
local teleport2GreedIcons = { "{{RoomLongVertical}}","{{BossRoom}}","{{Shop}}","{{TreasureRoom}}","{{CursedRoom}}","{{Room}}","{{SuperSecretRoom}}","{{AngelDevilChance}}","{{ErrorRoom}}" }
|
|
||||||
|
|
||||||
local function teleport2Prediction()
|
local function teleport2Prediction()
|
||||||
local level = game:GetLevel()
|
local level = game:GetLevel()
|
||||||
@@ -57,21 +131,23 @@ local function teleport2Prediction()
|
|||||||
|
|
||||||
if not room.Clear then
|
if not room.Clear then
|
||||||
-- Check for Special Red Rooms, which get ordered differently than their non-red version
|
-- 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
|
if REPENTANCE and room.Data.Type ~= 1 and room.Flags & 1024 == 1024 then unclearedTypes[1025] = true
|
||||||
else unclearedTypes[room.Data.Type] = true end
|
else unclearedTypes[room.Data.Type] = true end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
--Angel/Devil Room check (it lives off the map)
|
--Angel/Devil Room check (it lives off the map)
|
||||||
if not level:GetRoomByIdx(-1).Clear then unclearedTypes[14] = true end
|
if not level:GetRoomByIdx(-1).Clear then unclearedTypes[666] = true end
|
||||||
|
|
||||||
local greed = game:IsGreedMode()
|
local greed = game:IsGreedMode()
|
||||||
local roomOrder = (greed and teleport2GreedOrder) or teleport2Order
|
local roomOrder = (greed and teleport2GreedOrder) or teleport2Order
|
||||||
local roomIcons = (greed and teleport2GreedIcons) or teleport2Icons
|
local roomNames = EID:getDescriptionEntry("RoomTypeNames")
|
||||||
local roomNames = (greed and EID:getDescriptionEntry("Teleport2GreedRoomNames")) or EID:getDescriptionEntry("Teleport2RoomNames")
|
|
||||||
|
|
||||||
for i,v in ipairs(roomOrder) do
|
for i,v in ipairs(roomOrder) do
|
||||||
if unclearedTypes[v] then
|
if unclearedTypes[v] then
|
||||||
append("{{Collectible419}}", EID:getObjectName(5, 100, 419) .. EID:getDescriptionEntry("HoldMapHeader"), roomIcons[i] .. " " .. roomNames[i])
|
local descString = (teleport2Icons[v] or EID.RoomTypeToMarkup[v]) .. " " .. roomNames[v]
|
||||||
|
-- Tall Vertical Main Greed Room exception, because why not, attention to detail
|
||||||
|
if v == 1 and greed then descString = "{{RoomLongVertical}} " .. roomNames[v] end
|
||||||
|
append("{{Collectible419}}", EID:getObjectName(5, 100, 419) .. EID:getDescriptionEntry("HoldMapHeader"), descString)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -81,22 +157,23 @@ end
|
|||||||
--order of checking: 15% Pennies, 48% Damage, 58% Hearts, 63% Item, 65% Leviathan, 100% Nothing
|
--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 sanguineResults = { { 0.15, 3 }, { 0.48, 2 }, { 0.58, 4 }, { 0.63, 5 }, { 0.65, 6 }, { 1, 1 } }
|
||||||
|
|
||||||
local function sanguinePrediction()
|
-- this isn't even used in this file anymore, it's in main, but there isn't really a better place to put it yet
|
||||||
|
function EID:trimSanguineDesc(descObj)
|
||||||
|
local currentRoom = game:GetLevel():GetCurrentRoom()
|
||||||
local spikes = currentRoom:GetGridEntity(67)
|
local spikes = currentRoom:GetGridEntity(67)
|
||||||
if not spikes then return end -- don't display anything if we can't find the spikes!
|
if not spikes then return "" end -- don't display anything if we can't find the spikes!
|
||||||
local cheatResult = nil
|
local cheatResult = nil
|
||||||
if spikes and EID.Config["PredictionSanguineBond"] then
|
if spikes and EID.Config["PredictionSanguineBond"] then
|
||||||
local spikeSeed = currentRoom:GetGridEntity(67):GetRNG():GetSeed()
|
local spikeSeed = currentRoom:GetGridEntity(67):GetRNG():GetSeed()
|
||||||
spikeSeed = RNGNext(spikeSeed, 5, 9, 7)
|
spikeSeed = EID:RNGNext(spikeSeed, 5, 9, 7)
|
||||||
spikeSeed = RNGNext(spikeSeed, 1, 5, 0x13)
|
spikeSeed = EID:RNGNext(spikeSeed, 0x01, 0x05, 0x13) -- magic disassembled numbers!
|
||||||
local nextFloat = SeedToFloat(spikeSeed)
|
local nextFloat = EID:SeedToFloat(spikeSeed)
|
||||||
|
|
||||||
for _,v in ipairs(sanguineResults) do
|
for _,v in ipairs(sanguineResults) do
|
||||||
if nextFloat < v[1] then cheatResult = v[2] break end
|
if nextFloat < v[1] then cheatResult = v[2] break end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local descObj = EID:getDescriptionObj(5, 100, 692)
|
|
||||||
local resultsDesc = ""
|
local resultsDesc = ""
|
||||||
|
|
||||||
local lineCount = 0
|
local lineCount = 0
|
||||||
@@ -109,8 +186,7 @@ local function sanguinePrediction()
|
|||||||
resultsDesc = resultsDesc .. w .. "#"
|
resultsDesc = resultsDesc .. w .. "#"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
return resultsDesc
|
||||||
append("{{Collectible692}}", descObj.Name, resultsDesc)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function EID:getHoldMapDescription(player, checkingTwin)
|
function EID:getHoldMapDescription(player, checkingTwin)
|
||||||
@@ -120,6 +196,7 @@ function EID:getHoldMapDescription(player, checkingTwin)
|
|||||||
|
|
||||||
level = game:GetLevel()
|
level = game:GetLevel()
|
||||||
currentRoom = level:GetCurrentRoom()
|
currentRoom = level:GetCurrentRoom()
|
||||||
|
currentPlayer = player
|
||||||
|
|
||||||
-- TODO:
|
-- TODO:
|
||||||
-- D1, crooked penny cheats. 404/liberty cap/etc. "what item is it"
|
-- D1, crooked penny cheats. 404/liberty cap/etc. "what item is it"
|
||||||
@@ -137,9 +214,16 @@ function EID:getHoldMapDescription(player, checkingTwin)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Sanguine Bond Possible Results
|
-- Metronome result
|
||||||
if REPENTANCE and player:HasCollectible(CollectibleType.COLLECTIBLE_SANGUINE_BOND) and game:GetRoom():GetType() == RoomType.ROOM_DEVIL then
|
if player:HasCollectible(CollectibleType.COLLECTIBLE_METRONOME) and EID.Config["ItemReminderShowRNGCheats"] then
|
||||||
sanguinePrediction()
|
blacklist["5.100.488"] = true
|
||||||
|
append("{{Collectible488}}", EID:getObjectName(5,100,488) .. EID:getDescriptionEntry("HoldMapHeader"), EID:MetronomePrediction())
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Teleport! location
|
||||||
|
if player:HasCollectible(CollectibleType.COLLECTIBLE_TELEPORT) and EID.Config["ItemReminderShowRNGCheats"] then
|
||||||
|
blacklist["5.100.44"] = true
|
||||||
|
teleport1Prediction()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Teleport 2.0 location
|
-- Teleport 2.0 location
|
||||||
|
|||||||
+6
-5
@@ -409,6 +409,8 @@ if MCMLoaded then
|
|||||||
EID:AddBooleanSetting("Display", "DisplayDiceInfo", "Dice Room Infos")
|
EID:AddBooleanSetting("Display", "DisplayDiceInfo", "Dice Room Infos")
|
||||||
EID:AddBooleanSetting("Display", "DisplayCraneInfo", "Crane Game Infos", {repOnly = true})
|
EID:AddBooleanSetting("Display", "DisplayCraneInfo", "Crane Game Infos", {repOnly = true})
|
||||||
EID:AddBooleanSetting("Display", "DisplayVoidStatInfo", "Void Stat Increase Infos")
|
EID:AddBooleanSetting("Display", "DisplayVoidStatInfo", "Void Stat Increase Infos")
|
||||||
|
EID:AddBooleanSetting("Display", "DisplaySanguineInfo", "Sanguine Bond Infos", {repOnly = true})
|
||||||
|
EID:AddBooleanSetting("Display", "PredictionSanguineBond", "Predict Sanguine Bond Result", {repOnly = true, infoText = "The next reward from Sanguine Bond can be predicted and highlighted in the description"})
|
||||||
|
|
||||||
local diceSteps = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
local diceSteps = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
||||||
-- Spindown Dice Settings
|
-- Spindown Dice Settings
|
||||||
@@ -545,20 +547,19 @@ if MCMLoaded then
|
|||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
------------------------------Item Reminder--------------------------------
|
------------------------------Item Reminder--------------------------------
|
||||||
|
|
||||||
EID:AddBooleanSetting("Reminder", "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"})
|
EID:AddBooleanSetting("Reminder", "ItemReminderEnabled", "Item Reminder Description", {displayingTab = "",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" }
|
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("Reminder", "BagOfCraftingToggleKey", "Hold to Show", 8, 13, {displayTable = actionToName,
|
EID:AddNumberSetting("Reminder", "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"}})
|
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)",
|
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)" }
|
||||||
"Yes (max 6)", "Yes (max 7)", "Yes (max 8)" }
|
|
||||||
|
|
||||||
MCM.AddSpace("EID", "Reminder")
|
MCM.AddSpace("EID", "Reminder")
|
||||||
MCM.AddText("EID", "Reminder", "Item Descriptions")
|
MCM.AddText("EID", "Reminder", "Item Descriptions")
|
||||||
-- should these be organized in the order they're shown in the map desc code?
|
-- should these be organized in the order they're shown in the map desc code?
|
||||||
EID:AddNumberSetting("Reminder", "ItemReminderShowRecentItem", "Recent Items", 0, 4, { displayTable = itemSlotReminders, infoText = {"Show recently acquired item descriptions in the Item Reminder (good for Curse of the Blind!)"}})
|
EID:AddNumberSetting("Reminder", "ItemReminderShowRecentItem", "Recent Items", 0, 8, { displayTable = itemSlotReminders, infoText = {"Show recently acquired item descriptions in the Item Reminder (good for Curse of the Blind!)"}})
|
||||||
EID:AddNumberSetting("Reminder", "ItemReminderShowActiveDesc", "Active Items", 0, 2, { displayTable = itemSlotReminders, infoText = "Show your active item descriptions in the Item Reminder"})
|
EID:AddNumberSetting("Reminder", "ItemReminderShowActiveDesc", "Active Items", 0, 2, { displayTable = itemSlotReminders, infoText = "Show your active item descriptions in the Item Reminder"})
|
||||||
EID:AddNumberSetting("Reminder", "ItemReminderShowPocketDesc", "Pocket Items", 0, 4, { displayTable = itemSlotReminders, infoText = "Show your pocket item (card, pill, active) descriptions in the Item Reminder"})
|
EID:AddNumberSetting("Reminder", "ItemReminderShowPocketDesc", "Pocket Items", 0, 4, { displayTable = itemSlotReminders, infoText = "Show your pocket item (card, pill, active) descriptions in the Item Reminder"})
|
||||||
EID:AddNumberSetting("Reminder", "ItemReminderShowTrinketDesc", "Trinkets", 0, 2, { displayTable = itemSlotReminders, infoText = "Show your trinket descriptions in the Item Reminder"})
|
EID:AddNumberSetting("Reminder", "ItemReminderShowTrinketDesc", "Trinkets", 0, 2, { displayTable = itemSlotReminders, infoText = "Show your trinket descriptions in the Item Reminder"})
|
||||||
@@ -566,7 +567,7 @@ if MCMLoaded then
|
|||||||
EID:AddNumberSetting("Reminder", "ItemReminderShowPoopDesc", "Poop Spells", 0, 6, { repOnly = true, displayTable = itemSlotReminders, infoText = "Show Tainted ???'s next Poop Spell descriptions in the Item Reminder"})
|
EID:AddNumberSetting("Reminder", "ItemReminderShowPoopDesc", "Poop Spells", 0, 6, { repOnly = true, displayTable = itemSlotReminders, infoText = "Show Tainted ???'s next Poop Spell descriptions in the Item Reminder"})
|
||||||
|
|
||||||
EID:AddBooleanSetting("Reminder", "ItemReminderShowHiddenInfo", "Show Hidden Information", { infoText = "Items like Error (404) or Rainbow Worm can have their current granted item revealed in the Item Reminder"})
|
EID:AddBooleanSetting("Reminder", "ItemReminderShowHiddenInfo", "Show Hidden Information", { infoText = "Items like Error (404) or Rainbow Worm can have their current granted item revealed in the Item Reminder"})
|
||||||
EID:AddBooleanSetting("Reminder", "PredictionSanguineBond", "Highlight Sangine Bond Prediction", { infoText = "Highlights the next payout of Sangine Bond"})
|
EID:AddBooleanSetting("Reminder", "ItemReminderShowRNGCheats", "Show RNG Predictions", { infoText = "Some items can have their next random result predicted and shown in the Item Reminder"})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+8
-4
@@ -5,6 +5,8 @@ EID.TabPreviewID = 0
|
|||||||
EID.inModifierPreview = false
|
EID.inModifierPreview = false
|
||||||
-- The "Hold Map Helper" needs to know if it shouldn't display because we're in a Hold Tab desc
|
-- The "Hold Map Helper" needs to know if it shouldn't display because we're in a Hold Tab desc
|
||||||
EID.TabDescThisFrame = false
|
EID.TabDescThisFrame = false
|
||||||
|
-- ...and likewise we need to know when we're in the Item Reminder (this is getting out of hand)
|
||||||
|
EID.ReminderThisFrame = 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!
|
-- 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, }
|
EID.collectiblesToCheck = { CollectibleType.COLLECTIBLE_VOID, }
|
||||||
@@ -116,8 +118,6 @@ local function VoidCallback(descObj, isRune)
|
|||||||
|
|
||||||
local voidIntro = ((shopItem or isAltOption) and EID:getDescriptionEntry("VoidShopText")) or EID:getDescriptionEntry("VoidText")
|
local voidIntro = ((shopItem or isAltOption) and EID:getDescriptionEntry("VoidShopText")) or EID:getDescriptionEntry("VoidText")
|
||||||
local voidNames = EID:getDescriptionEntry("VoidNames")
|
local voidNames = EID:getDescriptionEntry("VoidNames")
|
||||||
-- Replace "Tears" with "Fire Rate"
|
|
||||||
if REPENTANCE then voidNames[2] = EID:getDescriptionEntry("GlitchedItemText", 1) end
|
|
||||||
|
|
||||||
local eidTable = (isRune and EID.BlackRuneStatIncreases) or EID.VoidStatIncreases
|
local eidTable = (isRune and EID.BlackRuneStatIncreases) or EID.VoidStatIncreases
|
||||||
local increases = ((isAltOption or not descObj.Entity) and eidTable[3]) or (shopItem and eidTable[2]) or eidTable[1]
|
local increases = ((isAltOption or not descObj.Entity) and eidTable[3]) or (shopItem and eidTable[2]) or eidTable[1]
|
||||||
@@ -125,7 +125,11 @@ local function VoidCallback(descObj, isRune)
|
|||||||
EID:appendToDescription(descObj, "#" .. prefix .. voidIntro .. "#")
|
EID:appendToDescription(descObj, "#" .. prefix .. voidIntro .. "#")
|
||||||
for i,v in ipairs(increases) do
|
for i,v in ipairs(increases) do
|
||||||
if v > 0 then
|
if v > 0 then
|
||||||
EID:appendToDescription(descObj, "↑ " .. voidStatIcons[i] .. " +" .. string.format("%.4g",v*voidStatUps[i]) .. " " .. voidNames[i] .. "#")
|
local statIncreaseStr = "↑ " .. voidStatIcons[i] .. " " .. voidNames[i] .. "#"
|
||||||
|
local replaceCount = 0
|
||||||
|
statIncreaseStr, replaceCount = string.gsub(statIncreaseStr, "{1}", "+" .. string.format("%.4g",v*voidStatUps[i]))
|
||||||
|
if replaceCount == 0 then statIncreaseStr = "↑ " .. voidStatIcons[i] .. " +" .. string.format("%.4g",v*voidStatUps[i]) .. " " .. voidNames[i] .. "#" end
|
||||||
|
EID:appendToDescription(descObj, statIncreaseStr)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Print unique synergies with Void and Active Items
|
-- Print unique synergies with Void and Active Items
|
||||||
@@ -318,7 +322,7 @@ if REPENTANCE then
|
|||||||
if hasCarBattery then
|
if hasCarBattery then
|
||||||
EID:appendToDescription(descObj, " (Results with {{Collectible356}})")
|
EID:appendToDescription(descObj, " (Results with {{Collectible356}})")
|
||||||
end
|
end
|
||||||
if firstID ~= 0 and EID.TabPreviewID == 0 then
|
if not EID.ReminderThisFrame and firstID ~= 0 and EID.TabPreviewID == 0 then
|
||||||
EID.TabPreviewID = firstID
|
EID.TabPreviewID = firstID
|
||||||
EID:appendToDescription(descObj, "#{{Blank}} ".. EID:getDescriptionEntry("FlipItemToggleInfo"))
|
EID:appendToDescription(descObj, "#{{Blank}} ".. EID:getDescriptionEntry("FlipItemToggleInfo"))
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ EID.permanentDisplayTextObj = nil
|
|||||||
EID.lastDescriptionEntity = nil
|
EID.lastDescriptionEntity = nil
|
||||||
EID.lineHeight = 11
|
EID.lineHeight = 11
|
||||||
EID.sacrificeCounter = {}
|
EID.sacrificeCounter = {}
|
||||||
|
local spikePos = Vector(320, 280)
|
||||||
EID.itemConfig = Isaac.GetItemConfig()
|
EID.itemConfig = Isaac.GetItemConfig()
|
||||||
EID.itemUnlockStates = {}
|
EID.itemUnlockStates = {}
|
||||||
EID.CraneItemType = {}
|
EID.CraneItemType = {}
|
||||||
@@ -1212,6 +1213,7 @@ local function onRender(t)
|
|||||||
end
|
end
|
||||||
EID.TabPreviewID = 0
|
EID.TabPreviewID = 0
|
||||||
EID.TabDescThisFrame = false
|
EID.TabDescThisFrame = false
|
||||||
|
EID.ReminderThisFrame = false
|
||||||
|
|
||||||
-- If MCM is open, don't show anything unless we're in a tab labeled as "Visuals" or "Crafting"
|
-- 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
|
if ModConfigMenu and ModConfigMenu.IsVisible and ModConfigMenu.Config["Mod Config Menu"].HideHudInMenu and EID.MCMCompat_isDisplayingEIDTab ~= "Visuals" and EID.MCMCompat_isDisplayingEIDTab ~= "Crafting" then
|
||||||
@@ -1292,6 +1294,8 @@ local function onRender(t)
|
|||||||
playerSearch = EID.players
|
playerSearch = EID.players
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local playerNearSacrificeSpikes = false
|
||||||
|
|
||||||
-- Check for descriptions to print per player
|
-- Check for descriptions to print per player
|
||||||
for i,player in ipairs(playerSearch) do
|
for i,player in ipairs(playerSearch) do
|
||||||
local displayedDesc = false
|
local displayedDesc = false
|
||||||
@@ -1335,6 +1339,12 @@ local function onRender(t)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- Test if the player is closer to the center of the room (Sacrifice/Sanguine Spikes) than any other entity
|
||||||
|
-- If there's more Grid Positions we want to check in the future, this could for example be generalized to a gridPosToCheck table which sets closeToGridPos flags
|
||||||
|
local spikeDiff = spikePos:__sub(sourcePos)
|
||||||
|
if EID.lastDist ~= 10000 and spikeDiff:Length() < EID.lastDist then
|
||||||
|
playerNearSacrificeSpikes = true
|
||||||
|
end
|
||||||
|
|
||||||
if EID.Config["DisplayAllNearby"] then
|
if EID.Config["DisplayAllNearby"] then
|
||||||
-- make the closest entity the first to get drawn
|
-- make the closest entity the first to get drawn
|
||||||
@@ -1489,20 +1499,24 @@ local function onRender(t)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- if no entities to display, display Sacrifice Room information
|
-- if no entities to display, or we're close to the spikes, display Sacrifice Room information
|
||||||
-- it will be last priority for the main spot if DisplayAllNearby is on
|
-- it will be last priority for the main spot if DisplayAllNearby is on and we aren't near them
|
||||||
if #EID.descriptionsToPrint == 0 or EID.Config["DisplayAllNearby"] then
|
if (#EID.descriptionsToPrint == 0 or playerNearSacrificeSpikes) or EID.Config["DisplayAllNearby"] then
|
||||||
if game:GetRoom():GetType() == RoomType.ROOM_SACRIFICE and EID.Config["DisplaySacrificeInfo"] then
|
if game:GetRoom():GetType() == RoomType.ROOM_SACRIFICE and EID.Config["DisplaySacrificeInfo"] then
|
||||||
local curRoomIndex = game:GetLevel():GetCurrentRoomIndex()
|
local curRoomIndex = game:GetLevel():GetCurrentRoomIndex()
|
||||||
local curCounter = EID.sacrificeCounter[curRoomIndex] or 1
|
local curCounter = EID.sacrificeCounter[curRoomIndex] or 1
|
||||||
local sacrificeDesc = EID:getDescriptionObj(-999, -1, curCounter)
|
local sacrificeDesc = EID:getDescriptionObj(-999, -1, curCounter)
|
||||||
EID:addDescriptionToPrint(sacrificeDesc)
|
EID:addDescriptionToPrint(sacrificeDesc, playerNearSacrificeSpikes and 1 or nil)
|
||||||
|
elseif REPENTANCE and EID.Config["DisplaySanguineInfo"] and game:GetRoom():GetType() == RoomType.ROOM_DEVIL and EID:PlayersHaveCollectible(CollectibleType.COLLECTIBLE_SANGUINE_BOND) then
|
||||||
|
local sanguineDesc = EID:getDescriptionObj(5, 100, 692, nil, false)
|
||||||
|
sanguineDesc.Description = EID:trimSanguineDesc(sanguineDesc)
|
||||||
|
if sanguineDesc.Description ~= "" then EID:addDescriptionToPrint(sanguineDesc, playerNearSacrificeSpikes and 1 or nil) end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- handle showing the Hold Map Helper description
|
-- handle showing the Hold Map Helper description
|
||||||
if EID.Config["ItemReminderEnabled"] and EID.holdTabCounter >= 30 and EID.TabDescThisFrame == false and EID.holdTabPlayer ~= nil then
|
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+!
|
EID.ReminderThisFrame = true
|
||||||
local demoDescObj = EID:getDescriptionObj(-999, -1, 1)
|
local demoDescObj = EID:getDescriptionObj(-999, -1, 1)
|
||||||
demoDescObj.Name = ""
|
demoDescObj.Name = ""
|
||||||
demoDescObj.Description = EID:getHoldMapDescription(EID.holdTabPlayer)
|
demoDescObj.Description = EID:getHoldMapDescription(EID.holdTabPlayer)
|
||||||
|
|||||||
@@ -125,6 +125,22 @@
|
|||||||
<NullAnimations/>
|
<NullAnimations/>
|
||||||
<Triggers/>
|
<Triggers/>
|
||||||
</Animation>
|
</Animation>
|
||||||
|
<Animation Name="ArrowGray" FrameNum="4" 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="99" YCrop="32" Width="8" Height="11" 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="109" YCrop="32" Width="9" Height="11" 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="119" YCrop="32" Width="8" Height="11" 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="129" YCrop="32" Width="9" Height="11" 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>
|
||||||
<Animation Name="pickups" FrameNum="11" Loop="false">
|
<Animation Name="pickups" FrameNum="11" Loop="false">
|
||||||
<RootAnimation>
|
<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"/>
|
<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"/>
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Reference in new issue
Block a user