Compare commits

...

2 Commits

Author SHA1 Message Date
d41b69bf4a 3.8.0 2024-06-09 10:10:21 -04:00
f3c9f3af0b 3.7.0 2024-03-10 09:56:22 -04:00
540 changed files with 37387 additions and 25706 deletions

File diff suppressed because it is too large Load Diff

View File

@ -73,7 +73,6 @@
<!-- window to select downloadable content -->
<VerticalLayout id="downloadWindow"
visibility="Admin"
color="black"
active="false"
height="800"
@ -568,16 +567,13 @@
<!-- Default formatting -->
<Defaults>
<Text color="#FFFFFF"
alignment="MiddleLeft" />
alignment="MiddleLeft"/>
<Toggle isOn="False"
rectAlignment="MiddleRight" />
<Dropdown rectAlignment="MiddleCenter" />
<Dropdown rectAlignment="MiddleCenter"/>
<Cell dontUseTableCellBackground="true"
outlineSize="0 1"
outline="grey" />
outline="grey"/>
<!-- main window -->
<TableLayout class="window"
@ -589,20 +585,20 @@
outline="grey"
showAnimation="SlideIn_Right"
hideAnimation="SlideOut_Right"
animationDuration="0.2" />
animationDuration="0.2"/>
<!-- group headers -->
<Row class="group-header"
preferredHeight="44" />
preferredHeight="44"/>
<Cell class="group-header"
padding="10 10 0 0"
columnSpan="3"
color="#222222" />
color="#222222"/>
<Panel class="group-header"
padding="5 0 0 0" />
padding="5 0 0 0"/>
<Text class="group-header"
fontSize="28"
font="font_teutonic-arkham" />
font="font_teutonic-arkham"/>
<!-- options -->
<Row class="option-text"
@ -631,6 +627,14 @@
font="font_teutonic-arkham"/>
<Panel class="doubleColumn-wrapper"
padding="0 17 3 3"/>
<Button class="optionToggle"
image="option-off"
rectAlignment="MiddleRight"
offsetXY="-30 0"
colors="#FFFFFF|#dfdfdf"
height="36"
width="65"
ignoreLayout="True"/>
<!-- buttons at the bottom -->
<Button class="bottomButtons"
@ -652,7 +656,6 @@
<!-- Option Panel -->
<TableLayout id="optionPanel"
class="window"
visibility="Admin"
rectAlignment="LowerRight"
offsetXY="-50 80"
raycastTarget="true">
@ -718,8 +721,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="showTitleSplash"
onValueChanged="onClick_toggleOption(showTitleSplash)"/>
<Button class="optionToggle"
id="showTitleSplash"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -742,8 +746,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="playAreaSnapTags"
onValueChanged="onClick_toggleOption(playAreaSnapTags)"/>
<Button class="optionToggle"
id="playAreaSnapTags"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -756,8 +761,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="playAreaConnections"
onValueChanged="onClick_toggleOption(playAreaConnections)"/>
<Button class="optionToggle"
id="playAreaConnections"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -787,8 +793,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="changePlayAreaImage"
onValueChanged="onClick_toggleOption(changePlayAreaImage)"/>
<Button class="optionToggle"
id="changePlayAreaImage"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -811,8 +818,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="useSnapTags"
onValueChanged="onClick_toggleOption(useSnapTags)"/>
<Button class="optionToggle"
id="useSnapTags"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -825,8 +833,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="showDrawButton"
onValueChanged="onClick_toggleOption(showDrawButton)"/>
<Button class="optionToggle"
id="showDrawButton"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -839,8 +848,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="useClueClickers"
onValueChanged="onClick_toggleOption(useClueClickers)"/>
<Button class="optionToggle"
id="useClueClickers"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -905,8 +915,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="showAttachmentHelper"
onValueChanged="onClick_toggleOption(showAttachmentHelper)"/>
<Button class="optionToggle"
id="showAttachmentHelper"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -919,8 +930,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="showCleanUpHelper"
onValueChanged="onClick_toggleOption(showCleanUpHelper)"/>
<Button class="optionToggle"
id="showCleanUpHelper"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -933,8 +945,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="showCYOA"
onValueChanged="onClick_toggleOption(showCYOA)"/>
<Button class="optionToggle"
id="showCYOA"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -947,8 +960,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="showDisplacementTool"
onValueChanged="onClick_toggleOption(showDisplacementTool)"/>
<Button class="optionToggle"
id="showDisplacementTool"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -961,8 +975,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="showHandHelper"
onValueChanged="onClick_toggleOption(showHandHelper)"/>
<Button class="optionToggle"
id="showHandHelper"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
@ -975,8 +990,9 @@
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="showSearchAssistant"
onValueChanged="onClick_toggleOption(showSearchAssistant)"/>
<Button class="optionToggle"
id="showSearchAssistant"
onClick="onClick_toggleOption"/>
</Cell>
</Row>
</TableLayout>

View File

@ -80,24 +80,9 @@ ComponentTags:
- displayed: CameraZoom_ignore
normalized: camerazoom_ignore
CustomUIAssets:
- Name: refresh
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/1695031152736214852/EC3BBEF1A1788381A8F4C5ACB7FB27770CAF03C5/
- Name: close
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/1695031152736214756/2EEB07E453A7ECF4BE5A1030A253185B37A7CDAB/
- Name: cthulhu
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/1782854877010107768/BC6A97F193385D01C1A9149B68923F55A284CB2D/
- Name: dark-cult
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/1782854877010108105/08594607341D6537C28A08A34CE82159025AB8DB/
- Name: yog-sothoth
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/1782854877010107124/D8042D1A1B08CFB7E76488B09216B4611D85A2B9/
- Name: elder-sign
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/1782854877010107442/43BC029410751208A90AE7FDEBCB587A0E9403D7/
- Name: devourer
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/1782854877010106784/6E00433E3425D0A7C6121E0DDB6A79167BA78569/
@ -113,24 +98,18 @@ CustomUIAssets:
- Name: option-gear
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2026086584372569912/5CB461AEAE2E59D3064D90A776EB86C46081EC78/
- Name: font_birmingham
- Name: option-on
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2462982115668997008/2178787B67B3C96F3419EDBAB8420E39893756BC/
- Name: option-off
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2462982115668996901/D6438ECBB11DECC6DB9987589FF526FBAD4D2368/
- Name: font_arkhamicons
Type: 1
URL: http://cloud-3.steamusercontent.com/ugc/2027213118466443497/3CF9BB9AF968D245961494CC9A151774EB9BA638/
- Name: font_columbus
Type: 1
URL: http://cloud-3.steamusercontent.com/ugc/2027213118466515872/F473E4ACC75ACB6CE07457C45290B4912E0B3286/
- Name: font_oldremington
Type: 1
URL: http://cloud-3.steamusercontent.com/ugc/2027213118466515932/AFCE53F1E1D9580D166F53AD9EB0D77A331D4A26/
URL: http://cloud-3.steamusercontent.com/ugc/2462982115649258367/C20CC4C299A6FE5F1ECAB968E15BE590337CC019/
- Name: font_teutonic-arkham
Type: 1
URL: http://cloud-3.steamusercontent.com/ugc/2027213118467703445/89328E273B4C5180BF491516CE998DE3C604E162/
- Name: font_uglyqua
Type: 1
URL: http://cloud-3.steamusercontent.com/ugc/2027213118466516005/113C19D37CFFA9E554394FD5B11B32967F846A62/
- Name: font_chinese_fzlibian
Type: 1
URL: http://cloud-3.steamusercontent.com/ugc/2028355502896482829/8DAB311590B97586309E66D795AC2C43D4913188/
- Name: header_cover
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2280574378889753624/53E7443E2A9957BC5CA4D73B67D5C1C30971C9F9/
@ -152,15 +131,15 @@ CustomUIAssets:
- Name: SpeechBubble
Type: 0
URL: https://i.imgur.com/6MReiEO.png
- Name: Inv-Roland
Type: 0
URL: https://i.imgur.com/lx6unDY.png
- Name: NextArrow
Type: 0
URL: https://i.imgur.com/MztSQis.png
- Name: Exit
Type: 0
URL: https://i.imgur.com/8qmTXwt.png
- Name: Inv-Roland
Type: 0
URL: https://i.imgur.com/lx6unDY.png
- Name: Inv-Mandy
Type: 0
URL: https://i.imgur.com/hniMC5g.png
@ -224,7 +203,34 @@ CustomUIAssets:
- Name: box-cover-mask-wide
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2115061298538827369/A20C2ECB8ECDC1B0AD8B2B38F68CA1C1F5E07D37/
Date: Fri Feb 16 18:27:41 UTC 2024
- Name: token-skull
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2380784374775547231/E0FEEF462DE4E7704832CA2415D0D027A6BF5041/
- Name: token-bless
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2380784374775547028/7855033DE0EB1FDDF706E1303054D35FE0902532/
- Name: token-curse
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2380784374775547135/2360372CBE9452CB7B4D135BE13BBA6D46B7D427/
- Name: token-cultist
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2380784374792650461/10D8037632900AA86045BDD42A564716D5855B1B/
- Name: token-tablet
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2380784374792650857/29DAE514E5C838C24C90ABBFFF92B1359B9A2F76/
- Name: token-elder-thing
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2380784374792650683/1C046B6335317CA1AEBFC80645EEC18852D83D80/
- Name: token-frost
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2380784374792650766/73E07A50BE6FD9BED266F3421B472C4BF913DE81/
- Name: token-auto-fail
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2510267932886739653/CB7AA2D73777EF5938A6E6CD664B2ABA52B6E20A/
- Name: token-custom-token
Type: 0
URL: http://cloud-3.steamusercontent.com/ugc/2380784374792650571/E4C2B2B69282A4EE15FE290FF6B08BEFC8FCA65C/
Date: Sun May 12 13:10:46 CEST 2024
DecalPallet:
- ImageURL: http://cloud-3.steamusercontent.com/ugc/1474319121424323663/BC5570ECF747F1B30224461B576E8B0FE7FA5F33/
Name: Achivement Checkmark
@ -233,7 +239,7 @@ DecalPallet:
Name: Victory Display
Size: 15
Decals: []
EpochTime: 1708108061
EpochTime: 1715512246
GameComplexity: ''
GameMode: Arkham Horror LCG - Super Complete Edition
GameType: ''
@ -284,7 +290,7 @@ Lighting:
LutIndex: 0
ReflectionIntensity: 1
LuaScript: !include 'unpacked.ttslua'
LuaScriptState: '{"acknowledgedUpgradeVersions":[],"chaosTokensGUID":[],"optionPanel":{"cardLanguage":"en","changePlayAreaImage":false,"playAreaConnectionColor":{"a":1,"b":0.4,"g":0.4,"r":0.4},"playAreaConnections":true,"playAreaSnapTags":true,"showAttachmentHelper":false,"showCleanUpHelper":false,"showCYOA":false,"showDisplacementTool":false,"showDrawButton":false,"showHandHelper":[],"showSearchAssistant":[],"showTitleSplash":true,"useClueClickers":false,"useResourceCounters":"disabled","useSnapTags":true}}'
LuaScriptState: '{"acknowledgedUpgradeVersions":[],"chaosTokensGUID":[],"optionPanel":{"cardLanguage":"en","changePlayAreaImage":false,"playAreaConnectionColor":{"a":1,"b":0.4,"g":0.4,"r":0.4},"playAreaConnections":true,"playAreaSnapTags":true,"showAttachmentHelper":false,"showCleanUpHelper":false,"showCYOA":false,"showDisplacementTool":false,"showDrawButton":false,"showHandHelper":false,"showSearchAssistant":false,"showTitleSplash":true,"useClueClickers":false,"useResourceCounters":"disabled","useSnapTags":true}}'
MusicPlayer:
AudioLibrary:
- Item1: http://cloud-3.steamusercontent.com/ugc/784110538847453001/4481D1CC5684FCF04AB143954DEFE09E94BF5CEB/
@ -514,7 +520,8 @@ ObjectStates:
- !include 'unpacked/Custom_Model Decoration - Ammo b43845.yaml'
- !include 'unpacked/Custom_Model Decoration - Ammo d35ee9.yaml'
- !include 'unpacked/Custom_Token Victory Display 6ccd6d.yaml'
- !include 'unpacked/Custom_Tile Campaign Overview e03c01.yaml'
- !include 'unpacked/Custom_Tile Official Releases Overview 8e22bb.yaml'
- !include 'unpacked/Custom_Tile Fan-Made Expansion Overview de7cae.yaml'
- !include 'unpacked/Bag OptionPanel Source 830bd0.yaml'
- !include 'unpacked/Custom_Assetbundle SoundCube 3c988f.yaml'
- !include 'unpacked/go_game_piece_white Game Key Handler fce69c.yaml'
@ -546,9 +553,7 @@ ObjectStates:
- !include 'unpacked/Custom_Tile Tokencache_Curse 16a9a7.yaml'
- !include 'unpacked/Custom_Tile Tokencache_Frost b2b7be.yaml'
- !include 'unpacked/BlockSquare Physics Detector b300d8.yaml'
- !include 'unpacked/CardCustom New Player Back 85145d.yaml'
- !include 'unpacked/CardCustom New Encounter Back 5d5637.yaml'
- !include 'unpacked/Notecard Arkham SCE 3.6.0 - 2162024 - Page 1 2d0dbb.yaml'
- !include 'unpacked/Notecard Arkham SCE 3.8.0 - 5122024 - Page 1 bd6b3e.yaml'
PlayArea: 1
PlayerCounts:
- 0
@ -556,7 +561,7 @@ PlayerCounts:
PlayingTime:
- 0
- 0
SaveName: Arkham SCE - 3.6.0
SaveName: Arkham SCE - 3.8.0
Sky: Sky_Museum
SkyURL: https://i.imgur.com/GkQqaOF.jpg
SnapPoints:
@ -624,70 +629,6 @@ SnapPoints:
x: -3.85
y: 1.58
z: -10.39
- Position:
x: -45.3
y: 1.48
z: 31.67
- Position:
x: -45.3
y: 1.48
z: 29.73
- Position:
x: -45.3
y: 1.48
z: 27.8
- Position:
x: -45.3
y: 1.48
z: 25.86
- Position:
x: -45.3
y: 1.48
z: 23.93
- Position:
x: -45.3
y: 1.48
z: 21.99
- Position:
x: -45.3
y: 1.48
z: 20.06
- Position:
x: -45.3
y: 1.48
z: -20.62
- Position:
x: -45.3
y: 1.48
z: -22.55
- Position:
x: -45.3
y: 1.48
z: -24.49
- Position:
x: -45.3
y: 1.48
z: -26.43
- Position:
x: -45.3
y: 1.48
z: -28.36
- Position:
x: -45.3
y: 1.48
z: -30.3
- Position:
x: -45.3
y: 1.48
z: -32.23
- Position:
x: -28.64
y: 1.48
z: -38.65
Rotation:
x: 0
y: 315
z: 0
- Position:
x: -56.24
y: 1.49

View File

@ -41,9 +41,6 @@ local __bundle_require, __bundle_loaded, __bundle_register, __bundle_modules = (
return require, loaded, register, modules
end)(nil)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("arkhamdb/HotfixBag")
end)
__bundle_register("arkhamdb/HotfixBag", function(require, _LOADED, __bundle_register, __bundle_modules)
-- A Hotfix bag contains replacement cards for the All Cards Bag, and should
-- have the 'AllCardsHotfix' tag on the object. Code for the All Cards Bag will
@ -145,6 +142,7 @@ do
return getObjectFromGUID("123456")
end
-- Returns the matching object
---@param owner string Parent object for this search
---@param type string Type of object to search for
---@return any: Object reference to the matching object
@ -152,21 +150,21 @@ do
return getGuidHandler().call("getObjectByOwnerAndType", { owner = owner, type = type })
end
-- returns all matching objects as a table with references
-- Returns all matching objects as a table with references
---@param type string Type of object to search for
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByType = function(type)
return getGuidHandler().call("getObjectsByType", type)
end
-- returns all matching objects as a table with references
-- Returns all matching objects as a table with references
---@param owner string Parent object for this search
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByOwner = function(owner)
return getGuidHandler().call("getObjectsByOwner", owner)
end
-- sends new information to the reference handler to edit the main index
-- Sends new information to the reference handler to edit the main index
---@param owner string Parent of the object
---@param type string Type of the object
---@param guid string GUID of the object
@ -178,7 +176,17 @@ do
})
end
-- Returns the owner of an object or the object it's located on
---@param object tts__GameObject Object for this search
---@return string: Parent of the object or object it's located on
GUIDReferenceApi.getOwnerOfObject = function(object)
return getGuidHandler().call("getOwnerOfObject", object)
end
return GUIDReferenceApi
end
end)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("arkhamdb/HotfixBag")
end)
return __bundle_require("__root")

