diff --git a/config.json b/config.json
index d53587e0..7ace3af2 100644
--- a/config.json
+++ b/config.json
@@ -3,7 +3,6 @@
"ComponentTags_path": "ComponentTags.json",
"CustomUIAssets_path": "CustomUIAssets.json",
"DecalPallet_path": "DecalPallet.json",
- "Decals": [],
"GameComplexity": "",
"GameMode": "Arkham Horror LCG - Super Complete Edition",
"GameType": "",
@@ -201,7 +200,9 @@
"NavigationOverlayHandler.797ede",
"CampaignImporterExporter.334ee3",
"Bloodborne-CityoftheUnseen.1e7a0b",
- "TheColorOutofOz.806d9a"
+ "TheColorOutofOz.806d9a",
+ "TokenArranger.022907",
+ "ChaosBagManager.023240"
],
"PlayArea": 1,
"PlayerCounts": [
diff --git a/modsettings/ComponentTags.json b/modsettings/ComponentTags.json
index 83a638b1..8d28dfae 100644
--- a/modsettings/ComponentTags.json
+++ b/modsettings/ComponentTags.json
@@ -83,6 +83,10 @@
{
"displayed": "CameraZoom_ignore",
"normalized": "camerazoom_ignore"
+ },
+ {
+ "displayed": "TokenArranger",
+ "normalized": "tokenarranger"
}
]
}
diff --git a/objects/OptionPanelSource.830bd0/ChaosBagManager.023240.json b/objects/ChaosBagManager.023240.json
similarity index 94%
rename from objects/OptionPanelSource.830bd0/ChaosBagManager.023240.json
rename to objects/ChaosBagManager.023240.json
index bc4802ed..364994bd 100644
--- a/objects/OptionPanelSource.830bd0/ChaosBagManager.023240.json
+++ b/objects/ChaosBagManager.023240.json
@@ -32,7 +32,7 @@
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
- "Locked": false,
+ "Locked": true,
"LuaScript": "require(\"accessories/ChaosBagManager\")",
"LuaScriptState": "",
"MeasureMovement": false,
@@ -45,9 +45,9 @@
],
"Tooltip": true,
"Transform": {
- "posX": 22.215,
- "posY": 5.651,
- "posZ": -34.811,
+ "posX": -66,
+ "posY": 1.531,
+ "posZ": -49.5,
"rotX": 0,
"rotY": 270,
"rotZ": 0,
diff --git a/objects/LuaScriptState.luascriptstate b/objects/LuaScriptState.luascriptstate
index 3404240e..599af236 100644
--- a/objects/LuaScriptState.luascriptstate
+++ b/objects/LuaScriptState.luascriptstate
@@ -1 +1 @@
-{"acknowledgedUpgradeVersions":[],"optionPanel":{"cardLanguage":"en","playAreaSnapTags":true,"showAttachmentHelper":false,"showChaosBagManager":false,"showCleanUpHelper":false,"showCustomPlaymatImages":false,"showCYOA":false,"showDisplacementTool":false,"showDrawButton":false,"showHandHelper":[],"showSearchAssistant":[],"showTitleSplash":true,"showTokenArranger":false,"useClueClickers":false,"useSnapTags":true}}
+{"acknowledgedUpgradeVersions":[],"optionPanel":{"cardLanguage":"en","playAreaSnapTags":true,"showAttachmentHelper":false,"showCleanUpHelper":false,"showCustomPlaymatImages":false,"showCYOA":false,"showDisplacementTool":false,"showDrawButton":false,"showHandHelper":[],"showSearchAssistant":[],"showTitleSplash":true,"useClueClickers":false,"useSnapTags":true}}
diff --git a/objects/OptionPanelSource.830bd0.json b/objects/OptionPanelSource.830bd0.json
index 623fc02b..98907beb 100644
--- a/objects/OptionPanelSource.830bd0.json
+++ b/objects/OptionPanelSource.830bd0.json
@@ -14,8 +14,6 @@
"r": 0.70588
},
"ContainedObjects_order": [
- "ChaosBagManager.023240",
- "TokenArranger.022907",
"CYOACampaignGuides.e87ea2",
"AttachmentHelper.7f4976",
"SearchAssistant.17aed0",
diff --git a/objects/OptionPanelSource.830bd0/TokenArranger.022907.json b/objects/TokenArranger.022907.json
similarity index 92%
rename from objects/OptionPanelSource.830bd0/TokenArranger.022907.json
rename to objects/TokenArranger.022907.json
index 6c12cf42..ec5c2a4a 100644
--- a/objects/OptionPanelSource.830bd0/TokenArranger.022907.json
+++ b/objects/TokenArranger.022907.json
@@ -32,9 +32,9 @@
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
- "Locked": false,
+ "Locked": true,
"LuaScript": "require(\"accessories/TokenArranger\")",
- "LuaScriptState": "",
+ "LuaScriptState_path": "TokenArranger.022907.luascriptstate",
"MeasureMovement": false,
"Name": "Custom_Token",
"Nickname": "Token Arranger",
@@ -46,7 +46,7 @@
"Tooltip": true,
"Transform": {
"posX": -42.3,
- "posY": 1.53,
+ "posY": 1.531,
"posZ": -46.5,
"rotX": 0,
"rotY": 270,
diff --git a/objects/TokenArranger.022907.luascriptstate b/objects/TokenArranger.022907.luascriptstate
new file mode 100644
index 00000000..638cf57f
--- /dev/null
+++ b/objects/TokenArranger.022907.luascriptstate
@@ -0,0 +1 @@
+{"percentage":false,"tokenPrecedence":{"":[0,11],"Auto-fail":[-100,7],"Bless":[101,8],"Cultist":[-2,4],"Curse":[-101,9],"Elder Sign":[100,2],"Elder Thing":[-4,6],"Frost":[-99,10],"Skull":[-1,3],"Tablet":[-3,5]}}
diff --git a/src/accessories/TokenArranger.ttslua b/src/accessories/TokenArranger.ttslua
index ab40d7a2..86a57721 100644
--- a/src/accessories/TokenArranger.ttslua
+++ b/src/accessories/TokenArranger.ttslua
@@ -59,7 +59,6 @@ function onLoad(saveState)
end
createButtonsAndInputs(true)
- layout()
-- context menu items
self.addContextMenuItem("Load default values", function()
@@ -73,8 +72,7 @@ function onLoad(saveState)
percentage = false
else
percentage = "basic"
- broadcastToAll("Percentages are unreliable when using tokens that draw other tokens (bless or curse for example).",
- "Yellow")
+ broadcastToAll("Percentages are unreliable when using tokens that draw other tokens (bless or curse for example).", "Yellow")
end
layout()
end)
@@ -85,8 +83,7 @@ function onLoad(saveState)
else
percentage = "cumulative"
end
- broadcastToAll("Percentages are unreliable when using tokens that draw other tokens (bless or curse for example).",
- "Yellow")
+ broadcastToAll("Percentages are unreliable when using tokens that draw other tokens (bless or curse for example).", "Yellow")
layout()
end)
end
@@ -228,51 +225,54 @@ function deleteCopiedTokens()
createButtonsAndInputs()
end
--- creates percentage representation buttons
-function createPercentageButton(basePercentage, valueCount, tokenName, cumulativePercentage)
- local buttonScale, offset, textColor, labelString
+-- creates buttons as labels as display for percentage values
+function createPercentageButton(tokenCount, valueCount, tokenName)
+ -- parameters for button creation
+ local percentageLabel = {}
+ percentageLabel.click_function = "none"
+ percentageLabel.width = 0
+ percentageLabel.height = 0
+ local startPos = Vector(2.3, -0.05, 0.875 * valueCount)
if percentage == "cumulative" then
- buttonScale = {1.5, 1.5, 1.5}
- offset = -2.85
+ percentageLabel.scale = {1.5, 1.5, 1.5}
+ percentageLabel.position = startPos - Vector(0, 0, 2.85)
else
- buttonScale = {2, 2, 2}
- offset = -2.675
+ percentageLabel.scale = {2, 2, 2}
+ percentageLabel.position = startPos - Vector(0, 0, 2.675)
end
- -- if this is a cumulative button (bottom one of the two created buttons)
- if cumulativePercentage then
- offset = -2.45
- textColor = {1, 1, 1}
+ -- determine font_color
+ if tokenName == "Elder Sign" then
+ percentageLabel.font_color = {0.35, 0.71, 0.85}
+ elseif tokenName == "Auto-fail" then
+ percentageLabel.font_color = {0.86, 0.1, 0.1}
+ -- check if the tokenName contains letters (e.g. symbol token)
+ elseif string.match(tokenName, "%a") ~= nil then
+ percentageLabel.font_color = {0.68, 0.53, 0.86}
+ else
+ percentageLabel.font_color = {0.85, 0.67, 0.33}
+ end
+
+ -- create label for base percentage
+ local basePercentage = math.floor((tokenCount.row / tokenCount.total) * 10000) / 100
+ percentageLabel.label = string.format("%s", string.format("%05.2f", basePercentage) .. "%")
+ self.createButton(percentageLabel)
+
+ -- optionally create label for cumulative percentage
+ if percentage == "cumulative" then
+ percentageLabel.position = startPos - Vector(0, 0, 2.45)
+ percentageLabel.font_color = {1, 1, 1}
-- only display one digit for 100%
- if cumulativePercentage == 100 then
- labelString = string.format("%s", string.format("%05.1f", cumulativePercentage) .. "%")
+ if tokenCount.sum == tokenCount.total then
+ percentageLabel.label = "100.0%"
else
- labelString = string.format("%s", string.format("%05.2f", cumulativePercentage) .. "%")
- end
- else
- labelString = string.format("%s", string.format("%05.2f", basePercentage) .. "%")
- if tokenName == "Elder Sign" then
- textColor = {0.35, 0.71, 0.85}
- elseif tokenName == "Auto-fail" then
- textColor = {0.86, 0.1, 0.1}
- elseif tokenName then
- textColor = {0.68, 0.53, 0.86}
- else
- textColor = {0.85, 0.67, 0.33}
+ local cumulativePercentage = math.floor((tokenCount.sum / tokenCount.total) * 10000) / 100
+ percentageLabel.label = string.format("%s", string.format("%05.2f", cumulativePercentage) .. "%")
end
+ self.createButton(percentageLabel)
end
-
- self.createButton({
- label = labelString,
- click_function = "none",
- width = 0,
- height = 0,
- scale = buttonScale,
- font_color = textColor,
- position = Vector(2.3, -0.05, offset + 0.875 * valueCount)
- })
end
-- main function (delete old tokens, clone chaos bag content, sort it and position it)
@@ -293,14 +293,13 @@ function layout(_, _, isRightClick)
-- clone tokens from chaos bag (default position above trash can)
for i, obj in ipairs(chaosBag.getData().ContainedObjects) do
obj["Tags"] = { "tempToken" }
+ local value = tonumber(obj.Nickname)
+ local precedence = tokenPrecedence[obj.Nickname]
local spawnedObj = spawnObjectData({
data = obj,
position = { 0.49, 3, 0 }
})
- local value = tonumber(obj.Nickname)
- local precedence = tokenPrecedence[obj.Nickname]
-
data[i] = {
token = spawnedObj,
value = value or precedence[1]
@@ -323,50 +322,37 @@ function layout(_, _, isRightClick)
local location = { x = pos.x, y = pos.y, z = pos.z }
local currentValue = data[1].value
- local tokenCount = 0
+ local tokenCount = { row = 0, sum = 0, total = #data }
local valueCount = 1
- local cumulativePercentage = 0
local tokenName = false
- for _, item in ipairs(data) do
+ for i, item in ipairs(data) do
+ -- this is true for the first token in a new row
if item.value ~= currentValue then
if percentage then
- local basePercentage = math.floor((tokenCount / #data) * 10000) / 100
- createPercentageButton(basePercentage, valueCount, tokenName)
- if percentage == "cumulative" then
- cumulativePercentage = cumulativePercentage + basePercentage
- createPercentageButton(basePercentage, valueCount, tokenName, cumulativePercentage)
- end
+ tokenCount.sum = tokenCount.sum + tokenCount.row
+ createPercentageButton(tokenCount, valueCount, tokenName)
end
- location.x = location.x - 1.75
- location.z = pos.z
- currentValue = item.value
- valueCount = valueCount + 1
- tokenCount = 0
+ location.x = location.x - 1.75
+ location.z = pos.z
+ currentValue = item.value
+ valueCount = valueCount + 1
+ tokenCount.row = 0
end
item.token.setPosition(location)
item.token.setRotation(self.getRotation())
+ item.token.setLock(true)
location.z = location.z - 1.75
- tokenCount = tokenCount + 1
tokenName = item.token.getName()
-
- -- set tokenName to false if it does not contain letters
- -- tokenName is used by `createPercentageButton()` to determine the textcolor for percentages
- if string.match(tokenName, "%a") == nil then
- tokenName = false
- end
+ tokenCount.row = tokenCount.row + 1
end
-- this is repeated to create the button for the last token
if percentage then
- local basePercentage = math.floor((tokenCount / #data) * 10000) / 100
- createPercentageButton(basePercentage, valueCount, tokenName)
- if percentage == "cumulative" then
- cumulativePercentage = cumulativePercentage + basePercentage
- createPercentageButton(basePercentage, valueCount, tokenName, cumulativePercentage)
- end
+ tokenCount.sum = tokenCount.sum + tokenCount.row
+ createPercentageButton(tokenCount, valueCount, tokenName)
end
-- introducing a small delay to limit update calls
diff --git a/src/core/Global.ttslua b/src/core/Global.ttslua
index 5246ed61..18bea7c0 100644
--- a/src/core/Global.ttslua
+++ b/src/core/Global.ttslua
@@ -951,10 +951,6 @@ function applyOptionPanelChange(id, state)
elseif id == "showTitleSplash" then
optionPanel[id] = state
- -- option: Show token arranger
- elseif id == "showTokenArranger" then
- optionPanel[id] = spawnOrRemoveHelper(state, "Token Arranger", {-42.3, 1.6, -46.5})
-
-- option: Show clean up helper
elseif id == "showCleanUpHelper" then
optionPanel[id] = spawnOrRemoveHelper(state, "Clean Up Helper", {-66, 1.6, 46})
@@ -975,10 +971,6 @@ function applyOptionPanelChange(id, state)
optionPanel[id][i] = spawnOrRemoveHelper(state, "Search Assistant", pos, rot)
end
- -- option: Show chaos bag manager
- elseif id == "showChaosBagManager" then
- optionPanel[id] = spawnOrRemoveHelper(state, "Chaos Bag Manager", {-66, 1.6, -49.5})
-
-- option: Show attachment helper
elseif id == "showAttachmentHelper" then
optionPanel[id] = spawnOrRemoveHelper(state, "Attachment Helper", {-62, 1.4, 0})
@@ -1049,11 +1041,9 @@ end
function removeHelperObject(name)
-- links objects name to the respective option name (to grab the GUID for removal)
local referenceTable = {
- ["Token Arranger"] = "showTokenArranger",
["Clean Up Helper"] = "showCleanUpHelper",
["Hand Helper"] = "showHandHelper",
["Search Assistant"] = "showSearchAssistant",
- ["Chaos Bag Manager"] = "showChaosBagManager",
["Displacement Tool"] = "showDisplacementTool",
["Custom Playmat Images"] = "showCustomPlaymatImages",
["Attachment Helper"] = "showAttachmentHelper",
@@ -1101,7 +1091,6 @@ function onClick_defaultSettings()
playAreaSnapTags = true,
showAttachmentHelper = false,
showCleanUpHelper = false,
- showChaosBagManager = false,
showCustomPlaymatImages = false,
showCYOA = false,
showDisplacementTool = false,
@@ -1109,7 +1098,6 @@ function onClick_defaultSettings()
showHandHelper = {},
showSearchAssistant = {},
showTitleSplash = true,
- showTokenArranger = false,
useClueClickers = false,
useSnapTags = true
}
diff --git a/xml/OptionPanel.xml b/xml/OptionPanel.xml
index b1d3cdce..5c0da12f 100644
--- a/xml/OptionPanel.xml
+++ b/xml/OptionPanel.xml
@@ -252,20 +252,6 @@
-
-
-
-
-
- Panel for easy addition or removal of chaos tokens to the bag - very useful for EotE because of Frost tokens!
-
- |
-
-
- |
-
-
@@ -349,20 +335,6 @@
onValueChanged="onClick_toggleOption(showSearchAssistant)"/>
|
-
-
-
-
-
-
- See the contents of the chaos bag at a glance! This tool displays a sorted table of the tokens to allow easier guessing of your odds.
-
- |
-
-
- |
-