Merge pull request #868 from argonui/drowned-city

Add The Drowned City
This commit is contained in:
dscarpac 2024-09-15 13:03:10 -05:00 committed by GitHub
commit 8395438b30
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 200 additions and 109 deletions

View File

@ -3,7 +3,6 @@
"ComponentTags_path": "ComponentTags.json", "ComponentTags_path": "ComponentTags.json",
"CustomUIAssets_path": "CustomUIAssets.json", "CustomUIAssets_path": "CustomUIAssets.json",
"DecalPallet_path": "DecalPallet.json", "DecalPallet_path": "DecalPallet.json",
"Decals": [],
"GameComplexity": "", "GameComplexity": "",
"GameMode": "Arkham Horror LCG - Super Complete Edition", "GameMode": "Arkham Horror LCG - Super Complete Edition",
"GameType": "", "GameType": "",
@ -132,6 +131,7 @@
"EdgeoftheEarth.895eaa", "EdgeoftheEarth.895eaa",
"TheDream-Eaters.a16a1a", "TheDream-Eaters.a16a1a",
"TheFeastofHemlockVale.c740af", "TheFeastofHemlockVale.c740af",
"TheDrownedCity.938aab",
"ReturntoTheCircleUndone.757324", "ReturntoTheCircleUndone.757324",
"OtherDoominPlay.652ff3", "OtherDoominPlay.652ff3",
"Playermat1White.8b081b", "Playermat1White.8b081b",
@ -176,8 +176,7 @@
"Decoration-Ammo.b43845", "Decoration-Ammo.b43845",
"Decoration-Ammo.d35ee9", "Decoration-Ammo.d35ee9",
"VictoryDisplay.6ccd6d", "VictoryDisplay.6ccd6d",
"OfficialReleasesOverview.8e22bb", "BuyersGuide.b5ecc1",
"Fan-MadeExpansionOverview.de7cae",
"OptionPanelSource.830bd0", "OptionPanelSource.830bd0",
"SoundCube.3c988f", "SoundCube.3c988f",
"TokenSpawningReference.f8b3a7", "TokenSpawningReference.f8b3a7",

View File

