diff --git a/src/playercards/CardsThatSealTokens.ttslua b/src/playercards/CardsThatSealTokens.ttslua index f7d76194..50e781e4 100644 --- a/src/playercards/CardsThatSealTokens.ttslua +++ b/src/playercards/CardsThatSealTokens.ttslua @@ -17,14 +17,22 @@ SHOW_SINGLE_RELEASE --@type: boolean - this entry allows releasing a single token - example usage: "Holy Spear" (to keep the other tokens and just release one) +SHOW_UP_TO_MULTI_RELEASE --@type: number (maximum amount of tokens to release at once) + - enables an entry in the context menu + - this entry allows releasing of multiple tokens at once, to the maximum number + - does not fail if there are fewer than the maximum sealed + - example usage: "Nephthys" (to release up to 3 bless tokens at once) + SHOW_MULTI_RELEASE --@type: number (amount of tokens to release at once) - enables an entry in the context menu - this entry allows releasing of multiple tokens at once - - example usage: "Nephthys" (to release 3 bless tokens at once) + - fails if not enough tokens are sealed + - example usage: Maybe a Custom Card? SHOW_MULTI_RETURN --@type: number (amount of tokens to return to pool at once) - enables an entry in the context menu - this entry allows returning tokens to the token pool + - fails if not enough tokens are sealed - example usage: "Nephthys" (to return 3 bless tokens at once) SHOW_MULTI_SEAL --@type: number (amount of tokens to seal at once) @@ -79,10 +87,25 @@ local guidReferenceApi = require("core/GUIDReferenceApi") local playermatApi = require("playermat/PlayermatApi") local tokenArrangerApi = require("accessories/TokenArrangerApi") +local MAX_SEALED = MAX_SEALED or nil local sealedTokens = {} local ID_URL_MAP = {} local tokensInBag = {} +-- XML background color for each token for label when stacked +local tokenColor = { + ["Skull"] = "#4A0400E6", + ["Cultist"] = "#173B0BE6", + ["Tablet"] = "#1D2238E6", + ["Elder Thing"] = "#4D2331E6", + ["Auto-fail"] = "#9B0004E6", + ["Bless"] = "#9D702CE6", + ["Curse"] = "#633A84E6", + ["Frost"] = "#404450E6", + ["Elder Sign"] = "#50A8CEE6", + [""] = "#77674DE6" +} + function onSave() return JSON.encode(sealedTokens) end function onLoad(savedData) @@ -95,12 +118,15 @@ end -- builds the context menu function generateContextMenu() -- conditional single or multi release options - if SHOW_SINGLE_RELEASE then - self.addContextMenuItem("Release token", releaseOneToken) + if MAX_SEALED > 1 then + self.addContextMenuItem("Release one token", releaseOneToken) + end + if SHOW_UP_TO_MULTI_RELEASE then + self.addContextMenuItem("Release max " .. SHOW_UP_TO_MULTI_RELEASE .. " tokens", releaseUpToMultipleTokens) elseif SHOW_MULTI_RELEASE then self.addContextMenuItem("Release " .. SHOW_MULTI_RELEASE .. " token(s)", releaseMultipleTokens) else - self.addContextMenuItem("Release token(s)", releaseAllTokens) + self.addContextMenuItem("Release all tokens", releaseAllTokens) end if RESOLVE_TOKEN then @@ -175,6 +201,10 @@ end -- seals the named token on this card function sealToken(name, playerColor) + if #sealedTokens == MAX_SEALED then + printToColor("Cannot seal any more tokens on this card", playerColor, "Red") + return + end if not chaosBagApi.canTouchChaosTokens() then return end local chaosbag = chaosBagApi.findChaosBag() for i, obj in ipairs(chaosbag.getObjects()) do @@ -190,7 +220,9 @@ function sealToken(name, playerColor) tokenArrangerApi.layout() if name == "Bless" or name == "Curse" then blessCurseManagerApi.sealedToken(name, guid) - addStackSize(token, name) + end + if MAX_SEALED > 1 then + updateStackSize(token, name) end end }) @@ -223,6 +255,26 @@ function releaseMultipleTokens(playerColor) end end +-- release up to multiple tokens at once with no minimum +function releaseUpToMultipleTokens(playerColor) + if #sealedTokens == 0 then + printToColor("Not enough tokens sealed.", playerColor) + return + end + if #sealedTokens < SHOW_UP_TO_MULTI_RELEASE then + local numRemoved = #sealedTokens + for i = 1, #sealedTokens do + putTokenAway(table.remove(sealedTokens)) + end + printToColor("Releasing " .. numRemoved .. " tokens", playerColor) + else + for i = 1, SHOW_UP_TO_MULTI_RELEASE do + putTokenAway(table.remove(sealedTokens)) + end + printToColor("Releasing " .. SHOW_UP_TO_MULTI_RELEASE .. " tokens", playerColor) + end +end + -- releases all sealed tokens function releaseAllTokens(playerColor) if not chaosBagApi.canTouchChaosTokens() then return end @@ -289,12 +341,7 @@ function resolveSealed() chaosBagApi.drawChaosToken(mat, true, _, guidToBeResolved) end -function addStackSize(token, name) - if name == "Bless" then - labelColor = "#9D702CE6" - else - labelColor = "#633A84E6" - end +function updateStackSize(token, name) token.UI.setXmlTable({ { tag = "Panel", @@ -304,7 +351,7 @@ function addStackSize(token, name) rotation = "0 0 180", scale = "0.2 0.2 1", position = "0 0 -12", - color = labelColor + color = tokenColor[name] or "#77674DE6" }, children = { tag = "Text", @@ -314,7 +361,7 @@ function addStackSize(token, name) color = "#ffffff", outline = "#000000", outlineSize = "8 -8", - text = #sealedTokens + text = "x" .. #sealedTokens } } } diff --git a/src/playercards/cards/CrystallineElderSign3.ttslua b/src/playercards/cards/CrystallineElderSign3.ttslua index f0652701..55a8798f 100644 --- a/src/playercards/cards/CrystallineElderSign3.ttslua +++ b/src/playercards/cards/CrystallineElderSign3.ttslua @@ -2,5 +2,6 @@ VALID_TOKENS = { ["+1"] = true, ["Elder Sign"] = true } +MAX_SEALED = 1 require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/DarkRitual.ttslua b/src/playercards/cards/DarkRitual.ttslua index c794a4c9..947a8f59 100644 --- a/src/playercards/cards/DarkRitual.ttslua +++ b/src/playercards/cards/DarkRitual.ttslua @@ -3,5 +3,6 @@ VALID_TOKENS = { } KEEP_OPEN = true +MAX_SEALED = 5 require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/DayofReckoning.ttslua b/src/playercards/cards/DayofReckoning.ttslua index 78e4493c..b23bb958 100644 --- a/src/playercards/cards/DayofReckoning.ttslua +++ b/src/playercards/cards/DayofReckoning.ttslua @@ -2,4 +2,6 @@ VALID_TOKENS = { ["Elder Sign"] = true } +MAX_SEALED = 1 + require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/FavoroftheMoon1.ttslua b/src/playercards/cards/FavoroftheMoon1.ttslua index dbec7836..8e0d6e42 100644 --- a/src/playercards/cards/FavoroftheMoon1.ttslua +++ b/src/playercards/cards/FavoroftheMoon1.ttslua @@ -4,6 +4,7 @@ VALID_TOKENS = { SHOW_SINGLE_RELEASE = true KEEP_OPEN = true +MAX_SEALED = 3 RESOLVE_TOKEN = true require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/FavoroftheSun1.ttslua b/src/playercards/cards/FavoroftheSun1.ttslua index e749c771..d2c6622e 100644 --- a/src/playercards/cards/FavoroftheSun1.ttslua +++ b/src/playercards/cards/FavoroftheSun1.ttslua @@ -4,6 +4,7 @@ VALID_TOKENS = { SHOW_SINGLE_RELEASE = true KEEP_OPEN = true +MAX_SEALED = 3 RESOLVE_TOKEN = true require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/FluteoftheOuterGods4.ttslua b/src/playercards/cards/FluteoftheOuterGods4.ttslua index 004e4628..19d88fc3 100644 --- a/src/playercards/cards/FluteoftheOuterGods4.ttslua +++ b/src/playercards/cards/FluteoftheOuterGods4.ttslua @@ -3,6 +3,7 @@ VALID_TOKENS = { } SHOW_SINGLE_RELEASE = true +MAX_SEALED = 10 KEEP_OPEN = true require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/HolySpear5.ttslua b/src/playercards/cards/HolySpear5.ttslua index aa948b10..65ac16f9 100644 --- a/src/playercards/cards/HolySpear5.ttslua +++ b/src/playercards/cards/HolySpear5.ttslua @@ -4,5 +4,6 @@ VALID_TOKENS = { SHOW_SINGLE_RELEASE = true SHOW_MULTI_SEAL = 2 +MAX_SEALED = 10 require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/Nephthys4.ttslua b/src/playercards/cards/Nephthys4.ttslua index e48958a6..6faac8be 100644 --- a/src/playercards/cards/Nephthys4.ttslua +++ b/src/playercards/cards/Nephthys4.ttslua @@ -2,8 +2,10 @@ VALID_TOKENS = { ["Bless"] = true } +KEEP_OPEN = true SHOW_SINGLE_RELEASE = true -SHOW_MULTI_RELEASE = 3 +SHOW_UP_TO_MULTI_RELEASE = 3 SHOW_MULTI_RETURN = 3 +MAX_SEALED = 10 require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/ProtectiveIncantation1.ttslua b/src/playercards/cards/ProtectiveIncantation1.ttslua index 33b6970f..11dab875 100644 --- a/src/playercards/cards/ProtectiveIncantation1.ttslua +++ b/src/playercards/cards/ProtectiveIncantation1.ttslua @@ -5,5 +5,6 @@ INVALID_TOKENS = { } UPDATE_ON_HOVER = true +MAX_SEALED = 1 require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/RadiantSmite1.ttslua b/src/playercards/cards/RadiantSmite1.ttslua index aef3cd08..956c79fe 100644 --- a/src/playercards/cards/RadiantSmite1.ttslua +++ b/src/playercards/cards/RadiantSmite1.ttslua @@ -3,5 +3,6 @@ VALID_TOKENS = { } KEEP_OPEN = true +MAX_SEALED = 3 require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/RiteofSanctification.ttslua b/src/playercards/cards/RiteofSanctification.ttslua index 8a436d65..f0de0c8c 100644 --- a/src/playercards/cards/RiteofSanctification.ttslua +++ b/src/playercards/cards/RiteofSanctification.ttslua @@ -4,5 +4,6 @@ VALID_TOKENS = { KEEP_OPEN = true SHOW_SINGLE_RELEASE = true +MAX_SEALED = 5 require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/SealoftheSeventhSign5.ttslua b/src/playercards/cards/SealoftheSeventhSign5.ttslua index 736b14a8..23d7b356 100644 --- a/src/playercards/cards/SealoftheSeventhSign5.ttslua +++ b/src/playercards/cards/SealoftheSeventhSign5.ttslua @@ -2,4 +2,6 @@ VALID_TOKENS = { ["Auto-fail"] = true } +MAX_SEALED = 1 + require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/SerpentsofYig.ttslua b/src/playercards/cards/SerpentsofYig.ttslua index 78e4493c..b23bb958 100644 --- a/src/playercards/cards/SerpentsofYig.ttslua +++ b/src/playercards/cards/SerpentsofYig.ttslua @@ -2,4 +2,6 @@ VALID_TOKENS = { ["Elder Sign"] = true } +MAX_SEALED = 1 + require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/ShardsoftheVoid3.ttslua b/src/playercards/cards/ShardsoftheVoid3.ttslua index 10645275..91a24295 100644 --- a/src/playercards/cards/ShardsoftheVoid3.ttslua +++ b/src/playercards/cards/ShardsoftheVoid3.ttslua @@ -3,5 +3,6 @@ VALID_TOKENS = { } SHOW_SINGLE_RELEASE = true +MAX_SEALED = 4 -- Core Set is component-limited to 4 '0' tokens require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/ShieldofFaith2.ttslua b/src/playercards/cards/ShieldofFaith2.ttslua index 8a436d65..f0de0c8c 100644 --- a/src/playercards/cards/ShieldofFaith2.ttslua +++ b/src/playercards/cards/ShieldofFaith2.ttslua @@ -4,5 +4,6 @@ VALID_TOKENS = { KEEP_OPEN = true SHOW_SINGLE_RELEASE = true +MAX_SEALED = 5 require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/TheChthonianStone.ttslua b/src/playercards/cards/TheChthonianStone.ttslua index 050c1176..e8670ec2 100644 --- a/src/playercards/cards/TheChthonianStone.ttslua +++ b/src/playercards/cards/TheChthonianStone.ttslua @@ -5,4 +5,6 @@ VALID_TOKENS = { ["Elder Thing"] = true, } +MAX_SEALED = 1 + require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/TheCodexofAges.ttslua b/src/playercards/cards/TheCodexofAges.ttslua index 1a8729b8..aab59a09 100644 --- a/src/playercards/cards/TheCodexofAges.ttslua +++ b/src/playercards/cards/TheCodexofAges.ttslua @@ -3,5 +3,6 @@ VALID_TOKENS = { } RESOLVE_TOKEN = true +MAX_SEALED = 1 require("playercards/CardsThatSealTokens") diff --git a/src/playercards/cards/Unrelenting1.ttslua b/src/playercards/cards/Unrelenting1.ttslua index 013dd214..8bcab646 100644 --- a/src/playercards/cards/Unrelenting1.ttslua +++ b/src/playercards/cards/Unrelenting1.ttslua @@ -5,5 +5,6 @@ INVALID_TOKENS = { UPDATE_ON_HOVER = true KEEP_OPEN = true +MAX_SEALED = 3 require("playercards/CardsThatSealTokens")