Merge branch 'main' into playermats

This commit is contained in:
Chr1Z93 2023-10-17 13:11:10 +02:00
commit b94bdc8e33
31 changed files with 660 additions and 22 deletions

View File

@ -1557,7 +1557,14 @@
"StallforTime.7b6ed1", "StallforTime.7b6ed1",
"WrongPlaceRightTime.d5944e", "WrongPlaceRightTime.d5944e",
"SparrowMask.975d79", "SparrowMask.975d79",
"Pitchfork.45a724" "Pitchfork.45a724",
"JimsTrumpet.7dfd5f",
"JimCulverParallel.72bf31",
"JimCulverParallelFront.c5fc80",
"VengefulShade.73bc8e",
"FinalRhapsody.561775",
"JimCulverParallelBack.aba863",
"TheBeyond.37ab47"
], ],
"ContainedObjects_path": "AllPlayerCards.15bb07", "ContainedObjects_path": "AllPlayerCards.15bb07",
"Description": "", "Description": "",

View File

@ -15,7 +15,7 @@
"2664": { "2664": {
"BackIsHidden": true, "BackIsHidden": true,
"BackURL": "http://cloud-3.steamusercontent.com/ugc/1874087305860121579/39578AC78E34DAA169AB4DE4246BB1E002528B8C/", "BackURL": "http://cloud-3.steamusercontent.com/ugc/1874087305860121579/39578AC78E34DAA169AB4DE4246BB1E002528B8C/",
"FaceURL": "http://cloud-3.steamusercontent.com/ugc/1874087305860119704/FCC908E5C313759E9E478D5952C74179DF80ADA8/", "FaceURL": "http://cloud-3.steamusercontent.com/ugc/2021605474902965618/1DA915D6106D951592457701CBA262B73CBEDE6B/",
"NumHeight": 5, "NumHeight": 5,
"NumWidth": 7, "NumWidth": 7,
"Type": 0, "Type": 0,

View File

@ -0,0 +1,8 @@
{
"id": "90051",
"type": "Treachery",
"class": "Neutral",
"traits": "Endtimes.",
"weakness": true,
"cycle": "The Dunwich Legacy"
}

View File

@ -0,0 +1,61 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 847001,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"8470": {
"BackIsHidden": false,
"BackURL": "https://i.imgur.com/EcbhVuh.jpg/",
"FaceURL": "http://cloud-3.steamusercontent.com/ugc/2149964195986880793/517FBB4FF8F72900B9E123DB865BCAD625F6506C/",
"NumHeight": 2,
"NumWidth": 2,
"Type": 0,
"UniqueBack": false
}
},
"Description": "Advanced",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/FinalRhapsody.561775.gmnotes",
"GUID": "561775",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": true,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "Card",
"Nickname": "Final Rhapsody",
"SidewaysCard": false,
"Snap": true,
"Sticky": true,
"Tags": [
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 78.419,
"posY": 3.193,
"posZ": 23.541,
"rotX": 0,
"rotY": 270,
"rotZ": 0,
"scaleX": 1,
"scaleY": 1,
"scaleZ": 1
},
"Value": 0,
"XmlUI": ""
}

View File

@ -0,0 +1,11 @@
{
"id": "02004-p",
"type": "Investigator",
"class": "Mystic",
"traits": "Performer. Cursed.",
"willpowerIcons": 4,
"intellectIcons": 3,
"combatIcons": 3,
"agilityIcons": 2,
"cycle": "The Dunwich Legacy"
}

View File

@ -0,0 +1,62 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 846700,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"8467": {
"BackIsHidden": false,
"BackURL": "http://cloud-3.steamusercontent.com/ugc/2149964195987018702/54C63785F3AA474F635F58BC506C86A318432BD7/",
"FaceURL": "http://cloud-3.steamusercontent.com/ugc/2149964195987018793/0AED4BF62C4FF3206778AD36FDB9C8E482CD3F9E/",
"NumHeight": 2,
"NumWidth": 4,
"Type": 0,
"UniqueBack": true
}
},
"Description": "The Musician",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/JimCulverParallel.72bf31.gmnotes",
"GUID": "72bf31",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "Card",
"Nickname": "Jim Culver (Parallel)",
"SidewaysCard": true,
"Snap": true,
"Sticky": true,
"Tags": [
"Investigator",
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 82.182,
"posY": 3.193,
"posZ": 26.386,
"rotX": 0,
"rotY": 180,
"rotZ": 0,
"scaleX": 1.15,
"scaleY": 1,
"scaleZ": 1.15
},
"Value": 0,
"XmlUI": ""
}