View File

@ -41,6 +41,9 @@ local __bundle_require, __bundle_loaded, __bundle_register, __bundle_modules = (
return require, loaded, register, modules
end)(nil)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/AllCardsBag")
end)
__bundle_register("playercards/AllCardsBag", function(require, _LOADED, __bundle_register, __bundle_modules)
local cardIdIndex = { }
local classAndLevelIndex = { }
@ -101,73 +104,68 @@ function onObjectLeaveContainer(container, _)
end
end
-- Create the card indexes by iterating all cards in the bag, parsing their
-- metadata, and creating the keyed lookup tables for the cards. This is a
-- coroutine which will spread the workload by processing 20 cards before
-- yielding. Based on the current count of cards this will require
-- approximately 60 frames to complete.
-- Create the card indexes by iterating all cards in the bag, parsing their metadata
-- and creating the keyed lookup tables for the cards. This is a coroutine which will
-- spread the workload by processing 20 cards before yielding.
function buildIndex()
local cardCount = 0
indexingDone = false
if (self.getData().ContainedObjects == nil) then
return 1
end
for i, cardData in ipairs(self.getData().ContainedObjects) do
local cardMetadata = JSON.decode(cardData.GMNotes)
if (cardMetadata ~= nil) then
addCardToIndex(cardData, cardMetadata)
cardCount = cardCount + 1
if cardCount > 9 then
cardCount = 0
coroutine.yield(0)
end
-- process the allcardsbag itself
for _, cardData in ipairs(self.getData().ContainedObjects) do
addCardToIndex(cardData)
cardCount = cardCount + 1
if cardCount > 19 then
cardCount = 0
coroutine.yield(0)
end
end
local hotfixBags = getObjectsWithTag("AllCardsHotfix")
for _, hotfixBag in ipairs(hotfixBags) do
if (#hotfixBag.getObjects() > 0) then
for i, cardData in ipairs(hotfixBag.getData().ContainedObjects) do
if cardData.ContainedObjects then
for j, deepCardData in ipairs(cardData.ContainedObjects) do
local deepCardMetadata = JSON.decode(deepCardData.GMNotes)
if deepCardMetadata ~= nil then
addCardToIndex(deepCardData, deepCardMetadata)
cardCount = cardCount + 1
if cardCount > 9 then
cardCount = 0
coroutine.yield(0)
end
end
end
else
local cardMetadata = JSON.decode(cardData.GMNotes)
if cardMetadata ~= nil then
addCardToIndex(cardData, cardMetadata)
cardCount = cardCount + 1
if cardCount > 9 then
cardCount = 0
coroutine.yield(0)
end
-- process hotfix bags (and the additional playercards bag)
for _, hotfixBag in ipairs(getObjectsWithTag("AllCardsHotfix")) do
local hotfixData = hotfixBag.getData()
if not hotfixData.ContainedObjects then break end
for _, cardData in ipairs(hotfixData.ContainedObjects) do
-- process containers
if cardData.ContainedObjects then
for _, deepCardData in ipairs(cardData.ContainedObjects) do
addCardToIndex(deepCardData)
cardCount = cardCount + 1
if cardCount > 19 then
cardCount = 0
coroutine.yield(0)
end
end
-- process single cards
else
addCardToIndex(cardData)
cardCount = cardCount + 1
if cardCount > 19 then
cardCount = 0
coroutine.yield(0)
end
end
end
end
buildSupplementalIndexes()
indexingDone = true
return 1
end
-- Adds a card to any indexes it should be a part of, based on its metadata.
-- Adds a card to any indexes it should be a part of, based on its metadata
---@param cardData table TTS object data for the card
---@param cardMetadata table SCED metadata for the card
function addCardToIndex(cardData, cardMetadata)
function addCardToIndex(cardData)
-- using the more efficient 'json.parse()' to speed this process up
local cardMetadata = json.parse(cardData.GMNotes)
if not cardMetadata then return end
-- use the ZoopGuid as fallback if no id present
if cardMetadata.id == nil and cardMetadata.TtsZoopGuid then
cardMetadata.id = cardMetadata.TtsZoopGuid
end
cardIdIndex[cardMetadata.id] = { data = cardData, metadata = cardMetadata }
if (cardMetadata.alternate_ids ~= nil) then
cardIdIndex[cardMetadata.id or cardMetadata.TtsZoopGuid] = { data = cardData, metadata = cardMetadata }
-- also add data for alternate ids
if cardMetadata.alternate_ids ~= nil then
for _, alternateId in ipairs(cardMetadata.alternate_ids) do
cardIdIndex[alternateId] = { data = cardData, metadata = cardMetadata }
end
@ -176,13 +174,10 @@ end
function buildSupplementalIndexes()
for cardId, card in pairs(cardIdIndex) do
local cardData = card.data
local cardMetadata = card.metadata
-- If the ID key and the metadata ID don't match this is a duplicate card created by an
-- alternate_id, and we should skip it
-- If the ID key and the metadata ID don't match this is a duplicate card created by an alternate_id, and we should skip it
if cardId == cardMetadata.id then
-- Add card to the basic weakness list, if appropriate. Some weaknesses have
-- multiple copies, and are added multiple times
-- Add card to the basic weakness list, if appropriate. Some weaknesses have multiple copies, and are added multiple times
if cardMetadata.weakness then
table.insert(uniqueWeaknessList, cardMetadata.id)
if cardMetadata.basicWeaknessCount ~= nil then
@ -192,56 +187,31 @@ function buildSupplementalIndexes()
end
end
-- Add the card to the appropriate class and level indexes
local isGuardian = false
local isSeeker = false
local isMystic = false
local isRogue = false
local isSurvivor = false
local isNeutral = false
local upgradeKey
-- Excludes signature cards (which have no class or level) and alternate
-- ID entries
if (cardMetadata.class ~= nil and cardMetadata.level ~= nil) then
isGuardian = string.match(cardMetadata.class, "Guardian")
isSeeker = string.match(cardMetadata.class, "Seeker")
isMystic = string.match(cardMetadata.class, "Mystic")
isRogue = string.match(cardMetadata.class, "Rogue")
isSurvivor = string.match(cardMetadata.class, "Survivor")
isNeutral = string.match(cardMetadata.class, "Neutral")
if (cardMetadata.level > 0) then
-- Excludes signature cards (which have no class or level)
if cardMetadata.class ~= nil and cardMetadata.level ~= nil then
local upgradeKey
if cardMetadata.level > 0 then
upgradeKey = "-upgrade"
else
upgradeKey = "-level0"
end
if (isGuardian) then
table.insert(classAndLevelIndex["Guardian"..upgradeKey], cardMetadata.id)
end
if (isSeeker) then
table.insert(classAndLevelIndex["Seeker"..upgradeKey], cardMetadata.id)
end
if (isMystic) then
table.insert(classAndLevelIndex["Mystic"..upgradeKey], cardMetadata.id)
end
if (isRogue) then
table.insert(classAndLevelIndex["Rogue"..upgradeKey], cardMetadata.id)
end
if (isSurvivor) then
table.insert(classAndLevelIndex["Survivor"..upgradeKey], cardMetadata.id)
end
if (isNeutral) then
table.insert(classAndLevelIndex["Neutral"..upgradeKey], cardMetadata.id)
-- parse classes (separated by "|") and add the card to the appropriate class and level indices
for str in cardMetadata.class:gmatch("([^|]+)") do
table.insert(classAndLevelIndex[str .. upgradeKey], cardMetadata.id)
end
-- add to cycle index
local cycleName = cardMetadata.cycle
if cycleName ~= nil then
cycleName = string.lower(cycleName)
if string.match(cycleName, "return") then
cycleName = string.sub(cycleName, 11)
end
if cycleName == "the night of the zealot" then
cycleName = "core"
end
-- remove "return to " from cycle names
cycleName = cycleName:gsub("return to ", "")
-- override cycle name for night of the zealot
cycleName = cycleName:gsub("the night of the zealot", "core")
if cycleIndex[cycleName] == nil then
cycleIndex[cycleName] = { }
end
@ -250,29 +220,34 @@ function buildSupplementalIndexes()
end
end
end
-- sort class and level indices
for _, indexTable in pairs(classAndLevelIndex) do
table.sort(indexTable, cardComparator)
end
-- sort cycle indices
for _, indexTable in pairs(cycleIndex) do
table.sort(indexTable)
end
-- sort weakness indices
table.sort(basicWeaknessList, cardComparator)
table.sort(uniqueWeaknessList, cardComparator)
end
-- Comparison function used to sort the class card bag indexes. Sorts by card
-- level, then name, then subname.
-- Comparison function used to sort the class card bag indexes. Sorts by card level, then name, then subname.
function cardComparator(id1, id2)
local card1 = cardIdIndex[id1]
local card2 = cardIdIndex[id2]
if (card1.metadata.level ~= card2.metadata.level) then
if card1.metadata.level ~= card2.metadata.level then
return card1.metadata.level < card2.metadata.level
end
if (card1.data.Nickname ~= card2.data.Nickname) then
elseif card1.data.Nickname ~= card2.data.Nickname then
return card1.data.Nickname < card2.data.Nickname
else
return card1.data.Description < card2.data.Description
end
return card1.data.Description < card2.data.Description
end
function isIndexReady()
@ -414,7 +389,4 @@ function isBasicWeakness(cardMetadata)
and cardMetadata.basicWeaknessCount > 0
end
end)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/AllCardsBag")
end)
return __bundle_require("__root")

View File