@ -2,7 +2,7 @@
"0": { "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.", "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", "color": "Grey",
"id": 1, "id": 0,
"title": "Basic Intro", "title": "Basic Intro",
"visibleColor": { "visibleColor": {
"b": 0.5, "b": 0.5,
@ -13,7 +13,7 @@
"1": { "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.", "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", "color": "Grey",
"id": 2, "id": 1,
"title": "How to Hide Hands", "title": "How to Hide Hands",
"visibleColor": { "visibleColor": {
"b": 0.5, "b": 0.5,

View File

@ -39,9 +39,9 @@
}, },
"Tooltip": true, "Tooltip": true,
"Transform": { "Transform": {
"posX": -19.5, "posX": -2.6,
"posY": 1.697, "posY": 1.697,
"posZ": -87, "posZ": -52,
"rotX": 90, "rotX": 90,
"rotY": 90, "rotY": 90,
"rotZ": 0, "rotZ": 0,

View File

@ -10,22 +10,16 @@
"g": 0, "g": 0,
"r": 0 "r": 0
}, },
"CustomImage": { "CustomPDF": {
"CustomTile": { "PDFPage": 0,
"Stackable": false, "PDFPageOffset": 0,
"Stretch": true, "PDFPassword": "",
"Thickness": 0.1, "PDFUrl": "https://steamusercontent-a.akamaihd.net/ugc/2369545214002116550/E767153EDE2129C09FA16ECB856C33D3C356C322/"
"Type": 0
},
"ImageScalar": 1,
"ImageSecondaryURL": "https://steamusercontent-a.akamaihd.net/ugc/2460726979851338290/FD3A124A45AFAACAB85E34060B09B52FE798E991/",
"ImageURL": "https://steamusercontent-a.akamaihd.net/ugc/2460726979851337461/C6A08EA4A71B37F9C27E2545037F557D65BBF521/",
"WidthScale": 0
}, },
"Description": "", "Description": "",
"DragSelectable": true, "DragSelectable": true,
"GMNotes": "", "GMNotes": "",
"GUID": "8e22bb", "GUID": "b5ecc1",
"Grid": true, "Grid": true,
"GridProjection": false, "GridProjection": false,
"Hands": false, "Hands": false,
@ -33,24 +27,24 @@
"IgnoreFoW": false, "IgnoreFoW": false,
"LayoutGroupSortIndex": 0, "LayoutGroupSortIndex": 0,
"Locked": false, "Locked": false,
"LuaScript": "", "LuaScript": "require(\"util/BuyersGuide\")",
"LuaScriptState": "", "LuaScriptState": "",
"MeasureMovement": false, "MeasureMovement": false,
"Name": "Custom_Tile", "Name": "Custom_PDF",
"Nickname": "Official Releases Overview", "Nickname": "Buyer's Guide",
"Snap": true, "Snap": true,
"Sticky": true, "Sticky": true,
"Tooltip": true, "Tooltip": true,
"Transform": { "Transform": {
"posX": -1.6, "posX": -1.6,
"posY": 1.481, "posY": 1.481,
"posZ": -55, "posZ": -71.5,
"rotX": 0, "rotX": 0,
"rotY": 270, "rotY": 270,
"rotZ": 0, "rotZ": 0,
"scaleX": 13, "scaleX": 6.5,
"scaleY": 1, "scaleY": 1,
"scaleZ": 13 "scaleZ": 6.5
}, },
"Value": 0, "Value": 0,
"XmlUI": "" "XmlUI": ""

View File

@ -56,7 +56,7 @@
"Transform": { "Transform": {
"posX": 20.6, "posX": 20.6,
"posY": 1.481, "posY": 1.481,
"posZ": -65, "posZ": -52,
"rotX": 0, "rotX": 0,
"rotY": 270, "rotY": 270,
"rotZ": 0, "rotZ": 0,

View File

@ -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": ""
}

View File

@ -44,9 +44,9 @@
], ],
"Tooltip": true, "Tooltip": true,
"Transform": { "Transform": {
"posX": -26, "posX": -9,
"posY": 1.481, "posY": 1.481,
"posZ": -87, "posZ": -52,
"rotX": 0, "rotX": 0,
"rotY": 270, "rotY": 270,
"rotZ": 0, "rotZ": 0,

View File

@ -27,6 +27,11 @@
"Name": "OtherCards", "Name": "OtherCards",
"Type": 0, "Type": 0,
"URL": "https://steamusercontent-a.akamaihd.net/ugc/2446096169989812196/B5C491331EB348C261F561DC7A19968ECF9FC74A/" "URL": "https://steamusercontent-a.akamaihd.net/ugc/2446096169989812196/B5C491331EB348C261F561DC7A19968ECF9FC74A/"
},
{
"Name": "TheDrownedCity",
"Type": 0,
"URL": "https://steamusercontent-a.akamaihd.net/ugc/2369545214002978835/12B417B2D54F76D9451D8152F6BBE5C2FEDB4853/"
} }
], ],
"Description": "", "Description": "",

View File

@ -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": ""
}

View File

