diff --git a/modsettings/CustomUIAssets.json b/modsettings/CustomUIAssets.json index 37fe7bd3..67f88956 100644 --- a/modsettings/CustomUIAssets.json +++ b/modsettings/CustomUIAssets.json @@ -30,14 +30,14 @@ "URL": "http://cloud-3.steamusercontent.com/ugc/2026086584372569912/5CB461AEAE2E59D3064D90A776EB86C46081EC78/" }, { - "Name": "option-on", + "Name": "option_on", "Type": 0, - "URL": "http://cloud-3.steamusercontent.com/ugc/2462982115668997008/2178787B67B3C96F3419EDBAB8420E39893756BC/" + "URL": "http://cloud-3.steamusercontent.com/ugc/2024962321889555728/22ABD35CBB49A001F3A5318E4AFCFB22D24FEA39/" }, { - "Name": "option-off", + "Name": "option_off", "Type": 0, - "URL": "http://cloud-3.steamusercontent.com/ugc/2462982115668996901/D6438ECBB11DECC6DB9987589FF526FBAD4D2368/" + "URL": "http://cloud-3.steamusercontent.com/ugc/2024962321889555661/6643E5CC9160FF4624672C255D0DF7B313DA00A5/" }, { "Name": "font_arkhamicons", @@ -69,16 +69,6 @@ "Type": 0, "URL": "http://cloud-3.steamusercontent.com/ugc/2280574378889753733/F67B7B37FF7AA253B6D697E577DF54A3E76030C2/" }, - { - "Name": "option_on", - "Type": 0, - "URL": "http://cloud-3.steamusercontent.com/ugc/2024962321889555728/22ABD35CBB49A001F3A5318E4AFCFB22D24FEA39/" - }, - { - "Name": "option_off", - "Type": 0, - "URL": "http://cloud-3.steamusercontent.com/ugc/2024962321889555661/6643E5CC9160FF4624672C255D0DF7B313DA00A5/" - }, { "Name": "SpeechBubble", "Type": 0, diff --git a/src/accessories/CleanUpHelper.ttslua b/src/accessories/CleanUpHelper.ttslua index c8a784ef..c161432c 100644 --- a/src/accessories/CleanUpHelper.ttslua +++ b/src/accessories/CleanUpHelper.ttslua @@ -369,8 +369,8 @@ function tidyPlayerMatCoroutine() if tekeliliHelper then tekeliliHelper.call("spawnStoredTekelili", color) end + ::continue:: end - ::continue:: end -- mythos area cleanup diff --git a/src/accessories/PhaseTracker.ttslua b/src/accessories/PhaseTracker.ttslua index e646a004..19af8ff9 100644 --- a/src/accessories/PhaseTracker.ttslua +++ b/src/accessories/PhaseTracker.ttslua @@ -42,10 +42,11 @@ function onLoad(savedData) color = { r = 0, g = 0, b = 0, a = 0 } }) - self.addContextMenuItem("toggle broadcasting", updateBroadcast) + self.addContextMenuItem("Toggle Broadcasting", updateBroadcast) end -function updateBroadcast() +function updateBroadcast(playerColor) + Player[playerColor].clearSelectedObjects() for _, tracker in ipairs(getObjectsWithTag("LinkedPhaseTracker")) do tracker.setVar("broadcastChange", not broadcastChange) end diff --git a/src/accessories/UnderworldMarketHelper.ttslua b/src/accessories/UnderworldMarketHelper.ttslua index 0373efbb..b24c7962 100644 --- a/src/accessories/UnderworldMarketHelper.ttslua +++ b/src/accessories/UnderworldMarketHelper.ttslua @@ -32,7 +32,7 @@ function onload(savedData) isSetup = false movingCards = false - self.addContextMenuItem('Reset helper', resetHelper) + self.addContextMenuItem('Reset Helper', resetHelper) if savedData and savedData ~= '' then local loaded_data = JSON.decode(savedData) @@ -242,7 +242,8 @@ function finish() 0.75) end -function resetHelper() +function resetHelper(playerColor) + Player[playerColor].clearSelectedObjects() for i, card in ipairs(self.getObjects()) do self.takeObject({ index = 0, @@ -269,7 +270,5 @@ function resetHelper() isSetup = false movingCards = false - self.reset() - print('Underworld Market Helper: Helper has been reset.') end diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua index 98200319..c0967610 100644 --- a/src/core/Global.ttslua +++ b/src/core/Global.ttslua @@ -1448,7 +1448,7 @@ function onClick_toggleOption(_, _, id) local currentState = optionPanel[id] local newState = not currentState applyOptionPanelChange(id, newState) - UI.setAttribute(id, "image", newState and "option-on" or "option-off") + UI.setAttribute(id, "image", newState and "option_on" or "option_off") end -- color selection for playArea @@ -1542,9 +1542,9 @@ function updateOptionPanelState() elseif (type(optionValue) == "boolean" and optionValue) or (type(optionValue) == "string" and optionValue) or (type(optionValue) == "table" and #optionValue ~= 0) then - UI.setAttribute(id, "image", "option-on") + UI.setAttribute(id, "image", "option_on") else - UI.setAttribute(id, "image", "option-off") + UI.setAttribute(id, "image", "option_off") end end end diff --git a/src/core/MythosArea.ttslua b/src/core/MythosArea.ttslua index 9ce728d3..a40d6813 100644 --- a/src/core/MythosArea.ttslua +++ b/src/core/MythosArea.ttslua @@ -78,7 +78,7 @@ function onCollisionEnter(collisionInfo) local localPos = self.positionToLocal(object.getPosition()) if inArea(localPos, ENCOUNTER_DECK_AREA) or inArea(localPos, ENCOUNTER_DISCARD_AREA) then - Wait.frames(function() tokenSpawnTrackerApi.resetTokensSpawned(object.getGUID()) end, 1) + Wait.frames(function() tokenSpawnTrackerApi.resetTokensSpawned(object) end, 1) removeTokensFromObject(object) end end @@ -100,7 +100,7 @@ end function onObjectEnterContainer(container, object) local localPos = self.positionToLocal(container.getPosition()) if inArea(localPos, ENCOUNTER_DECK_AREA) or inArea(localPos, ENCOUNTER_DISCARD_AREA) then - tokenSpawnTrackerApi.resetTokensSpawned(object.getGUID()) + tokenSpawnTrackerApi.resetTokensSpawned(object) removeTokensFromObject(object) end end diff --git a/src/core/UniversalActionAbilityToken.ttslua b/src/core/UniversalActionAbilityToken.ttslua index b991697f..de55b40d 100644 --- a/src/core/UniversalActionAbilityToken.ttslua +++ b/src/core/UniversalActionAbilityToken.ttslua @@ -202,6 +202,7 @@ end function addContextMenu() self.addContextMenuItem("Change color", function(playerColor) + Player[playerColor].clearSelectedObjects() local currentClassDisplayName = listOfClassDisplayNames[getIndexOfValue(listOfClasses, class)] Player[playerColor].showOptionsDialog("Choose color", listOfClassDisplayNames, currentClassDisplayName, function(_, selectedIndex) @@ -210,6 +211,7 @@ function addContextMenu() end) self.addContextMenuItem("Change 1st symbol", function(playerColor) + Player[playerColor].clearSelectedObjects() local symbolList = getSymbolList() Player[playerColor].showOptionsDialog("Choose symbol", listOfSymbols, symbolList[1], function(newSymbol) if newSymbol == "None" then @@ -229,6 +231,7 @@ function addContextMenu() end) self.addContextMenuItem("Change 2nd symbol", function(playerColor) + Player[playerColor].clearSelectedObjects() local symbolList = getSymbolList() Player[playerColor].showOptionsDialog("Choose 2nd symbol", listOfSymbols, symbolList[2] or symbolList[1], function(newSymbol) diff --git a/src/core/token/TokenManager.ttslua b/src/core/token/TokenManager.ttslua index 0f208129..afc89c32 100644 --- a/src/core/token/TokenManager.ttslua +++ b/src/core/token/TokenManager.ttslua @@ -211,10 +211,11 @@ do if tokenType == "clue" then offsets = internal.buildClueOffsets(card, tokenCount) else - -- only up to 12 offset tables defined (TODO: stack more than 12 tokens and generate offsets dynamically) + -- only up to 12 offset tables defined if tokenCount > 12 then - printToAll("Spawning maximum of 12 tokens.") - tokenCount = 12 + printToAll("Attempting to spawn " .. tokenCount .. " tokens. Spawning clickable counter instead.") + TokenManager.spawnResourceCounterToken(card, tokenCount) + return end for i = 1, tokenCount do offsets[i] = card.positionToWorld(PLAYER_CARD_TOKEN_OFFSETS[tokenCount][i]) @@ -297,20 +298,13 @@ do -- Checks a card for metadata to maybe replenish it ---@param card tts__Object Card object to be replenished ---@param uses table The already decoded metadata.uses (to avoid decoding again) - ---@param mat tts__Object The playermat the card is placed on (for rotation and casting) - TokenManager.maybeReplenishCard = function(card, uses, mat) + TokenManager.maybeReplenishCard = function(card, uses) -- TODO: support for cards with multiple uses AND replenish (as of yet, no official card needs that) if uses[1].count and uses[1].replenish then - internal.replenishTokens(card, uses, mat) + internal.replenishTokens(card, uses) end end - -- Delegate function to the token spawn tracker. Exists to avoid circular dependencies in some callers - ---@param card tts__Object Card object to reset the tokens for - TokenManager.resetTokensSpawned = function(card) - tokenSpawnTrackerApi.resetTokensSpawned(card.getGUID()) - end - -- Pushes new player card data into the local copy of the Data Helper player data. ---@param dataTable table Key/Value pairs following the DataHelper style TokenManager.addPlayerCardData = function(dataTable) @@ -483,16 +477,16 @@ do ---@param card tts__Object Card object to be replenished ---@param uses table The already decoded metadata.uses (to avoid decoding again) - ---@param mat tts__Object The playermat the card is placed on (for rotation and casting) - internal.replenishTokens = function(card, uses, mat) - -- get current amount of resource tokens on the card + internal.replenishTokens = function(card, uses) + -- get current amount of matching resource tokens on the card local clickableResourceCounter = nil local foundTokens = 0 + local searchType = string.lower(uses[1].type) for _, obj in ipairs(searchLib.onObject(card, "isTileOrToken")) do local memo = obj.getMemo() - if (stateTable[memo] or 0) > 0 then + if searchType == memo then foundTokens = foundTokens + math.abs(obj.getQuantity()) obj.destruct() elseif memo == "resourceCounter" then diff --git a/src/core/token/TokenSpawnTracker.ttslua b/src/core/token/TokenSpawnTracker.ttslua index 0340ae91..1061197f 100644 --- a/src/core/token/TokenSpawnTracker.ttslua +++ b/src/core/token/TokenSpawnTracker.ttslua @@ -22,8 +22,8 @@ function markTokensSpawned(cardGuid) spawnedCardGuids[cardGuid] = true end -function resetTokensSpawned(cardGuid) - spawnedCardGuids[cardGuid] = nil +function resetTokensSpawned(card) + spawnedCardGuids[card.getGUID()] = nil end function resetAll() spawnedCardGuids = {} end @@ -52,6 +52,6 @@ end -- Listener to reset card token spawns when they enter a hand. function onObjectEnterZone(zone, enterObject) if zone.type == "Hand" and enterObject.type == "Card" then - resetTokensSpawned(enterObject.getGUID()) + resetTokensSpawned(enterObject) end end diff --git a/src/core/token/TokenSpawnTrackerApi.ttslua b/src/core/token/TokenSpawnTrackerApi.ttslua index 1ba4c261..e8176296 100644 --- a/src/core/token/TokenSpawnTrackerApi.ttslua +++ b/src/core/token/TokenSpawnTrackerApi.ttslua @@ -14,8 +14,8 @@ do return getSpawnTracker().call("markTokensSpawned", cardGuid) end - TokenSpawnTracker.resetTokensSpawned = function(cardGuid) - return getSpawnTracker().call("resetTokensSpawned", cardGuid) + TokenSpawnTracker.resetTokensSpawned = function(card) + return getSpawnTracker().call("resetTokensSpawned", card) end TokenSpawnTracker.resetAllAssetAndEvents = function() diff --git a/src/playercards/CardsThatRedrawTokens.ttslua b/src/playercards/CardsThatRedrawTokens.ttslua index 479dc55a..b975f8a2 100644 --- a/src/playercards/CardsThatRedrawTokens.ttslua +++ b/src/playercards/CardsThatRedrawTokens.ttslua @@ -63,9 +63,8 @@ function onLoad(savedData) local loadedData = JSON.decode(savedData) isHelperEnabled = loadedData.isHelperEnabled end - checkOptionPanel() createHelperXML() - updateDisplay() + checkOptionPanel() end function createHelperXML() diff --git a/src/playercards/CardsWithHelper.ttslua b/src/playercards/CardsWithHelper.ttslua index b0f1cfd1..c92ffda9 100644 --- a/src/playercards/CardsWithHelper.ttslua +++ b/src/playercards/CardsWithHelper.ttslua @@ -5,6 +5,8 @@ function checkOptionPanel() local options = optionPanelApi.getOptions() if options.enableCardHelpers then setHelperState(true) + else + updateDisplay() end end diff --git a/src/playercards/Tarotcard.ttslua b/src/playercards/Tarotcard.ttslua index d1c1bbbc..e9abd0d0 100644 --- a/src/playercards/Tarotcard.ttslua +++ b/src/playercards/Tarotcard.ttslua @@ -5,7 +5,8 @@ function onLoad() end -- rotates the alt_view_angle -function rotatePreview() +function rotatePreview(playerColor) + Player[playerColor].clearSelectedObjects() local angle = self.alt_view_angle if angle.y == 0 then angle.y = 180 @@ -16,7 +17,7 @@ function rotatePreview() end -- rotates this card and the preview -function rotateSelfAndPreview() +function rotateSelfAndPreview(playerColor) self.setRotationSmooth(self.getRotation() + Vector(0, 180, 0)) - rotatePreview() + rotatePreview(playerColor) end diff --git a/src/playercards/cards/BookofLivingMyths.ttslua b/src/playercards/cards/BookofLivingMyths.ttslua index 7f7f116b..b30f04d6 100644 --- a/src/playercards/cards/BookofLivingMyths.ttslua +++ b/src/playercards/cards/BookofLivingMyths.ttslua @@ -16,7 +16,6 @@ function onLoad(savedData) isHelperEnabled = loadedData.isHelperEnabled end checkOptionPanel() - updateDisplay() end -- hide buttons and stop monitoring diff --git a/src/playercards/cards/EmpiricalHypothesis.ttslua b/src/playercards/cards/EmpiricalHypothesis.ttslua index 21f1f986..d2b410d3 100644 --- a/src/playercards/cards/EmpiricalHypothesis.ttslua +++ b/src/playercards/cards/EmpiricalHypothesis.ttslua @@ -46,7 +46,6 @@ function onLoad(savedData) activeButtonIndex = loadedData.activeButtonIndex end checkOptionPanel() - updateDisplay() if activeButtonIndex > 0 then selectButton(activeButtonIndex) @@ -89,6 +88,7 @@ function createButtons() local upgradeSheet = findUpgradeSheet() if upgradeSheet then for i = 1, 4 do + log(4) if upgradeSheet.call("isUpgradeActive", i) then table.insert(hypothesisList, customizableList[i]) end @@ -110,7 +110,7 @@ end function findUpgradeSheet() local matColor = playermatApi.getMatColorByPosition(self.getPosition()) - local result = playermatApi.searchAroundPlaymat(matColor, "isCard") + local result = playermatApi.searchAroundPlayermat(matColor, "isCard") for j, card in ipairs(result) do local metadata = JSON.decode(card.getGMNotes()) or {} if metadata.id == "09041-c" then diff --git a/src/playercards/cards/FamilyInheritance.ttslua b/src/playercards/cards/FamilyInheritance.ttslua index 19ea08cc..e5b71240 100644 --- a/src/playercards/cards/FamilyInheritance.ttslua +++ b/src/playercards/cards/FamilyInheritance.ttslua @@ -6,9 +6,21 @@ local clickableResourceCounter = nil local foundTokens = 0 function onLoad() - self.addContextMenuItem("Add 4 resources", function(playerColor) add4(playerColor) end) - self.addContextMenuItem("Take all resources", function(playerColor) takeAll(playerColor) end) - self.addContextMenuItem("Discard all resources", function(playerColor) loseAll(playerColor) end) + self.addContextMenuItem("Add 4 resources", + function(playerColor) + Player[playerColor].clearSelectedObjects() + add4(playerColor) + end) + self.addContextMenuItem("Take all resources", + function(playerColor) + Player[playerColor].clearSelectedObjects() + takeAll(playerColor) + end) + self.addContextMenuItem("Discard all resources", + function(playerColor) + Player[playerColor].clearSelectedObjects() + loseAll(playerColor) + end) end function searchSelf() @@ -35,12 +47,7 @@ function add4(playerColor) if clickableResourceCounter then clickableResourceCounter.call("updateVal", newCount) else - if newCount > 12 then - printToColor("Count increased to " .. newCount .. " resources. Spawning clickable counter instead.", playerColor) - tokenManager.spawnResourceCounterToken(self, newCount) - else - tokenManager.spawnTokenGroup(self, "resource", newCount) - end + tokenManager.spawnTokenGroup(self, "resource", newCount) end end diff --git a/src/playercards/cards/NkosiMabati3.ttslua b/src/playercards/cards/NkosiMabati3.ttslua index 187d302c..83d2e6b9 100644 --- a/src/playercards/cards/NkosiMabati3.ttslua +++ b/src/playercards/cards/NkosiMabati3.ttslua @@ -61,6 +61,7 @@ end -- Create dialog window to choose sigil and create sigil-drawing button function chooseSigil(playerColor) + Player[playerColor].clearSelectedObjects() self.clearContextMenu() self.addContextMenuItem("Clear Helper", deleteButtons) @@ -80,7 +81,8 @@ function chooseSigil(playerColor) end -- Delete button and remove sigil -function deleteButtons() +function deleteButtons(playerColor) + Player[playerColor].clearSelectedObjects() self.clearContextMenu() self.addContextMenuItem("Enable Helper", chooseSigil) self.UI.setXml("") diff --git a/src/playercards/cards/ScrollofSecrets.ttslua b/src/playercards/cards/ScrollofSecrets.ttslua index 39c0a97e..544ef2c8 100644 --- a/src/playercards/cards/ScrollofSecrets.ttslua +++ b/src/playercards/cards/ScrollofSecrets.ttslua @@ -17,6 +17,7 @@ function onLoad() end function contextFunc(playerColor, amount) + Player[playerColor].clearSelectedObjects() deckData = {} local options = {} diff --git a/src/playercards/cards/ShortSupply.ttslua b/src/playercards/cards/ShortSupply.ttslua index 8074211b..cdca89b6 100644 --- a/src/playercards/cards/ShortSupply.ttslua +++ b/src/playercards/cards/ShortSupply.ttslua @@ -5,7 +5,8 @@ function onLoad() end -- called by context menu entry -function shortSupply(color) +function shortSupply(playerColor) + Player[playerColor].clearSelectedObjects() local matColor = playermatApi.getMatColorByPosition(self.getPosition()) -- get draw deck and discard position @@ -15,20 +16,20 @@ function shortSupply(color) -- error handling if discardPos == nil then - broadcastToColor("Couldn't retrieve discard position from playermat!", color, "Red") + broadcastToColor("Couldn't retrieve discard position from playermat!", playerColor, "Red") return end if drawDeck == nil then - broadcastToColor("Deck not found!", color, "Yellow") + broadcastToColor("Deck not found!", playerColor, "Yellow") return elseif drawDeck.type ~= "Deck" then - broadcastToColor("Deck only contains a single card!", color, "Yellow") + broadcastToColor("Deck only contains a single card!", playerColor, "Yellow") return end -- discard cards, waiting 0.7 seconds between each discard to give players visiblity of the cards - broadcastToColor("Discarding top 10 cards for player color '" .. matColor .. "'.", color, "White") + broadcastToColor("Discarding top 10 cards for player color '" .. matColor .. "'.", playerColor, "White") for i = 1, 10 do Wait.time(function() drawDeck.takeObject({ flip = true, position = { discardPos.x, 2 + 0.075 * i, discardPos.z } }) end, .7 * (i - 1)) end diff --git a/src/playercards/cards/Tekeli-li.ttslua b/src/playercards/cards/Tekeli-li.ttslua index acf90fae..6a54d793 100644 --- a/src/playercards/cards/Tekeli-li.ttslua +++ b/src/playercards/cards/Tekeli-li.ttslua @@ -7,7 +7,8 @@ function onLoad() end -- uses the tekeli-li helper to place this card at the bottom of the deck -function returnSelf() +function returnSelf(playerColor) + Player[playerColor].clearSelectedObjects() local helper = getTekeliliHelper() if helper == nil then printToAll("Couldn't find Tekeli-li Helper!") @@ -18,6 +19,7 @@ end -- places this card below the deck of the player that triggered it function placeBelowDeck(playerColor) + Player[playerColor].clearSelectedObjects() local matColor = playermatApi.getMatColor(playerColor) local deckPos = playermatApi.getDrawPosition(matColor) local deckRot = playermatApi.returnRotation(matColor) diff --git a/src/playermat/Playermat.ttslua b/src/playermat/Playermat.ttslua index 26e67c72..4e2b61f5 100644 --- a/src/playermat/Playermat.ttslua +++ b/src/playermat/Playermat.ttslua @@ -6,6 +6,7 @@ local navigationOverlayApi = require("core/NavigationOverlayApi") local searchLib = require("util/SearchLib") local tokenChecker = require("core/token/TokenChecker") local tokenManager = require("core/token/TokenManager") +local tokenSpawnTrackerApi = require("core/token/TokenSpawnTrackerApi") -- we use this to turn off collision handling until onLoad() is complete local collisionEnabled = false @@ -62,12 +63,12 @@ local buttonParameters = { -- table of texture URLs local nameToTexture = { - Guardian = "http://cloud-3.steamusercontent.com/ugc/2444972799638881117/169F4520A94FB186B54E0F2BF4BAC809844C923E/", - Mystic = "http://cloud-3.steamusercontent.com/ugc/2444972799638880413/B59966123EA41649EDCBD614167E590C8C105582/", + Guardian = "http://cloud-3.steamusercontent.com/ugc/2501268517203536128/853B9CD08FC14A8B2A08C73D8ED77E0FE235CCCB/", + Mystic = "http://cloud-3.steamusercontent.com/ugc/2501268517203536470/11C99488B9CA9236059A5F02E4A852A7C77B42A6/", Neutral = "http://cloud-3.steamusercontent.com/ugc/2462982115659543571/5D778EA4BC682DAE97E8F59A991BCF8CB3979B04/", - Rogue = "http://cloud-3.steamusercontent.com/ugc/2444972799638880905/CFC02BF5A6140B9B4B92312AD6DC74D8DD61180B/", - Seeker = "http://cloud-3.steamusercontent.com/ugc/2444972799638881117/169F4520A94FB186B54E0F2BF4BAC809844C923E/", - Survivor = "http://cloud-3.steamusercontent.com/ugc/2444972799638880687/EEDF8F8BC3266069FECB09775845BE2501310C17/" + Rogue = "http://cloud-3.steamusercontent.com/ugc/2501268517203536767/587791B327255DB8F953B27BB9E4DE602FA32B64/", + Seeker = "http://cloud-3.steamusercontent.com/ugc/2501268517203537098/EFD9FC4CCDB105EFFDFF7A57C915CD984865760D/", + Survivor = "http://cloud-3.steamusercontent.com/ugc/2501268517203537426/14EF780606D9A449F31A007226CB48D05AA820FF/" } -- translation table for slot names to characters for special font @@ -344,7 +345,7 @@ function doUpkeep(_, clickedByColor, isRightClick) end -- maybe replenish uses on certain cards (don't continue for cards on the deck (Norman) or in the discard pile) - if cardMetadata.uses ~= nil and self.positionToLocal(obj.getPosition()).x < -1 then + if cardMetadata.uses ~= nil and self.positionToLocal(obj.getPosition()).x > -1 then tokenManager.maybeReplenishCard(obj, cardMetadata.uses, self) end elseif obj.type == "Deck" and forcedLearning == false then @@ -821,7 +822,7 @@ function onCollisionEnter(collisionInfo) local localCardPos = self.positionToLocal(object.getPosition()) if inArea(localCardPos, DECK_DISCARD_AREA) then - tokenManager.resetTokensSpawned(object) + tokenSpawnTrackerApi.resetTokensSpawned(object) removeTokensFromObject(object) elseif shouldSpawnTokens(object) then spawnTokensFor(object) @@ -865,7 +866,7 @@ function onObjectEnterContainer(container, object) local localCardPos = self.positionToLocal(object.getPosition()) if inArea(localCardPos, DECK_DISCARD_AREA) then - tokenManager.resetTokensSpawned(object) + tokenSpawnTrackerApi.resetTokensSpawned(object) removeTokensFromObject(object) end end diff --git a/xml/Global/OptionPanel.xml b/xml/Global/OptionPanel.xml index f5246678..6530366b 100644 --- a/xml/Global/OptionPanel.xml +++ b/xml/Global/OptionPanel.xml @@ -62,7 +62,7 @@