@ -16,6 +16,11 @@ ContainedObjects:
- !include 'Bag All Player Cards 15bb07/Card Reality Acid 0a1b3a.yaml'
- !include 'Bag All Player Cards 15bb07/Card Reality Acid Reference 858b0a.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ravenous 558b0a.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Rex Murphy (Parallel) 0a5492.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Rex Murphy (Parallel Back) 0a5493.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Rex Murphy (Parallel Front) 0a5494.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Search for the Truth 4156dd.yaml'
- !include 'Bag All Player Cards 15bb07/Card Rex''s Curse 033a36.yaml'
- !include 'Bag All Player Cards 15bb07/Card Charlie Kane 4deeff.yaml'
- !include 'Bag All Player Cards 15bb07/Card Finn Edwards dd40c0.yaml'
- !include 'Bag All Player Cards 15bb07/Card Monterey Jack 46b145.yaml'
@ -25,47 +30,47 @@ ContainedObjects:
46b147.yaml'
- !include 'Bag All Player Cards 15bb07/Card If it bleeds... acf2b0.yaml'
- !include 'Bag All Player Cards 15bb07/Card Beat Cop (2) 7001be.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Book of Living Myths c5fb1f.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Weeping Yurei 541bd9.yaml'
- !include 'Bag All Player Cards 15bb07/Card Book of Living Myths c5fb1f.yaml'
- !include 'Bag All Player Cards 15bb07/Card Weeping Yurei 541bd9.yaml'
- !include "Bag All Player Cards 15bb07/CardCustom K\u014Dhaku Narukami cea427.yaml"
- !include "Bag All Player Cards 15bb07/CardCustom K\u014Dhaku Narukami 54eaa7.yaml"
- !include 'Bag All Player Cards 15bb07/CardCustom Ad Hoc c9fb2f.yaml'
- !include "Bag All Player Cards 15bb07/Card K\u014Dhaku Narukami 54eaa7.yaml"
- !include 'Bag All Player Cards 15bb07/Card Ad Hoc c9fb2f.yaml'
- !include 'Bag All Player Cards 15bb07/Card Hasty Repairs 0821d5.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Wilson Richards ceb426.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Wilson Richards 55eab5.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Ancestral Token c1fb1f.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Aetheric Current (Yoth) 84ad64.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Aetheric Current (Yuggoth) 84ad65.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Failed Experiment acd281.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Flux Stabilizer 55990a.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Kate Winthrop ce2322.yaml'
- !include 'Bag All Player Cards 15bb07/Card Wilson Richards 55eab5.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ancestral Token c1fb1f.yaml'
- !include 'Bag All Player Cards 15bb07/Card Aetheric Current (Yoth) 84ad64.yaml'
- !include 'Bag All Player Cards 15bb07/Card Aetheric Current (Yuggoth) 84ad65.yaml'
- !include 'Bag All Player Cards 15bb07/Card Failed Experiment acd281.yaml'
- !include 'Bag All Player Cards 15bb07/Card Flux Stabilizer 55990a.yaml'
- !include 'Bag All Player Cards 15bb07/Card Kate Winthrop ce2322.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Kate Winthrop ce2323.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Hatchet (1) 2ea0d3.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Token of Faith (3) 2ea0d1.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Transmogrify 9965dd.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Absolution aef183.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Confound (3) 9965de.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Strong-Armed (1) 294d6.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Survival Technique (2) 2ea0d4.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Scrimshaw Charm c1fb2e.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Vamp (3) add233.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Well-Dressed c6ac33.yaml'
- !include 'Bag All Player Cards 15bb07/Card Hatchet (1) 2ea0d3.yaml'
- !include 'Bag All Player Cards 15bb07/Card Token of Faith (3) 2ea0d1.yaml'
- !include 'Bag All Player Cards 15bb07/Card Transmogrify 9965dd.yaml'
- !include 'Bag All Player Cards 15bb07/Card Absolution aef183.yaml'
- !include 'Bag All Player Cards 15bb07/Card Confound (3) 9965de.yaml'
- !include 'Bag All Player Cards 15bb07/Card Strong-Armed (1) 294d6.yaml'
- !include 'Bag All Player Cards 15bb07/Card Survival Technique (2) 2ea0d4.yaml'
- !include 'Bag All Player Cards 15bb07/Card Scrimshaw Charm c1fb2e.yaml'
- !include 'Bag All Player Cards 15bb07/Card Vamp (3) add233.yaml'
- !include 'Bag All Player Cards 15bb07/Card Well-Dressed c6ac33.yaml'
- !include 'Bag All Player Cards 15bb07/Card Fine Tuning (1) 103fbd.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Prismatic Spectacles (2) 3adcf5.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Drain Essence 9965aa.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Fake Credentials acd38d.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Cat Mask 847ed6.yaml'
- !include 'Bag All Player Cards 15bb07/Card Prismatic Spectacles (2) 3adcf5.yaml'
- !include 'Bag All Player Cards 15bb07/Card Drain Essence 9965aa.yaml'
- !include 'Bag All Player Cards 15bb07/Card Fake Credentials acd38d.yaml'
- !include 'Bag All Player Cards 15bb07/Card Cat Mask 847ed6.yaml'
- !include 'Bag All Player Cards 15bb07/Card Hard Times 876557.yaml'
- !include 'Bag All Player Cards 15bb07/Card Pete''s Guitar 876557.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ashcan Pete (Parallel Front) 5294c3.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ashcan Pete (Parallel Back) 5294c3.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ashcan Pete (Parallel) 5294c3.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Eldritch Tongue e8765a.yaml'
- !include 'Bag All Player Cards 15bb07/Card Eldritch Tongue e8765a.yaml'
- !include 'Bag All Player Cards 15bb07/Card Tinker 102fbd.yaml'
- !include 'Bag All Player Cards 15bb07/Card Hand-Eye Coordination (1) 102fcd.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom False Surrender adf28e.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Purified 294d6a.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom The Key of Solomon (4) ae54c6.yaml'
- !include 'Bag All Player Cards 15bb07/Card False Surrender adf28e.yaml'
- !include 'Bag All Player Cards 15bb07/Card Purified 294d6a.yaml'
- !include 'Bag All Player Cards 15bb07/Card The Key of Solomon (4) ae54c6.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom The Necronomicon 5b2e10.yaml'
- !include 'Bag All Player Cards 15bb07/Card Roland''s .38 Special 4edb91.yaml'
- !include 'Bag All Player Cards 15bb07/Card Stubborn Detective 4ea68b.yaml'
@ -1505,6 +1510,11 @@ ContainedObjects:
- !include 'Bag All Player Cards 15bb07/Card Amina Zidane 458edc.yaml'
- !include 'Bag All Player Cards 15bb07/Card Amina Zidane 4c2a3d.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom The Raven Quill Upgrade Sheet 23b96a.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Hypnotic Gaze (2) (Taboo) e2bc50.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Old Keyring (3) (Taboo) e7d989.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Pay Day (1) (Taboo) 9f0b35.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Scavenging (2) (Taboo) ff4aeb.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Scavenging (Taboo) 1b76c8.yaml'
- !include 'Bag All Player Cards 15bb07/Card Deck of Possibilities fefdfa.yaml'
- !include "Bag All Player Cards 15bb07/Card Isamara Ordo\xF1ez 860cd7.yaml"
- !include 'Bag All Player Cards 15bb07/Card Jenny Barnes 48b174.yaml'
@ -1538,7 +1548,7 @@ ContainedObjects:
- !include 'Bag All Player Cards 15bb07/Card Mandy Thompson (Taboo) 4f3637.yaml'
- !include 'Bag All Player Cards 15bb07/Card Trish Scarborough (Taboo) 2ce76d.yaml'
- !include 'Bag All Player Cards 15bb07/Card Lola Hayes (Taboo) 52956d.yaml'
- !include 'Bag All Player Cards 15bb07/Card Rex Murphy (Taboo) 0a5491.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Rex Murphy (Taboo) 0a5491.yaml'
- !include 'Bag All Player Cards 15bb07/Card Runic Axe Upgrade Sheet (Taboo) 4d729b.yaml'
- !include 'Bag All Player Cards 15bb07/Card Power Word Upgrade Sheet (Taboo) ebce85.yaml'
- !include 'Bag All Player Cards 15bb07/Card Prophesiae Profana (5) (Taboo) 957c32.yaml'
@ -1617,77 +1627,77 @@ ContainedObjects:
- !include 'Bag All Player Cards 15bb07/Card Final Rhapsody 561775.yaml'
- !include 'Bag All Player Cards 15bb07/Card Jim Culver (Parallel Back) aba863.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom The Beyond 37ab47.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Devil (2) 2a0ba5.yaml'
- !include 'Bag All Player Cards 15bb07/Card Devil (2) 2a0ba5.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Alessandra Zorzi cea425.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Alessandra Zorzi 54eaa5.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Zamacona 541ba9.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Wicked Athame c9fb1f.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Wolf Mask 975d89.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Beguile 019526.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Ofuda 860c1e.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Providential (2) 2cf42a.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Vamp add232.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom I''ll Pay You Back! 40e1ca.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Occult Reliquary (3) acd0c2.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Grift df75d7.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Guided by Faith aef282.yaml'
- !include 'Bag All Player Cards 15bb07/Card Alessandra Zorzi 54eaa5.yaml'
- !include 'Bag All Player Cards 15bb07/Card Zamacona 541ba9.yaml'
- !include 'Bag All Player Cards 15bb07/Card Wicked Athame c9fb1f.yaml'
- !include 'Bag All Player Cards 15bb07/Card Wolf Mask 975d89.yaml'
- !include 'Bag All Player Cards 15bb07/Card Beguile 019526.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ofuda 860c1e.yaml'
- !include 'Bag All Player Cards 15bb07/Card Providential (2) 2cf42a.yaml'
- !include 'Bag All Player Cards 15bb07/Card Vamp add232.yaml'
- !include 'Bag All Player Cards 15bb07/Card I''ll Pay You Back! 40e1ca.yaml'
- !include 'Bag All Player Cards 15bb07/Card Occult Reliquary (3) acd0c2.yaml'
- !include 'Bag All Player Cards 15bb07/Card Grift df75d7.yaml'
- !include 'Bag All Player Cards 15bb07/Card Guided by Faith aef282.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Hank Samson 3764cc.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Hank Samson 3764cd.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Hank Samson (Assistant) 3764ce.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Hank Samson (Warden) 3764cf.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Hold Up aef182.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Pelt Shipment aa11bc.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Stir the Pot (5) add252.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Snitch (2) add242.yaml'
- !include 'Bag All Player Cards 15bb07/Card Hank Samson 3764cd.yaml'
- !include 'Bag All Player Cards 15bb07/Card Hank Samson (Assistant) 3764ce.yaml'
- !include 'Bag All Player Cards 15bb07/Card Hank Samson (Warden) 3764cf.yaml'
- !include 'Bag All Player Cards 15bb07/Card Hold Up aef182.yaml'
- !include 'Bag All Player Cards 15bb07/Card Pelt Shipment aa11bc.yaml'
- !include 'Bag All Player Cards 15bb07/Card Stir the Pot (5) add252.yaml'
- !include 'Bag All Player Cards 15bb07/Card Snitch (2) add242.yaml'
- !include 'Bag All Player Cards 15bb07/Card Where''s Pa 9aba43.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Persistence (1) 2cf51.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Stouthearted 265ad2.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Control Variable 133868.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Blackmail File de456d.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Speak to the Dead c763aa.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Accursed e91c5e.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Throw the Book at Them! d617ab.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Fox Mask 4144cd.yaml'
- !include 'Bag All Player Cards 15bb07/CardCustom Mouse Mask 32ad21.yaml'
- !include 'Bag All Player Cards 15bb07/Card Task Force (0) a5c06a.yaml'
- !include 'Bag All Player Cards 15bb07/Card Persistence (1) 2cf51.yaml'
- !include 'Bag All Player Cards 15bb07/Card Stouthearted 265ad2.yaml'
- !include 'Bag All Player Cards 15bb07/Card Control Variable 133868.yaml'
- !include 'Bag All Player Cards 15bb07/Card Blackmail File de456d.yaml'
- !include 'Bag All Player Cards 15bb07/Card Speak to the Dead c763aa.yaml'
- !include 'Bag All Player Cards 15bb07/Card Accursed e91c5e.yaml'
- !include 'Bag All Player Cards 15bb07/Card Throw the Book at Them! d617ab.yaml'
- !include 'Bag All Player Cards 15bb07/Card Fox Mask 4144cd.yaml'
- !include 'Bag All Player Cards 15bb07/Card Mouse Mask 32ad21.yaml'
- !include 'Bag All Player Cards 15bb07/Card Task Force a5c06a.yaml'
- !include 'Bag All Player Cards 15bb07/Card Microscope (4) fbd296.yaml'
- !include 'Bag All Player Cards 15bb07/Card Back Injury f6c482.yaml'
- !include 'Bag All Player Cards 15bb07/Card Lightfooted (0) fe1fb6.yaml'
- !include 'Bag All Player Cards 15bb07/Card Lightfooted fe1fb6.yaml'
- !include 'Bag All Player Cards 15bb07/Card Bewitching (3) db335c.yaml'
- !include 'Bag All Player Cards 15bb07/Card Flurry of Blows (5) 9e7bc8.yaml'
- !include 'Bag All Player Cards 15bb07/Card British Bull Dog (2) 7b7050.yaml'
- !include 'Bag All Player Cards 15bb07/Card Bianca Die Katz (0) 897a94.yaml'
- !include 'Bag All Player Cards 15bb07/Card Bianca Die Katz 897a94.yaml'
- !include 'Bag All Player Cards 15bb07/Card Dirty Deeds (3) aa2d6a.yaml'
- !include 'Bag All Player Cards 15bb07/Card Esoteric Method (1) 9250e1.yaml'
- !include 'Bag All Player Cards 15bb07/Card Katana (0) f5beb5.yaml'
- !include 'Bag All Player Cards 15bb07/Card Katana f5beb5.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ethereal Weaving (3) 697efd.yaml'
- !include 'Bag All Player Cards 15bb07/Card Putrescent Rot 2d1e60.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ravenous Myconid (4) df93ca.yaml'
- !include 'Bag All Player Cards 15bb07/Card Second Wind (2) c3c979.yaml'
- !include 'Bag All Player Cards 15bb07/Card Fire Axe (2) 326ec3.yaml'
- !include 'Bag All Player Cards 15bb07/Card Stir the Pot (0) c25479.yaml'
- !include 'Bag All Player Cards 15bb07/Card Stir the Pot c25479.yaml'
- !include 'Bag All Player Cards 15bb07/Card Keeper of the Key 014086.yaml'
- !include 'Bag All Player Cards 15bb07/Card Bide Your Time (0) 24d3b3.yaml'
- !include 'Bag All Player Cards 15bb07/Card Thorough Inquiry (0) c6b644.yaml'
- !include 'Bag All Player Cards 15bb07/Card Bide Your Time 24d3b3.yaml'
- !include 'Bag All Player Cards 15bb07/Card Thorough Inquiry c6b644.yaml'
- !include 'Bag All Player Cards 15bb07/Card Steady-Handed (1) 9181f7.yaml'
- !include 'Bag All Player Cards 15bb07/Card Dawn Star (1) 8b15d7.yaml'
- !include 'Bag All Player Cards 15bb07/Card Seal of the Elders (5) d2b649.yaml'
- !include 'Bag All Player Cards 15bb07/Card Keep Faith (2) 73e4ee.yaml'
- !include 'Bag All Player Cards 15bb07/Card Mariner''s Compass (2) 596053.yaml'
- !include 'Bag All Player Cards 15bb07/Card Bank Job (0) c4dfa2.yaml'
- !include 'Bag All Player Cards 15bb07/Card Bank Job c4dfa2.yaml'
- !include 'Bag All Player Cards 15bb07/Card Abyssal Rot bbeac6.yaml'
- !include 'Bag All Player Cards 15bb07/Card Maimed Hand cb14d3.yaml'
- !include 'Bag All Player Cards 15bb07/Card Testing Sprint (0) a4846b.yaml'
- !include 'Bag All Player Cards 15bb07/Card Testing Sprint a4846b.yaml'
- !include 'Bag All Player Cards 15bb07/Card Blade of Yoth c61a83.yaml'
- !include 'Bag All Player Cards 15bb07/Card Call the Beyond (2) 0dd070.yaml'
- !include 'Bag All Player Cards 15bb07/Card Gabriel Carillo (1) 7e1088.yaml'
- !include 'Bag All Player Cards 15bb07/Card Diabolical Luck (0) 1fea59.yaml'
- !include 'Bag All Player Cards 15bb07/Card Cleaning Kit (0) d07668.yaml'
- !include 'Bag All Player Cards 15bb07/Card Diabolical Luck 1fea59.yaml'
- !include 'Bag All Player Cards 15bb07/Card Cleaning Kit d07668.yaml'
- !include 'Bag All Player Cards 15bb07/Card Evanescent Ascension 9e763b.yaml'
- !include 'Bag All Player Cards 15bb07/Card Matchbox (0) b533db.yaml'
- !include 'Bag All Player Cards 15bb07/Card British Bull Dog (0) 9b76a0.yaml'
- !include 'Bag All Player Cards 15bb07/Card Matchbox b533db.yaml'
- !include 'Bag All Player Cards 15bb07/Card British Bull Dog 9b76a0.yaml'
- !include 'Bag All Player Cards 15bb07/Card Twilight Diadem a2f8f8.yaml'
- !include 'Bag All Player Cards 15bb07/Card Rod of Carnamagos (0) 66ec64.yaml'
- !include 'Bag All Player Cards 15bb07/Card Rod of Carnamagos 66ec64.yaml'
- !include 'Bag All Player Cards 15bb07/Card Spectral Razor (2) b38ded.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ethereal Form (2) e58c7b.yaml'
- !include 'Bag All Player Cards 15bb07/Card Cleaning Kit (3) 94c3e1.yaml'
@ -1696,7 +1706,7 @@ ContainedObjects:
- !include 'Bag All Player Cards 15bb07/Card Fake Credentials (4) 7ebb67.yaml'
- !include 'Bag All Player Cards 15bb07/Card Hunting Jacket (2) 5355fa.yaml'
- !include 'Bag All Player Cards 15bb07/Card Dark Horse (5) d00e4d.yaml'
- !include 'Bag All Player Cards 15bb07/Card Antediluvian Hymn (0) ba4746.yaml'
- !include 'Bag All Player Cards 15bb07/Card Antediluvian Hymn ba4746.yaml'
- !include 'Bag All Player Cards 15bb07/Card Aember Rot 3e6219.yaml'
- !include 'Bag All Player Cards 15bb07/Card The Silver Moth 2c6dc1.yaml'
- !include 'Bag All Player Cards 15bb07/Card Scarlet Rot fe476c.yaml'
@ -1711,7 +1721,16 @@ ContainedObjects:
- !include 'Bag All Player Cards 15bb07/Card Bianca Die Katz 992ccd.yaml'
- !include 'Bag All Player Cards 15bb07/Card Servant of Brass 06bc7e.yaml'
- !include 'Bag All Player Cards 15bb07/Card Read the Signs (2) 5ce4d4.yaml'
- !include 'Bag All Player Cards 15bb07/Card Elaborate Distraction (0) d1422e.yaml'
- !include 'Bag All Player Cards 15bb07/Card Elaborate Distraction d1422e.yaml'
- !include 'Bag All Player Cards 15bb07/Card Dr. Rosa Marquez 62d5a6.yaml'
- !include 'Bag All Player Cards 15bb07/Card The Pearl Diary 34a7b5.yaml'
- !include 'Bag All Player Cards 15bb07/Card Ajax f8a7c6.yaml'
- !include 'Bag All Player Cards 15bb07/Card Corn Husk Doll 3602f5.yaml'
- !include 'Bag All Player Cards 15bb07/Card The Hemlock Curse 0d0a2c.yaml'
- !include 'Bag All Player Cards 15bb07/Card Worry Rock 5e5dc6.yaml'
- !include 'Bag All Player Cards 15bb07/Card Little Sylvie 153a42.yaml'
- !include 'Bag All Player Cards 15bb07/Card Prismatic Shard 27fe24.yaml'
- !include 'Bag All Player Cards 15bb07/Card Helen Peters 33bfa1.yaml'
Description: ''
DragSelectable: true
GMNotes: ''

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 125300
CardID: 917316
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'1253':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2278324186529136565/AE4B753BBB284EB12A0BDE36CEA3CD763C835AC0/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -33,7 +33,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Absolution
SidewaysCard: false
Snap: true

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94732
CardID: 917408
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 20100
CardID: 917417
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'201':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2172484009070977509/27A8CCF2BC48CAD909180D64177E86B8232F66C6/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -33,7 +33,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Accursed
SidewaysCard: false
Snap: true

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 9100
CardID: 917300
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'91':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2223150865961116295/72473371D0DB68709B4B1B9343A748510A1BB30A/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -33,7 +33,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Ad Hoc
SidewaysCard: false
Snap: true

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94733
CardID: 917409
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 1700
CardID: 917303
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'17':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2279448008875866961/175F57B97C6DEC14F1F6E6420A318A76D38FFE8A/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -33,7 +33,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Aetheric Current (Yoth)
SidewaysCard: false
Snap: true

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 12700
CardID: 917302
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'127':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2279448008875867121/DD34A54C059F9DE340A3C54406A276D202D1C329/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -33,7 +33,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Aetheric Current (Yuggoth)
SidewaysCard: false
Snap: true

View File