View File

@ -0,0 +1,11 @@
{
"id": "02004-pb",
"type": "Investigator",
"class": "Mystic",
"traits": "Performer.",
"willpowerIcons": 4,
"intellectIcons": 3,
"combatIcons": 3,
"agilityIcons": 2,
"cycle": "The Dunwich Legacy"
}

View File

@ -0,0 +1,62 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 846805,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"8468": {
"BackIsHidden": false,
"BackURL": "http://cloud-3.steamusercontent.com/ugc/2149964195987018702/54C63785F3AA474F635F58BC506C86A318432BD7/",
"FaceURL": "http://cloud-3.steamusercontent.com/ugc/1656727981627737050/3CFF9E3825033909543AD1CF843361D9243538EE/",
"NumHeight": 2,
"NumWidth": 4,
"Type": 0,
"UniqueBack": true
}
},
"Description": "The Musician",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/JimCulverParallelBack.aba863.gmnotes",
"GUID": "aba863",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "Card",
"Nickname": "Jim Culver (Parallel Back)",
"SidewaysCard": true,
"Snap": true,
"Sticky": true,
"Tags": [
"Investigator",
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 82.206,
"posY": 3.193,
"posZ": 18.459,
"rotX": 0,
"rotY": 180,
"rotZ": 0,
"scaleX": 1.15,
"scaleY": 1,
"scaleZ": 1.15
},
"Value": 0,
"XmlUI": ""
}

View File

@ -0,0 +1,11 @@
{
"id": "02004-pf",
"type": "Investigator",
"class": "Mystic",
"traits": "Performer. Cursed.",
"willpowerIcons": 4,
"intellectIcons": 3,
"combatIcons": 3,
"agilityIcons": 2,
"cycle": "The Dunwich Legacy"
}

View File

@ -0,0 +1,62 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 846905,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"8469": {
"BackIsHidden": false,
"BackURL": "http://cloud-3.steamusercontent.com/ugc/1656727981627737648/F371339538812F68E38AAC0D520C525250DAC5C0/",
"FaceURL": "http://cloud-3.steamusercontent.com/ugc/2149964195987018793/0AED4BF62C4FF3206778AD36FDB9C8E482CD3F9E/",
"NumHeight": 2,
"NumWidth": 4,
"Type": 0,
"UniqueBack": true
}
},
"Description": "The Musician",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/JimCulverParallelFront.c5fc80.gmnotes",
"GUID": "c5fc80",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "Card",
"Nickname": "Jim Culver (Parallel Front)",
"SidewaysCard": true,
"Snap": true,
"Sticky": true,
"Tags": [
"Investigator",
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 82.087,
"posY": 3.193,
"posZ": 22.484,
"rotX": 0,
"rotY": 180,
"rotZ": 0,
"scaleX": 1.15,
"scaleY": 1,
"scaleZ": 1.15
},
"Value": 0,
"XmlUI": ""
}

View File

@ -22,7 +22,7 @@
"UniqueBack": false "UniqueBack": false
} }
}, },
"Description": "", "Description": "The Dead Listen",
"DragSelectable": true, "DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/JimsTrumpet.03c6a7.gmnotes", "GMNotes_path": "AllPlayerCards.15bb07/JimsTrumpet.03c6a7.gmnotes",
"GUID": "03c6a7", "GUID": "03c6a7",

View File

@ -0,0 +1,10 @@
{
"id": "90050",
"type": "Asset",
"class": "Neutral",
"cost": 2,
"traits": "Item. Instrument. Relic.",
"willpowerIcons": 2,
"wildIcons": 2,
"cycle": "The Dunwich Legacy"
}

View File

