Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bffd767d5 | ||
|
|
ee707bbb7a | ||
|
|
7da3ded473 | ||
|
|
82c723b035 | ||
|
|
f18877f3c6 | ||
|
|
0749d41d54 | ||
|
|
3191fe8475 | ||
|
|
3850239cfc | ||
|
|
50e44fcb7e | ||
|
|
be67f4d40e | ||
|
|
ed7baea33d | ||
|
|
2038ec4829 | ||
|
|
9b6fca8ee3 | ||
|
|
f720848082 | ||
|
|
2a357a07b6 | ||
|
|
ced314a94b | ||
|
|
3b2c4cb720 | ||
|
|
908bc74874 | ||
|
|
ac00acc98c | ||
|
|
f81c9b1cb2 | ||
|
|
96a9f85f2a | ||
|
|
23d7033974 | ||
|
|
7786467539 | ||
|
|
7e93159a1c | ||
|
|
0ac8335203 | ||
|
|
b46a34c7fe | ||
|
|
80ee396286 | ||
|
|
0c4fdcc5be |
No files matched your search
@@ -873,7 +873,8 @@ EID.descriptions[languageCode].transformations={
|
||||
---------- MISC ----------
|
||||
|
||||
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!"
|
||||
|
||||
@@ -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"
|
||||
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" }
|
||||
|
||||
-- https://wofsauge.github.io/IsaacDocs/rep/enums/RoomType.html
|
||||
-- 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
|
||||
[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
|
||||
[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
|
||||
[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
|
||||
@@ -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
|
||||
[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
|
||||
[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
|
||||
[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
|
||||
@@ -1066,7 +1066,7 @@ EID.descriptions[languageCode].poopSpells = {
|
||||
|
||||
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].VoidNames[2] = "{1} Fire Rate up"
|
||||
|
||||
EID.descriptions[languageCode].spindownError = "Item disappears"
|
||||
|
||||
|
||||
+5
-4
@@ -1711,10 +1711,11 @@ function EID:AddIconToObject(eType, eVariant, eSubType, iconName)
|
||||
end
|
||||
|
||||
-- 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)
|
||||
rngNum = rngNum ~ ((rngNum >> shift1) & 4294967295)
|
||||
rngNum = rngNum ~ ((rngNum << shift2) & 4294967295)
|
||||
rngNum = rngNum ~ ((rngNum >> shift3) & 4294967295)
|
||||
rngNum = rngNum ~ ((rngNum >> (shift1 or 5)) & 4294967295)
|
||||
rngNum = rngNum ~ ((rngNum << (shift2 or 9)) & 4294967295)
|
||||
rngNum = rngNum ~ ((rngNum >> (shift3 or 7)) & 4294967295)
|
||||
return rngNum >> 0;
|
||||
end
|
||||
|
||||
@@ -1722,4 +1723,4 @@ end
|
||||
function EID:SeedToFloat(seed)
|
||||
local multi = 2.3283061589829401E-10;
|
||||
return seed * multi;
|
||||
end
|
||||
end
|
||||
@@ -217,6 +217,7 @@ local recheckPickups = false
|
||||
local customRNGSeed = 0x77777770
|
||||
local customRNGShift = {0,0,0}
|
||||
|
||||
-- Use local RNG functions to possibly reduce processing time a little bit
|
||||
local function RNGNext()
|
||||
local num = customRNGSeed
|
||||
num = num ~ ((num >> customRNGShift[1]) & 4294967295)
|
||||
@@ -542,7 +543,9 @@ local function GameStartCrafting()
|
||||
for i=1,EID.XMLMaxItemID do itemPool:AddRoomBlacklist(i) end
|
||||
|
||||
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})
|
||||
itemPool:AddRoomBlacklist(collID)
|
||||
collID = itemPool:GetCollectible(poolNum, false, 1, 25)
|
||||
|
||||
+16
-3
@@ -264,6 +264,17 @@ EID.UserConfig = {
|
||||
-- Default = 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 ----------
|
||||
|
||||
-- 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
|
||||
-- Default = 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
|
||||
["PredictionSanguineBond"] = false,
|
||||
["ItemReminderShowRNGCheats"] = false,
|
||||
|
||||
|
||||
---------- Bag of Crafting ------------
|
||||
@@ -513,6 +524,8 @@ EID.DefaultConfig = {
|
||||
["ShowUnidentifiedPillDescriptions"] = false,
|
||||
["DisplayGlitchedItemInfo"] = debug and true or false,
|
||||
["DisplaySacrificeInfo"] = true,
|
||||
["DisplaySanguineInfo"] = true,
|
||||
["PredictionSanguineBond"] = false,
|
||||
["DisplayDiceInfo"] = true,
|
||||
["DisplayBagOfCrafting"] = "always",
|
||||
["DisplayCraneInfo"] = true,
|
||||
@@ -538,7 +551,7 @@ EID.DefaultConfig = {
|
||||
["ItemReminderShowTrinketDesc"] = 2,
|
||||
["ItemReminderShowPoopDesc"] = 1,
|
||||
["ItemReminderShowHiddenInfo"] = false,
|
||||
["PredictionSanguineBond"] = false,
|
||||
["ItemReminderShowRNGCheats"] = false,
|
||||
|
||||
["SpindownDiceResults"] = 3,
|
||||
["SpindownDiceDisplayID"] = false,
|
||||
|
||||
@@ -133,6 +133,12 @@ EID.InlineIcons = {
|
||||
["ArrowDown"] = {"ArrowDown", 0, 10, 9, 1},
|
||||
["Warning"] = {"Warning", 0, 10, 9, 3},
|
||||
["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(_)
|
||||
EID._NextIconModifier = function(sprite)
|
||||
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.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 blacklist
|
||||
local holdMapDesc
|
||||
local currentPlayer
|
||||
|
||||
-- Rainbow Worm's trinket IDs it grants, in order
|
||||
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
|
||||
|
||||
-- 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;
|
||||
-- Banned items: Metronome, Plan C, Glowing Hour Glass, Breath of Life, Clicker, R Key
|
||||
-- Reduced chance: Death Certificate (15%), Genesis (25%)
|
||||
-- I saw something in the code about rerolling Forget Me Now but not sure what the criteria was
|
||||
local metronomeBlacklist = {[488] = 1, [475] = 1, [422] = 1} --AB+ can choose Clicker lol rip
|
||||
if REPENTANCE then metronomeBlacklist = {[488] = 1, [475] = 1, [422] = 1, [326] = 1, [482] = 1, [636] = 1, [628] = 0.85, [622] = 0.75 } end
|
||||
|
||||
-- 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
|
||||
local function SeedToFloat(seed)
|
||||
local multi = 2.3283061589829401E-10;
|
||||
return seed * multi;
|
||||
|
||||
-- Teleport! Destination Prediction --
|
||||
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
|
||||
|
||||
-- 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 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,666,3 }
|
||||
local teleport2Icons = { [1025] = "{{RedRoom}}", [666] = "{{AngelDevilChance}}" }
|
||||
|
||||
local function teleport2Prediction()
|
||||
local level = game:GetLevel()
|
||||
@@ -57,21 +131,23 @@ local function teleport2Prediction()
|
||||
|
||||
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
|
||||
if REPENTANCE and room.Data.Type ~= 1 and room.Flags & 1024 == 1024 then unclearedTypes[1025] = 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
|
||||
if not level:GetRoomByIdx(-1).Clear then unclearedTypes[666] = 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")
|
||||
local roomNames = EID:getDescriptionEntry("RoomTypeNames")
|
||||
|
||||
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])
|
||||
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
|
||||
end
|
||||
end
|
||||
@@ -81,22 +157,23 @@ end
|
||||
--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()
|
||||
-- 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)
|
||||
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
|
||||
if spikes and EID.Config["PredictionSanguineBond"] then
|
||||
local spikeSeed = currentRoom:GetGridEntity(67):GetRNG():GetSeed()
|
||||
spikeSeed = RNGNext(spikeSeed, 5, 9, 7)
|
||||
spikeSeed = RNGNext(spikeSeed, 1, 5, 0x13)
|
||||
local nextFloat = SeedToFloat(spikeSeed)
|
||||
spikeSeed = EID:RNGNext(spikeSeed, 5, 9, 7)
|
||||
spikeSeed = EID:RNGNext(spikeSeed, 0x01, 0x05, 0x13) -- magic disassembled numbers!
|
||||
local nextFloat = EID: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
|
||||
@@ -109,8 +186,7 @@ local function sanguinePrediction()
|
||||
resultsDesc = resultsDesc .. w .. "#"
|
||||
end
|
||||
end
|
||||
|
||||
append("{{Collectible692}}", descObj.Name, resultsDesc)
|
||||
return resultsDesc
|
||||
end
|
||||
|
||||
function EID:getHoldMapDescription(player, checkingTwin)
|
||||
@@ -120,6 +196,7 @@ function EID:getHoldMapDescription(player, checkingTwin)
|
||||
|
||||
level = game:GetLevel()
|
||||
currentRoom = level:GetCurrentRoom()
|
||||
currentPlayer = player
|
||||
|
||||
-- TODO:
|
||||
-- D1, crooked penny cheats. 404/liberty cap/etc. "what item is it"
|
||||
@@ -137,9 +214,16 @@ function EID:getHoldMapDescription(player, checkingTwin)
|
||||
end
|
||||
end
|
||||
|
||||
-- Sanguine Bond Possible Results
|
||||
if REPENTANCE and player:HasCollectible(CollectibleType.COLLECTIBLE_SANGUINE_BOND) and game:GetRoom():GetType() == RoomType.ROOM_DEVIL then
|
||||
sanguinePrediction()
|
||||
-- Metronome result
|
||||
if player:HasCollectible(CollectibleType.COLLECTIBLE_METRONOME) and EID.Config["ItemReminderShowRNGCheats"] then
|
||||
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
|
||||
|
||||
-- Teleport 2.0 location
|
||||
|
||||
+6
-5
@@ -409,6 +409,8 @@ if MCMLoaded then
|
||||
EID:AddBooleanSetting("Display", "DisplayDiceInfo", "Dice Room Infos")
|
||||
EID:AddBooleanSetting("Display", "DisplayCraneInfo", "Crane Game Infos", {repOnly = true})
|
||||
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}
|
||||
-- Spindown Dice Settings
|
||||
@@ -545,20 +547,19 @@ if MCMLoaded then
|
||||
---------------------------------------------------------------------------
|
||||
------------------------------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" }
|
||||
|
||||
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"}})
|
||||
|
||||
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)" }
|
||||
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)" }
|
||||
|
||||
MCM.AddSpace("EID", "Reminder")
|
||||
MCM.AddText("EID", "Reminder", "Item Descriptions")
|
||||
-- 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", "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"})
|
||||
@@ -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: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
|
||||
-- The "Hold Map Helper" needs to know if it shouldn't display because we're in a Hold Tab desc
|
||||
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!
|
||||
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 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 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 .. "#")
|
||||
for i,v in ipairs(increases) do
|
||||
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
|
||||
-- Print unique synergies with Void and Active Items
|
||||
@@ -318,7 +322,7 @@ if REPENTANCE then
|
||||
if hasCarBattery then
|
||||
EID:appendToDescription(descObj, " (Results with {{Collectible356}})")
|
||||
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:appendToDescription(descObj, "#{{Blank}} ".. EID:getDescriptionEntry("FlipItemToggleInfo"))
|
||||
end
|
||||
|
||||
@@ -9,7 +9,7 @@ local game = Game()
|
||||
require("eid_config")
|
||||
EID.Config = EID.UserConfig
|
||||
EID.Config.Version = "3.2" -- note: changing this will reset everyone's settings to default!
|
||||
EID.ModVersion = "4.33"
|
||||
EID.ModVersion = "4.34"
|
||||
EID.DefaultConfig.Version = EID.Config.Version
|
||||
EID.isHidden = false
|
||||
EID.player = nil -- The primary Player Entity of Player 1
|
||||
@@ -30,6 +30,7 @@ EID.permanentDisplayTextObj = nil
|
||||
EID.lastDescriptionEntity = nil
|
||||
EID.lineHeight = 11
|
||||
EID.sacrificeCounter = {}
|
||||
local spikePos = Vector(320, 280)
|
||||
EID.itemConfig = Isaac.GetItemConfig()
|
||||
EID.itemUnlockStates = {}
|
||||
EID.CraneItemType = {}
|
||||
@@ -1212,6 +1213,7 @@ local function onRender(t)
|
||||
end
|
||||
EID.TabPreviewID = 0
|
||||
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 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
|
||||
end
|
||||
|
||||
local playerNearSacrificeSpikes = false
|
||||
|
||||
-- Check for descriptions to print per player
|
||||
for i,player in ipairs(playerSearch) do
|
||||
local displayedDesc = false
|
||||
@@ -1335,6 +1339,12 @@ local function onRender(t)
|
||||
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
|
||||
-- make the closest entity the first to get drawn
|
||||
@@ -1489,20 +1499,24 @@ local function onRender(t)
|
||||
end
|
||||
end
|
||||
|
||||
-- if no entities to display, display Sacrifice Room information
|
||||
-- it will be last priority for the main spot if DisplayAllNearby is on
|
||||
if #EID.descriptionsToPrint == 0 or EID.Config["DisplayAllNearby"] then
|
||||
-- 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 and we aren't near them
|
||||
if (#EID.descriptionsToPrint == 0 or playerNearSacrificeSpikes) or EID.Config["DisplayAllNearby"] then
|
||||
if game:GetRoom():GetType() == RoomType.ROOM_SACRIFICE and EID.Config["DisplaySacrificeInfo"] then
|
||||
local curRoomIndex = game:GetLevel():GetCurrentRoomIndex()
|
||||
local curCounter = EID.sacrificeCounter[curRoomIndex] or 1
|
||||
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
|
||||
|
||||
-- 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+!
|
||||
EID.ReminderThisFrame = true
|
||||
local demoDescObj = EID:getDescriptionObj(-999, -1, 1)
|
||||
demoDescObj.Name = ""
|
||||
demoDescObj.Description = EID:getHoldMapDescription(EID.holdTabPlayer)
|
||||
@@ -1556,7 +1570,8 @@ EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, OnGameStartGeneral)
|
||||
|
||||
-- Add currently held active items after D4 was used. Used for Transformation Progress
|
||||
local function OnUseD4(_, _, _, player)
|
||||
AddActiveItemProgress(player, true)
|
||||
-- in AB+, USE_ITEM doesn't provide a player
|
||||
AddActiveItemProgress(player or EID.player, true)
|
||||
end
|
||||
EID:AddCallback(ModCallbacks.MC_USE_ITEM, OnUseD4, CollectibleType.COLLECTIBLE_D4)
|
||||
|
||||
|
||||
+1
-1
@@ -113,7 +113,7 @@ https://moddingofisaac.com/mod/1079/external-item-descriptions
|
||||
- prefab for the incredible [b]Japanese[/b] language pack
|
||||
- domcizzz for the cool [b]Czech[/b] language pack
|
||||
- [url=https://steamcommunity.com/id/whytefang/]adc[/url] for creating an awesome new Languagepack and providing ideas for new functionalities</description>
|
||||
<version>4.33</version>
|
||||
<version>4.34</version>
|
||||
<visibility>Public</visibility>
|
||||
<tag id="Lua"/>
|
||||
<tag id="Items"/>
|
||||
|
||||
@@ -125,6 +125,22 @@
|
||||
<NullAnimations/>
|
||||
<Triggers/>
|
||||
</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">
|
||||
<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"/>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Reference in new issue
Block a user