@ -0,0 +1,56 @@
AltLookAngle:
x: 0
y: 0
z: 0
Autoraise: true
CardID: 537606
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'5376':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2453969772006056023/3B1E7D4CD84213ED69594B15606531799383F4AA/
NumHeight: 3
NumWidth: 9
Type: 0
UniqueBack: false
Description: Faithful Steed
DragSelectable: true
GMNotes: "{\n \"id\": \"10642\",\n \"type\": \"Asset\",\n \"slot\": \"Ally\",\n
\ \"class\": \"Neutral\",\n \"cost\": 2,\n \"traits\": \"Ally. Creature.\",\n
\ \"cycle\": \"The Feast of Hemlock Vale\"\n}"
GUID: f8a7c6
Grid: true
GridProjection: false
Hands: true
HideWhenFaceDown: true
IgnoreFoW: false
LayoutGroupSortIndex: 0
Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: Ajax
SidewaysCard: false
Snap: true
Sticky: true
Tags:
- Asset
- PlayerCard
Tooltip: true
Transform:
posX: 31.17
posY: 3.67
posZ: 11.69
rotX: 0
rotY: 270
rotZ: 0
scaleX: 1
scaleY: 1
scaleZ: 1
Value: 0
XmlUI: ''

View File

@ -3,20 +3,20 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 1100
CardID: 117303
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'11':
'1173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2172484009071330094/3AEFB558D789BC525F50DCC0217FA17627EB91BF/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2172484009071330266/6DD06B74E6DD4F473AB47C39DD17DF9FAD8B1455/
NumHeight: 1
NumWidth: 1
BackURL: http://cloud-3.steamusercontent.com/ugc/2424696374430631817/A15FFE0907238AB578CFEB119974545A4408E3A1/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430631996/4C0628EA8BAEB615CBF9575C1B2F0389EED9C4B7/
NumHeight: 2
NumWidth: 4
Type: 0
UniqueBack: false
UniqueBack: true
Description: The Countess
DragSelectable: true
GMNotes: "{\n \"id\": \"10009\",\n \"type\": \"Investigator\",\n \"class\": \"Rogue\",\n
@ -39,7 +39,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Alessandra Zorzi
SidewaysCard: true
Snap: true

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 4900
CardID: 917311
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'49':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2279447674651244606/B2275AD213AF8DD0B65170BD4E5E5E98E233A6C7/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -34,7 +34,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Ancestral Token
SidewaysCard: false
Snap: true

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94737
CardID: 917415
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0
@ -35,7 +35,7 @@ LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: Antediluvian Hymn (0)
Nickname: Antediluvian Hymn
SidewaysCard: false
Snap: true
Sticky: true

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378962
CardID: 378953
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378917
CardID: 378959
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0
@ -21,7 +21,8 @@ Description: Basic Weakness
DragSelectable: true
GMNotes: "{\n \"id\": \"08130\",\n \"type\": \"Treachery\",\n \"class\": \"Neutral\",\n
\ \"traits\": \"Injury.\",\n \"weakness\": true,\n \"basicWeaknessCount\": 1,\n
\ \"cycle\": \"Edge of the Earth\"\n}"
\ \"uses\": [\n {\n \"count\": 1,\n \"type\": \"Damage\",\n \"token\":
\"damage\"\n }\n ],\n \"cycle\": \"Edge of the Earth\"\n}"
GUID: 8f1420
Grid: true
GridProjection: false

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94760
CardID: 917458
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94723
CardID: 917361
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
@ -35,7 +35,7 @@ LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: Bank Job (0)
Nickname: Bank Job
SidewaysCard: false
Snap: true
Sticky: true

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 200
CardID: 917305
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'2':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2172484009071331078/3553DC91D67F802BAFFE9F674DBE991C2D439867/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -33,7 +33,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Beguile
SidewaysCard: false
Snap: true

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94728
CardID: 917401
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,28 +3,28 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94720
CardID: 917354
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: Singing Your Songs
Description: Singing Your Song
DragSelectable: true
GMNotes: "{\n \"id\": \"10062\",\n \"type\": \"Asset\",\n \"slot\": \"Ally\",\n
\ \"class\": \"Rogue\",\n \"cost\": 2,\n \"level\": 0,\n \"traits\": \"Ally.
Criminal. Socialite.\",\n \"bonded\": [\n {\n \"count\": 1,\n \"id\":
\"10063\"\n }\n ],\n \"agilityIcons\": 1,\n \"uses\": [\n {\n \"count\":
10,\n \"type\": \"Resource\",\n \"token\": \"resource\"\n }\n ],\n
\ \"cycle\": \"The Feast of Hemlock Vale\"\n}"
Criminal. Socialite.\",\n \"bonded\": [\n {\n \"count\": 1,\n \"maxCount\":
1,\n \"id\": \"10063\"\n }\n ],\n \"agilityIcons\": 1,\n \"uses\": [\n
\ {\n \"count\": 10,\n \"type\": \"Resource\",\n \"token\": \"resource\"\n
\ }\n ],\n \"cycle\": \"The Feast of Hemlock Vale\"\n}"
GUID: 897a94
Grid: true
GridProjection: false
@ -37,7 +37,7 @@ LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: Bianca "Die Katz" (0)
Nickname: Bianca "Die Katz"
SidewaysCard: false
Snap: true
Sticky: true

View File

@ -3,21 +3,21 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94721
CardID: 917355
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
Description: Enemy
DragSelectable: true
GMNotes: "{\n \"id\": \"10063\",\n \"type\": \"Enemy\",\n \"traits\": \"Humanoid.
Criminal. Socialite.\",\n \"victory\": 0,\n \"cycle\": \"The Feast of Hemlock

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94755
CardID: 917451
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0
@ -34,7 +34,7 @@ LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: Bide Your Time (0)
Nickname: Bide Your Time
SidewaysCard: false
Snap: true
Sticky: true

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 9400
CardID: 917356
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'94':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2195002645128569861/7143A7BF20E37A069E170A21D77C16C91D81374D/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -33,7 +33,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Blackmail File
SidewaysCard: false
Snap: true

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94707
CardID: 917328
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94705
CardID: 917326
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378947
CardID: 378938
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378949
CardID: 378940
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -11,8 +11,8 @@ ColorDiffuse:
CustomDeck:
'3795':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/1625226898126523297/2C981A8D79F76E3533ADD355F8AF406EA72B5162/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126522542/E29FEBE196344F3DEE457BE957E9AF18310C6F39/
BackURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578166/C21CC0E4ADE06C11419F36BAEDED0BDBFF8DE5E3/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578395/F97B770FB90EA18B46F58614CCE0016406E3E777/
NumHeight: 2
NumWidth: 5
Type: 0

View File

@ -41,6 +41,119 @@ local __bundle_require, __bundle_loaded, __bundle_register, __bundle_modules = (
return require, loaded, register, modules
end)(nil)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/cards/BookofLivingMyths")
end)
__bundle_register("playercards/cards/BookofLivingMyths", function(require, _LOADED, __bundle_register, __bundle_modules)
local chaosBagApi = require("chaosbag/ChaosBagApi")
local guidReferenceApi = require("core/GUIDReferenceApi")
local playmatApi = require("playermat/PlaymatApi")
function onLoad(savedData)
self.addContextMenuItem("Enable Helper", createButtons)
if savedData ~= "" then
local loadedData = JSON.decode(savedData)
if loadedData.loopId then
createButtons()
end
end
end
function deleteButtons()
self.clearContextMenu()
self.addContextMenuItem("Enable Helper", createButtons)
self.UI.setAttribute("inactives", "active", false)
self.UI.setAttribute("actives", "active", false)
if loopId then Wait.stop(loopId) end
loopId = nil
self.script_state = JSON.encode({ loopId = loopId })
end
-- create buttons and begin monitoring chaos bag for curse and bless tokens
function createButtons()
self.clearContextMenu()
self.addContextMenuItem("Clear Helper", deleteButtons)
self.UI.setAttribute("inactives", "active", true)
self.UI.setAttribute("actives", "active", true)
loopId = Wait.time(maybeUpdateButtonState, 1, -1)
self.script_state = JSON.encode({ loopId = loopId })
end
function resolveToken(player, _, tokenType)
local matColor
if player.color == "Black" then
matColor = playmatApi.getMatColorByPosition(self.getPosition())
else
matColor = playmatApi.getMatColor(player.color)
end
local mat = guidReferenceApi.getObjectByOwnerAndType(matColor, "Playermat")
chaosBagApi.drawChaosToken(mat, true, tokenType)
end
-- count tokens in the bag and show appropriate buttons
function maybeUpdateButtonState()
local numInBag = getBlessCurseInBag()
local state = { Bless = false, Curse = false }
if numInBag.Bless >= numInBag.Curse and numInBag.Bless > 0 then
state.Bless = true
end
if numInBag.Curse >= numInBag.Bless and numInBag.Curse > 0 then
state.Curse = true
end
setUiState(state)
end
function getBlessCurseInBag()
local numInBag = { Bless = 0, Curse = 0 }
local chaosBag = chaosBagApi.findChaosBag()
for _, v in ipairs(chaosBag.getObjects()) do
if v.name == "Bless" then
numInBag.Bless = numInBag.Bless + 1
elseif v.name == "Curse" then
numInBag.Curse = numInBag.Curse + 1
end
end
return numInBag
end
function setUiState(params)
-- set bless state
if params.Bless then
self.UI.show("Bless")
self.UI.hide("inactiveBless")
else
self.UI.show("inactiveBless")
self.UI.hide("Bless")
end
-- set curse state
if params.Curse then
self.UI.show("Curse")
self.UI.hide("inactiveCurse")
else
self.UI.show("inactiveCurse")
self.UI.hide("Curse")
end
end
function errorMessage()
local numInBag = getBlessCurseInBag()
if numInBag.Bless == 0 and numInBag.Curse == 0 then
broadcastToAll("There are no Bless or Curse tokens in the chaos bag.", "Red")
elseif numInBag.Bless > numInBag.Curse then
broadcastToAll("There are more Bless tokens than Curse tokens in the chaos bag.", "Red")
else
broadcastToAll("There are more Curse tokens than Bless tokens in the chaos bag.", "Red")
end
end
end)
__bundle_register("chaosbag/ChaosBagApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local ChaosBagApi = {}
@ -115,8 +228,9 @@ do
---@param drawAdditional boolean Controls whether additional tokens should be drawn
---@param tokenType? string Name of token (e.g. "Bless") to be drawn from the bag
---@param guidToBeResolved? string GUID of the sealed token to be resolved instead of drawing a token from the bag
ChaosBagApi.drawChaosToken = function(mat, drawAdditional, tokenType, guidToBeResolved)
return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional, tokenType = tokenType, guidToBeResolved = guidToBeResolved})
---@param returnedToken? tts__Object Token to be replaced with newly drawn token
ChaosBagApi.drawChaosToken = function(mat, drawAdditional, tokenType, guidToBeResolved, returnedToken)
return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional, tokenType = tokenType, guidToBeResolved = guidToBeResolved, returnedToken = returnedToken})
end
-- returns a Table List of chaos token ids in the current chaos bag
@ -136,6 +250,7 @@ do
return getObjectFromGUID("123456")
end
-- Returns the matching object
---@param owner string Parent object for this search
---@param type string Type of object to search for
---@return any: Object reference to the matching object
@ -143,21 +258,21 @@ do
return getGuidHandler().call("getObjectByOwnerAndType", { owner = owner, type = type })
end
-- returns all matching objects as a table with references
-- Returns all matching objects as a table with references
---@param type string Type of object to search for
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByType = function(type)
return getGuidHandler().call("getObjectsByType", type)
end
-- returns all matching objects as a table with references
-- Returns all matching objects as a table with references
---@param owner string Parent object for this search
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByOwner = function(owner)
return getGuidHandler().call("getObjectsByOwner", owner)
end
-- sends new information to the reference handler to edit the main index
-- Sends new information to the reference handler to edit the main index
---@param owner string Parent of the object
---@param type string Type of the object
---@param guid string GUID of the object
@ -169,6 +284,13 @@ do
})
end
-- Returns the owner of an object or the object it's located on
---@param object tts__GameObject Object for this search
---@return string: Parent of the object or object it's located on
GUIDReferenceApi.getOwnerOfObject = function(object)
return getGuidHandler().call("getOwnerOfObject", object)
end
return GUIDReferenceApi
end
end)
@ -254,6 +376,14 @@ do
end
end
-- Returns the position of the draw pile of the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.getDrawPosition = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("returnGlobalDrawPosition")
end
end
-- Transforms a local position into a global position
---@param localPos table Local position to be transformed
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
@ -317,6 +447,15 @@ do
end
end
-- Returns the position for encounter card drawing
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
---@param stack boolean If true, returns the leftmost position instead of the first empty from the right
PlaymatApi.getEncounterCardDrawPosition = function(matColor, stack)
for _, mat in pairs(getMatForColor(matColor)) do
return Vector(mat.call("getEncounterCardDrawPosition", stack))
end
end
-- Sets the requested playmat's snap points to limit snapping to matching card types or not. If
-- matchTypes is true, the main card slot snap points will only snap assets, while the
-- investigator area point will only snap Investigators. If matchTypes is false, snap points will
@ -365,7 +504,7 @@ do
return count
end
-- updates the specified owned counter
-- Updates the specified owned counter
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param type string Counter to target
---@param newValue number Value to set the counter to
@ -376,7 +515,7 @@ do
end
end
-- triggers the draw function for the specified playmat
-- Triggers the draw function for the specified playmat
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param number number Amount of cards to draw
PlaymatApi.drawCardsWithReshuffle = function(matColor, number)
@ -385,7 +524,7 @@ do
end
end
-- returns the resource counter amount
-- Returns the resource counter amount
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
---@param type string Counter to target
PlaymatApi.getCounterValue = function(matColor, type)
@ -394,15 +533,13 @@ do
end
end
-- returns a list of mat colors that have an investigator placed
-- Returns a list of mat colors that have an investigator placed
PlaymatApi.getUsedMatColors = function()
local localInvestigatorPosition = { x = -1.17, y = 1, z = -0.01 }
local usedColors = {}
for matColor, mat in pairs(getMatForColor("All")) do
local searchPos = mat.positionToWorld(localInvestigatorPosition)
local searchResult = searchLib.atPosition(searchPos, "isCardOrDeck")
if #searchResult > 0 then
table.insert(usedColors, matColor)
end
@ -410,7 +547,7 @@ do
return usedColors
end
-- resets the specified skill tracker to "1, 1, 1, 1"
-- Resets the specified skill tracker to "1, 1, 1, 1"
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.resetSkillTracker = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
@ -418,7 +555,7 @@ do
end
end
-- finds all objects on the playmat and associated set aside zone and returns a table
-- Finds all objects on the playmat and associated set aside zone and returns a table
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param filter string Name of the filte function (see util/SearchLib)
PlaymatApi.searchAroundPlaymat = function(matColor, filter)
@ -520,113 +657,4 @@ do
return SearchLib
end
end)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/cards/BookofLivingMyths")
end)
__bundle_register("playercards/cards/BookofLivingMyths", function(require, _LOADED, __bundle_register, __bundle_modules)
local chaosBagApi = require("chaosbag/ChaosBagApi")
local guidReferenceApi = require("core/GUIDReferenceApi")
local playmatApi = require("playermat/PlaymatApi")
function onSave()
return JSON.encode({ loopId = loopId })
end
function onLoad(savedData)
self.addContextMenuItem("Enable Helper", createButtons)
if savedData ~= "" then
local loadedData = JSON.decode(savedData)
if loadedData.loopId then
createButtons()
end
end
end
function deleteButtons()
self.UI.setAttribute("inactives", "active", false)
self.UI.setAttribute("actives", "active", false)
self.clearContextMenu()
self.addContextMenuItem("Enable Helper", createButtons)
Wait.stop(loopId)
loopId = nil
end
-- Create buttons and begin monitoring chaos bag for curse and bless tokens
function createButtons()
self.clearContextMenu()
self.addContextMenuItem("Clear Helper", deleteButtons)
self.UI.setAttribute("inactives", "active", true)
self.UI.setAttribute("actives", "active", true)
self.UI.show("inactiveBless")
self.UI.show("inactiveCurse")
self.UI.hide("Bless")
self.UI.hide("Curse")
currentState = "Empty"
loopId = Wait.time(countBlessCurse, 1, -1)
end
function resolveToken(_, _, tokenType)
local closestMatColor = playmatApi.getMatColorByPosition(self.getPosition())
local mat = guidReferenceApi.getObjectByOwnerAndType(closestMatColor, "Playermat")
chaosBagApi.drawChaosToken(mat, true, tokenType)
end
-- count tokens in the bag and show appropriate buttons
function countBlessCurse()
local numInBag = { Bless = 0, Curse = 0 }
local chaosBag = chaosBagApi.findChaosBag()
local tokens = {}
for _, v in ipairs(chaosBag.getObjects()) do
if v.name == "Bless" then
numInBag.Bless = numInBag.Bless + 1
elseif v.name == "Curse" then
numInBag.Curse = numInBag.Curse + 1
end
end
if numInBag.Bless > numInBag.Curse then
if currentState ~= "More Bless" then
self.UI.show("Bless")
self.UI.hide("inactiveBless")
self.UI.show("inactiveCurse")
self.UI.hide("Curse")
end
currentState = "More Bless"
elseif numInBag.Curse > numInBag.Bless then
if currentState ~= "More Curse" then
self.UI.show("Curse")
self.UI.hide("inactiveCurse")
self.UI.show("inactiveBless")
self.UI.hide("Bless")
end
currentState = "More Curse"
elseif numInBag.Curse == 0 then
if currentState ~= "Empty" then
self.UI.show("inactiveBless")
self.UI.hide("Bless")
self.UI.show("inactiveCurse")
self.UI.hide("Curse")
end
currentState = "Empty"
else
if currentState ~= "Equal" then
self.UI.show("Bless")
self.UI.hide("inactiveBless")
self.UI.show("Curse")
self.UI.hide("inactiveCurse")
end
currentState = "Equal"
end
end
function errorMessage ()
if currentState == "Empty" then
broadcastToAll("There are no Bless or Curse tokens in the chaos bag.","Red")
elseif currentState == "More Bless" then
broadcastToAll("There are more Bless tokens than Curse tokens in the chaos bag.","Red")
else
broadcastToAll("There are more Curse tokens than Bless tokens in the chaos bag.","Red")
end
end
end)
return __bundle_require("__root")