@ -0,0 +1,62 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 847000,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"8470": {
"BackIsHidden": false,
"BackURL": "https://i.imgur.com/EcbhVuh.jpg/",
"FaceURL": "http://cloud-3.steamusercontent.com/ugc/2149964195986880793/517FBB4FF8F72900B9E123DB865BCAD625F6506C/",
"NumHeight": 2,
"NumWidth": 2,
"Type": 0,
"UniqueBack": false
}
},
"Description": "The Dead Speak (Advanced)",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/JimsTrumpet.7dfd5f.gmnotes",
"GUID": "7dfd5f",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": true,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "Card",
"Nickname": "Jim's Trumpet",
"SidewaysCard": false,
"Snap": true,
"Sticky": true,
"Tags": [
"Asset",
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 78.511,
"posY": 3.229,
"posZ": 27.011,
"rotX": 359,
"rotY": 270,
"rotZ": 0,
"scaleX": 1,
"scaleY": 1,
"scaleZ": 1
},
"Value": 0,
"XmlUI": ""
}

View File

@ -1,15 +1,14 @@
{ {
"id": "05189-t", "id": "05188-t",
"type": "Asset", "type": "Asset",
"class": "Mystic", "class": "Seeker",
"cost": 1, "cost": 1,
"level": 3, "level": 3,
"traits": "Item. Tome.", "traits": "Item. Tome.",
"willpowerIcons": 1, "intellectIcons": 2,
"intellectIcons": 1,
"uses": [ "uses": [
{ {
"count": 4, "count": 3,
"type": "Secret", "type": "Secret",
"token": "resource" "token": "resource"
} }

View File

@ -0,0 +1,8 @@
{
"id": "90052",
"type": "Asset",
"class": "Neutral",
"permanent": true,
"startsInPlay": true,
"cycle": "Laid to Rest"
}

View File

@ -0,0 +1,62 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 847100,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"8471": {
"BackIsHidden": true,
"BackURL": "http://cloud-3.steamusercontent.com/ugc/2149964195986881059/864F6EBBD2900ED6D145B8AF12F2F8C180375C83/",
"FaceURL": "http://cloud-3.steamusercontent.com/ugc/2149964195986880989/13172BC914A0D729B4EFD9845FA9FDFCAB6F77F7/",
"NumHeight": 1,
"NumWidth": 1,
"Type": 0,
"UniqueBack": false
}
},
"Description": "Bleak Netherworld",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/TheBeyond.37ab47.gmnotes",
"GUID": "37ab47",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": true,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "CardCustom",
"Nickname": "The Beyond",
"SidewaysCard": false,
"Snap": true,
"Sticky": true,
"Tags": [
"Asset",
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 78.532,
"posY": 3.193,
"posZ": 17.888,
"rotX": 0,
"rotY": 270,
"rotZ": 0,
"scaleX": 1,
"scaleY": 1,
"scaleZ": 1
},
"Value": 0,
"XmlUI": ""
}

View File

@ -0,0 +1,8 @@
{
"id": "90053",
"type": "Enemy",
"class": "Neutral",
"traits": "Monster. Geist",
"weakness": true,
"cycle": "Laid to Rest"
}

View File

@ -0,0 +1,61 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 847002,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"8470": {
"BackIsHidden": false,
"BackURL": "https://i.imgur.com/EcbhVuh.jpg/",
"FaceURL": "http://cloud-3.steamusercontent.com/ugc/2149964195986880793/517FBB4FF8F72900B9E123DB865BCAD625F6506C/",
"NumHeight": 2,
"NumWidth": 2,
"Type": 0,
"UniqueBack": false
}
},
"Description": "",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/VengefulShade.73bc8e.gmnotes",
"GUID": "73bc8e",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": true,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "Card",
"Nickname": "Vengeful Shade",
"SidewaysCard": false,
"Snap": true,
"Sticky": true,
"Tags": [
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 78.455,
"posY": 3.193,
"posZ": 20.547,
"rotX": 0,
"rotY": 270,
"rotZ": 0,
"scaleX": 1,
"scaleY": 1,
"scaleZ": 1
},
"Value": 0,
"XmlUI": ""
}

