Merge pull request #253 from Buurazu/master
Preview Only crafting display mode and other things
This commit is contained in:
7 files changed
+230
-218
No files matched your search
@@ -66,7 +66,7 @@ EID.descriptions["en_us"].collectibles={
|
|||||||
{"51", "Pentagram", "↑ +1 Damage up#↑ +10% Devil/Angel Room chance"},
|
{"51", "Pentagram", "↑ +1 Damage up#↑ +10% Devil/Angel Room chance"},
|
||||||
{"52", "Dr. Fetus", "Bomb tears#Each bomb deals 5x your damage + 30#↓ Tear Delay x 2.5"},
|
{"52", "Dr. Fetus", "Bomb tears#Each bomb deals 5x your damage + 30#↓ Tear Delay x 2.5"},
|
||||||
{"53", "Magneto", "Magnetic attraction for pickups"},
|
{"53", "Magneto", "Magnetic attraction for pickups"},
|
||||||
{"54", "Treasure Map", "Reveals the floor-layout"},
|
{"54", "Treasure Map", "Reveals the floor layout#Does not show room icons"},
|
||||||
{"55", "Mom's Eye", "Chance to shoot a tear backwards#Chance is 100% at 2 Luck"},
|
{"55", "Mom's Eye", "Chance to shoot a tear backwards#Chance is 100% at 2 Luck"},
|
||||||
{"56", "Lemon Mishap", "Drop a pool of lemonade#Deals 66 contact damage per second"},
|
{"56", "Lemon Mishap", "Drop a pool of lemonade#Deals 66 contact damage per second"},
|
||||||
{"57", "Distant Admiration", "Mid-range fly orbital#Deals 75 contact damage per second"},
|
{"57", "Distant Admiration", "Mid-range fly orbital#Deals 75 contact damage per second"},
|
||||||
@@ -385,7 +385,7 @@ EID.descriptions["en_us"].collectibles={
|
|||||||
{"370", "Mr. Dolly", "↑ +0.7 Tears up#↑ +5.25 Range up#↑ +0.5 Tear Height#Spawns 3 random hearts when picked up"},
|
{"370", "Mr. Dolly", "↑ +0.7 Tears up#↑ +5.25 Range up#↑ +0.5 Tear Height#Spawns 3 random hearts when picked up"},
|
||||||
{"371", "Curse of the Tower", "Spawn 6 troll bombs every time you get hit#These are affected by bomb items"},
|
{"371", "Curse of the Tower", "Spawn 6 troll bombs every time you get hit#These are affected by bomb items"},
|
||||||
{"372", "Charged Baby", "Random chance to drop a battery or freeze all enemies in the room#Chance to add one charge to your active item"},
|
{"372", "Charged Baby", "Random chance to drop a battery or freeze all enemies in the room#Chance to add one charge to your active item"},
|
||||||
{"373", "Dead Eye", "↑ +12.5% damage up for every tear that successfully hits an enemy(max. +100%)"},
|
{"373", "Dead Eye", "↑ +25% Damage up for every tear that successfully hits an enemy (max +100%)#Chance to lose the multiplier when you miss"},
|
||||||
{"374", "Holy Light", "Random chance to fire a Holy tear, which will spawn a beam of light on hit#The beam deals 4x your damage"},
|
{"374", "Holy Light", "Random chance to fire a Holy tear, which will spawn a beam of light on hit#The beam deals 4x your damage"},
|
||||||
{"375", "Host Hat", "Grants explosion immunity and immunity from Mom's and Satan's foot stomps#20% chance to block tears"},
|
{"375", "Host Hat", "Grants explosion immunity and immunity from Mom's and Satan's foot stomps#20% chance to block tears"},
|
||||||
{"376", "Restock", "Spawns 3 random Pickups#Shops instantly restock their items when you buy them"},
|
{"376", "Restock", "Spawns 3 random Pickups#Shops instantly restock their items when you buy them"},
|
||||||
@@ -518,9 +518,9 @@ EID.descriptions["en_us"].collectibles={
|
|||||||
{"503", "Little Horn", "Chance to fire tears that instantly kill enemies#Running into enemies will deal 3.5 damage to them"},
|
{"503", "Little Horn", "Chance to fire tears that instantly kill enemies#Running into enemies will deal 3.5 damage to them"},
|
||||||
{"504", "Brown Nugget", "Spawns a fly turret that shoots at enemies#Each shot deals 2 damage"},
|
{"504", "Brown Nugget", "Spawns a fly turret that shoots at enemies#Each shot deals 2 damage"},
|
||||||
{"505", "Poke Go", "Chance to spawn a charmed enemy when entering a hostile room"},
|
{"505", "Poke Go", "Chance to spawn a charmed enemy when entering a hostile room"},
|
||||||
{"506", "Backstabber", "Tears can cause bleeding, which deals 10% damage of the enemies total health every 5 seconds"},
|
{"506", "Backstabber", "If tears hit an enemy in the back, they do double damage and cause bleeding, which deals 10% damage of the enemy's max health every 5 seconds"},
|
||||||
{"507", "Sharp Straw", "Deals your damage + 10% damage equal to the maximum health of the enemy#Affects all enemies in the room#Chance to drop half hearts when it deals damage"},
|
{"507", "Sharp Straw", "Deals your damage + 10% of the enemy's max health#Affects all enemies in the room#Chance to drop half hearts when it deals damage"},
|
||||||
{"508", "Mom's Razor", "Orbital that causes bleeding, which deals 10% damage of the enemy's total health every 5 seconds#Deals 300% your damage on contact per second"},
|
{"508", "Mom's Razor", "Orbital that causes bleeding, which deals 10% damage of the enemy's max health every 5 seconds#Deals 300% your damage on contact per second#Does not block shots"},
|
||||||
{"509", "Bloodshot Eye", "Orbital that shoots a tear every 2 seconds in a random direction#Deals 3.5 damage per tear#Deals 30 contact damage per second"},
|
{"509", "Bloodshot Eye", "Orbital that shoots a tear every 2 seconds in a random direction#Deals 3.5 damage per tear#Deals 30 contact damage per second"},
|
||||||
{"510", "Delirious", "Spawns a friendly white delirium version of a boss for the current room"},
|
{"510", "Delirious", "Spawns a friendly white delirium version of a boss for the current room"},
|
||||||
{"511", "Angry Fly", "Orbits around a random enemy until that enemy dies#Deals 30 contact damage per second to other enemies"},
|
{"511", "Angry Fly", "Orbits around a random enemy until that enemy dies#Deals 30 contact damage per second to other enemies"},
|
||||||
@@ -537,7 +537,7 @@ EID.descriptions["en_us"].collectibles={
|
|||||||
{"522", "Telekinesis", "Enemy projectiles close to you are held in place for 3 seconds#They get thrown away from you afterwards#Recharges after 3 seconds"},
|
{"522", "Telekinesis", "Enemy projectiles close to you are held in place for 3 seconds#They get thrown away from you afterwards#Recharges after 3 seconds"},
|
||||||
{"523", "Moving Box", "When used, stores all pickups from the current room#Using it again will put them back on the floor again#This allows you to move things between rooms"},
|
{"523", "Moving Box", "When used, stores all pickups from the current room#Using it again will put them back on the floor again#This allows you to move things between rooms"},
|
||||||
{"524", "Technology Zero", "Tears will be connected with beams of electricity#Electricity damage equals your damage"},
|
{"524", "Technology Zero", "Tears will be connected with beams of electricity#Electricity damage equals your damage"},
|
||||||
{"525", "Leprosy", "Taking damage will spawn a projectile blocking orbital#Max. 3 Orbitals at the same time#Orbitals are destroyed, if they take too much damage"},
|
{"525", "Leprosy", "Taking damage will spawn a projectile blocking orbital#Max 3 orbitals at the same time#Orbitals are destroyed if they take too much damage"},
|
||||||
{"526", "7 Seals", "Spawns small horsemen familiars that spawn their respective locusts#Horsemen changes every 10 seconds"},
|
{"526", "7 Seals", "Spawns small horsemen familiars that spawn their respective locusts#Horsemen changes every 10 seconds"},
|
||||||
{"527", "Mr. ME!", "!!! Familiar that can do tasks for you:#Opening doors & chests, Bring items, Steal from the shop / Devil, fight enemies, explode, and activate pressure plates"},
|
{"527", "Mr. ME!", "!!! Familiar that can do tasks for you:#Opening doors & chests, Bring items, Steal from the shop / Devil, fight enemies, explode, and activate pressure plates"},
|
||||||
{"528", "Angelic Prism", "Orbital prism#Tears hitting it will split into 4"},
|
{"528", "Angelic Prism", "Orbital prism#Tears hitting it will split into 4"},
|
||||||
@@ -628,7 +628,7 @@ EID.descriptions["en_us"].trinkets={
|
|||||||
{"57", "???'s Soul", "Familiar that bounces around the room#Shoots in the same direction as the player#Deals 3.5 damage per tear"},
|
{"57", "???'s Soul", "Familiar that bounces around the room#Shoots in the same direction as the player#Deals 3.5 damage per tear"},
|
||||||
{"58", "Samson's Lock", "↑ 1/15 Chance for +0.5 Damage up when killing an enemy#Effect lasts for current room"},
|
{"58", "Samson's Lock", "↑ 1/15 Chance for +0.5 Damage up when killing an enemy#Effect lasts for current room"},
|
||||||
{"59", "Cain's Eye", "25% chance to reveal map icons at start of new floor"},
|
{"59", "Cain's Eye", "25% chance to reveal map icons at start of new floor"},
|
||||||
{"60", "Eve's Bird Foot", "Chance to spawn a dead bird when killing an enemy"},
|
{"60", "Eve's Bird Foot", "Chance to spawn a {{Collectible117}}Dead Bird when killing an enemy"},
|
||||||
{"61", "The Left Hand", "Turns all chests into red chests"},
|
{"61", "The Left Hand", "Turns all chests into red chests"},
|
||||||
{"62", "Shiny Rock", "Crawlspace rocks and tinted rocks blink every 10 seconds"},
|
{"62", "Shiny Rock", "Crawlspace rocks and tinted rocks blink every 10 seconds"},
|
||||||
{"63", "Safety Scissors", "Turns troll bombs into bomb pickups"},
|
{"63", "Safety Scissors", "Turns troll bombs into bomb pickups"},
|
||||||
|
|||||||
@@ -186,6 +186,7 @@ local repCollectibles={
|
|||||||
[503] = {"503", "Little Horn", "Chance to fire tears that summon a Big Horn hand#The hand kills enemies instantly and deals damage to bosses#Running into enemies will deal 3.5 damage to them"}, -- Little Horn
|
[503] = {"503", "Little Horn", "Chance to fire tears that summon a Big Horn hand#The hand kills enemies instantly and deals damage to bosses#Running into enemies will deal 3.5 damage to them"}, -- Little Horn
|
||||||
[504] = {"504", "Brown Nugget", "Spawns a fly turret that shoots at enemies#Each shot deals 3.5 damage"}, -- Brown Nugget
|
[504] = {"504", "Brown Nugget", "Spawns a fly turret that shoots at enemies#Each shot deals 3.5 damage"}, -- Brown Nugget
|
||||||
[509] = {"509", "Bloodshot Eye", "Orbital that shoots a tear every 1/3rd second when enemy is nearby#Deals 3.5 damage per tear#Deals 30 contact damage per second"}, -- Bloodshot Eye
|
[509] = {"509", "Bloodshot Eye", "Orbital that shoots a tear every 1/3rd second when enemy is nearby#Deals 3.5 damage per tear#Deals 30 contact damage per second"}, -- Bloodshot Eye
|
||||||
|
[517] = {"517", "Fast Bombs", "+7 Bombs#Allows you to rapidly place bombs on the ground#Bombs don't knockback each other"}, -- Fast Bombs
|
||||||
[523] = {"523", "Moving Box", "When used, stores up to 10 pickups from the current room#Using it again will put them back on the floor again#This allows you to move things between rooms"}, -- Moving Box
|
[523] = {"523", "Moving Box", "When used, stores up to 10 pickups from the current room#Using it again will put them back on the floor again#This allows you to move things between rooms"}, -- Moving Box
|
||||||
[524] = {"524", "Technology Zero", "Tears will be connected with beams of electricity#Electricity damage equals 1/3 of your damage"}, -- Technology Zero
|
[524] = {"524", "Technology Zero", "Tears will be connected with beams of electricity#Electricity damage equals 1/3 of your damage"}, -- Technology Zero
|
||||||
[531] = {"531", "Haemolacria", "Tears fly in an arc#Tears burst into smaller tears on impact#↓ Tears down#↑ +50% Damage up#↑ +1 additional Damage up"}, -- Haemolacria
|
[531] = {"531", "Haemolacria", "Tears fly in an arc#Tears burst into smaller tears on impact#↓ Tears down#↑ +50% Damage up#↑ +1 additional Damage up"}, -- Haemolacria
|
||||||
@@ -578,7 +579,7 @@ EID.descriptions["en_us"].tarotClothBuffs = {
|
|||||||
[7] = {"7", "", "Spawns 3 Red Hearts"}, -- VI - The Lovers
|
[7] = {"7", "", "Spawns 3 Red Hearts"}, -- VI - The Lovers
|
||||||
[8] = {"8", "", "Doubled duration"}, -- VII - The Chariot
|
[8] = {"8", "", "Doubled duration"}, -- VII - The Chariot
|
||||||
[9] = {"9", "", "Doubled pickup spawns"}, -- VIII - Justice
|
[9] = {"9", "", "Doubled pickup spawns"}, -- VIII - Justice
|
||||||
[10] = {"10", "", "Prevents Greed from spawning in the shop#Turns shop into a normal shop if greed was already fought in it"}, -- IX - The Hermit
|
[10] = {"10", "", "Prevents Greed from spawning in the shop#Turns shop into a normal shop if Greed was already fought in it"}, -- IX - The Hermit
|
||||||
[11] = {"11", "", "Spawns 2 Slot Machines"}, -- X - Wheel of Fortune
|
[11] = {"11", "", "Spawns 2 Slot Machines"}, -- X - Wheel of Fortune
|
||||||
[12] = {"12", "", "Doubled stat increase, excluding dmg multiplier"}, -- XI - Strength
|
[12] = {"12", "", "Doubled stat increase, excluding dmg multiplier"}, -- XI - Strength
|
||||||
[14] = {"14", "", "Deals 80 damage"}, -- XIII - Death
|
[14] = {"14", "", "Deals 80 damage"}, -- XIII - Death
|
||||||
@@ -904,6 +905,7 @@ EID.descriptions["en_us"].CraftingBestQuality = "Best Quality:"
|
|||||||
|
|
||||||
EID.descriptions["en_us"].CraftingHideKey = "Hide:"
|
EID.descriptions["en_us"].CraftingHideKey = "Hide:"
|
||||||
EID.descriptions["en_us"].CraftingPreviewKey = "Preview:"
|
EID.descriptions["en_us"].CraftingPreviewKey = "Preview:"
|
||||||
|
EID.descriptions["en_us"].CraftingPreviewBackup = "!!! If this item's locked, it will turn into"
|
||||||
|
|
||||||
EID.descriptions["en_us"].CraftingResults = "(Scroll: hold {{CONFIG_BoC_Toggle}} + {{ButtonY}} {{ButtonA}},#Lock: {{ButtonX}}, Refresh: {{ButtonB}})"
|
EID.descriptions["en_us"].CraftingResults = "(Scroll: hold {{CONFIG_BoC_Toggle}} + {{ButtonY}} {{ButtonA}},#Lock: {{ButtonX}}, Refresh: {{ButtonB}})"
|
||||||
|
|
||||||
|
|||||||
+16
-3
@@ -782,9 +782,22 @@ function EID:GetMaxCollectibleID()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local maxCollectibleID = nil
|
local maxCollectibleID = nil
|
||||||
|
function EID:DetectModdedItems()
|
||||||
|
if maxCollectibleID == nil then
|
||||||
|
maxCollectibleID = EID:GetMaxCollectibleID()
|
||||||
|
end
|
||||||
|
if maxCollectibleID > EID.XMLMaxItemID then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
if EID.itemConfig:GetCollectible(EID.XMLMaxItemID) == nil then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
function EID:isCollectibleUnlocked(collectibleID, itemPoolOfItem)
|
function EID:isCollectibleUnlocked(collectibleID, itemPoolOfItem)
|
||||||
local itemPool = Game():GetItemPool()
|
local itemPool = Game():GetItemPool()
|
||||||
if (not maxCollectibleID) then maxCollectibleID = EID:GetMaxCollectibleID() end
|
if maxCollectibleID == nil then maxCollectibleID = EID:GetMaxCollectibleID() end
|
||||||
for i= 1, maxCollectibleID do
|
for i= 1, maxCollectibleID do
|
||||||
if ItemConfig.Config.IsValidCollectible(i) and i ~= collectibleID then
|
if ItemConfig.Config.IsValidCollectible(i) and i ~= collectibleID then
|
||||||
itemPool:AddRoomBlacklist(i)
|
itemPool:AddRoomBlacklist(i)
|
||||||
@@ -861,14 +874,14 @@ function EID:tableToCraftingIconsMerged(craftTable, indicateCompleteContent)
|
|||||||
local iconString = ""
|
local iconString = ""
|
||||||
for nr,count in ipairs(filteredList) do
|
for nr,count in ipairs(filteredList) do
|
||||||
if (count > 0) then
|
if (count > 0) then
|
||||||
local completedColoring = indicateCompleteContent and EID:bagContaingsItem(nr, count) and "{{ColorBagComplete}}" or ""
|
local completedColoring = indicateCompleteContent and EID:bagContainsItem(nr, count) and "{{ColorBagComplete}}" or ""
|
||||||
iconString = iconString..completedColoring..count.."{{Crafting"..nr.."}}{{CR}}"
|
iconString = iconString..completedColoring..count.."{{Crafting"..nr.."}}{{CR}}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return iconString
|
return iconString
|
||||||
end
|
end
|
||||||
|
|
||||||
function EID:bagContaingsItem(itemID, itemCount)
|
function EID:bagContainsItem(itemID, itemCount)
|
||||||
local foundCount = 0
|
local foundCount = 0
|
||||||
for _, bagItem in ipairs(EID.BagItems) do
|
for _, bagItem in ipairs(EID.BagItems) do
|
||||||
if bagItem == itemID then
|
if bagItem == itemID then
|
||||||
|
|||||||
+138
-165
@@ -528,10 +528,10 @@ local function trackBagHolding()
|
|||||||
if isCardHold and string.match(animationName, "PickupWalk") and #EID.BagItems>=8 then
|
if isCardHold and string.match(animationName, "PickupWalk") and #EID.BagItems>=8 then
|
||||||
holdCounter = holdCounter + 1
|
holdCounter = holdCounter + 1
|
||||||
if holdCounter < 30 then
|
if holdCounter < 30 then
|
||||||
EID.icount = EID.player:GetCollectibleCount()
|
icount = EID.player:GetCollectibleCount()
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if isCardHold and holdCounter >= 30 and (string.match(animationName, "Walk") and not string.match(animationName, "Pickup") or (EID.player:GetCollectibleCount() ~= EID.icount)) then
|
if isCardHold and holdCounter >= 30 and (string.match(animationName, "Walk") and not string.match(animationName, "Pickup") or (EID.player:GetCollectibleCount() ~= icount)) then
|
||||||
EID.BagItems = {}
|
EID.BagItems = {}
|
||||||
else
|
else
|
||||||
holdCounter = 0
|
holdCounter = 0
|
||||||
@@ -574,37 +574,23 @@ local randResultCache = {}
|
|||||||
local calcResultCache = {}
|
local calcResultCache = {}
|
||||||
local numResults = 0
|
local numResults = 0
|
||||||
|
|
||||||
EID.bagOfCraftingOffset = 0
|
--these aren't local so that they can be saved and reloaded, or cleared in the Mod Config Menu
|
||||||
EID.bagOfCraftingCurPickupCount = -1
|
EID.bagOfCraftingCurPickupCount = -1
|
||||||
EID.bagOfCraftingRoomQueries = {}
|
EID.bagOfCraftingRoomQueries = {}
|
||||||
EID.bagOfCraftingFloorQuery = {}
|
EID.bagOfCraftingFloorQuery = {}
|
||||||
EID.BagItems = {}
|
EID.BagItems = {}
|
||||||
EID.icount = 0
|
|
||||||
|
|
||||||
EID.lockedResults = nil
|
local icount = 0
|
||||||
EID.refreshNextTick = false
|
local bagOfCraftingOffset = 0
|
||||||
EID.refreshPosition = 0
|
local lockedResults = nil
|
||||||
EID.bagOfCraftingRefreshes = 0
|
local refreshNextTick = false
|
||||||
EID.downHeld = 0
|
local refreshPosition = 0
|
||||||
EID.upHeld = 0
|
local bagOfCraftingRefreshes = 0
|
||||||
|
local downHeld = 0
|
||||||
|
local upHeld = 0
|
||||||
|
|
||||||
EID.craftingIsHidden = false
|
local craftingIsHidden = false
|
||||||
EID.showCraftingResult = false
|
local showCraftingResult = false
|
||||||
|
|
||||||
local maxItemID = nil
|
|
||||||
|
|
||||||
function EID:DetectModdedItems()
|
|
||||||
if maxItemID == nil then
|
|
||||||
maxItemID = EID:GetMaxCollectibleID()
|
|
||||||
end
|
|
||||||
if maxItemID > EID.XMLMaxItemID then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
if EID.itemConfig:GetCollectible(EID.XMLMaxItemID) == nil then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
local function calcFloorItems()
|
local function calcFloorItems()
|
||||||
EID.bagOfCraftingFloorQuery = {}
|
EID.bagOfCraftingFloorQuery = {}
|
||||||
@@ -643,7 +629,6 @@ local function combinations(arr, length, startPos, tempResult, randResults, newR
|
|||||||
combinations(arr,length-1, i+1, tempResult, randResults, newResults)
|
combinations(arr,length-1, i+1, tempResult, randResults, newResults)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--code from InputHelper in MCM
|
--code from InputHelper in MCM
|
||||||
local HotkeyToString = {}
|
local HotkeyToString = {}
|
||||||
for key,num in pairs(Keyboard) do
|
for key,num in pairs(Keyboard) do
|
||||||
@@ -654,6 +639,56 @@ for key,num in pairs(Keyboard) do
|
|||||||
HotkeyToString[num] = keyString
|
HotkeyToString[num] = keyString
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function getHotkeyString()
|
||||||
|
local hotkeyString = ""
|
||||||
|
local hideDesc = EID:getDescriptionEntry("CraftingHideKey")
|
||||||
|
local previewDesc = EID:getDescriptionEntry("CraftingPreviewKey")
|
||||||
|
--we have a binding for a keyboard hide key
|
||||||
|
if HotkeyToString[EID.Config["CraftingHideKey"]] then
|
||||||
|
hotkeyString = hideDesc .. " " .. HotkeyToString[EID.Config["CraftingHideKey"]]
|
||||||
|
end
|
||||||
|
--we have a binding for a keyboard preview toggle key, and a full bag, and aren't on Preview Only mode
|
||||||
|
if #EID.BagItems >= 8 and EID.Config["BagOfCraftingDisplayMode"] ~= "Preview Only" and HotkeyToString[EID.Config["CraftingResultKey"]] then
|
||||||
|
if hotkeyString ~= "" then hotkeyString = hotkeyString .. ", " end
|
||||||
|
hotkeyString = hotkeyString .. previewDesc .. " " .. HotkeyToString[EID.Config["CraftingResultKey"]]
|
||||||
|
end
|
||||||
|
if hotkeyString ~= "" then
|
||||||
|
hotkeyString = "!!! " .. hotkeyString .. "#"
|
||||||
|
end
|
||||||
|
return hotkeyString
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getFloorItemsString(showPreviews, roomItems)
|
||||||
|
local floorString = ""
|
||||||
|
if #EID.BagItems >0 then
|
||||||
|
if showPreviews and #EID.BagItems >= 8 then
|
||||||
|
local recipe = EID:calculateBagOfCrafting(EID.BagItems)
|
||||||
|
floorString = floorString .. "{{Collectible"..recipe.."}} "
|
||||||
|
end
|
||||||
|
local bagDesc = EID:getDescriptionEntry("CraftingBagContent")
|
||||||
|
floorString = floorString .. bagDesc.. EID:tableToCraftingIconsMerged(EID.BagItems).."#"
|
||||||
|
--debug the bag order
|
||||||
|
--EID:appendToDescription(customDescObj, EID:tableToCraftingIconsFull(EID.BagItems, false).."#")
|
||||||
|
end
|
||||||
|
if #roomItems >0 then
|
||||||
|
if showPreviews and #roomItems == 8 then
|
||||||
|
local recipe = EID:calculateBagOfCrafting(roomItems)
|
||||||
|
floorString = floorString .. "{{Collectible"..recipe.."}} "
|
||||||
|
end
|
||||||
|
local roomDesc = EID:getDescriptionEntry("CraftingRoomContent")
|
||||||
|
floorString = floorString .. roomDesc..EID:tableToCraftingIconsMerged(roomItems).."#"
|
||||||
|
end
|
||||||
|
if #EID.bagOfCraftingFloorQuery >0 and #roomItems ~= #EID.bagOfCraftingFloorQuery then
|
||||||
|
if showPreviews and #EID.bagOfCraftingFloorQuery == 8 then
|
||||||
|
local recipe = EID:calculateBagOfCrafting(EID.bagOfCraftingFloorQuery)
|
||||||
|
floorString = floorString .. "{{Collectible"..recipe.."}} "
|
||||||
|
end
|
||||||
|
local floorDesc = EID:getDescriptionEntry("CraftingFloorContent")
|
||||||
|
floorString = floorString .. floorDesc..EID:tableToCraftingIconsMerged(EID.bagOfCraftingFloorQuery).."#"
|
||||||
|
end
|
||||||
|
return floorString
|
||||||
|
end
|
||||||
|
|
||||||
function EID:handleBagOfCraftingRendering()
|
function EID:handleBagOfCraftingRendering()
|
||||||
trackBagHolding()
|
trackBagHolding()
|
||||||
trackBagActivated()
|
trackBagActivated()
|
||||||
@@ -662,18 +697,22 @@ function EID:handleBagOfCraftingRendering()
|
|||||||
local tableToCraftingIconsFunc = EID.tableToCraftingIconsMerged
|
local tableToCraftingIconsFunc = EID.tableToCraftingIconsMerged
|
||||||
if EID.Config["BagOfCraftingDisplayIcons"] then tableToCraftingIconsFunc = EID.tableToCraftingIconsFull end
|
if EID.Config["BagOfCraftingDisplayIcons"] then tableToCraftingIconsFunc = EID.tableToCraftingIconsFull end
|
||||||
|
|
||||||
|
local customDescObj = EID:getDescriptionObj(5, 100, 710)
|
||||||
|
customDescObj.Description = ""
|
||||||
|
|
||||||
--prevent our hotkeys from triggering as they're set
|
--prevent our hotkeys from triggering as they're set
|
||||||
if not ModConfigMenu or not ModConfigMenu.IsVisible then
|
if not ModConfigMenu or not ModConfigMenu.IsVisible then
|
||||||
if Input.IsButtonTriggered(EID.Config["CraftingHideKey"], 0) or Input.IsButtonTriggered(EID.Config["CraftingHideButton"], EID.player.ControllerIndex) then
|
if Input.IsButtonTriggered(EID.Config["CraftingHideKey"], 0) or Input.IsButtonTriggered(EID.Config["CraftingHideButton"], EID.player.ControllerIndex) then
|
||||||
EID.craftingIsHidden = not EID.craftingIsHidden
|
craftingIsHidden = not craftingIsHidden
|
||||||
end
|
end
|
||||||
|
|
||||||
if Input.IsButtonTriggered(EID.Config["CraftingResultKey"], 0) or Input.IsButtonTriggered(EID.Config["CraftingResultButton"], EID.player.ControllerIndex) then
|
if Input.IsButtonTriggered(EID.Config["CraftingResultKey"], 0) or Input.IsButtonTriggered(EID.Config["CraftingResultButton"], EID.player.ControllerIndex) then
|
||||||
EID.showCraftingResult = not EID.showCraftingResult
|
showCraftingResult = not showCraftingResult
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if EID.isHidden or EID.craftingIsHidden then
|
--determine if we should display anything at all, display item preview if applicable, and figure out our room/floor's pickup contents
|
||||||
|
if EID.isHidden or craftingIsHidden then
|
||||||
return
|
return
|
||||||
elseif EID.Config["BagOfCraftingHideInBattle"] then
|
elseif EID.Config["BagOfCraftingHideInBattle"] then
|
||||||
if Isaac.CountBosses() > 0 or Isaac.CountEnemies() > 0 then
|
if Isaac.CountBosses() > 0 or Isaac.CountEnemies() > 0 then
|
||||||
@@ -687,22 +726,10 @@ function EID:handleBagOfCraftingRendering()
|
|||||||
if EID.Config["DisplayBagOfCrafting"] == "hold" and not string.find(EID.player:GetSprite():GetAnimation(), "PickupWalk") then
|
if EID.Config["DisplayBagOfCrafting"] == "hold" and not string.find(EID.player:GetSprite():GetAnimation(), "PickupWalk") then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
if Game():GetRoom():GetFrameCount ()<2 then
|
if Game():GetRoom():GetFrameCount() < 2 then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
if EID.showCraftingResult and #EID.BagItems >= 8 then
|
|
||||||
local craftingResult, backupResult = EID:calculateBagOfCrafting(EID.BagItems)
|
|
||||||
local descriptionObj = EID:getDescriptionObj(5, 100, craftingResult)
|
|
||||||
local backupObj = EID:getDescriptionObj(5, 100, backupResult)
|
|
||||||
if (backupResult ~= craftingResult) then
|
|
||||||
EID:appendToDescription(descriptionObj,"#!!! If this item's locked, it will turn into#{{Collectible" .. backupResult .. "}} " ..
|
|
||||||
EID:getObjectName(5, 100, backupResult) .. "#" .. backupObj.Description)
|
|
||||||
end
|
|
||||||
EID:printDescription(descriptionObj)
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
local curSeed = Game():GetSeeds():GetStartSeed()
|
local curSeed = Game():GetSeeds():GetStartSeed()
|
||||||
--reset our calculated recipes when the game seed changes
|
--reset our calculated recipes when the game seed changes
|
||||||
if (curSeed ~= lastSeedUsed) then
|
if (curSeed ~= lastSeedUsed) then
|
||||||
@@ -713,6 +740,24 @@ function EID:handleBagOfCraftingRendering()
|
|||||||
end
|
end
|
||||||
lastSeedUsed = curSeed
|
lastSeedUsed = curSeed
|
||||||
|
|
||||||
|
--Display the result of the 8 items in our bag
|
||||||
|
if (showCraftingResult or EID.Config["BagOfCraftingDisplayMode"] == "Preview Only") and #EID.BagItems >= 8 then
|
||||||
|
local craftingResult, backupResult = EID:calculateBagOfCrafting(EID.BagItems)
|
||||||
|
local descriptionObj = EID:getDescriptionObj(5, 100, craftingResult)
|
||||||
|
--prepend the Hide/Preview hotkeys to the description
|
||||||
|
descriptionObj.Description = getHotkeyString() .. descriptionObj.Description
|
||||||
|
local backupObj = EID:getDescriptionObj(5, 100, backupResult)
|
||||||
|
if (backupResult ~= craftingResult) then
|
||||||
|
local backupDesc = EID:getDescriptionEntry("CraftingPreviewBackup")
|
||||||
|
EID:appendToDescription(descriptionObj,"#" .. backupDesc .. "#{{Collectible" .. backupResult .. "}} " ..
|
||||||
|
EID:getObjectName(5, 100, backupResult) .. "#" .. backupObj.Description)
|
||||||
|
end
|
||||||
|
EID:printDescription(descriptionObj)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
--if we're in Preview Only mode, then we have nothing more to do
|
||||||
|
if (EID.Config["BagOfCraftingDisplayMode"] == "Preview Only") then return false end
|
||||||
|
|
||||||
local curRoomIndex = Game():GetLevel():GetCurrentRoomDesc().SafeGridIndex
|
local curRoomIndex = Game():GetLevel():GetCurrentRoomDesc().SafeGridIndex
|
||||||
|
|
||||||
local results = {}
|
local results = {}
|
||||||
@@ -760,65 +805,35 @@ function EID:handleBagOfCraftingRendering()
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--sort by ingredient quality
|
--sort by ingredient quality
|
||||||
table.sort(itemQuery, qualitySort)
|
table.sort(itemQuery, qualitySort)
|
||||||
|
|
||||||
--Simplified Mode display
|
--No Recipes Mode display
|
||||||
if (EID.Config["BagOfCraftingSimplifiedMode"] or EID:DetectModdedItems()) then
|
if (EID.Config["BagOfCraftingDisplayMode"] == "No Recipes") then
|
||||||
local customDescObj = EID:getDescriptionObj(5, 100, 710)
|
EID:appendToDescription(customDescObj, getHotkeyString())
|
||||||
customDescObj.Description = ""
|
EID:appendToDescription(customDescObj, getFloorItemsString(false, roomItems))
|
||||||
|
|
||||||
local hotkeyString = ""
|
local mostValuableBag = {}
|
||||||
if HotkeyToString[EID.Config["CraftingHideKey"]] then
|
|
||||||
hotkeyString = "Hide: " .. HotkeyToString[EID.Config["CraftingHideKey"]]
|
|
||||||
end
|
|
||||||
if #EID.BagItems >= 8 and HotkeyToString[EID.Config["CraftingResultKey"]] then
|
|
||||||
if hotkeyString ~= "" then hotkeyString = hotkeyString .. ", " end
|
|
||||||
hotkeyString = hotkeyString .. "Preview: " .. HotkeyToString[EID.Config["CraftingResultKey"]]
|
|
||||||
end
|
|
||||||
if hotkeyString ~= "" then
|
|
||||||
EID:appendToDescription(customDescObj, "!!! " .. hotkeyString .. "#")
|
|
||||||
end
|
|
||||||
|
|
||||||
if #EID.BagItems >0 then
|
|
||||||
if #EID.BagItems >= 8 then
|
|
||||||
local recipe = EID:calculateBagOfCrafting(EID.BagItems)
|
|
||||||
EID:appendToDescription(customDescObj, "{{Collectible"..recipe.."}} ")
|
|
||||||
end
|
|
||||||
local bagDesc = EID:getDescriptionEntry("CraftingBagContent").."(Beta)"
|
|
||||||
EID:appendToDescription(customDescObj, bagDesc..EID:tableToCraftingIconsMerged(EID.BagItems).."#")
|
|
||||||
end
|
|
||||||
if #roomItems >0 then
|
|
||||||
local roomDesc = EID:getDescriptionEntry("CraftingRoomContent")
|
|
||||||
EID:appendToDescription(customDescObj, roomDesc..EID:tableToCraftingIconsMerged(roomItems).."#")
|
|
||||||
end
|
|
||||||
if #EID.bagOfCraftingFloorQuery >0 and #roomItems ~= #EID.bagOfCraftingFloorQuery then
|
|
||||||
local floorDesc = EID:getDescriptionEntry("CraftingFloorContent")
|
|
||||||
EID:appendToDescription(customDescObj, floorDesc..EID:tableToCraftingIconsMerged(EID.bagOfCraftingFloorQuery).."#")
|
|
||||||
end
|
|
||||||
|
|
||||||
local mostValuableSimp = {}
|
|
||||||
for i=1,8 do
|
for i=1,8 do
|
||||||
mostValuableSimp[i] = itemQuery[i]
|
mostValuableBag[i] = itemQuery[i]
|
||||||
end
|
end
|
||||||
|
|
||||||
local bagQuality, bagResult = EID:simulateBagOfCrafting(EID.BagItems)
|
local bagQuality, bagResult = EID:simulateBagOfCrafting(EID.BagItems)
|
||||||
local bestQuality, bestResult = EID:simulateBagOfCrafting(mostValuableSimp)
|
local bestQuality, bestResult = EID:simulateBagOfCrafting(mostValuableBag)
|
||||||
local bagQualityDesc = EID:getDescriptionEntry("CraftingBagQuality")
|
local bagQualityDesc = EID:getDescriptionEntry("CraftingBagQuality")
|
||||||
local bestQualityDesc = EID:getDescriptionEntry("CraftingBestQuality")
|
local bestQualityDesc = EID:getDescriptionEntry("CraftingBestQuality")
|
||||||
|
|
||||||
if (#EID.BagItems > 0) then EID:appendToDescription(customDescObj, bagQualityDesc .. " " .. bagQuality .. "#" .. bagResult .. "#") end
|
if (#EID.BagItems > 0) then EID:appendToDescription(customDescObj, bagQualityDesc .. " " .. bagQuality .. "#" .. bagResult .. "#") end
|
||||||
if (bestQuality > bagQuality) then EID:appendToDescription(customDescObj, bestQualityDesc .. " " .. bestQuality .. "#{{Blank}} " .. tableToCraftingIconsFunc(self, mostValuableSimp, true) .. "#" .. bestResult .. "#") end
|
if (bestQuality > bagQuality) then EID:appendToDescription(customDescObj, bestQualityDesc .. " " .. bestQuality .. "#{{Blank}} " .. tableToCraftingIconsFunc(self,mostValuableBag, true) .. "#" .. bestResult .. "#") end
|
||||||
|
|
||||||
EID:printDescription(customDescObj)
|
EID:printDescription(customDescObj)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
local queryString = table.concat(itemQuery,",")
|
local queryString = table.concat(itemQuery,",")
|
||||||
if EID.lockedResults ~= nil then
|
if lockedResults ~= nil then
|
||||||
results = calcResultCache[EID.lockedResults]
|
results = calcResultCache[lockedResults]
|
||||||
elseif calcResultCache[queryString] == nil or EID.refreshNextTick then
|
elseif calcResultCache[queryString] == nil or refreshNextTick then
|
||||||
--build on top of our previous recipe lists, if possible
|
--build on top of our previous recipe lists, if possible
|
||||||
local randResults = randResultCache[queryString] or {}
|
local randResults = randResultCache[queryString] or {}
|
||||||
local newResults = {}
|
local newResults = {}
|
||||||
@@ -829,11 +844,11 @@ function EID:handleBagOfCraftingRendering()
|
|||||||
local mostValuable = {}
|
local mostValuable = {}
|
||||||
|
|
||||||
--shift our thorough check forward one ingredient each refresh (it will find duplicates, but spamming refresh will get a lot of variety)
|
--shift our thorough check forward one ingredient each refresh (it will find duplicates, but spamming refresh will get a lot of variety)
|
||||||
if (EID.refreshNextTick) then
|
if (refreshNextTick) then
|
||||||
EID.bagOfCraftingRefreshes = EID.bagOfCraftingRefreshes + 1
|
bagOfCraftingRefreshes = bagOfCraftingRefreshes + 1
|
||||||
if (#itemQuery >= EID.Config["BagOfCraftingCombinationMax"] + EID.bagOfCraftingRefreshes) then
|
if (#itemQuery >= EID.Config["BagOfCraftingCombinationMax"] + bagOfCraftingRefreshes) then
|
||||||
for i=1,EID.Config["BagOfCraftingCombinationMax"] do
|
for i=1,EID.Config["BagOfCraftingCombinationMax"] do
|
||||||
mostValuable[i] = itemQuery[i+EID.bagOfCraftingRefreshes]
|
mostValuable[i] = itemQuery[i+bagOfCraftingRefreshes]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
--we have less items than our threshold; every single recipe will be listed
|
--we have less items than our threshold; every single recipe will be listed
|
||||||
@@ -891,127 +906,85 @@ function EID:handleBagOfCraftingRendering()
|
|||||||
|
|
||||||
numResults = 0
|
numResults = 0
|
||||||
for k,v in ipairs(sortedIDs) do
|
for k,v in ipairs(sortedIDs) do
|
||||||
if (EID.refreshNextTick and EID.bagOfCraftingOffset > 0 and v == EID.refreshPosition) then
|
if (refreshNextTick and bagOfCraftingOffset > 0 and v == refreshPosition) then
|
||||||
--jump to the item we were looking at before, so you can more easily refresh for variants of recipes
|
--jump to the item we were looking at before, so you can more easily refresh for variants of recipes
|
||||||
EID.bagOfCraftingOffset = numResults
|
bagOfCraftingOffset = numResults
|
||||||
end
|
end
|
||||||
numResults = numResults + #results[v]
|
numResults = numResults + #results[v]
|
||||||
end
|
end
|
||||||
|
|
||||||
if not EID.refreshNextTick then
|
if not refreshNextTick then
|
||||||
EID.bagOfCraftingOffset = 0
|
bagOfCraftingOffset = 0
|
||||||
EID.bagOfCraftingRefreshes = 0
|
bagOfCraftingRefreshes = 0
|
||||||
end
|
end
|
||||||
EID.refreshNextTick = false
|
refreshNextTick = false
|
||||||
else
|
else
|
||||||
results = calcResultCache[queryString]
|
results = calcResultCache[queryString]
|
||||||
end
|
end
|
||||||
|
|
||||||
if numResults == 0 then
|
if numResults == 0 then
|
||||||
EID.bagOfCraftingOffset = 0
|
bagOfCraftingOffset = 0
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
local customDescObj = EID:getDescriptionObj(5, 100, 710)
|
EID:appendToDescription(customDescObj, getHotkeyString())
|
||||||
customDescObj.Description = ""
|
EID:appendToDescription(customDescObj, getFloorItemsString(true, roomItems))
|
||||||
|
|
||||||
local hotkeyString = ""
|
|
||||||
if HotkeyToString[EID.Config["CraftingHideKey"]] then
|
|
||||||
hotkeyString = "Hide: " .. HotkeyToString[EID.Config["CraftingHideKey"]]
|
|
||||||
end
|
|
||||||
if #EID.BagItems >= 8 and HotkeyToString[EID.Config["CraftingResultKey"]] then
|
|
||||||
if hotkeyString ~= "" then hotkeyString = hotkeyString .. ", " end
|
|
||||||
hotkeyString = hotkeyString .. "Preview: " .. HotkeyToString[EID.Config["CraftingResultKey"]]
|
|
||||||
end
|
|
||||||
if hotkeyString ~= "" then
|
|
||||||
EID:appendToDescription(customDescObj, "!!! " .. hotkeyString .. "#")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Bag content display
|
|
||||||
if #EID.BagItems >0 then
|
|
||||||
if #EID.BagItems >= 8 then
|
|
||||||
local recipe = EID:calculateBagOfCrafting(EID.BagItems)
|
|
||||||
EID:appendToDescription(customDescObj, "{{Collectible"..recipe.."}} ")
|
|
||||||
end
|
|
||||||
local bagDesc = EID:getDescriptionEntry("CraftingBagContent")
|
|
||||||
EID:appendToDescription(customDescObj, bagDesc..EID:tableToCraftingIconsMerged(EID.BagItems).."#")
|
|
||||||
--debug the bag order
|
|
||||||
--EID:appendToDescription(customDescObj, EID:tableToCraftingIconsFull(EID.BagItems, false).."#")
|
|
||||||
end
|
|
||||||
-- Room content display
|
|
||||||
if #roomItems >0 then
|
|
||||||
if #roomItems == 8 then
|
|
||||||
local recipe = EID:calculateBagOfCrafting(roomItems)
|
|
||||||
EID:appendToDescription(customDescObj, "{{Collectible"..recipe.."}} ")
|
|
||||||
end
|
|
||||||
local roomDesc = EID:getDescriptionEntry("CraftingRoomContent")
|
|
||||||
EID:appendToDescription(customDescObj, roomDesc..EID:tableToCraftingIconsMerged(roomItems).."#")
|
|
||||||
end
|
|
||||||
-- Floot content display
|
|
||||||
if #EID.bagOfCraftingFloorQuery >0 and #roomItems ~= #EID.bagOfCraftingFloorQuery then
|
|
||||||
if #EID.bagOfCraftingFloorQuery == 8 then
|
|
||||||
local recipe = EID:calculateBagOfCrafting(EID.bagOfCraftingFloorQuery)
|
|
||||||
EID:appendToDescription(customDescObj, "{{Collectible"..recipe.."}} ")
|
|
||||||
end
|
|
||||||
local floorDesc = EID:getDescriptionEntry("CraftingFloorContent")
|
|
||||||
EID:appendToDescription(customDescObj, floorDesc..EID:tableToCraftingIconsMerged(EID.bagOfCraftingFloorQuery).."#")
|
|
||||||
end
|
|
||||||
|
|
||||||
local resultDesc = EID:getDescriptionEntry("CraftingResults")
|
local resultDesc = EID:getDescriptionEntry("CraftingResults")
|
||||||
EID:appendToDescription(customDescObj, resultDesc)
|
EID:appendToDescription(customDescObj, resultDesc)
|
||||||
if Input.IsActionPressed(EID.Config["BagOfCraftingToggleKey"], EID.player.ControllerIndex) then
|
if Input.IsActionPressed(EID.Config["BagOfCraftingToggleKey"], EID.player.ControllerIndex) then
|
||||||
EID.player:SetShootingCooldown(2)
|
EID.player:SetShootingCooldown(2)
|
||||||
if Input.IsActionTriggered(ButtonAction.ACTION_SHOOTDOWN, EID.player.ControllerIndex) then
|
if Input.IsActionTriggered(ButtonAction.ACTION_SHOOTDOWN, EID.player.ControllerIndex) then
|
||||||
EID.bagOfCraftingOffset = math.min(numResults-(numResults%EID.Config["BagOfCraftingResults"]), EID.bagOfCraftingOffset + EID.Config["BagOfCraftingResults"])
|
bagOfCraftingOffset = math.min(numResults-(numResults%EID.Config["BagOfCraftingResults"]), bagOfCraftingOffset + EID.Config["BagOfCraftingResults"])
|
||||||
EID.downHeld = Isaac.GetTime()
|
downHeld = Isaac.GetTime()
|
||||||
elseif Input.IsActionTriggered(ButtonAction.ACTION_SHOOTUP, EID.player.ControllerIndex) then
|
elseif Input.IsActionTriggered(ButtonAction.ACTION_SHOOTUP, EID.player.ControllerIndex) then
|
||||||
EID.bagOfCraftingOffset = math.max(0, EID.bagOfCraftingOffset - EID.Config["BagOfCraftingResults"])
|
bagOfCraftingOffset = math.max(0, bagOfCraftingOffset - EID.Config["BagOfCraftingResults"])
|
||||||
EID.upHeld = Isaac.GetTime()
|
upHeld = Isaac.GetTime()
|
||||||
--lock the current results so you can actually do a recipe that you've scrolled down to without losing it
|
--lock the current results so you can actually do a recipe that you've scrolled down to without losing it
|
||||||
elseif Input.IsActionTriggered(ButtonAction.ACTION_SHOOTLEFT, EID.player.ControllerIndex) then
|
elseif Input.IsActionTriggered(ButtonAction.ACTION_SHOOTLEFT, EID.player.ControllerIndex) then
|
||||||
if (EID.lockedResults == nil) then EID.lockedResults = queryString
|
if (lockedResults == nil) then lockedResults = queryString
|
||||||
else EID.lockedResults = nil end
|
else lockedResults = nil end
|
||||||
--refresh the recipes
|
--refresh the recipes
|
||||||
elseif Input.IsActionTriggered(ButtonAction.ACTION_SHOOTRIGHT, EID.player.ControllerIndex) then
|
elseif Input.IsActionTriggered(ButtonAction.ACTION_SHOOTRIGHT, EID.player.ControllerIndex) then
|
||||||
if (EID.lockedResults == nil) then
|
if (lockedResults == nil) then
|
||||||
EID.refreshNextTick = true
|
refreshNextTick = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
--scroll pages quickly if the button is held
|
--scroll pages quickly if the button is held
|
||||||
if Input.IsActionPressed(ButtonAction.ACTION_SHOOTDOWN, EID.player.ControllerIndex) and Isaac.GetTime() - EID.downHeld > 750 then
|
if Input.IsActionPressed(ButtonAction.ACTION_SHOOTDOWN, EID.player.ControllerIndex) and Isaac.GetTime() - downHeld > 750 then
|
||||||
EID.bagOfCraftingOffset = math.min(numResults-(numResults%EID.Config["BagOfCraftingResults"]), EID.bagOfCraftingOffset + EID.Config["BagOfCraftingResults"])
|
bagOfCraftingOffset = math.min(numResults-(numResults%EID.Config["BagOfCraftingResults"]), bagOfCraftingOffset + EID.Config["BagOfCraftingResults"])
|
||||||
EID.downHeld = Isaac.GetTime() - 700
|
downHeld = Isaac.GetTime() - 700
|
||||||
elseif Input.IsActionPressed(ButtonAction.ACTION_SHOOTUP, EID.player.ControllerIndex) and Isaac.GetTime() - EID.upHeld > 750 then
|
elseif Input.IsActionPressed(ButtonAction.ACTION_SHOOTUP, EID.player.ControllerIndex) and Isaac.GetTime() - upHeld > 750 then
|
||||||
EID.bagOfCraftingOffset = math.max(0, EID.bagOfCraftingOffset - EID.Config["BagOfCraftingResults"])
|
bagOfCraftingOffset = math.max(0, bagOfCraftingOffset - EID.Config["BagOfCraftingResults"])
|
||||||
EID.upHeld = Isaac.GetTime() - 700
|
upHeld = Isaac.GetTime() - 700
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
--fix bug with being allowed to go to an empty page if recipe count = multiple of page size (or if we refresh on last page)
|
--fix bug with being allowed to go to an empty page if recipe count = multiple of page size (or if we refresh on last page)
|
||||||
if (EID.bagOfCraftingOffset >= numResults) then EID.bagOfCraftingOffset = EID.bagOfCraftingOffset - EID.Config["BagOfCraftingResults"] end
|
if (bagOfCraftingOffset >= numResults) then bagOfCraftingOffset = bagOfCraftingOffset - EID.Config["BagOfCraftingResults"] end
|
||||||
|
|
||||||
local prevItem = 0
|
local prevItem = 0
|
||||||
|
|
||||||
local qualities = { [0] = "{{ColorSilver}}", "{{ColorLime}}", "{{ColorPastelBlue}}", "{{ColorLavender}}", "{{ColorLightOrange}}" }
|
local qualities = { [0] = "{{ColorSilver}}", "{{ColorLime}}", "{{ColorPastelBlue}}", "{{ColorLavender}}", "{{ColorLightOrange}}" }
|
||||||
local prefix = "#{{Blank}} "
|
local prefix = "#{{Blank}} "
|
||||||
if (EID.lockedResults) then
|
if (lockedResults) then
|
||||||
prefix = "#{{Trinket159}} "
|
prefix = "#{{Trinket159}} "
|
||||||
end
|
end
|
||||||
|
|
||||||
--results is now a table of tables for each item, so we have to iterate over the table using sortedIDs
|
--results is now a table of tables for each item, so we have to iterate over the table using sortedIDs
|
||||||
if (EID.bagOfCraftingOffset > 0) then
|
if (bagOfCraftingOffset > 0) then
|
||||||
customDescObj.Description = customDescObj.Description.. prefix .. "...+"..EID.bagOfCraftingOffset.." more"
|
customDescObj.Description = customDescObj.Description.. prefix .. "...+"..bagOfCraftingOffset.." more"
|
||||||
end
|
end
|
||||||
local curOffset = 0
|
local curOffset = 0
|
||||||
EID.refreshPosition = -1
|
refreshPosition = -1
|
||||||
for k,id in ipairs(sortedIDs) do
|
for k,id in ipairs(sortedIDs) do
|
||||||
if (curOffset + #results[id] <= EID.bagOfCraftingOffset) then curOffset = curOffset + #results[id]
|
if (curOffset + #results[id] <= bagOfCraftingOffset) then curOffset = curOffset + #results[id]
|
||||||
else
|
else
|
||||||
if (EID.refreshPosition == -1) then EID.refreshPosition = id end
|
if (refreshPosition == -1) then refreshPosition = id end
|
||||||
for k2, v in ipairs(results[id]) do
|
for k2, v in ipairs(results[id]) do
|
||||||
curOffset = curOffset + 1
|
curOffset = curOffset + 1
|
||||||
if (curOffset > EID.bagOfCraftingOffset+EID.Config["BagOfCraftingResults"]) then break end
|
if (curOffset > bagOfCraftingOffset+EID.Config["BagOfCraftingResults"]) then break end
|
||||||
if not v then break end
|
if not v then break end
|
||||||
if (curOffset > EID.bagOfCraftingOffset) then
|
if (curOffset > bagOfCraftingOffset) then
|
||||||
if not EID.Config["BagOfCraftingDisplayNames"] then
|
if not EID.Config["BagOfCraftingDisplayNames"] then
|
||||||
customDescObj.Description = customDescObj.Description.."# {{Collectible"..v[2].."}} "
|
customDescObj.Description = customDescObj.Description.."# {{Collectible"..v[2].."}} "
|
||||||
--tack on the secondary recipe image to achievement-locked recipes
|
--tack on the secondary recipe image to achievement-locked recipes
|
||||||
@@ -1037,8 +1010,8 @@ function EID:handleBagOfCraftingRendering()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if (EID.bagOfCraftingOffset + EID.Config["BagOfCraftingResults"] < numResults) then
|
if (bagOfCraftingOffset + EID.Config["BagOfCraftingResults"] < numResults) then
|
||||||
customDescObj.Description = customDescObj.Description.. prefix .. "...+"..(numResults-EID.Config["BagOfCraftingResults"]-EID.bagOfCraftingOffset).." more"
|
customDescObj.Description = customDescObj.Description.. prefix .. "...+"..(numResults-EID.Config["BagOfCraftingResults"]-bagOfCraftingOffset).." more"
|
||||||
end
|
end
|
||||||
|
|
||||||
EID:printDescription(customDescObj)
|
EID:printDescription(customDescObj)
|
||||||
|
|||||||
+12
-25
@@ -1,21 +1,3 @@
|
|||||||
local Controller = Controller or {}
|
|
||||||
Controller.DPAD_LEFT = 0
|
|
||||||
Controller.DPAD_RIGHT = 1
|
|
||||||
Controller.DPAD_UP = 2
|
|
||||||
Controller.DPAD_DOWN = 3
|
|
||||||
Controller.BUTTON_A = 4
|
|
||||||
Controller.BUTTON_B = 5
|
|
||||||
Controller.BUTTON_X = 6
|
|
||||||
Controller.BUTTON_Y = 7
|
|
||||||
Controller.BUMPER_LEFT = 8
|
|
||||||
Controller.TRIGGER_LEFT = 9
|
|
||||||
Controller.STICK_LEFT = 10
|
|
||||||
Controller.BUMPER_RIGHT = 11
|
|
||||||
Controller.TRIGGER_RIGHT = 12
|
|
||||||
Controller.STICK_RIGHT = 13
|
|
||||||
Controller.BUTTON_BACK = 14
|
|
||||||
Controller.BUTTON_START = 15
|
|
||||||
|
|
||||||
EID.UserConfig = {
|
EID.UserConfig = {
|
||||||
-------GENERAL---------
|
-------GENERAL---------
|
||||||
-- Change language of the mod.
|
-- Change language of the mod.
|
||||||
@@ -203,17 +185,22 @@ EID.UserConfig = {
|
|||||||
|
|
||||||
---------Bag of Crafting-----------
|
---------Bag of Crafting-----------
|
||||||
|
|
||||||
-- Display-modes for Bag of Crafting descriptions
|
-- When to show the Bag of Crafting display
|
||||||
-- Options: "always", "hold", "never"
|
-- Options: "always", "hold", "never"
|
||||||
-- "always" = Always show Results, "hold" = Show when holding up bag, "never" = Never show results
|
-- "always" = Always show Results, "hold" = Show when holding up bag, "never" = Never show results
|
||||||
-- Default = "always"
|
-- Default = "always"
|
||||||
["DisplayBagOfCrafting"] = "always",
|
["DisplayBagOfCrafting"] = "always",
|
||||||
|
-- Display modes for the Bag of Crafting display
|
||||||
|
-- Options: "Recipe List", "Preview Only", "No Recipes"
|
||||||
|
-- The recipe list is a detailed calculated list of recipes based on what you have available on the floor
|
||||||
|
-- Preview Only shows the description of the item you can currently craft in your bag
|
||||||
|
-- No Recipes shows percentages of what item you might get from your bag / best option on the floor, for a more intended experience
|
||||||
|
-- (No Recipes is recommended if you have modded items)
|
||||||
|
-- Default = "Recipe List"
|
||||||
|
["BagOfCraftingDisplayMode"] = "Recipe List",
|
||||||
-- Hide the recipe list when in battle
|
-- Hide the recipe list when in battle
|
||||||
-- Default = true
|
-- Default = true
|
||||||
["BagOfCraftingHideInBattle"] = true,
|
["BagOfCraftingHideInBattle"] = true,
|
||||||
-- Simplified / No Recipes Mode shows quality and item pool percentages instead of exact recipes, for a more intended experience
|
|
||||||
-- Default = false
|
|
||||||
["BagOfCraftingSimplifiedMode"] = false,
|
|
||||||
-- Changes the number of Results shown in the Bag of crafting description
|
-- Changes the number of Results shown in the Bag of crafting description
|
||||||
-- Higher numbers can cause more lag!
|
-- Higher numbers can cause more lag!
|
||||||
-- Default = 7
|
-- Default = 7
|
||||||
@@ -241,8 +228,8 @@ EID.UserConfig = {
|
|||||||
-- Default = Keyboard.KEY_F3
|
-- Default = Keyboard.KEY_F3
|
||||||
["CraftingHideKey"] = Keyboard.KEY_F3,
|
["CraftingHideKey"] = Keyboard.KEY_F3,
|
||||||
-- Set the controller binding to toggle the crafting display, so you can see descriptions of items/pickups on the floor
|
-- Set the controller binding to toggle the crafting display, so you can see descriptions of items/pickups on the floor
|
||||||
-- Use the Controller enum at the top of this file, or a number
|
-- Use the Controller names here: https://github.com/wofsauge/External-Item-Descriptions/blob/master/mod_config_menu.lua#L1 or a number
|
||||||
-- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT, which aren't used in-game with default controls
|
-- Of note are Controller.STICK_LEFT and Controller.STICK_RIGHT (pushing the sticks in), which aren't used in-game with default controls
|
||||||
-- Default = none (-1)
|
-- Default = none (-1)
|
||||||
["CraftingHideButton"] = -1,
|
["CraftingHideButton"] = -1,
|
||||||
-- Set the keybinding to toggle viewing the description of the item ready to be crafted in the bag
|
-- Set the keybinding to toggle viewing the description of the item ready to be crafted in the bag
|
||||||
@@ -365,7 +352,7 @@ EID.DefaultConfig = {
|
|||||||
["BagOfCraftingDisplayNames"] = false,
|
["BagOfCraftingDisplayNames"] = false,
|
||||||
["BagOfCraftingDisplayIcons"] = false,
|
["BagOfCraftingDisplayIcons"] = false,
|
||||||
["BagOfCraftingHideInBattle"] = true,
|
["BagOfCraftingHideInBattle"] = true,
|
||||||
["BagOfCraftingSimplifiedMode"] = false,
|
["BagOfCraftingDisplayMode"] = "Recipe List",
|
||||||
["CraftingHideKey"] = Keyboard.KEY_F3,
|
["CraftingHideKey"] = Keyboard.KEY_F3,
|
||||||
["CraftingHideButton"] = -1,
|
["CraftingHideButton"] = -1,
|
||||||
["CraftingResultKey"] = Keyboard.KEY_F4,
|
["CraftingResultKey"] = Keyboard.KEY_F4,
|
||||||
|
|||||||
@@ -595,7 +595,7 @@ local function renderAchievementInfo()
|
|||||||
demoDescObj.Description = EID:getDescriptionEntry("OldGameVersionWarningText") or ""
|
demoDescObj.Description = EID:getDescriptionEntry("OldGameVersionWarningText") or ""
|
||||||
EID:displayPermanentText(demoDescObj)
|
EID:displayPermanentText(demoDescObj)
|
||||||
hasShownAchievementWarning = true
|
hasShownAchievementWarning = true
|
||||||
elseif EID.player:HasCollectible(710) and EID:DetectModdedItems() and EID.Config.DisplayBagOfCrafting ~= "never" and not EID.Config.BagOfCraftingSimplifiedMode then
|
elseif EID.player:HasCollectible(710) and EID:DetectModdedItems() and EID.Config.DisplayBagOfCrafting ~= "never" and EID.Config.BagOfCraftingDisplayMode ~= "No Recipes" then
|
||||||
local demoDescObj = EID:getDescriptionObj(-999, -1, 1)
|
local demoDescObj = EID:getDescriptionObj(-999, -1, 1)
|
||||||
demoDescObj.Name = EID:getDescriptionEntry("AchievementWarningTitle") or ""
|
demoDescObj.Name = EID:getDescriptionEntry("AchievementWarningTitle") or ""
|
||||||
demoDescObj.Description = EID:getDescriptionEntry("ModdedRecipesWarningText") or ""
|
demoDescObj.Description = EID:getDescriptionEntry("ModdedRecipesWarningText") or ""
|
||||||
@@ -639,13 +639,12 @@ local function onRender(t)
|
|||||||
EID.isHidden = not EID.isHidden
|
EID.isHidden = not EID.isHidden
|
||||||
end
|
end
|
||||||
|
|
||||||
if ModConfigMenu and ModConfigMenu.IsVisible and ModConfigMenu.Config["Mod Config Menu"].HideHudInMenu and EID.MCMCompat_isDisplayingEIDTab ~= "Visuals" then --if if the mod config menu exists, is opened and Hide Hud is enabled, and ModConfigMenu is currently in the "Visuals" tab of EID
|
if ModConfigMenu and ModConfigMenu.IsVisible and ModConfigMenu.Config["Mod Config Menu"].HideHudInMenu and EID.MCMCompat_isDisplayingEIDTab ~= "Visuals" and EID.MCMCompat_isDisplayingEIDTab ~= "Crafting" then --if the mod config menu exists, is opened and Hide Hud is enabled, and ModConfigMenu isn't currently in the "Visuals" or "Crafting" tab of EID
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
EID:renderMCMDummyDescription()
|
|
||||||
|
|
||||||
renderAchievementInfo()
|
renderAchievementInfo()
|
||||||
|
EID:renderMCMDummyDescription()
|
||||||
|
|
||||||
if EID.GameVersion == "ab+" then
|
if EID.GameVersion == "ab+" then
|
||||||
if EID.player:HasCollectible(CollectibleType.COLLECTIBLE_SCHOOLBAG) then
|
if EID.player:HasCollectible(CollectibleType.COLLECTIBLE_SCHOOLBAG) then
|
||||||
@@ -659,12 +658,6 @@ local function onRender(t)
|
|||||||
else
|
else
|
||||||
EID:removeTextPosModifier("Tained HUD")
|
EID:removeTextPosModifier("Tained HUD")
|
||||||
end
|
end
|
||||||
if EID.player:HasCollectible(710) then
|
|
||||||
local success = EID:handleBagOfCraftingRendering()
|
|
||||||
if success then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if EID.isHidden then
|
if EID.isHidden then
|
||||||
@@ -681,6 +674,13 @@ local function onRender(t)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if REPENTANCE and EID.player:HasCollectible(710) then
|
||||||
|
local success = EID:handleBagOfCraftingRendering()
|
||||||
|
if success then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
EID.lastDescriptionEntity = nil
|
EID.lastDescriptionEntity = nil
|
||||||
EID.lastDist = 10000
|
EID.lastDist = 10000
|
||||||
local searchGroups = {}
|
local searchGroups = {}
|
||||||
|
|||||||
+44
-7
@@ -1,3 +1,20 @@
|
|||||||
|
Controller = Controller or {}
|
||||||
|
Controller.DPAD_LEFT = 0
|
||||||
|
Controller.DPAD_RIGHT = 1
|
||||||
|
Controller.DPAD_UP = 2
|
||||||
|
Controller.DPAD_DOWN = 3
|
||||||
|
Controller.BUTTON_A = 4
|
||||||
|
Controller.BUTTON_B = 5
|
||||||
|
Controller.BUTTON_X = 6
|
||||||
|
Controller.BUTTON_Y = 7
|
||||||
|
Controller.BUMPER_LEFT = 8
|
||||||
|
Controller.TRIGGER_LEFT = 9
|
||||||
|
Controller.STICK_LEFT = 10
|
||||||
|
Controller.BUMPER_RIGHT = 11
|
||||||
|
Controller.TRIGGER_RIGHT = 12
|
||||||
|
Controller.STICK_RIGHT = 13
|
||||||
|
Controller.BUTTON_BACK = 14
|
||||||
|
Controller.BUTTON_START = 15
|
||||||
|
|
||||||
-- MOD CONFIG MENU Compatibility
|
-- MOD CONFIG MENU Compatibility
|
||||||
local MCMLoaded, MCM = pcall(require, "scripts.modconfig")
|
local MCMLoaded, MCM = pcall(require, "scripts.modconfig")
|
||||||
@@ -43,6 +60,8 @@ function EID:renderMCMDummyDescription()
|
|||||||
EID:renderHUDLocationIndicators()
|
EID:renderHUDLocationIndicators()
|
||||||
elseif EID.MCMCompat_isDisplayingEIDTab == "Visuals" and EID.permanentDisplayTextObj == nil then
|
elseif EID.MCMCompat_isDisplayingEIDTab == "Visuals" and EID.permanentDisplayTextObj == nil then
|
||||||
renderDummyDesc()
|
renderDummyDesc()
|
||||||
|
elseif EID.MCMCompat_isDisplayingEIDTab == "Crafting" then
|
||||||
|
clearRenderDummyDesc()
|
||||||
end
|
end
|
||||||
MCMCompat_isDisplayingDummyMCMObj = true
|
MCMCompat_isDisplayingDummyMCMObj = true
|
||||||
EID:buildColorArray()
|
EID:buildColorArray()
|
||||||
@@ -1136,7 +1155,8 @@ if MCMLoaded then
|
|||||||
Minimum = 1,
|
Minimum = 1,
|
||||||
Maximum = 3,
|
Maximum = 3,
|
||||||
Display = function()
|
Display = function()
|
||||||
return "Display Mode: " .. EID.Config["DisplayBagOfCrafting"]
|
EID.MCMCompat_isDisplayingEIDTab = "Crafting"
|
||||||
|
return "Show Display: " .. EID.Config["DisplayBagOfCrafting"]
|
||||||
end,
|
end,
|
||||||
OnChange = function(currentNum)
|
OnChange = function(currentNum)
|
||||||
EID.Config["DisplayBagOfCrafting"] = bagDisplays[currentNum]
|
EID.Config["DisplayBagOfCrafting"] = bagDisplays[currentNum]
|
||||||
@@ -1144,16 +1164,32 @@ if MCMLoaded then
|
|||||||
Info = {"Always = Always show Results, Hold = Show when holding up bag, Never = Never show results"}
|
Info = {"Always = Always show Results, Hold = Show when holding up bag, Never = Never show results"}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
-- Bag of Crafting Display Mode
|
||||||
|
local bagDisplayModes = {"Recipe List","Preview Only","No Recipes"}
|
||||||
|
MCM.AddSetting(
|
||||||
|
"EID",
|
||||||
|
"Crafting",
|
||||||
|
{
|
||||||
|
Type = ModConfigMenu.OptionType.NUMBER,
|
||||||
|
CurrentSetting = function()
|
||||||
|
return AnIndexOf(bagDisplayModes, EID.Config["BagOfCraftingDisplayMode"])
|
||||||
|
end,
|
||||||
|
Minimum = 1,
|
||||||
|
Maximum = 3,
|
||||||
|
Display = function()
|
||||||
|
return "Display Mode: " .. EID.Config["BagOfCraftingDisplayMode"]
|
||||||
|
end,
|
||||||
|
OnChange = function(currentNum)
|
||||||
|
EID.Config["BagOfCraftingDisplayMode"] = bagDisplayModes[currentNum]
|
||||||
|
end,
|
||||||
|
Info = {"Toggle showing a list of calculated recipes, showing just an item preview when the bag is full, or showing percentages of what item you might get (No Recipes is recommended if using modded items)"}
|
||||||
|
}
|
||||||
|
)
|
||||||
-- Bag of Crafting Hide in Battle
|
-- Bag of Crafting Hide in Battle
|
||||||
EID:AddBooleanSetting("Crafting",
|
EID:AddBooleanSetting("Crafting",
|
||||||
"BagOfCraftingHideInBattle",
|
"BagOfCraftingHideInBattle",
|
||||||
"Hide in Battle", "Yes", "No",
|
"Hide in Battle", "Yes", "No",
|
||||||
"Hides the recipe list when in a fight")
|
"Hides the recipe list when in a fight")
|
||||||
-- Bag of Crafting No Recipes Mode
|
|
||||||
EID:AddBooleanSetting("Crafting",
|
|
||||||
"BagOfCraftingSimplifiedMode",
|
|
||||||
"No Recipes Mode", "On", "Off",
|
|
||||||
"No Recipes Mode shows quality and item pool percentages instead of exact recipes, for a more intended experience")
|
|
||||||
-- Bag of Crafting 8 icons toggle
|
-- Bag of Crafting 8 icons toggle
|
||||||
EID:AddBooleanSetting("Crafting",
|
EID:AddBooleanSetting("Crafting",
|
||||||
"BagOfCraftingDisplayIcons",
|
"BagOfCraftingDisplayIcons",
|
||||||
@@ -1161,6 +1197,7 @@ if MCMLoaded then
|
|||||||
"Choose if you want recipes (and the Best Quality bag in No Recipes Mode) shown as 8 icons, or as grouped ingredients")
|
"Choose if you want recipes (and the Best Quality bag in No Recipes Mode) shown as 8 icons, or as grouped ingredients")
|
||||||
|
|
||||||
MCM.AddSpace("EID", "Crafting")
|
MCM.AddSpace("EID", "Crafting")
|
||||||
|
MCM.AddText("EID", "Crafting", function() return "Recipe List Options" end)
|
||||||
|
|
||||||
-- Bag of Crafting results per page
|
-- Bag of Crafting results per page
|
||||||
MCM.AddSetting(
|
MCM.AddSetting(
|
||||||
@@ -1255,7 +1292,7 @@ if MCMLoaded then
|
|||||||
|
|
||||||
EID:AddHotkeySetting("Crafting",
|
EID:AddHotkeySetting("Crafting",
|
||||||
"CraftingResultKey", "Result Toggle (Keyboard)",
|
"CraftingResultKey", "Result Toggle (Keyboard)",
|
||||||
"Press this key to toggle the description of the item ready to be crafted", false)
|
"Press this key to toggle the description of the item ready to be crafted in Recipe List/No Recipe Mode", false)
|
||||||
EID:AddHotkeySetting("Crafting",
|
EID:AddHotkeySetting("Crafting",
|
||||||
"CraftingResultButton", "Result Toggle (Controller)",
|
"CraftingResultButton", "Result Toggle (Controller)",
|
||||||
"Press this button to toggle the description of the item ready to be crafted (Left Stick or Right Stick recommended; most other buttons will not work)", true)
|
"Press this button to toggle the description of the item ready to be crafted (Left Stick or Right Stick recommended; most other buttons will not work)", true)
|
||||||
|
|||||||
Reference in new issue
Block a user