View File

@ -4,10 +4,20 @@
font="font_teutonic-arkham"
fontSize="300"
iconWidth="400"
iconAlignment="Right"/>
iconAlignment="Right"
text="Resolve"/>
<Button class="inactive"
onClick="errorMessage"
color="#353535E6"
textColor="#A0A0A0"/>
<Button class="active"
onClick="resolveToken"
textColor="white"
active="false"/>
<Panel position="0 -55 -22"
rotation="0 0 180"
height="900" width="1400"
height="900"
width="1400"
scale="0.1 0.1 1"/>
<TableLayout active="false"
cellSpacing="80"
@ -18,14 +28,18 @@
<TableLayout id="actives">
<Row>
<Cell>
<Button id="Bless" icon="bless" textColor="White"
onClick="resolveToken" color="#9D702CE6" iconAlignment="Right">Resolve</Button>
<Button id="Bless"
icon="bless"
color="#9D702CE6"
class="active"/>
</Cell>
</Row>
<Row>
<Cell>
<Button id="Curse" icon="curse" textColor="White"
onClick="resolveToken" color="#633A84E6">Resolve</Button>
<Button id="Curse"
icon="curse"
color="#633A84E6"
class="active"/>
</Cell>
</Row>
</TableLayout>
@ -35,14 +49,16 @@
<TableLayout id="inactives">
<Row>
<Cell>
<Button id="inactiveBless" icon="bless" textColor="#A0A0A0"
onClick="errorMessage" color="#353535E6">Resolve</Button>
<Button id="inactiveBless"
icon="bless"
class="inactive"/>
</Cell>
</Row>
<Row>
<Cell>
<Button id="inactiveCurse" icon="curse" textColor="#A0A0A0"
onClick="errorMessage" color="#353535E6">Resolve</Button>
<Button id="inactiveCurse"
icon="curse"
class="inactive"/>
</Cell>
</Row>
</TableLayout>

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 8500
CardID: 917307
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'85':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2279447041528306779/F60D99AAA35122A9553F0B5FD736DB6FB73BE7EF/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
CustomUIAssets:
@ -41,10 +41,10 @@ HideWhenFaceDown: true
IgnoreFoW: false
LayoutGroupSortIndex: 0
Locked: false
LuaScript: !include 'CardCustom Book of Living Myths c5fb1f.ttslua'
LuaScript: !include 'Card Book of Living Myths c5fb1f.ttslua'
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Book of Living Myths
SidewaysCard: false
Snap: true
@ -64,4 +64,4 @@ Transform:
scaleY: 1
scaleZ: 1
Value: 0
XmlUI: !include 'CardCustom Book of Living Myths c5fb1f.xml'
XmlUI: !include 'Card Book of Living Myths c5fb1f.xml'

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378928
CardID: 378919
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378930
CardID: 378921
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94727
CardID: 917369
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94722
CardID: 917357
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
@ -36,7 +36,7 @@ LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: British Bull Dog (0)
Nickname: British Bull Dog
SidewaysCard: false
Snap: true
Sticky: true

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94757
CardID: 917455
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0
@ -21,9 +21,10 @@ Description: Crown of Dying Light
DragSelectable: true
GMNotes: "{\n \"id\": \"10133\",\n \"type\": \"Asset\",\n \"class\": \"Neutral\",\n
\ \"cost\": 1,\n \"level\": 5,\n \"traits\": \"Item. Charm. Mask.\",\n \"bonded\":
[\n {\n \"count\": 1,\n \"id\": \"10134\"\n }\n ],\n \"wildIcons\":
1,\n \"uses\": [\n {\n \"count\": 0,\n \"type\": \"Offering\",\n \"token\":
\"resource\"\n }\n ],\n \"cycle\": \"The Feast of Hemlock Vale\"\n}"
[\n {\n \"count\": 1,\n \"maxCount\": 1,\n \"id\": \"10134\"\n
\ }\n ],\n \"wildIcons\": 1,\n \"uses\": [\n {\n \"count\": 0,\n \"type\":
\"Offering\",\n \"token\": \"resource\"\n }\n ],\n \"cycle\": \"The Feast
of Hemlock Vale\"\n}"
GUID: b6d35d
Grid: true
GridProjection: false

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378960
CardID: 378951
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 379007
CardID: 379006
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 379006
CardID: 379005
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378916
CardID: 378958
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94740
CardID: 917421
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 40300
CardID: 917406
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'403':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2278324186559601365/6C247C82793481C97E24F74A26AF905E3B708C50/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: The Capricious Meddler
@ -35,7 +35,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Cat Mask
SidewaysCard: false
Snap: true

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 12102
CardID: 917332
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'121':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2021607169641060708/B263E98D28E301D8EF45EB001FEBCE98DA25354B/
NumHeight: 2
NumWidth: 6
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94704
CardID: 917325
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94700
CardID: 917312
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
@ -36,7 +36,7 @@ LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: Cleaning Kit (0)
Nickname: Cleaning Kit
SidewaysCard: false
Snap: true
Sticky: true

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 124100
CardID: 917349
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'1241':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2278324186529136671/AC1530FE71D9E5CF4F816A488E07076AC8064BD8/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -33,7 +33,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Confound (3)
SidewaysCard: false
Snap: true

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 34200
CardID: 917338
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'342':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2172484009070977979/A629DD5733453F892F57514EC5950E087486896F/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -34,7 +34,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Control Variable
SidewaysCard: false
Snap: true

View File

@ -0,0 +1,57 @@
AltLookAngle:
x: 0
y: 0
z: 0
Autoraise: true
CardID: 536430
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'5364':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2453969772006048567/4C173CF8E2E2F69C7374D65AAA2D842C048FC792/
NumHeight: 5
NumWidth: 8
Type: 0
UniqueBack: false
Description: Symbol of Innocence
DragSelectable: true
GMNotes: "{\n \"id\": \"10714\",\n \"type\": \"Asset\",\n \"slot\": \"Accessory\",\n
\ \"class\": \"Neutral\",\n \"cost\": 1,\n \"willpowerIcons\": 1,\n \"agilityIcons\":
1,\n \"uses\": [\n {\n \"count\": 3,\n \"type\": \"Wish\",\n \"token\":
\"resource\"\n }\n ],\n \"cycle\": \"The Feast of Hemlock Vale\"\n}"
GUID: 3602f5
Grid: true
GridProjection: false
Hands: true
HideWhenFaceDown: true
IgnoreFoW: false
LayoutGroupSortIndex: 0
Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: Corn Husk Doll
SidewaysCard: false
Snap: true
Sticky: true
Tags:
- Asset
- PlayerCard
Tooltip: true
Transform:
posX: 34.33
posY: 3.67
posZ: 9.4
rotX: 0
rotY: 270
rotZ: 0
scaleX: 1
scaleY: 1
scaleZ: 1
Value: 0
XmlUI: ''

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378961
CardID: 378952
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -21,8 +21,9 @@ Description: ''
DragSelectable: true
GMNotes: "{\n \"id\": \"06024\",\n \"type\": \"Asset\",\n \"slot\": \"Accessory\",\n
\ \"class\": \"Rogue\",\n \"cost\": 1,\n \"level\": 0,\n \"traits\": \"Item.
Relic.\",\n \"bonded\": [\n {\n \"count\": 1,\n \"id\": \"06025\"\n
\ }\n ],\n \"willpowerIcons\": 1,\n \"cycle\": \"The Dream-Eaters\"\n}"
Relic.\",\n \"bonded\": [\n {\n \"count\": 1,\n \"maxCount\": 2,\n
\ \"id\": \"06025\"\n }\n ],\n \"willpowerIcons\": 1,\n \"cycle\": \"The
Dream-Eaters\"\n}"
GUID: 6692de
Grid: true
GridProjection: false

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378931
CardID: 378922
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -19,9 +19,9 @@ CustomDeck:
UniqueBack: false
Description: Basic Weakness
DragSelectable: true
GMNotes: "{\n \"id\": \"54014\",\n \"type\": \"Treachery\",\n \"class\": \"Neutral\",\n
\ \"traits\": \"Curse. Omen.\",\n \"permanent\": true,\n \"weakness\": true,\n
\ \"basicWeaknessCount\": 1,\n \"cycle\": \"Return to the Circle Undone\"\n}"
GMNotes: "{\r\n \"id\": \"54014\",\r\n \"type\": \"Treachery\",\r\n \"class\":
\"Neutral\",\r\n \"traits\": \"Curse. Omen.\",\r\n \"permanent\": true,\r\n \"weakness\":
true,\r\n \"basicWeaknessCount\": 1,\r\n \"cycle\": \"Return to the Circle Undone\"\r\n}\r"
GUID: bad8cb
Grid: true
GridProjection: false

View File

@ -11,8 +11,8 @@ ColorDiffuse:
CustomDeck:
'3795':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/1625226898126523297/2C981A8D79F76E3533ADD355F8AF406EA72B5162/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126522542/E29FEBE196344F3DEE457BE957E9AF18310C6F39/
BackURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578166/C21CC0E4ADE06C11419F36BAEDED0BDBFF8DE5E3/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578395/F97B770FB90EA18B46F58614CCE0016406E3E777/
NumHeight: 2
NumWidth: 5
Type: 0

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94754
CardID: 917449
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0
@ -20,8 +20,8 @@ CustomDeck:
Description: ''
DragSelectable: true
GMNotes: "{\n \"id\": \"10127\",\n \"type\": \"Asset\",\n \"class\": \"Survivor\",\n
\ \"level\": 5,\n \"traits\": \"Condition.\",\n \"permanent\": true,\n \"cycle\":
\"The Feast of Hemlock Vale\"\n}"
\ \"startsInPlay\": true,\n \"level\": 5,\n \"traits\": \"Condition.\",\n \"permanent\":
true,\n \"cycle\": \"The Feast of Hemlock Vale\"\n}"
GUID: d00e4d
Grid: true
GridProjection: false

View File