View File

@ -2,7 +2,7 @@
"id": "01005-p", "id": "01005-p",
"type": "Investigator", "type": "Investigator",
"class": "Survivor", "class": "Survivor",
"traits": "Drifter.", "traits": "Drifter. Blessed. Cursed.",
"willpowerIcons": 4, "willpowerIcons": 4,
"intellectIcons": 3, "intellectIcons": 3,
"combatIcons": 1, "combatIcons": 1,

View File

@ -2,7 +2,7 @@
"id": "01005-pf", "id": "01005-pf",
"type": "Investigator", "type": "Investigator",
"class": "Survivor", "class": "Survivor",
"traits": "Drifter.", "traits": "Drifter. Blessed. Cursed.",
"willpowerIcons": 4, "willpowerIcons": 4,
"intellectIcons": 3, "intellectIcons": 3,
"combatIcons": 1, "combatIcons": 1,

View File

@ -18,6 +18,7 @@
"TouhouProjectInvestigators.c5c294", "TouhouProjectInvestigators.c5c294",
"StreetsofNewCapenna.48b4ca", "StreetsofNewCapenna.48b4ca",
"StrangeAeonsCustomInvestigators.d78bd2", "StrangeAeonsCustomInvestigators.d78bd2",
"SixofCrowsInvestigatorExpansion.ac6335",
"SignatureReplacements.b06fd9", "SignatureReplacements.b06fd9",
"TheSandsOfMemphisInvestigatorExpansion.073201", "TheSandsOfMemphisInvestigatorExpansion.073201",
"TheShadowsofArkhamPlayerCards.2e5eef", "TheShadowsofArkhamPlayerCards.2e5eef",

View File

@ -0,0 +1,85 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"AttachedDecals": [
{
"CustomDecal": {
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/959719855119695911/931B9829687A20F4DEADB36DA57B7E6D76792231/",
"Name": "dunwich_back",
"Size": 7.4
},
"Transform": {
"posX": 0,
"posY": 0,
"posZ": 0,
"rotX": 270,
"rotY": 0,
"rotZ": 0,
"scaleX": 2,
"scaleY": 2,
"scaleZ": 2
}
}
],
"Autoraise": true,
"ColorDiffuse": {
"b": 0.34902,
"g": 0.34902,
"r": 0.35294
},
"CustomMesh": {
"CastShadows": true,
"ColliderURL": "",
"Convex": true,
"CustomShader": {
"FresnelStrength": 0,
"SpecularColor": {
"b": 1,
"g": 1,
"r": 1
},
"SpecularIntensity": 0,
"SpecularSharpness": 2
},
"DiffuseURL": "http://cloud-3.steamusercontent.com/ugc/2040738499780847997/8EB48569F817CB9566D4FB0911C3D0B543B2EA75/",
"MaterialIndex": 3,
"MeshURL": "https://raw.githubusercontent.com/RobMayer/TTSLibrary/master/advboxes/tuckbox_h_MSH.obj",
"NormalURL": "",
"TypeIndex": 0
},
"Description": "By Mint Tea Fan",
"DragSelectable": true,
"GMNotes": "fancreations/investigators_six_of_crows.json",
"GUID": "ac6335",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "require(\"core/DownloadBox\")",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "Custom_Model",
"Nickname": "Six of Crows Investigator Expansion",
"Snap": true,
"Sticky": true,
"Tooltip": true,
"Transform": {
"posX": 0,
"posY": 1.5,
"posZ": 0,
"rotX": 0,
"rotY": 270,
"rotZ": 0,
"scaleX": 2.21,
"scaleY": 0.46,
"scaleZ": 2.42
},
"Value": 0,
"XmlUI": ""
}

View File

@ -49,8 +49,8 @@
"IgnoreFoW": false, "IgnoreFoW": false,
"LayoutGroupSortIndex": 0, "LayoutGroupSortIndex": 0,
"Locked": false, "Locked": false,
"LuaScript": "require(\"accessories/Subject5U-21Helper\")",
"LuaScriptState": "", "LuaScriptState": "",
"LuaScript_path": "Fan-MadeAccessories.aa8b38/Subject5U-21Helper.1335e8.ttslua",
"MeasureMovement": false, "MeasureMovement": false,
"Name": "Custom_Tile", "Name": "Custom_Tile",
"Nickname": "Subject 5U-21 Helper", "Nickname": "Subject 5U-21 Helper",

