diff --git a/config.json b/config.json index 5f705f5d..a8a5ceb8 100644 --- a/config.json +++ b/config.json @@ -3,7 +3,6 @@ "ComponentTags_path": "ComponentTags.json", "CustomUIAssets_path": "CustomUIAssets.json", "DecalPallet_path": "DecalPallet.json", - "Decals": [], "GameComplexity": "", "GameMode": "Arkham Horror LCG - Super Complete Edition", "GameType": "", @@ -132,6 +131,7 @@ "EdgeoftheEarth.895eaa", "TheDream-Eaters.a16a1a", "TheFeastofHemlockVale.c740af", + "TheDrownedCity.938aab", "ReturntoTheCircleUndone.757324", "OtherDoominPlay.652ff3", "Playermat1White.8b081b", @@ -176,8 +176,7 @@ "Decoration-Ammo.b43845", "Decoration-Ammo.d35ee9", "VictoryDisplay.6ccd6d", - "OfficialReleasesOverview.8e22bb", - "Fan-MadeExpansionOverview.de7cae", + "BuyersGuide.b5ecc1", "OptionPanelSource.830bd0", "SoundCube.3c988f", "TokenSpawningReference.f8b3a7", diff --git a/modsettings/TabStates.json b/modsettings/TabStates.json index 3e83aeb7..4bc432d2 100644 --- a/modsettings/TabStates.json +++ b/modsettings/TabStates.json @@ -2,7 +2,7 @@ "0": { "body": "Welcome to Arkham Horror LCG - Super Complete Edition!\n\nMake sure to take the tour that can be started with the token in the middle of the main playarea. Some basic notes:\n\nDECKBUILDING\n- All currently existing investigators and player cards are accessible via the player card panel in the upper left corner of the table.\n\n- On the leftside underneath the Investigators, you will find the ArkhamDB Deckimporter. Insert your deck ID and it will build the deck automatically for you.\n\nSCENARIOS \u0026 SETUP\n- Arkham Horror LCG comes with a core campaign (Night of the Zealot) and several expansions. Within each box you will find all the cards required for each scenario setup, as well as a the official campaign guide PDF.\n\n2. Each scenario is setup differently, and while some of the work has been prepared beforehand (such as building encounter decks), you will have to refer to the Campaign Guide for specific instructions on how to set up each scenario.\n\nINVESTIGATOR PLAYMAT AND GAMEPLAY\n- Playermats are scripted to automate most of the gameplay for you.", "color": "Grey", - "id": 1, + "id": 0, "title": "Basic Intro", "visibleColor": { "b": 0.5, @@ -13,7 +13,7 @@ "1": { "body": "The server host can enable or disable cards in hands being hidden from other players by going to the menu at the top of the TTS screen, clicking options, and choosing Hands. The \"Disable\" setting reveals all player hands to all players, while the \"Default\" setting means that each player can only see the cards in their own hand.", "color": "Grey", - "id": 2, + "id": 1, "title": "How to Hide Hands", "visibleColor": { "b": 0.5, diff --git a/objects/3DText.d628cc.json b/objects/3DText.d628cc.json index d3f68dbf..e524ea93 100644 --- a/objects/3DText.d628cc.json +++ b/objects/3DText.d628cc.json @@ -39,9 +39,9 @@ }, "Tooltip": true, "Transform": { - "posX": -19.5, + "posX": -2.6, "posY": 1.697, - "posZ": -87, + "posZ": -52, "rotX": 90, "rotY": 90, "rotZ": 0, diff --git a/objects/OfficialReleasesOverview.8e22bb.json b/objects/BuyersGuide.b5ecc1.json similarity index 51% rename from objects/OfficialReleasesOverview.8e22bb.json rename to objects/BuyersGuide.b5ecc1.json index ed254b64..4dbac794 100644 --- a/objects/OfficialReleasesOverview.8e22bb.json +++ b/objects/BuyersGuide.b5ecc1.json @@ -10,22 +10,16 @@ "g": 0, "r": 0 }, - "CustomImage": { - "CustomTile": { - "Stackable": false, - "Stretch": true, - "Thickness": 0.1, - "Type": 0 - }, - "ImageScalar": 1, - "ImageSecondaryURL": "https://steamusercontent-a.akamaihd.net/ugc/2460726979851338290/FD3A124A45AFAACAB85E34060B09B52FE798E991/", - "ImageURL": "https://steamusercontent-a.akamaihd.net/ugc/2460726979851337461/C6A08EA4A71B37F9C27E2545037F557D65BBF521/", - "WidthScale": 0 + "CustomPDF": { + "PDFPage": 0, + "PDFPageOffset": 0, + "PDFPassword": "", + "PDFUrl": "https://steamusercontent-a.akamaihd.net/ugc/2369545214002116550/E767153EDE2129C09FA16ECB856C33D3C356C322/" }, "Description": "", "DragSelectable": true, "GMNotes": "", - "GUID": "8e22bb", + "GUID": "b5ecc1", "Grid": true, "GridProjection": false, "Hands": false, @@ -33,24 +27,24 @@ "IgnoreFoW": false, "LayoutGroupSortIndex": 0, "Locked": false, - "LuaScript": "", + "LuaScript": "require(\"util/BuyersGuide\")", "LuaScriptState": "", "MeasureMovement": false, - "Name": "Custom_Tile", - "Nickname": "Official Releases Overview", + "Name": "Custom_PDF", + "Nickname": "Buyer's Guide", "Snap": true, "Sticky": true, "Tooltip": true, "Transform": { "posX": -1.6, "posY": 1.481, - "posZ": -55, + "posZ": -71.5, "rotX": 0, "rotY": 270, "rotZ": 0, - "scaleX": 13, + "scaleX": 6.5, "scaleY": 1, - "scaleZ": 13 + "scaleZ": 6.5 }, "Value": 0, "XmlUI": "" diff --git a/objects/EdgeoftheEarth.895eaa.json b/objects/EdgeoftheEarth.895eaa.json index e660e77d..9d7008a7 100644 --- a/objects/EdgeoftheEarth.895eaa.json +++ b/objects/EdgeoftheEarth.895eaa.json @@ -56,7 +56,7 @@ "Transform": { "posX": 20.6, "posY": 1.481, - "posZ": -65, + "posZ": -52, "rotX": 0, "rotY": 270, "rotZ": 0, diff --git a/objects/Fan-MadeExpansionOverview.de7cae.json b/objects/Fan-MadeExpansionOverview.de7cae.json deleted file mode 100644 index 53de7677..00000000 --- a/objects/Fan-MadeExpansionOverview.de7cae.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "AltLookAngle": { - "x": 0, - "y": 0, - "z": 0 - }, - "Autoraise": true, - "ColorDiffuse": { - "b": 0, - "g": 0, - "r": 0 - }, - "CustomImage": { - "CustomTile": { - "Stackable": false, - "Stretch": true, - "Thickness": 0.1, - "Type": 0 - }, - "ImageScalar": 1, - "ImageSecondaryURL": "https://steamusercontent-a.akamaihd.net/ugc/2460726979851342612/65DEC18BEFEFB1117CFEAAE9AB15B442AE8B557B/", - "ImageURL": "https://steamusercontent-a.akamaihd.net/ugc/2460726979851342006/859CF14CE18A4F8C2AFDADA3E69E1B6864154696/", - "WidthScale": 0 - }, - "Description": "", - "DragSelectable": true, - "GMNotes": "", - "GUID": "de7cae", - "Grid": true, - "GridProjection": false, - "Hands": false, - "HideWhenFaceDown": false, - "IgnoreFoW": false, - "LayoutGroupSortIndex": 0, - "Locked": false, - "LuaScript": "", - "LuaScriptState": "", - "MeasureMovement": false, - "Name": "Custom_Tile", - "Nickname": "Fan-Made Expansion Overview", - "Snap": true, - "Sticky": true, - "Tooltip": true, - "Transform": { - "posX": -1.6, - "posY": 1.481, - "posZ": -75, - "rotX": 0, - "rotY": 270, - "rotZ": 0, - "scaleX": 13, - "scaleY": 1, - "scaleZ": 13 - }, - "Value": 0, - "XmlUI": "" -} diff --git a/objects/Lovecrafter3077.b08d20.json b/objects/Lovecrafter3077.b08d20.json index 975a7ed3..b7c9e90d 100644 --- a/objects/Lovecrafter3077.b08d20.json +++ b/objects/Lovecrafter3077.b08d20.json @@ -44,9 +44,9 @@ ], "Tooltip": true, "Transform": { - "posX": -26, + "posX": -9, "posY": 1.481, - "posZ": -87, + "posZ": -52, "rotX": 0, "rotY": 270, "rotZ": 0, diff --git a/objects/PlayerCards.2d30ee.json b/objects/PlayerCards.2d30ee.json index 48213931..0e410c49 100644 --- a/objects/PlayerCards.2d30ee.json +++ b/objects/PlayerCards.2d30ee.json @@ -27,6 +27,11 @@ "Name": "OtherCards", "Type": 0, "URL": "https://steamusercontent-a.akamaihd.net/ugc/2446096169989812196/B5C491331EB348C261F561DC7A19968ECF9FC74A/" + }, + { + "Name": "TheDrownedCity", + "Type": 0, + "URL": "https://steamusercontent-a.akamaihd.net/ugc/2369545214002978835/12B417B2D54F76D9451D8152F6BBE5C2FEDB4853/" } ], "Description": "", diff --git a/objects/TheDrownedCity.938aab.json b/objects/TheDrownedCity.938aab.json new file mode 100644 index 00000000..98777874 --- /dev/null +++ b/objects/TheDrownedCity.938aab.json @@ -0,0 +1,69 @@ +{ + "AltLookAngle": { + "x": 0, + "y": 0, + "z": 0 + }, + "Autoraise": true, + "ColorDiffuse": { + "a": 0.27451, + "b": 1, + "g": 1, + "r": 1 + }, + "CustomMesh": { + "CastShadows": true, + "ColliderURL": "", + "Convex": true, + "CustomShader": { + "FresnelStrength": 0, + "SpecularColor": { + "b": 1, + "g": 1, + "r": 1 + }, + "SpecularIntensity": 0, + "SpecularSharpness": 2 + }, + "DiffuseURL": "https://steamusercontent-a.akamaihd.net/ugc/2369545213997868328/C9BCD9CFF1036A4236DF87099E944F5C1BB43937/", + "MaterialIndex": 3, + "MeshURL": "https://raw.githubusercontent.com/RobMayer/TTSLibrary/master/advboxes/core_h_MSH.obj", + "NormalURL": "", + "TypeIndex": 0 + }, + "Description": "", + "DragSelectable": true, + "GMNotes": "the_drowned_city", + "GUID": "938aab", + "Grid": true, + "GridProjection": false, + "Hands": false, + "HideWhenFaceDown": false, + "IgnoreFoW": false, + "LayoutGroupSortIndex": 0, + "Locked": false, + "LuaScript": "require(\"core/DownloadBox\")", + "LuaScriptState": "", + "MeasureMovement": false, + "Name": "Custom_Model", + "Nickname": "The Drowned City", + "Snap": true, + "Sticky": true, + "Tags": [ + "CampaignBox" + ], + "Tooltip": true, + "Transform": { + "posX": 20.6, + "posY": 1.481, + "posZ": -91, + "rotX": 0, + "rotY": 270, + "rotZ": 0, + "scaleX": 1, + "scaleY": 0.14, + "scaleZ": 1 + }, + "Value": 0, + "XmlUI": "" +} diff --git a/objects/TheFeastofHemlockVale.c740af.json b/objects/TheFeastofHemlockVale.c740af.json index 5e3d3b11..09628e96 100644 --- a/objects/TheFeastofHemlockVale.c740af.json +++ b/objects/TheFeastofHemlockVale.c740af.json @@ -56,7 +56,7 @@ "Transform": { "posX": 20.6, "posY": 1.481, - "posZ": -91, + "posZ": -78, "rotX": 0, "rotY": 270, "rotZ": 0, diff --git a/objects/TheInnsmouthConspiracy.465aab.json b/objects/TheInnsmouthConspiracy.465aab.json index 9f788c28..858699d4 100644 --- a/objects/TheInnsmouthConspiracy.465aab.json +++ b/objects/TheInnsmouthConspiracy.465aab.json @@ -54,9 +54,9 @@ ], "Tooltip": true, "Transform": { - "posX": 20.6, + "posX": 35.4, "posY": 1.481, - "posZ": -52, + "posZ": -91, "rotX": 0, "rotY": 270, "rotZ": 0, diff --git a/objects/TheScarletKeys.300fcc.json b/objects/TheScarletKeys.300fcc.json index 7548ec62..dd853c27 100644 --- a/objects/TheScarletKeys.300fcc.json +++ b/objects/TheScarletKeys.300fcc.json @@ -56,7 +56,7 @@ "Transform": { "posX": 20.6, "posY": 1.481, - "posZ": -78, + "posZ": -65, "rotX": 0, "rotY": 270, "rotZ": 0, diff --git a/src/playercards/PlayerCardPanel.ttslua b/src/playercards/PlayerCardPanel.ttslua index ca536cbf..6becb9e6 100644 --- a/src/playercards/PlayerCardPanel.ttslua +++ b/src/playercards/PlayerCardPanel.ttslua @@ -375,12 +375,35 @@ function createXML(showOtherCardsButton) } } + -- add "The Drowned City" cycle button + local TDCButtonXml = { + tag = "Panel", + attributes = { + position = "58.1 65.5 -11", + rotation = "0 0 180", + height = "225", + width = "225", + scale = "0.1 0.1 1", + onClick = "spawnTDC" + }, + children = { + tag = "Image", + attributes = { image = "TheDrownedCity" } + } + } + + -- center the button if it's the only one + if not showOtherCardsButton then + TDCButtonXml.attributes.position = "44.25 65.5 -11" + end + table.insert(xmlTable, TDCButtonXml) + -- add the "Additional Cards" button if cards without cycle were detected if showOtherCardsButton then local otherCardsButtonXml = { tag = "Panel", attributes = { - position = "44.25 65.5 -11", + position = "31.45 65.5 -11", rotation = "0 0 180", height = "225", width = "225", @@ -403,6 +426,10 @@ function spawnOtherCards() spawnCycle("Other") end +function spawnTDC() + spawnCycle("The Drowned City") +end + function toggleHelp(_, playerColor, _) if helpVisibleToPlayers[playerColor] then helpVisibleToPlayers[playerColor] = nil @@ -604,6 +631,7 @@ end -- Spawns the defined starter deck for the given investigator's. ---@param investigatorName string Name of the investigator, matching a key in InvestigatorPanelData function spawnStarterDeck(investigatorName, investigatorData, position) + if not investigatorData.starterDeck then return end for _, spawnSpec in ipairs(buildCommonSpawnSpec(investigatorName, investigatorData, position, true)) do spawnBag.spawn(spawnSpec) end @@ -707,6 +735,11 @@ function spawnCycle(cycle) end local cardList = allCardsBagApi.getCardsByCycle(cycle, sortByMetadata, includeNoLevelCards) + if #cardList == 0 then + printToAll("Didn't find any cards for '" .. cycle .. "'.") + return + end + prepareToPlaceCards() local rowCount = spawnInvestigators(cycle) diff --git a/src/playercards/PlayerCardPanelData.ttslua b/src/playercards/PlayerCardPanelData.ttslua index 4beef798..4635938c 100644 --- a/src/playercards/PlayerCardPanelData.ttslua +++ b/src/playercards/PlayerCardPanelData.ttslua @@ -3,13 +3,13 @@ BONDED_CARD_LIST = { "06277", -- Wish Eater "06019", -- Bloodlust "06022", -- Pendant of the Queen - "05317", -- Blood-rite + "05317", -- Blood-Rite "06113", -- Essence of the Dream - "06028", -- Stars Are Right "06025", -- Guardian of the Crystallizer + "06028", -- Stars Are Right "06283", -- Unbound Beast - "06032", -- Zeal "06031", -- Hope + "06032", -- Zeal "06033", -- Augur "06331", -- Dream Parasite "06015a", -- Dream-Gate @@ -30,24 +30,24 @@ BONDED_CARD_LIST = { } UPGRADE_SHEET_LIST = { - "09040-c", -- Alchemical Distillation - "09023-c", -- Custom Modifications - "09059-c", -- Damning Testimony - "09041-c", -- Emperical Hypothesis - "09060-c", -- Friends in Low Places - "09101-c", -- Grizzled - "09061-c", -- Honed Instinct - "09021-c", -- Hunter's Armor - "09119-c", -- Hyperphysical Shotcaster - "09079-c", -- Living Ink - "09100-c", -- Makeshift Trap - "09099-c", -- Pocket Multi Tool - "09081-c", -- Power Word + "09040-c", -- Alchemical Distillation + "09023-c", -- Custom Modifications + "09059-c", -- Damning Testimony + "09041-c", -- Emperical Hypothesis + "09060-c", -- Friends in Low Places + "09101-c", -- Grizzled + "09061-c", -- Honed Instinct + "09021-c", -- Hunter's Armor + "09119-c", -- Hyperphysical Shotcaster + "09079-c", -- Living Ink + "09100-c", -- Makeshift Trap + "09099-c", -- Pocket Multi Tool + "09081-c", -- Power Word "09081-t-c", -- Power Word (Taboo) - "09022-c", -- Runic Axe + "09022-c", -- Runic Axe "09022-t-c", -- Runic Axe (Taboo) - "09080-c", -- Summoned Servitor - "09042-c", -- Raven's Quill + "09080-c", -- Summoned Servitor + "09042-c", -- Raven's Quill } EVOLVED_WEAKNESSES = { @@ -212,6 +212,14 @@ INVESTIGATOR_GROUPS = { "Alessandra Zorzi", "Kōhaku Narukami", "Hank Samson" + --[[}, + ["The Drowned City"] = { + "Marion Tavares", + "Lucius Galloway", + "Agatha Crane", + "Michael McGlen", + "Gloria Goldberg", + "George Barnaby"]] } } @@ -575,6 +583,37 @@ INVESTIGATORS["Hank Samson"] = { signatures = { "10017", "10018" }, starterDeck = "3893788" } +-- The Drowned City +INVESTIGATORS["Marion Tavares"] = { + cards = { "10001" }, + minicards = { "10001-m" }, + signatures = { "10002", "10002", "10003" } +} +INVESTIGATORS["Lucius Galloway"] = { + cards = { "10015" }, + minicards = { "10015-m" }, + signatures = { "10017", "10018" } +} +INVESTIGATORS["Agatha Crane"] = { + cards = { "10007", "10008" }, + minicards = { "10007-m", "10008-m" }, + signatures = { "10009", "10010" } +} +INVESTIGATORS["Michael McGlen"] = { + cards = { "11011" }, + minicards = { "11011-m" }, + signatures = { "11012", "11013" } +} +INVESTIGATORS["Gloria Goldberg"] = { + cards = { "11014" }, + minicards = { "11014-m" }, + signatures = { "11015", "11015", "11015", "11016", "11016", "11016" } +} +INVESTIGATORS["George Barnaby"] = { + cards = { "10017" }, + minicards = { "10017-m" }, + signatures = {} +} -- PnP content INVESTIGATORS["Subject 5U-21"] = { cards = { "89001" }, diff --git a/src/util/BuyersGuide.ttslua b/src/util/BuyersGuide.ttslua new file mode 100644 index 00000000..6212f07c --- /dev/null +++ b/src/util/BuyersGuide.ttslua @@ -0,0 +1,9 @@ +function onPlayerAction(_, action, targets) + if action == Player.Action.FlipOver and #targets == 1 and targets[1] == self then + local page = self.Book.getPage() + self.Book.setPage((page + 1) % 4) + return false + end + + return true +end