@ -41,80 +41,6 @@ local __bundle_require, __bundle_loaded, __bundle_register, __bundle_modules = (
return require, loaded, register, modules
end)(nil)
__bundle_register("util/SearchLib", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local SearchLib = {}
local filterFunctions = {
isActionToken = function(x) return x.getDescription() == "Action Token" end,
isCard = function(x) return x.type == "Card" end,
isDeck = function(x) return x.type == "Deck" end,
isCardOrDeck = function(x) return x.type == "Card" or x.type == "Deck" end,
isClue = function(x) return x.memo == "clueDoom" and x.is_face_down == false end,
isTileOrToken = function(x) return x.type == "Tile" end
}
-- performs the actual search and returns a filtered list of object references
---@param pos tts__Vector Global position
---@param rot? tts__Vector Global rotation
---@param size table Size
---@param filter? string Name of the filter function
---@param direction? table Direction (positive is up)
---@param maxDistance? number Distance for the cast
local function returnSearchResult(pos, rot, size, filter, direction, maxDistance)
local filterFunc
if filter then
filterFunc = filterFunctions[filter]
end
local searchResult = Physics.cast({
origin = pos,
direction = direction or { 0, 1, 0 },
orientation = rot or { 0, 0, 0 },
type = 3,
size = size,
max_distance = maxDistance or 0
})
-- filtering the result
local objList = {}
for _, v in ipairs(searchResult) do
if not filter or filterFunc(v.hit_object) then
table.insert(objList, v.hit_object)
end
end
return objList
end
-- searches the specified area
SearchLib.inArea = function(pos, rot, size, filter)
return returnSearchResult(pos, rot, size, filter)
end
-- searches the area on an object
SearchLib.onObject = function(obj, filter)
pos = obj.getPosition()
size = obj.getBounds().size:setAt("y", 1)
return returnSearchResult(pos, _, size, filter)
end
-- searches the specified position (a single point)
SearchLib.atPosition = function(pos, filter)
size = { 0.1, 2, 0.1 }
return returnSearchResult(pos, _, size, filter)
end
-- searches below the specified position (downwards until y = 0)
SearchLib.belowPosition = function(pos, filter)
direction = { 0, -1, 0 }
maxDistance = pos.y
return returnSearchResult(pos, _, size, filter, direction, maxDistance)
end
return SearchLib
end
end)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/cards/DarkRitual")
end)
__bundle_register("playercards/CardsThatSealTokens", function(require, _LOADED, __bundle_register, __bundle_modules)
--[[ Library for cards that seal tokens
This file is used to add sealing option to cards' context menu.
@ -404,82 +330,64 @@ function resolveSealed()
chaosBagApi.drawChaosToken(mat, true, _, guidToBeResolved)
end
end)
__bundle_register("accessories/TokenArrangerApi", function(require, _LOADED, __bundle_register, __bundle_modules)
__bundle_register("chaosbag/BlessCurseManagerApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local TokenArrangerApi = {}
local BlessCurseManagerApi = {}
local guidReferenceApi = require("core/GUIDReferenceApi")
-- local function to call the token arranger, if it is on the table
---@param functionName string Name of the function to cal
---@param argument? table Parameter to pass
local function callIfExistent(functionName, argument)
local tokenArranger = guidReferenceApi.getObjectByOwnerAndType("Mythos", "TokenArranger")
if tokenArranger ~= nil then
tokenArranger.call(functionName, argument)
end
local function getManager()
return guidReferenceApi.getObjectByOwnerAndType("Mythos", "BlessCurseManager")
end
-- updates the token modifiers with the provided data
---@param fullData table Contains the chaos token metadata
TokenArrangerApi.onTokenDataChanged = function(fullData)
callIfExistent("onTokenDataChanged", fullData)
-- removes all taken tokens and resets the counts
BlessCurseManagerApi.removeTakenTokensAndReset = function()
local BlessCurseManager = getManager()
Wait.time(function() BlessCurseManager.call("removeTakenTokens", "Bless") end, 0.05)
Wait.time(function() BlessCurseManager.call("removeTakenTokens", "Curse") end, 0.10)
Wait.time(function() BlessCurseManager.call("doReset", "White") end, 0.15)
end
-- deletes already laid out tokens
TokenArrangerApi.deleteCopiedTokens = function()
callIfExistent("deleteCopiedTokens")
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.sealedToken = function(type, guid)
getManager().call("sealedToken", { type = type, guid = guid })
end
-- updates the laid out tokens
TokenArrangerApi.layout = function()
Wait.time(function() callIfExistent("layout") end, 0.1)
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.releasedToken = function(type, guid)
getManager().call("releasedToken", { type = type, guid = guid })
end
return TokenArrangerApi
end
end)
__bundle_register("core/GUIDReferenceApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local GUIDReferenceApi = {}
local function getGuidHandler()
return getObjectFromGUID("123456")
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.returnedToken = function(type, guid)
getManager().call("returnedToken", { type = type, guid = guid })
end
---@param owner string Parent object for this search
---@param type string Type of object to search for
---@return any: Object reference to the matching object
GUIDReferenceApi.getObjectByOwnerAndType = function(owner, type)
return getGuidHandler().call("getObjectByOwnerAndType", { owner = owner, type = type })
-- broadcasts the current status for bless/curse tokens
---@param playerColor string Color of the player to show the broadcast to
BlessCurseManagerApi.broadcastStatus = function(playerColor)
getManager().call("broadcastStatus", playerColor)
end
-- returns all matching objects as a table with references
---@param type string Type of object to search for
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByType = function(type)
return getGuidHandler().call("getObjectsByType", type)
-- removes all bless / curse tokens from the chaos bag and play
---@param playerColor string Color of the player to show the broadcast to
BlessCurseManagerApi.removeAll = function(playerColor)
getManager().call("doRemove", playerColor)
end
-- returns all matching objects as a table with references
---@param owner string Parent object for this search
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByOwner = function(owner)
return getGuidHandler().call("getObjectsByOwner", owner)
-- adds bless / curse sealing to the hovered card
---@param playerColor string Color of the player to show the broadcast to
---@param hoveredObject tts__Object Hovered object
BlessCurseManagerApi.addBlurseSealingMenu = function(playerColor, hoveredObject)
getManager().call("addMenuOptions", { playerColor = playerColor, hoveredObject = hoveredObject })
end
-- sends new information to the reference handler to edit the main index
---@param owner string Parent of the object
---@param type string Type of the object
---@param guid string GUID of the object
GUIDReferenceApi.editIndex = function(owner, type, guid)
return getGuidHandler().call("editIndex", {
owner = owner,
type = type,
guid = guid
})
end
return GUIDReferenceApi
return BlessCurseManagerApi
end
end)
__bundle_register("playermat/PlaymatApi", function(require, _LOADED, __bundle_register, __bundle_modules)
@ -564,6 +472,14 @@ do
end
end
-- Returns the position of the draw pile of the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.getDrawPosition = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("returnGlobalDrawPosition")
end
end
-- Transforms a local position into a global position
---@param localPos table Local position to be transformed
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
@ -627,6 +543,15 @@ do
end
end
-- Returns the position for encounter card drawing
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
---@param stack boolean If true, returns the leftmost position instead of the first empty from the right
PlaymatApi.getEncounterCardDrawPosition = function(matColor, stack)
for _, mat in pairs(getMatForColor(matColor)) do
return Vector(mat.call("getEncounterCardDrawPosition", stack))
end
end
-- Sets the requested playmat's snap points to limit snapping to matching card types or not. If
-- matchTypes is true, the main card slot snap points will only snap assets, while the
-- investigator area point will only snap Investigators. If matchTypes is false, snap points will
@ -675,7 +600,7 @@ do
return count
end
-- updates the specified owned counter
-- Updates the specified owned counter
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param type string Counter to target
---@param newValue number Value to set the counter to
@ -686,7 +611,7 @@ do
end
end
-- triggers the draw function for the specified playmat
-- Triggers the draw function for the specified playmat
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param number number Amount of cards to draw
PlaymatApi.drawCardsWithReshuffle = function(matColor, number)
@ -695,7 +620,7 @@ do
end
end
-- returns the resource counter amount
-- Returns the resource counter amount
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
---@param type string Counter to target
PlaymatApi.getCounterValue = function(matColor, type)
@ -704,15 +629,13 @@ do
end
end
-- returns a list of mat colors that have an investigator placed
-- Returns a list of mat colors that have an investigator placed
PlaymatApi.getUsedMatColors = function()
local localInvestigatorPosition = { x = -1.17, y = 1, z = -0.01 }
local usedColors = {}
for matColor, mat in pairs(getMatForColor("All")) do
local searchPos = mat.positionToWorld(localInvestigatorPosition)
local searchResult = searchLib.atPosition(searchPos, "isCardOrDeck")
if #searchResult > 0 then
table.insert(usedColors, matColor)
end
@ -720,7 +643,7 @@ do
return usedColors
end
-- resets the specified skill tracker to "1, 1, 1, 1"
-- Resets the specified skill tracker to "1, 1, 1, 1"
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.resetSkillTracker = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
@ -728,7 +651,7 @@ do
end
end
-- finds all objects on the playmat and associated set aside zone and returns a table
-- Finds all objects on the playmat and associated set aside zone and returns a table
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param filter string Name of the filte function (see util/SearchLib)
PlaymatApi.searchAroundPlaymat = function(matColor, filter)
@ -759,6 +682,9 @@ do
return PlaymatApi
end
end)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/cards/DarkRitual")
end)
__bundle_register("playercards/cards/DarkRitual", function(require, _LOADED, __bundle_register, __bundle_modules)
VALID_TOKENS = {
["Curse"] = true
@ -768,64 +694,38 @@ KEEP_OPEN = true
require("playercards/CardsThatSealTokens")
end)
__bundle_register("chaosbag/BlessCurseManagerApi", function(require, _LOADED, __bundle_register, __bundle_modules)
__bundle_register("accessories/TokenArrangerApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local BlessCurseManagerApi = {}
local TokenArrangerApi = {}
local guidReferenceApi = require("core/GUIDReferenceApi")
local function getManager()
return guidReferenceApi.getObjectByOwnerAndType("Mythos", "BlessCurseManager")
-- local function to call the token arranger, if it is on the table
---@param functionName string Name of the function to cal
---@param argument? table Parameter to pass
local function callIfExistent(functionName, argument)
local tokenArranger = guidReferenceApi.getObjectByOwnerAndType("Mythos", "TokenArranger")
if tokenArranger ~= nil then
tokenArranger.call(functionName, argument)
end
end
-- removes all taken tokens and resets the counts
BlessCurseManagerApi.removeTakenTokensAndReset = function()
local BlessCurseManager = getManager()
Wait.time(function() BlessCurseManager.call("removeTakenTokens", "Bless") end, 0.05)
Wait.time(function() BlessCurseManager.call("removeTakenTokens", "Curse") end, 0.10)
Wait.time(function() BlessCurseManager.call("doReset", "White") end, 0.15)
-- updates the token modifiers with the provided data
---@param fullData table Contains the chaos token metadata
TokenArrangerApi.onTokenDataChanged = function(fullData)
callIfExistent("onTokenDataChanged", fullData)
end
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.sealedToken = function(type, guid)
getManager().call("sealedToken", { type = type, guid = guid })
-- deletes already laid out tokens
TokenArrangerApi.deleteCopiedTokens = function()
callIfExistent("deleteCopiedTokens")
end
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.releasedToken = function(type, guid)
getManager().call("releasedToken", { type = type, guid = guid })
-- updates the laid out tokens
TokenArrangerApi.layout = function()
Wait.time(function() callIfExistent("layout") end, 0.1)
end
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.returnedToken = function(type, guid)
getManager().call("returnedToken", { type = type, guid = guid })
end
-- broadcasts the current status for bless/curse tokens
---@param playerColor string Color of the player to show the broadcast to
BlessCurseManagerApi.broadcastStatus = function(playerColor)
getManager().call("broadcastStatus", playerColor)
end
-- removes all bless / curse tokens from the chaos bag and play
---@param playerColor string Color of the player to show the broadcast to
BlessCurseManagerApi.removeAll = function(playerColor)
getManager().call("doRemove", playerColor)
end
-- adds bless / curse sealing to the hovered card
---@param playerColor string Color of the player to show the broadcast to
---@param hoveredObject tts__Object Hovered object
BlessCurseManagerApi.addBlurseSealingMenu = function(playerColor, hoveredObject)
getManager().call("addMenuOptions", { playerColor = playerColor, hoveredObject = hoveredObject })
end
return BlessCurseManagerApi
return TokenArrangerApi
end
end)
__bundle_register("chaosbag/ChaosBagApi", function(require, _LOADED, __bundle_register, __bundle_modules)
@ -902,8 +802,9 @@ do
---@param drawAdditional boolean Controls whether additional tokens should be drawn
---@param tokenType? string Name of token (e.g. "Bless") to be drawn from the bag
---@param guidToBeResolved? string GUID of the sealed token to be resolved instead of drawing a token from the bag
ChaosBagApi.drawChaosToken = function(mat, drawAdditional, tokenType, guidToBeResolved)
return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional, tokenType = tokenType, guidToBeResolved = guidToBeResolved})
---@param returnedToken? tts__Object Token to be replaced with newly drawn token
ChaosBagApi.drawChaosToken = function(mat, drawAdditional, tokenType, guidToBeResolved, returnedToken)
return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional, tokenType = tokenType, guidToBeResolved = guidToBeResolved, returnedToken = returnedToken})
end
-- returns a Table List of chaos token ids in the current chaos bag
@ -915,4 +816,127 @@ do
return ChaosBagApi
end
end)
__bundle_register("core/GUIDReferenceApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local GUIDReferenceApi = {}
local function getGuidHandler()
return getObjectFromGUID("123456")
end
-- Returns the matching object
---@param owner string Parent object for this search
---@param type string Type of object to search for
---@return any: Object reference to the matching object
GUIDReferenceApi.getObjectByOwnerAndType = function(owner, type)
return getGuidHandler().call("getObjectByOwnerAndType", { owner = owner, type = type })
end
-- Returns all matching objects as a table with references
---@param type string Type of object to search for
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByType = function(type)
return getGuidHandler().call("getObjectsByType", type)
end
-- Returns all matching objects as a table with references
---@param owner string Parent object for this search
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByOwner = function(owner)
return getGuidHandler().call("getObjectsByOwner", owner)
end
-- Sends new information to the reference handler to edit the main index
---@param owner string Parent of the object
---@param type string Type of the object
---@param guid string GUID of the object
GUIDReferenceApi.editIndex = function(owner, type, guid)
return getGuidHandler().call("editIndex", {
owner = owner,
type = type,
guid = guid
})
end
-- Returns the owner of an object or the object it's located on
---@param object tts__GameObject Object for this search
---@return string: Parent of the object or object it's located on
GUIDReferenceApi.getOwnerOfObject = function(object)
return getGuidHandler().call("getOwnerOfObject", object)
end
return GUIDReferenceApi
end
end)
__bundle_register("util/SearchLib", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local SearchLib = {}
local filterFunctions = {
isActionToken = function(x) return x.getDescription() == "Action Token" end,
isCard = function(x) return x.type == "Card" end,
isDeck = function(x) return x.type == "Deck" end,
isCardOrDeck = function(x) return x.type == "Card" or x.type == "Deck" end,
isClue = function(x) return x.memo == "clueDoom" and x.is_face_down == false end,
isTileOrToken = function(x) return x.type == "Tile" end
}
-- performs the actual search and returns a filtered list of object references
---@param pos tts__Vector Global position
---@param rot? tts__Vector Global rotation
---@param size table Size
---@param filter? string Name of the filter function
---@param direction? table Direction (positive is up)
---@param maxDistance? number Distance for the cast
local function returnSearchResult(pos, rot, size, filter, direction, maxDistance)
local filterFunc
if filter then
filterFunc = filterFunctions[filter]
end
local searchResult = Physics.cast({
origin = pos,
direction = direction or { 0, 1, 0 },
orientation = rot or { 0, 0, 0 },
type = 3,
size = size,
max_distance = maxDistance or 0
})
-- filtering the result
local objList = {}
for _, v in ipairs(searchResult) do
if not filter or filterFunc(v.hit_object) then
table.insert(objList, v.hit_object)
end
end
return objList
end
-- searches the specified area
SearchLib.inArea = function(pos, rot, size, filter)
return returnSearchResult(pos, rot, size, filter)
end
-- searches the area on an object
SearchLib.onObject = function(obj, filter)
pos = obj.getPosition()
size = obj.getBounds().size:setAt("y", 1)
return returnSearchResult(pos, _, size, filter)
end
-- searches the specified position (a single point)
SearchLib.atPosition = function(pos, filter)
size = { 0.1, 2, 0.1 }
return returnSearchResult(pos, _, size, filter)
end
-- searches below the specified position (downwards until y = 0)
SearchLib.belowPosition = function(pos, filter)
direction = { 0, -1, 0 }
maxDistance = pos.y
return returnSearchResult(pos, _, size, filter, direction, maxDistance)
end
return SearchLib
end
end)
return __bundle_require("__root")

View File