View File

@ -34,8 +34,8 @@
"IgnoreFoW": false, "IgnoreFoW": false,
"LayoutGroupSortIndex": 0, "LayoutGroupSortIndex": 0,
"Locked": false, "Locked": false,
"LuaScript": "require(\"accessories/UnderworldMarketHelper\")",
"LuaScriptState": "", "LuaScriptState": "",
"LuaScript_path": "Fan-MadeAccessories.aa8b38/UnderworldMarketHelper.3650ea.ttslua",
"MaterialIndex": -1, "MaterialIndex": -1,
"MeasureMovement": false, "MeasureMovement": false,
"MeshIndex": -1, "MeshIndex": -1,

View File

@ -91,10 +91,14 @@ function getNotesFromCardsAndContainers()
notes = JSON.decode(obj.getGMNotes()) or {} notes = JSON.decode(obj.getGMNotes()) or {}
table.insert(notesList, notes) table.insert(notesList, notes)
elseif obj.type == "Bag" or obj.type == "Deck" then elseif obj.type == "Bag" or obj.type == "Deck" then
for _, deepObj in ipairs(obj.getData().ContainedObjects) do -- check if there are actually objects contained and loop through them
if deepObj.Name == "Card" or deepObj.Name == "CardCustom" then local containedObjects = obj.getData().ContainedObjects
notes = JSON.decode(deepObj.GMNotes) or {} if containedObjects then
table.insert(notesList, notes) for _, deepObj in ipairs(containedObjects) do
if deepObj.Name == "Card" or deepObj.Name == "CardCustom" then
notes = JSON.decode(deepObj.GMNotes) or {}
table.insert(notesList, notes)
end
end end
end end
end end

View File

@ -233,7 +233,7 @@ end
-- creates buttons as labels as display for percentage values -- creates buttons as labels as display for percentage values
function createPercentageButton(tokenCount, valueCount, tokenName) function createPercentageButton(tokenCount, valueCount, tokenName)
local startPos = Vector(2.3, -0.05, 0.875 * valueCount) local startPos = Vector(2.3, -0.04, 0.875 * valueCount)
if percentage == "cumulative" then if percentage == "cumulative" then
percentageLabel.scale = { 1.5, 1.5, 1.5 } percentageLabel.scale = { 1.5, 1.5, 1.5 }

View File

@ -198,7 +198,7 @@ do
local altArt = { front = "normal", back = "normal" } local altArt = { front = "normal", back = "normal" }
-- translating front ID -- translating front ID
if altFrontId > 90000 and altFrontId < 90047 then if altFrontId > 90000 and altFrontId < 90050 then
altArt.front = "parallel" altArt.front = "parallel"
elseif altFrontId > 01500 and altFrontId < 01506 then elseif altFrontId > 01500 and altFrontId < 01506 then
altArt.front = "revised" altArt.front = "revised"
@ -207,7 +207,7 @@ do
end end
-- translating back ID -- translating back ID
if altBackId > 90000 and altBackId < 90047 then if altBackId > 90000 and altBackId < 90050 then
altArt.back = "parallel" altArt.back = "parallel"
elseif altBackId > 01500 and altBackId < 01506 then elseif altBackId > 01500 and altBackId < 01506 then
altArt.back = "revised" altArt.back = "revised"

View File