@ -56,7 +56,7 @@
"Transform": { "Transform": {
"posX": 20.6, "posX": 20.6,
"posY": 1.481, "posY": 1.481,
"posZ": -91, "posZ": -78,
"rotX": 0, "rotX": 0,
"rotY": 270, "rotY": 270,
"rotZ": 0, "rotZ": 0,

View File

@ -54,9 +54,9 @@
], ],
"Tooltip": true, "Tooltip": true,
"Transform": { "Transform": {
"posX": 20.6, "posX": 35.4,
"posY": 1.481, "posY": 1.481,
"posZ": -52, "posZ": -91,
"rotX": 0, "rotX": 0,
"rotY": 270, "rotY": 270,
"rotZ": 0, "rotZ": 0,

View File

@ -56,7 +56,7 @@
"Transform": { "Transform": {
"posX": 20.6, "posX": 20.6,
"posY": 1.481, "posY": 1.481,
"posZ": -78, "posZ": -65,
"rotX": 0, "rotX": 0,
"rotY": 270, "rotY": 270,
"rotZ": 0, "rotZ": 0,

View File

@ -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 -- add the "Additional Cards" button if cards without cycle were detected
if showOtherCardsButton then if showOtherCardsButton then
local otherCardsButtonXml = { local otherCardsButtonXml = {
tag = "Panel", tag = "Panel",
attributes = { attributes = {
position = "44.25 65.5 -11", position = "31.45 65.5 -11",
rotation = "0 0 180", rotation = "0 0 180",
height = "225", height = "225",
width = "225", width = "225",
@ -403,6 +426,10 @@ function spawnOtherCards()
spawnCycle("Other") spawnCycle("Other")
end end
function spawnTDC()
spawnCycle("The Drowned City")
end
function toggleHelp(_, playerColor, _) function toggleHelp(_, playerColor, _)
if helpVisibleToPlayers[playerColor] then if helpVisibleToPlayers[playerColor] then
helpVisibleToPlayers[playerColor] = nil helpVisibleToPlayers[playerColor] = nil
@ -604,6 +631,7 @@ end
-- Spawns the defined starter deck for the given investigator's. -- Spawns the defined starter deck for the given investigator's.
---@param investigatorName string Name of the investigator, matching a key in InvestigatorPanelData ---@param investigatorName string Name of the investigator, matching a key in InvestigatorPanelData
function spawnStarterDeck(investigatorName, investigatorData, position) function spawnStarterDeck(investigatorName, investigatorData, position)
if not investigatorData.starterDeck then return end
for _, spawnSpec in ipairs(buildCommonSpawnSpec(investigatorName, investigatorData, position, true)) do for _, spawnSpec in ipairs(buildCommonSpawnSpec(investigatorName, investigatorData, position, true)) do
spawnBag.spawn(spawnSpec) spawnBag.spawn(spawnSpec)
end end
@ -707,6 +735,11 @@ function spawnCycle(cycle)
end end
local cardList = allCardsBagApi.getCardsByCycle(cycle, sortByMetadata, includeNoLevelCards) local cardList = allCardsBagApi.getCardsByCycle(cycle, sortByMetadata, includeNoLevelCards)
if #cardList == 0 then
printToAll("Didn't find any cards for '" .. cycle .. "'.")
return
end
prepareToPlaceCards() prepareToPlaceCards()
local rowCount = spawnInvestigators(cycle) local rowCount = spawnInvestigators(cycle)

View File

@ -3,13 +3,13 @@ BONDED_CARD_LIST = {
"06277", -- Wish Eater "06277", -- Wish Eater
"06019", -- Bloodlust "06019", -- Bloodlust
"06022", -- Pendant of the Queen "06022", -- Pendant of the Queen
"05317", -- Blood-rite "05317", -- Blood-Rite
"06113", -- Essence of the Dream "06113", -- Essence of the Dream
"06028", -- Stars Are Right
"06025", -- Guardian of the Crystallizer "06025", -- Guardian of the Crystallizer
"06028", -- Stars Are Right
"06283", -- Unbound Beast "06283", -- Unbound Beast
"06032", -- Zeal
"06031", -- Hope "06031", -- Hope
"06032", -- Zeal
"06033", -- Augur "06033", -- Augur
"06331", -- Dream Parasite "06331", -- Dream Parasite
"06015a", -- Dream-Gate "06015a", -- Dream-Gate
@ -30,24 +30,24 @@ BONDED_CARD_LIST = {
} }
UPGRADE_SHEET_LIST = { UPGRADE_SHEET_LIST = {
"09040-c", -- Alchemical Distillation "09040-c", -- Alchemical Distillation
"09023-c", -- Custom Modifications "09023-c", -- Custom Modifications
"09059-c", -- Damning Testimony "09059-c", -- Damning Testimony
"09041-c", -- Emperical Hypothesis "09041-c", -- Emperical Hypothesis
"09060-c", -- Friends in Low Places "09060-c", -- Friends in Low Places
"09101-c", -- Grizzled "09101-c", -- Grizzled
"09061-c", -- Honed Instinct "09061-c", -- Honed Instinct
"09021-c", -- Hunter's Armor "09021-c", -- Hunter's Armor
"09119-c", -- Hyperphysical Shotcaster "09119-c", -- Hyperphysical Shotcaster
"09079-c", -- Living Ink "09079-c", -- Living Ink
"09100-c", -- Makeshift Trap "09100-c", -- Makeshift Trap
"09099-c", -- Pocket Multi Tool "09099-c", -- Pocket Multi Tool
"09081-c", -- Power Word "09081-c", -- Power Word
"09081-t-c", -- Power Word (Taboo) "09081-t-c", -- Power Word (Taboo)
"09022-c", -- Runic Axe "09022-c", -- Runic Axe
"09022-t-c", -- Runic Axe (Taboo) "09022-t-c", -- Runic Axe (Taboo)
"09080-c", -- Summoned Servitor "09080-c", -- Summoned Servitor
"09042-c", -- Raven's Quill "09042-c", -- Raven's Quill
} }
EVOLVED_WEAKNESSES = { EVOLVED_WEAKNESSES = {
@ -212,6 +212,14 @@ INVESTIGATOR_GROUPS = {
"Alessandra Zorzi", "Alessandra Zorzi",
"Kōhaku Narukami", "Kōhaku Narukami",
"Hank Samson" "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" }, signatures = { "10017", "10018" },
starterDeck = "3893788" 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 -- PnP content
INVESTIGATORS["Subject 5U-21"] = { INVESTIGATORS["Subject 5U-21"] = {
cards = { "89001" }, cards = { "89001" },

View File

@ -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