@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94756
CardID: 917453
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -115,8 +115,9 @@ do
---@param drawAdditional boolean Controls whether additional tokens should be drawn
---@param tokenType? string Name of token (e.g. "Bless") to be drawn from the bag
---@param guidToBeResolved? string GUID of the sealed token to be resolved instead of drawing a token from the bag
ChaosBagApi.drawChaosToken = function(mat, drawAdditional, tokenType, guidToBeResolved)
return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional, tokenType = tokenType, guidToBeResolved = guidToBeResolved})
---@param returnedToken? tts__Object Token to be replaced with newly drawn token
ChaosBagApi.drawChaosToken = function(mat, drawAdditional, tokenType, guidToBeResolved, returnedToken)
return Global.call("drawChaosToken", {mat = mat, drawAdditional = drawAdditional, tokenType = tokenType, guidToBeResolved = guidToBeResolved, returnedToken = returnedToken})
end
-- returns a Table List of chaos token ids in the current chaos bag
@ -136,6 +137,7 @@ do
return getObjectFromGUID("123456")
end
-- Returns the matching object
---@param owner string Parent object for this search
---@param type string Type of object to search for
---@return any: Object reference to the matching object
@ -143,21 +145,21 @@ do
return getGuidHandler().call("getObjectByOwnerAndType", { owner = owner, type = type })
end
-- returns all matching objects as a table with references
-- Returns all matching objects as a table with references
---@param type string Type of object to search for
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByType = function(type)
return getGuidHandler().call("getObjectsByType", type)
end
-- returns all matching objects as a table with references
-- Returns all matching objects as a table with references
---@param owner string Parent object for this search
---@return table: List of object references to matching objects
GUIDReferenceApi.getObjectsByOwner = function(owner)
return getGuidHandler().call("getObjectsByOwner", owner)
end
-- sends new information to the reference handler to edit the main index
-- Sends new information to the reference handler to edit the main index
---@param owner string Parent of the object
---@param type string Type of the object
---@param guid string GUID of the object
@ -169,83 +171,308 @@ do
})
end
-- Returns the owner of an object or the object it's located on
---@param object tts__GameObject Object for this search
---@return string: Parent of the object or object it's located on
GUIDReferenceApi.getOwnerOfObject = function(object)
return getGuidHandler().call("getOwnerOfObject", object)
end
return GUIDReferenceApi
end
end)
__bundle_register("util/SearchLib", function(require, _LOADED, __bundle_register, __bundle_modules)
__bundle_register("playermat/PlaymatApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local SearchLib = {}
local filterFunctions = {
isActionToken = function(x) return x.getDescription() == "Action Token" end,
isCard = function(x) return x.type == "Card" end,
isDeck = function(x) return x.type == "Deck" end,
isCardOrDeck = function(x) return x.type == "Card" or x.type == "Deck" end,
isClue = function(x) return x.memo == "clueDoom" and x.is_face_down == false end,
isTileOrToken = function(x) return x.type == "Tile" end
}
local PlaymatApi = {}
local guidReferenceApi = require("core/GUIDReferenceApi")
local searchLib = require("util/SearchLib")
-- performs the actual search and returns a filtered list of object references
---@param pos tts__Vector Global position
---@param rot? tts__Vector Global rotation
---@param size table Size
---@param filter? string Name of the filter function
---@param direction? table Direction (positive is up)
---@param maxDistance? number Distance for the cast
local function returnSearchResult(pos, rot, size, filter, direction, maxDistance)
local filterFunc
if filter then
filterFunc = filterFunctions[filter]
-- Convenience function to look up a mat's object by color, or get all mats.
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@return table: Single-element if only single playmat is requested
local function getMatForColor(matColor)
if matColor == "All" then
return guidReferenceApi.getObjectsByType("Playermat")
else
return { matColor = guidReferenceApi.getObjectByOwnerAndType(matColor, "Playermat") }
end
local searchResult = Physics.cast({
origin = pos,
direction = direction or { 0, 1, 0 },
orientation = rot or { 0, 0, 0 },
type = 3,
size = size,
max_distance = maxDistance or 0
})
end
-- filtering the result
-- Returns the color of the closest playmat
---@param startPos table Starting position to get the closest mat from
PlaymatApi.getMatColorByPosition = function(startPos)
local result, smallestDistance
for matColor, mat in pairs(getMatForColor("All")) do
local distance = Vector.between(startPos, mat.getPosition()):magnitude()
if smallestDistance == nil or distance < smallestDistance then
smallestDistance = distance
result = matColor
end
end
return result
end
-- Returns the color of the player's hand that is seated next to the playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.getPlayerColor = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("playerColor")
end
end
-- Returns the color of the playmat that owns the playercolor's hand
---@param handColor string Color of the playmat
PlaymatApi.getMatColor = function(handColor)
for matColor, mat in pairs(getMatForColor("All")) do
local playerColor = mat.getVar("playerColor")
if playerColor == handColor then
return matColor
end
end
end
-- Returns if there is the card "Dream-Enhancing Serum" on the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.isDES = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("isDES")
end
end
-- Performs a search of the deck area of the requested playmat and returns the result as table
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.getDeckAreaObjects = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("getDeckAreaObjects")
end
end
-- Flips the top card of the deck (useful after deck manipulation for Norman Withers)
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.flipTopCardFromDeck = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("flipTopCardFromDeck")
end
end
-- Returns the position of the discard pile of the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.getDiscardPosition = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("returnGlobalDiscardPosition")
end
end
-- Returns the position of the draw pile of the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.getDrawPosition = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("returnGlobalDrawPosition")
end
end
-- Transforms a local position into a global position
---@param localPos table Local position to be transformed
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.transformLocalPosition = function(localPos, matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.positionToWorld(localPos)
end
end
-- Returns the rotation of the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.returnRotation = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getRotation()
end
end
-- Returns a table with spawn data (position and rotation) for a helper object
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param helperName string Name of the helper object
PlaymatApi.getHelperSpawnData = function(matColor, helperName)
local resultTable = {}
local localPositionTable = {
["Hand Helper"] = {0.05, 0, -1.182},
["Search Assistant"] = {-0.3, 0, -1.182}
}
for color, mat in pairs(getMatForColor(matColor)) do
resultTable[color] = {
position = mat.positionToWorld(localPositionTable[helperName]),
rotation = mat.getRotation()
}
end
return resultTable
end
-- Triggers the Upkeep for the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param playerColor string Color of the calling player (for messages)
PlaymatApi.doUpkeepFromHotkey = function(matColor, playerColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("doUpkeepFromHotkey", playerColor)
end
end
-- Handles discarding for the requested playmat for the provided list of objects
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
---@param objList table List of objects to discard
PlaymatApi.discardListOfObjects = function(matColor, objList)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("discardListOfObjects", objList)
end
end
-- Returns the active investigator id
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.returnInvestigatorId = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("activeInvestigatorId")
end
end
-- Returns the position for encounter card drawing
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
---@param stack boolean If true, returns the leftmost position instead of the first empty from the right
PlaymatApi.getEncounterCardDrawPosition = function(matColor, stack)
for _, mat in pairs(getMatForColor(matColor)) do
return Vector(mat.call("getEncounterCardDrawPosition", stack))
end
end
-- Sets the requested playmat's snap points to limit snapping to matching card types or not. If
-- matchTypes is true, the main card slot snap points will only snap assets, while the
-- investigator area point will only snap Investigators. If matchTypes is false, snap points will
-- be reset to snap all cards.
---@param matchCardTypes boolean Whether snap points should only snap for the matching card types
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.setLimitSnapsByType = function(matchCardTypes, matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("setLimitSnapsByType", matchCardTypes)
end
end
-- Sets the requested playmat's draw 1 button to visible
---@param isDrawButtonVisible boolean Whether the draw 1 button should be visible or not
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.showDrawButton = function(isDrawButtonVisible, matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("showDrawButton", isDrawButtonVisible)
end
end
-- Shows or hides the clickable clue counter for the requested playmat
---@param showCounter boolean Whether the clickable counter should be present or not
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.clickableClues = function(showCounter, matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("clickableClues", showCounter)
end
end
-- Removes all clues (to the trash for tokens and counters set to 0) for the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.removeClues = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("removeClues")
end
end
-- Reports the clue count for the requested playmat
---@param useClickableCounters boolean Controls which type of counter is getting checked
PlaymatApi.getClueCount = function(useClickableCounters, matColor)
local count = 0
for _, mat in pairs(getMatForColor(matColor)) do
count = count + mat.call("getClueCount", useClickableCounters)
end
return count
end
-- Updates the specified owned counter
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param type string Counter to target
---@param newValue number Value to set the counter to
---@param modifier number If newValue is not provided, the existing value will be adjusted by this modifier
PlaymatApi.updateCounter = function(matColor, type, newValue, modifier)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("updateCounter", { type = type, newValue = newValue, modifier = modifier })
end
end
-- Triggers the draw function for the specified playmat
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param number number Amount of cards to draw
PlaymatApi.drawCardsWithReshuffle = function(matColor, number)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("drawCardsWithReshuffle", number)
end
end
-- Returns the resource counter amount
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
---@param type string Counter to target
PlaymatApi.getCounterValue = function(matColor, type)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("getCounterValue", type)
end
end
-- Returns a list of mat colors that have an investigator placed
PlaymatApi.getUsedMatColors = function()
local localInvestigatorPosition = { x = -1.17, y = 1, z = -0.01 }
local usedColors = {}
for matColor, mat in pairs(getMatForColor("All")) do
local searchPos = mat.positionToWorld(localInvestigatorPosition)
local searchResult = searchLib.atPosition(searchPos, "isCardOrDeck")
if #searchResult > 0 then
table.insert(usedColors, matColor)
end
end
return usedColors
end
-- Resets the specified skill tracker to "1, 1, 1, 1"
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.resetSkillTracker = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("resetSkillTracker")
end
end
-- Finds all objects on the playmat and associated set aside zone and returns a table
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param filter string Name of the filte function (see util/SearchLib)
PlaymatApi.searchAroundPlaymat = function(matColor, filter)
local objList = {}
for _, v in ipairs(searchResult) do
if not filter or filterFunc(v.hit_object) then
table.insert(objList, v.hit_object)
for _, mat in pairs(getMatForColor(matColor)) do
for _, obj in ipairs(mat.call("searchAroundSelf", filter)) do
table.insert(objList, obj)
end
end
return objList
end
-- searches the specified area
SearchLib.inArea = function(pos, rot, size, filter)
return returnSearchResult(pos, rot, size, filter)
-- Discard a non-hidden card from the corresponding player's hand
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.doDiscardOne = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("doDiscardOne")
end
end
-- searches the area on an object
SearchLib.onObject = function(obj, filter)
pos = obj.getPosition()
size = obj.getBounds().size:setAt("y", 1)
return returnSearchResult(pos, _, size, filter)
-- Triggers the metadata sync for all playmats
PlaymatApi.syncAllCustomizableCards = function()
for _, mat in pairs(getMatForColor("All")) do
mat.call("syncAllCustomizableCards")
end
end
-- searches the specified position (a single point)
SearchLib.atPosition = function(pos, filter)
size = { 0.1, 2, 0.1 }
return returnSearchResult(pos, _, size, filter)
end
-- searches below the specified position (downwards until y = 0)
SearchLib.belowPosition = function(pos, filter)
direction = { 0, -1, 0 }
maxDistance = pos.y
return returnSearchResult(pos, _, size, filter, direction, maxDistance)
end
return SearchLib
return PlaymatApi
end
end)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/cards/DayofReckoning")
end)
__bundle_register("playercards/cards/DayofReckoning", function(require, _LOADED, __bundle_register, __bundle_modules)
VALID_TOKENS = {
["Elder Sign"] = true
@ -253,6 +480,103 @@ VALID_TOKENS = {
require("playercards/CardsThatSealTokens")
end)
__bundle_register("accessories/TokenArrangerApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local TokenArrangerApi = {}
local guidReferenceApi = require("core/GUIDReferenceApi")
-- local function to call the token arranger, if it is on the table
---@param functionName string Name of the function to cal
---@param argument? table Parameter to pass
local function callIfExistent(functionName, argument)
local tokenArranger = guidReferenceApi.getObjectByOwnerAndType("Mythos", "TokenArranger")
if tokenArranger ~= nil then
tokenArranger.call(functionName, argument)
end
end
-- updates the token modifiers with the provided data
---@param fullData table Contains the chaos token metadata
TokenArrangerApi.onTokenDataChanged = function(fullData)
callIfExistent("onTokenDataChanged", fullData)
end
-- deletes already laid out tokens
TokenArrangerApi.deleteCopiedTokens = function()
callIfExistent("deleteCopiedTokens")
end
-- updates the laid out tokens
TokenArrangerApi.layout = function()
Wait.time(function() callIfExistent("layout") end, 0.1)
end
return TokenArrangerApi
end
end)
__bundle_register("chaosbag/BlessCurseManagerApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local BlessCurseManagerApi = {}
local guidReferenceApi = require("core/GUIDReferenceApi")
local function getManager()
return guidReferenceApi.getObjectByOwnerAndType("Mythos", "BlessCurseManager")
end
-- removes all taken tokens and resets the counts
BlessCurseManagerApi.removeTakenTokensAndReset = function()
local BlessCurseManager = getManager()
Wait.time(function() BlessCurseManager.call("removeTakenTokens", "Bless") end, 0.05)
Wait.time(function() BlessCurseManager.call("removeTakenTokens", "Curse") end, 0.10)
Wait.time(function() BlessCurseManager.call("doReset", "White") end, 0.15)
end
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.sealedToken = function(type, guid)
getManager().call("sealedToken", { type = type, guid = guid })
end
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.releasedToken = function(type, guid)
getManager().call("releasedToken", { type = type, guid = guid })
end
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.returnedToken = function(type, guid)
getManager().call("returnedToken", { type = type, guid = guid })
end
-- broadcasts the current status for bless/curse tokens
---@param playerColor string Color of the player to show the broadcast to
BlessCurseManagerApi.broadcastStatus = function(playerColor)
getManager().call("broadcastStatus", playerColor)
end
-- removes all bless / curse tokens from the chaos bag and play
---@param playerColor string Color of the player to show the broadcast to
BlessCurseManagerApi.removeAll = function(playerColor)
getManager().call("doRemove", playerColor)
end
-- adds bless / curse sealing to the hovered card
---@param playerColor string Color of the player to show the broadcast to
---@param hoveredObject tts__Object Hovered object
BlessCurseManagerApi.addBlurseSealingMenu = function(playerColor, hoveredObject)
getManager().call("addMenuOptions", { playerColor = playerColor, hoveredObject = hoveredObject })
end
return BlessCurseManagerApi
end
end)
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
require("playercards/cards/DayofReckoning")
end)
__bundle_register("playercards/CardsThatSealTokens", function(require, _LOADED, __bundle_register, __bundle_modules)
--[[ Library for cards that seal tokens
This file is used to add sealing option to cards' context menu.
@ -542,375 +866,75 @@ function resolveSealed()
chaosBagApi.drawChaosToken(mat, true, _, guidToBeResolved)
end
end)
__bundle_register("accessories/TokenArrangerApi", function(require, _LOADED, __bundle_register, __bundle_modules)
__bundle_register("util/SearchLib", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local TokenArrangerApi = {}
local guidReferenceApi = require("core/GUIDReferenceApi")
local SearchLib = {}
local filterFunctions = {
isActionToken = function(x) return x.getDescription() == "Action Token" end,
isCard = function(x) return x.type == "Card" end,
isDeck = function(x) return x.type == "Deck" end,
isCardOrDeck = function(x) return x.type == "Card" or x.type == "Deck" end,
isClue = function(x) return x.memo == "clueDoom" and x.is_face_down == false end,
isTileOrToken = function(x) return x.type == "Tile" end
}
-- local function to call the token arranger, if it is on the table
---@param functionName string Name of the function to cal
---@param argument? table Parameter to pass
local function callIfExistent(functionName, argument)
local tokenArranger = guidReferenceApi.getObjectByOwnerAndType("Mythos", "TokenArranger")
if tokenArranger ~= nil then
tokenArranger.call(functionName, argument)
-- performs the actual search and returns a filtered list of object references
---@param pos tts__Vector Global position
---@param rot? tts__Vector Global rotation
---@param size table Size
---@param filter? string Name of the filter function
---@param direction? table Direction (positive is up)
---@param maxDistance? number Distance for the cast
local function returnSearchResult(pos, rot, size, filter, direction, maxDistance)
local filterFunc
if filter then
filterFunc = filterFunctions[filter]
end
end
local searchResult = Physics.cast({
origin = pos,
direction = direction or { 0, 1, 0 },
orientation = rot or { 0, 0, 0 },
type = 3,
size = size,
max_distance = maxDistance or 0
})
-- updates the token modifiers with the provided data
---@param fullData table Contains the chaos token metadata
TokenArrangerApi.onTokenDataChanged = function(fullData)
callIfExistent("onTokenDataChanged", fullData)
end
-- deletes already laid out tokens
TokenArrangerApi.deleteCopiedTokens = function()
callIfExistent("deleteCopiedTokens")
end
-- updates the laid out tokens
TokenArrangerApi.layout = function()
Wait.time(function() callIfExistent("layout") end, 0.1)
end
return TokenArrangerApi
end
end)
__bundle_register("chaosbag/BlessCurseManagerApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local BlessCurseManagerApi = {}
local guidReferenceApi = require("core/GUIDReferenceApi")
local function getManager()
return guidReferenceApi.getObjectByOwnerAndType("Mythos", "BlessCurseManager")
end
-- removes all taken tokens and resets the counts
BlessCurseManagerApi.removeTakenTokensAndReset = function()
local BlessCurseManager = getManager()
Wait.time(function() BlessCurseManager.call("removeTakenTokens", "Bless") end, 0.05)
Wait.time(function() BlessCurseManager.call("removeTakenTokens", "Curse") end, 0.10)
Wait.time(function() BlessCurseManager.call("doReset", "White") end, 0.15)
end
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.sealedToken = function(type, guid)
getManager().call("sealedToken", { type = type, guid = guid })
end
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.releasedToken = function(type, guid)
getManager().call("releasedToken", { type = type, guid = guid })
end
-- updates the internal count (called by cards that seal bless/curse tokens)
---@param type string Type of chaos token ("Bless" or "Curse")
---@param guid string GUID of the token
BlessCurseManagerApi.returnedToken = function(type, guid)
getManager().call("returnedToken", { type = type, guid = guid })
end
-- broadcasts the current status for bless/curse tokens
---@param playerColor string Color of the player to show the broadcast to
BlessCurseManagerApi.broadcastStatus = function(playerColor)
getManager().call("broadcastStatus", playerColor)
end
-- removes all bless / curse tokens from the chaos bag and play
---@param playerColor string Color of the player to show the broadcast to
BlessCurseManagerApi.removeAll = function(playerColor)
getManager().call("doRemove", playerColor)
end
-- adds bless / curse sealing to the hovered card
---@param playerColor string Color of the player to show the broadcast to
---@param hoveredObject tts__Object Hovered object
BlessCurseManagerApi.addBlurseSealingMenu = function(playerColor, hoveredObject)
getManager().call("addMenuOptions", { playerColor = playerColor, hoveredObject = hoveredObject })
end
return BlessCurseManagerApi
end
end)
__bundle_register("playermat/PlaymatApi", function(require, _LOADED, __bundle_register, __bundle_modules)
do
local PlaymatApi = {}
local guidReferenceApi = require("core/GUIDReferenceApi")
local searchLib = require("util/SearchLib")
-- Convenience function to look up a mat's object by color, or get all mats.
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@return table: Single-element if only single playmat is requested
local function getMatForColor(matColor)
if matColor == "All" then
return guidReferenceApi.getObjectsByType("Playermat")
else
return { matColor = guidReferenceApi.getObjectByOwnerAndType(matColor, "Playermat") }
end
end
-- Returns the color of the closest playmat
---@param startPos table Starting position to get the closest mat from
PlaymatApi.getMatColorByPosition = function(startPos)
local result, smallestDistance
for matColor, mat in pairs(getMatForColor("All")) do
local distance = Vector.between(startPos, mat.getPosition()):magnitude()
if smallestDistance == nil or distance < smallestDistance then
smallestDistance = distance
result = matColor
end
end
return result
end
-- Returns the color of the player's hand that is seated next to the playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.getPlayerColor = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("playerColor")
end
end
-- Returns the color of the playmat that owns the playercolor's hand
---@param handColor string Color of the playmat
PlaymatApi.getMatColor = function(handColor)
for matColor, mat in pairs(getMatForColor("All")) do
local playerColor = mat.getVar("playerColor")
if playerColor == handColor then
return matColor
end
end
end
-- Returns if there is the card "Dream-Enhancing Serum" on the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.isDES = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("isDES")
end
end
-- Performs a search of the deck area of the requested playmat and returns the result as table
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.getDeckAreaObjects = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("getDeckAreaObjects")
end
end
-- Flips the top card of the deck (useful after deck manipulation for Norman Withers)
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.flipTopCardFromDeck = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("flipTopCardFromDeck")
end
end
-- Returns the position of the discard pile of the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.getDiscardPosition = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("returnGlobalDiscardPosition")
end
end
-- Transforms a local position into a global position
---@param localPos table Local position to be transformed
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.transformLocalPosition = function(localPos, matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.positionToWorld(localPos)
end
end
-- Returns the rotation of the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.returnRotation = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getRotation()
end
end
-- Returns a table with spawn data (position and rotation) for a helper object
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param helperName string Name of the helper object
PlaymatApi.getHelperSpawnData = function(matColor, helperName)
local resultTable = {}
local localPositionTable = {
["Hand Helper"] = {0.05, 0, -1.182},
["Search Assistant"] = {-0.3, 0, -1.182}
}
for color, mat in pairs(getMatForColor(matColor)) do
resultTable[color] = {
position = mat.positionToWorld(localPositionTable[helperName]),
rotation = mat.getRotation()
}
end
return resultTable
end
-- Triggers the Upkeep for the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param playerColor string Color of the calling player (for messages)
PlaymatApi.doUpkeepFromHotkey = function(matColor, playerColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("doUpkeepFromHotkey", playerColor)
end
end
-- Handles discarding for the requested playmat for the provided list of objects
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
---@param objList table List of objects to discard
PlaymatApi.discardListOfObjects = function(matColor, objList)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("discardListOfObjects", objList)
end
end
-- Returns the active investigator id
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlaymatApi.returnInvestigatorId = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.getVar("activeInvestigatorId")
end
end
-- Sets the requested playmat's snap points to limit snapping to matching card types or not. If
-- matchTypes is true, the main card slot snap points will only snap assets, while the
-- investigator area point will only snap Investigators. If matchTypes is false, snap points will
-- be reset to snap all cards.
---@param matchCardTypes boolean Whether snap points should only snap for the matching card types
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.setLimitSnapsByType = function(matchCardTypes, matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("setLimitSnapsByType", matchCardTypes)
end
end
-- Sets the requested playmat's draw 1 button to visible
---@param isDrawButtonVisible boolean Whether the draw 1 button should be visible or not
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.showDrawButton = function(isDrawButtonVisible, matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("showDrawButton", isDrawButtonVisible)
end
end
-- Shows or hides the clickable clue counter for the requested playmat
---@param showCounter boolean Whether the clickable counter should be present or not
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.clickableClues = function(showCounter, matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("clickableClues", showCounter)
end
end
-- Removes all clues (to the trash for tokens and counters set to 0) for the requested playmat
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.removeClues = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("removeClues")
end
end
-- Reports the clue count for the requested playmat
---@param useClickableCounters boolean Controls which type of counter is getting checked
PlaymatApi.getClueCount = function(useClickableCounters, matColor)
local count = 0
for _, mat in pairs(getMatForColor(matColor)) do
count = count + mat.call("getClueCount", useClickableCounters)
end
return count
end
-- updates the specified owned counter
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param type string Counter to target
---@param newValue number Value to set the counter to
---@param modifier number If newValue is not provided, the existing value will be adjusted by this modifier
PlaymatApi.updateCounter = function(matColor, type, newValue, modifier)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("updateCounter", { type = type, newValue = newValue, modifier = modifier })
end
end
-- triggers the draw function for the specified playmat
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param number number Amount of cards to draw
PlaymatApi.drawCardsWithReshuffle = function(matColor, number)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("drawCardsWithReshuffle", number)
end
end
-- returns the resource counter amount
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
---@param type string Counter to target
PlaymatApi.getCounterValue = function(matColor, type)
for _, mat in pairs(getMatForColor(matColor)) do
return mat.call("getCounterValue", type)
end
end
-- returns a list of mat colors that have an investigator placed
PlaymatApi.getUsedMatColors = function()
local localInvestigatorPosition = { x = -1.17, y = 1, z = -0.01 }
local usedColors = {}
for matColor, mat in pairs(getMatForColor("All")) do
local searchPos = mat.positionToWorld(localInvestigatorPosition)
local searchResult = searchLib.atPosition(searchPos, "isCardOrDeck")
if #searchResult > 0 then
table.insert(usedColors, matColor)
end
end
return usedColors
end
-- resets the specified skill tracker to "1, 1, 1, 1"
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.resetSkillTracker = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("resetSkillTracker")
end
end
-- finds all objects on the playmat and associated set aside zone and returns a table
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
---@param filter string Name of the filte function (see util/SearchLib)
PlaymatApi.searchAroundPlaymat = function(matColor, filter)
-- filtering the result
local objList = {}
for _, mat in pairs(getMatForColor(matColor)) do
for _, obj in ipairs(mat.call("searchAroundSelf", filter)) do
table.insert(objList, obj)
for _, v in ipairs(searchResult) do
if not filter or filterFunc(v.hit_object) then
table.insert(objList, v.hit_object)
end
end
return objList
end
-- Discard a non-hidden card from the corresponding player's hand
---@param matColor string Color of the playmat - White, Orange, Green, Red or All
PlaymatApi.doDiscardOne = function(matColor)
for _, mat in pairs(getMatForColor(matColor)) do
mat.call("doDiscardOne")
end
-- searches the specified area
SearchLib.inArea = function(pos, rot, size, filter)
return returnSearchResult(pos, rot, size, filter)
end
-- Triggers the metadata sync for all playmats
PlaymatApi.syncAllCustomizableCards = function()
for _, mat in pairs(getMatForColor("All")) do
mat.call("syncAllCustomizableCards")
end
-- searches the area on an object
SearchLib.onObject = function(obj, filter)
pos = obj.getPosition()
size = obj.getBounds().size:setAt("y", 1)
return returnSearchResult(pos, _, size, filter)
end
return PlaymatApi
-- searches the specified position (a single point)
SearchLib.atPosition = function(pos, filter)
size = { 0.1, 2, 0.1 }
return returnSearchResult(pos, _, size, filter)
end
-- searches below the specified position (downwards until y = 0)
SearchLib.belowPosition = function(pos, filter)
direction = { 0, -1, 0 }
maxDistance = pos.y
return returnSearchResult(pos, _, size, filter, direction, maxDistance)
end
return SearchLib
end
end)
return __bundle_require("__root")

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 400
CardID: 917441
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'4':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2172484009070978111/18BFD42CF7BACCF65559E63F576AF35920520FDB/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: Friend or Foe?
@ -34,7 +34,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: '"Devil" (2)'
SidewaysCard: false
Snap: true

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94725
CardID: 917367
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
@ -34,7 +34,7 @@ LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: Diabolical Luck (0)
Nickname: Diabolical Luck
SidewaysCard: false
Snap: true
Sticky: true

View File

@ -20,7 +20,7 @@ CustomDeck:
Description: Leave No Doubt
DragSelectable: true
GMNotes: "{\n \"id\": \"90029\",\n \"type\": \"Asset\",\n \"class\": \"Neutral\",\n
\ \"permanent\": true,\n \"cycle\": \"Standalone\"\n}"
\ \"startsInPlay\": true,\n \"permanent\": true,\n \"cycle\": \"Standalone\"\n}"
GUID: 07e7bd
Grid: true
GridProjection: false

View File

@ -20,7 +20,7 @@ CustomDeck:
Description: Consult Experts
DragSelectable: true
GMNotes: "{\n \"id\": \"90027\",\n \"type\": \"Asset\",\n \"class\": \"Neutral\",\n
\ \"permanent\": true,\n \"cycle\": \"Standalone\"\n}"
\ \"startsInPlay\": true,\n \"permanent\": true,\n \"cycle\": \"Standalone\"\n}"
GUID: 2d9256
Grid: true
GridProjection: false

View File

@ -3,16 +3,16 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 94729
CardID: 917402
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'947':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2286207513864999779/940B69318E315879D88F91454332BB6D0DFB03B6/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -11,8 +11,8 @@ ColorDiffuse:
CustomDeck:
'3794':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/1625226898126523297/2C981A8D79F76E3533ADD355F8AF406EA72B5162/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126522542/E29FEBE196344F3DEE457BE957E9AF18310C6F39/
BackURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578166/C21CC0E4ADE06C11419F36BAEDED0BDBFF8DE5E3/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578395/F97B770FB90EA18B46F58614CCE0016406E3E777/
NumHeight: 2
NumWidth: 5
Type: 0

View File

@ -11,8 +11,8 @@ ColorDiffuse:
CustomDeck:
'3794':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/1625226898126523297/2C981A8D79F76E3533ADD355F8AF406EA72B5162/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126522542/E29FEBE196344F3DEE457BE957E9AF18310C6F39/
BackURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578166/C21CC0E4ADE06C11419F36BAEDED0BDBFF8DE5E3/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578395/F97B770FB90EA18B46F58614CCE0016406E3E777/
NumHeight: 2
NumWidth: 5
Type: 0

View File

@ -11,8 +11,8 @@ ColorDiffuse:
CustomDeck:
'3794':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/1625226898126523297/2C981A8D79F76E3533ADD355F8AF406EA72B5162/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126522542/E29FEBE196344F3DEE457BE957E9AF18310C6F39/
BackURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578166/C21CC0E4ADE06C11419F36BAEDED0BDBFF8DE5E3/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578395/F97B770FB90EA18B46F58614CCE0016406E3E777/
NumHeight: 2
NumWidth: 5
Type: 0

View File

@ -11,8 +11,8 @@ ColorDiffuse:
CustomDeck:
'3794':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/1625226898126523297/2C981A8D79F76E3533ADD355F8AF406EA72B5162/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126522542/E29FEBE196344F3DEE457BE957E9AF18310C6F39/
BackURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578166/C21CC0E4ADE06C11419F36BAEDED0BDBFF8DE5E3/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578395/F97B770FB90EA18B46F58614CCE0016406E3E777/
NumHeight: 2
NumWidth: 5
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378939
CardID: 378930
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,7 +3,7 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 378941
CardID: 378932
ColorDiffuse:
b: 0.71324
g: 0.71324
@ -12,7 +12,7 @@ CustomDeck:
'3789':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126493809/0EE7F5B9B916B56425CAC1C46F7FCEF9DBF55112/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430579575/1F73F1B9316F11895AAD6A82B9AF2E2398FAD2F6/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 12105
CardID: 917333
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'121':
'9173':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2021607169641060708/B263E98D28E301D8EF45EB001FEBCE98DA25354B/
NumHeight: 2
NumWidth: 6
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632272/9A953338B599473C1631AA82F75004CE941DA8B0/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: Knows His Purpose

View File

@ -0,0 +1,57 @@
AltLookAngle:
x: 0
y: 0
z: 0
Autoraise: true
CardID: 536427
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'5364':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2453969772006048567/4C173CF8E2E2F69C7374D65AAA2D842C048FC792/
NumHeight: 5
NumWidth: 8
Type: 0
UniqueBack: false
Description: Best in Her Field
DragSelectable: true
GMNotes: "{\n \"id\": \"10702\",\n \"type\": \"Asset\",\n \"slot\": \"Ally\",\n
\ \"class\": \"Neutral\",\n \"cost\": 4,\n \"traits\": \"Ally. Miskatonic. Wayfarer.\",\n
\ \"intellectIcons\": 1,\n \"agilityIcons\": 1,\n \"wildIcons\": 1,\n \"cycle\":
\"The Feast of Hemlock Vale\"\n}"
GUID: 62d5a6
Grid: true
GridProjection: false
Hands: true
HideWhenFaceDown: true
IgnoreFoW: false
LayoutGroupSortIndex: 0
Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: Card
Nickname: Dr. Rosa Marquez
SidewaysCard: false
Snap: true
Sticky: true
Tags:
- Asset
- PlayerCard
Tooltip: true
Transform:
posX: 31.17
posY: 3.67
posZ: 13.98
rotX: 0
rotY: 270
rotZ: 0
scaleX: 1
scaleY: 1
scaleZ: 1
Value: 0
XmlUI: ''

View File

@ -12,7 +12,7 @@ CustomDeck:
'3790':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/1625226898126491470/A7FAFA92C08268717F79B2B1C83F8C23DFA6C534/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430578722/34A938F2AE5FCEDEF07D645346F9A6570FFF98E4/
NumHeight: 7
NumWidth: 10
Type: 0

View File

@ -3,18 +3,18 @@ AltLookAngle:
y: 0
z: 0
Autoraise: true
CardID: 125100
CardID: 917416
ColorDiffuse:
b: 0.71324
g: 0.71324
r: 0.71324
CustomDeck:
'1251':
'9174':
BackIsHidden: true
BackURL: http://cloud-3.steamusercontent.com/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/
FaceURL: http://cloud-3.steamusercontent.com/ugc/2279448008872128231/B3D4EF69ABE3736988B015629C5862F69EB42BDC/
NumHeight: 1
NumWidth: 1
FaceURL: http://cloud-3.steamusercontent.com/ugc/2424696374430632751/4F8200D4B672882FF609D4B1B9D438C61AF20447/
NumHeight: 7
NumWidth: 10
Type: 0
UniqueBack: false
Description: ''
@ -33,7 +33,7 @@ Locked: false
LuaScript: ''
LuaScriptState: ''
MeasureMovement: false
Name: CardCustom
Name: Card
Nickname: Drain Essence
SidewaysCard: false
Snap: true

View File

@ -21,9 +21,9 @@ Description: Dreams of an Explorer
DragSelectable: true
GMNotes: "{\n \"id\": \"06236\",\n \"type\": \"Asset\",\n \"slot\": \"Hand\",\n
\ \"class\": \"Seeker\",\n \"cost\": 2,\n \"level\": 3,\n \"traits\": \"Item.
Tome. Charm.\",\n \"bonded\": [\n {\n \"count\": 1,\n \"id\": \"06113\"\n
\ }\n ],\n \"willpowerIcons\": 1,\n \"agilityIcons\": 1,\n \"cycle\": \"The
Dream-Eaters\"\n}"
Tome. Charm.\",\n \"bonded\": [\n {\n \"count\": 1,\n \"maxCount\":
1,\n \"id\": \"06113\"\n }\n ],\n \"willpowerIcons\": 1,\n \"agilityIcons\":
1,\n \"cycle\": \"The Dream-Eaters\"\n}"
GUID: 5f9a10
Grid: true
GridProjection: false

Some files were not shown because too many files have changed in this diff Show More