@ -88,6 +88,7 @@ function loadCards(slots, investigatorId, bondedList, customizations, playerColo
handleAncestralKnowledge(cardsToSpawn) handleAncestralKnowledge(cardsToSpawn)
handleUnderworldMarket(cardsToSpawn, playerColor) handleUnderworldMarket(cardsToSpawn, playerColor)
handleHunchDeck(investigatorId, cardsToSpawn, playerColor) handleHunchDeck(investigatorId, cardsToSpawn, playerColor)
handleSpiritDeck(investigatorId, cardsToSpawn, playerColor)
handleCustomizableUpgrades(cardsToSpawn, customizations) handleCustomizableUpgrades(cardsToSpawn, customizations)
handlePeteSignatureAssets(investigatorId, cardsToSpawn) handlePeteSignatureAssets(investigatorId, cardsToSpawn)
@ -322,6 +323,48 @@ function handleHunchDeck(investigatorId, cardList, playerColor)
end end
end end
-- If the investigator is Parallel Jim Culver, extract all Ally assets to SetAside5 to build the Spirit
-- Deck.
---@param investigatorId String ID for the deck's investigator card. Passed separately because the
--- investigator may not be included in the cardList
---@param cardList Table Deck list being created
---@param playerColor String Color this deck is being loaded for
function handleSpiritDeck(investigatorId, cardList, playerColor)
if investigatorId == "02004-p" or investigatorId == "02004-pb" then -- Parallel Jim Culver
local spiritList = {}
for i, card in ipairs(cardList) do
if card.metadata.id == "90053" or (
card.metadata.type == "Asset"
and card.metadata.traits ~= nil
and string.match(card.metadata.traits, "Ally")
and card.metadata.level ~= nil
and card.metadata.level < 3) then
table.insert(spiritList, i)
end
end
-- Process allies to move them to the spirit deck. This is done in reverse
-- order because the sorting needs to be reversed (deck sorts for face down)
-- Performance here may be an issue, as table.remove() is an O(n) operation
-- which makes the full shift O(n^2). But keep it simple unless it becomes
-- a problem
for i = #spiritList, 1, -1 do
local moving = cardList[spiritList[i]]
moving.zone = "SetAside5"
table.remove(cardList, spiritList[i])
table.insert(cardList, moving)
end
if #spiritList < 10 then
printToAll("Jim's spirit deck must have 9 Ally assets but the deck only has " .. (#spiritList - 1) ..
" Ally assets.", playerColor)
elseif #spiritList > 11 then
printToAll("Moved all " .. (#spiritList - 1) ..
" Ally assets to the spirit deck, reduce it to 10 (including Vengeful Shade).", playerColor)
else
printToAll("Built Jim's spirit deck", playerColor)
end
end
end
-- For any customization upgrade cards in the card list, process the metadata from the deck to -- For any customization upgrade cards in the card list, process the metadata from the deck to
-- set the save state to show the correct checkboxes/text field values -- set the save state to show the correct checkboxes/text field values
---@param cardList Table Deck list being created ---@param cardList Table Deck list being created

View File

@ -50,7 +50,7 @@ local START_POSITIONS = {
randomWeakness = Vector(0, 2, 1.4), randomWeakness = Vector(0, 2, 1.4),
-- Because the card spread is handled by the SpawnBag, we don't know (programatically) where this -- Because the card spread is handled by the SpawnBag, we don't know (programatically) where this
-- should be placed. If more customizable cards are added it will need to be moved. -- should be placed. If more customizable cards are added it will need to be moved.
summonedServitor = Vector(CARD_WIDTH * -6.5, 2, 1.7), summonedServitor = Vector(CARD_WIDTH * -7.5, 2, 1.7),
} }
-- Shifts to move rows of cards, and groups of rows, as different groupings are laid out -- Shifts to move rows of cards, and groups of rows, as different groupings are laid out

View File

@ -245,9 +245,9 @@ INVESTIGATORS["Jenny Barnes"] = {
starterDeck = "2624961" starterDeck = "2624961"
} }
INVESTIGATORS["Jim Culver"] = { INVESTIGATORS["Jim Culver"] = {
cards = { "02004" }, cards = { "02004", "02004-p", "02004-pf", "02004-pb" },
minicards = { "02004-m" }, minicards = { "02004-m" },
signatures = { "02012", "02013" }, signatures = { "02012", "02013", "90050", "90051", "90052", "90053" },
starterDeck = "2624965" starterDeck = "2624965"
} }
INVESTIGATORS["\"Ashcan\" Pete"] = { INVESTIGATORS["\"Ashcan\" Pete"] = {