added image gallery

This commit is contained in:
Chr1Z93 2023-10-30 16:15:07 +01:00
parent 329c2d4104
commit 04fe809aa7
11 changed files with 1252 additions and 965 deletions

View File

@ -1 +1 @@
{"acknowledgedUpgradeVersions":[],"optionPanel":{"cardLanguage":"en","playAreaSnapTags":true,"showAttachmentHelper":false,"showCleanUpHelper":false,"showCustomPlaymatImages":false,"showCYOA":false,"showDisplacementTool":false,"showDrawButton":false,"showHandHelper":[],"showSearchAssistant":[],"showTitleSplash":true,"useClueClickers":false,"useResourceCounters":"disabled","useSnapTags":true}} {"acknowledgedUpgradeVersions":[],"optionPanel":{"cardLanguage":"en","playAreaSnapTags":true,"showAttachmentHelper":false,"showCleanUpHelper":false,"showCYOA":false,"showDisplacementTool":false,"showDrawButton":false,"showHandHelper":[],"showSearchAssistant":[],"showTitleSplash":true,"useClueClickers":false,"useResourceCounters":"disabled","useSnapTags":true}}

View File

@ -19,8 +19,7 @@
"SearchAssistant.17aed0", "SearchAssistant.17aed0",
"HandHelper.450688", "HandHelper.450688",
"DisplacementTool.0f1374", "DisplacementTool.0f1374",
"CleanUpHelper.26cf4b", "CleanUpHelper.26cf4b"
"CustomPlaymatImages.004fe7"
], ],
"ContainedObjects_path": "OptionPanelSource.830bd0", "ContainedObjects_path": "OptionPanelSource.830bd0",
"Description": "Contains the objects that are spawnable via option panel", "Description": "Contains the objects that are spawnable via option panel",

View File

@ -1,57 +0,0 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"ColorDiffuse": {
"b": 1,
"g": 1,
"r": 1
},
"CustomImage": {
"CustomToken": {
"MergeDistancePixels": 15,
"Stackable": false,
"StandUp": false,
"Thickness": 0.1
},
"ImageScalar": 1,
"ImageSecondaryURL": "",
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/2026086584367391757/2E37A1020563AA528471DA7425B8E58343E2BAF7/",
"WidthScale": 0
},
"Description": "Change playmat image to a custom one made by Mint Tea Fan.",
"DragSelectable": true,
"GMNotes": "",
"GUID": "004fe7",
"Grid": true,
"GridProjection": false,
"Hands": false,
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "require(\"accessories/CustomPlaymatImages\")",
"LuaScriptState_path": "OptionPanelSource.830bd0/CustomPlaymatImages.004fe7.luascriptstate",
"MeasureMovement": false,
"Name": "Custom_Token",
"Nickname": "Custom Playmat Images",
"Snap": true,
"Sticky": true,
"Tooltip": true,
"Transform": {
"posX": 44.323,
"posY": 2.29,
"posZ": -60.49,
"rotX": 0,
"rotY": 270,
"rotZ": 0,
"scaleX": 1.33,
"scaleY": 1,
"scaleZ": 1.33
},
"Value": 0,
"XmlUI": ""
}

View File

@ -1 +0,0 @@
[1,{"AltLookAngle":{"x":0,"y":0,"z":0},"Autoraise":true,"ColorDiffuse":{"a":1,"b":1,"g":1,"r":1},"CustomImage":{"CustomToken":{"MergeDistancePixels":15,"Stackable":false,"StandUp":false,"Thickness":0.1},"ImageScalar":1,"ImageSecondaryURL":"","ImageURL":"https://i.ibb.co/YXjvkMn/Arkham-Uptown-Jokubas-Uogintas.jpg","WidthScale":0},"Description":"Click the 'Apply' button to load this image.","DragSelectable":true,"GMNotes":"","Grid":true,"GridProjection":false,"GUID":"f4a462","Hands":true,"HideWhenFaceDown":false,"IgnoreFoW":false,"LayoutGroupSortIndex":0,"Locked":false,"LuaScript":"function onLoad()\n local params = {}\n params.click_function = 'updatePlayarea'\n params.function_owner = self\n params.label = 'Apply'\n params.tooltip = 'Left-Click: Apply image\\nRight-Click: Revert to default'\n params.position = { 0, 0.06, -1.45 }\n params.height = 300\n params.width = 675\n params.color = { 0, 0, 0 }\n params.font_size = 200\n params.font_color = { 1, 1, 1 }\n self.createButton(params)\nend\n\nfunction updatePlayarea(_, _, isRightClick)\n local imageswapper = getObjectFromGUID(\"b7b45b\")\n\n -- error handling\n if imageswapper == nil then\n printToAll(\"Image swapper could not be found!\", \"Orange\")\n return\n end\n\n -- get default image when right-clicked, else load its own image\n if isRightClick then\n imageswapper.call(\"updateSurface\")\n else\n imageswapper.call(\"updateSurface\", self.getCustomObject().image)\n end\nend\n","LuaScriptState":"","MeasureMovement":false,"Name":"Custom_Token","Nickname":"Uptown","Snap":true,"Sticky":true,"Tags":["ImageSwapperTile"],"Tooltip":true,"Transform":{"posX":0,"posY":2,"posZ":0,"rotX":0,"rotY":270,"rotZ":0,"scaleX":1,"scaleY":1,"scaleZ":1},"Value":0,"XmlUI":""}]

View File

@ -1,819 +0,0 @@
local DATA = {
["Arkham Locations"] = { {
Name = "Downtown 1",
URL = "https://i.ibb.co/FzRk98n/Arkham-Downtown-Cristi-Balanescu.jpg"
}, {
Name = "Downtown 2",
URL = "https://i.ibb.co/W2yJ5QZ/Arkham-Downtown-Jokubas-Uogintas.jpg"
}, {
Name = "Eastside 1",
URL = "https://i.ibb.co/W3QvdZW/Arkham-Eastside-Cristi-Balanescu.jpg"
}, {
Name = "Eastside 2",
URL = "https://i.ibb.co/xfn1Fp8/Arkham-Eastside-Jokubas-Uogintas.jpg"
}, {
Name = "French Hill",
URL = "https://i.ibb.co/N7Lk7jc/Arkham-French-Hill-Cristi-Balanescu.jpg"
}, {
Name = "Merchant District",
URL = "https://i.ibb.co/HTNCCq4/Arkham-Merchant-District-Jokubas-Uogintas.jpg"
}, {
Name = "Generic 1",
URL = "https://i.ibb.co/hswfZD6/Arkham-Guillem-H-Pongiluppi.jpg"
}, {
Name = "Generic 2",
URL = "https://i.ibb.co/5h5cMyF/Arkham-Guillem-H-Pongiluppi-2.jpg"
}, {
Name = "Generic 3",
URL = "https://i.ibb.co/ZBdVsWt/Arkham-Guillem-H-Pongiluppi-3.jpg"
}, {
Name = "Generic 4",
URL = "https://i.ibb.co/6NwbM59/Arkham-Michele-Botticelli.jpg"
}, {
Name = "Generic 5",
URL = "https://i.ibb.co/N6sxyq5/Arkham-Mihail-Bila.jpg"
}, {
Name = "Generic 6",
URL = "https://i.ibb.co/B393zxv/Arkham-Tomasz-Jedruszek.jpg"
}, {
Name = "Generic 7",
URL = "https://i.ibb.co/2WQ2Vt6/Arkham-Tomasz-Jedruszek-2.jpg"
}, {
Name = "Generic 8",
URL = "https://i.ibb.co/R7pQ9Y7/Arkham-Tomasz-Jedruszek-3.jpg"
}, {
Name = "Miskatonic University",
URL = "https://i.ibb.co/ncz9xjP/Arkham-Miskatonic-University-Jokubas-Uogintas.jpg"
}, {
Name = "Northside",
URL = "https://i.ibb.co/sVWx1R3/Arkham-Northside-Jokubas-Uogintas.jpg"
}, {
Name = "Rivertown",
URL = "https://i.ibb.co/RyJnHmz/Arkham-Rivertown-Jokubas-Uogintas.jpg"
}, {
Name = "Southside",
URL = "https://i.ibb.co/5GW5jg5/Arkham-Southside-Jokubas-Uogintas.jpg"
}, {
Name = "Uptown",
URL = "https://i.ibb.co/YXjvkMn/Arkham-Uptown-Jokubas-Uogintas.jpg"
} },
["Side Scenarios"] = { {
Name = "Blob That Ate Everything 1",
URL = "https://i.ibb.co/JxFV4ZN/Blob-That-Ate-Everything-Emilio-Rodriguez.jpg"
}, {
Name = "Blob That Ate Everything 2",
URL = "https://i.ibb.co/qJzstWF/Blob-That-Ate-Everything-Emilio-Rodriguez.jpg"
}, {
Name = "Carnevale of Horrors 1",
URL = "https://i.ibb.co/ZchJBpz/Carnevale-of-Horrors.jpg"
}, {
Name = "Curse of the Rougarou 1",
URL = "https://i.ibb.co/Qf7Sr7P/Curse-of-the-Rougarou.jpg"
}, {
Name = "Curse of the Rougarou 2",
URL = "https://i.ibb.co/hs1Qjp0/Curse-of-the-Rougarou-Ann-Kovaleva.jpg"
}, {
Name = "Curse of the Rougarou 3",
URL = "https://i.ibb.co/BK7rmJ9/Curse-of-the-Rougarou-Karine-Villette.jpg"
}, {
Name = "Curse of the Rougarou 4",
URL = "https://i.ibb.co/ZxGTC1w/Curse-of-the-Rougarou-Lachlan-Page.jpg"
}, {
Name = "Curse of the Rougarou 5",
URL = "https://i.ibb.co/HgNXJhW/Curse-of-the-Rougarou-Vladimir-Manyukhin.jpg"
}, {
Name = "Guardians of the Abyss 1",
URL = "https://i.ibb.co/gD3R6cw/Guardians-of-the-Abyss-Jake-Murray.jpg"
}, {
Name = "Guardians of the Abyss 2",
URL = "https://i.ibb.co/jMHPcvz/Guardians-of-the-Abyss-Jose-Vega.jpg"
}, {
Name = "Guardians of the Abyss 3",
URL = "https://i.ibb.co/99pqXQP/Guardians-of-the-Abyss-Koke-Nunez.jpg"
}, {
Name = "Guardians of the Abyss 4",
URL = "https://i.ibb.co/QbMvjbx/Guardians-of-the-Abyss-Mike-Szabados.jpg"
}, {
Name = "Guardians of the Abyss 5",
URL = "https://i.ibb.co/zFDt9Q8/Guardians-of-the-Abyss-Nele-Diel.jpg"
}, {
Name = "Guardians of the Abyss 6",
URL = "https://i.ibb.co/Vpzptmt/Guardians-of-the-Abyss-Yujin-Choo.jpg"
}, {
Name = "Kingsport",
URL = "https://i.ibb.co/rbkk7ys/Kingsport-Tomasz-Jedruszek.jpg"
}, {
Name = "Labyrinths of Lunacy 1",
URL = "https://i.ibb.co/f17PMCC/Labyrinths-of-Lunacy-Cordelia-Wolf.jpg"
}, {
Name = "Labyrinths of Lunacy 2",
URL = "https://i.ibb.co/44DXfWw/Labyrinths-of-Lunacy-Richard-Wright.jpg"
}, {
Name = "Labyrinths of Lunacy 3",
URL = "https://i.ibb.co/jMQhs68/Labyrinths-of-Lunacy-Robert-Berg.jpg"
}, {
Name = "Murder at Excelsior Hotel 1",
URL = "https://i.ibb.co/5cQ6LvN/Murder-at-Excelsior-Hotel-Alistair-Mitchell.jpg"
}, {
Name = "Murder at Excelsior Hotel 2",
URL = "https://i.ibb.co/vBQRHNS/Murder-at-Excelsior-Hotel-Romain-Bayle.jpg"
}, {
Name = "War of the Outer Gods",
URL = "https://i.ibb.co/wLNGFTG/War-of-the-Outer-Gods-Joshua-Cairos.jpg"
} },
["The Path to Carcosa"] = { {
Name = "I - Curtain Call",
URL = "https://i.ibb.co/TcnKXJD/Carcosa-1-Curtain-Call-Mark-Molnar.jpg"
}, {
Name = "II - Last King 1",
URL = "https://i.ibb.co/JRQJKR8/Carcosa-2-Last-King-Cristi-Balanescu.jpg"
}, {
Name = "II - Last King 2",
URL = "https://i.ibb.co/NZzBwgv/Carcosa-2-Last-King-Cristi-Balanescu-2.jpg"
}, {
Name = "II - Last King 3",
URL = "https://i.ibb.co/x56ZHt7/Carcosa-2-Last-King-Wu-Mengjia.jpg"
}, {
Name = "III - Echoes of the Past",
URL = "https://i.ibb.co/R6gSm0D/Carcosa-3-Echoes-of-the-Past-Heather-Savage.jpg"
}, {
Name = "IV - Unspeakable Oath 1",
URL = "https://i.ibb.co/DzzDQQQ/Carcosa-4-Unspeakable-Oath.jpg"
}, {
Name = "IV - Unspeakable Oath 2",
URL = "https://i.ibb.co/9gqBzXr/Carcosa-4-Unspeakable-Oath-2-Mark-Molnar.jpg"
}, {
Name = "IV - Unspeakable Oath 3",
URL = "https://i.ibb.co/wWL73c9/Carcosa-4-Unspeakable-Oath-Paul-Fairbairn.jpg"
}, {
Name = "V - Phantom of Truth 1",
URL = "https://i.ibb.co/mzpz1Dd/Carcosa-5-Phantom-of-Truth-Lucas-Staniec.jpg"
}, {
Name = "V - Phantom of Truth 2",
URL = "https://i.ibb.co/Vp1wNbT/Carcosa-5-Phantom-of-Truth-Tomasz-Jedruszek.jpg"
}, {
Name = "VI - Pallid Mask 1",
URL = "https://i.ibb.co/Bf5LByY/Carcosa-6-Pallid-Mask-Greg-Bobrowski.jpg"
}, {
Name = "VI - Pallid Mask 2",
URL = "https://i.ibb.co/1v1J9Xx/Carcosa-6-Pallid-Mask-Rafal-Pyra.jpg"
}, {
Name = "VII - Black Star Rises 1",
URL = "https://i.ibb.co/TB451t7/Carcosa-7-Black-Star-Rises-Audric-Gatoux.jpg"
}, {
Name = "VII - Black Star Rises 2",
URL = "https://i.ibb.co/nC8Ncxx/Carcosa-7-Black-Star-Rises-Chris-Kintner.jpg"
}, {
Name = "VIII - Dim Carcosa 1",
URL = "https://i.ibb.co/QvS4y3D/Carcosa-8-Dim-Carcosa-Alexandr-Elichev.jpg"
}, {
Name = "VIII - Dim Carcosa 2",
URL = "https://i.ibb.co/hR95x7k/Carcosa-8-Dim-Carcosa-Yuri-Shepherd.jpg"
} },
["The Circle Undone"] = { {
Name = "0 - Prologue",
URL = "https://i.ibb.co/gm4C6yy/Circle-Undone-0-Prologue-Ted-Galaday.jpg"
}, {
Name = "I - Witching Hour",
URL = "https://i.ibb.co/kgJ34WS/Circle-Undone-1-Witching-Hour-Nele-Diel.jpg"
}, {
Name = "II - At Death's Doorstep 1",
URL = "https://i.ibb.co/qNWzH0Y/Circle-Undone-2-At-Death-039-s-Doorstep-Emilio-Rodriguez.jpg"
}, {
Name = "II - At Death's Doorstep 2",
URL = "https://i.ibb.co/T1zp1QN/Circle-Undone-2-At-Death-039-s-Doorstep-Emilio-Rodriguez-2.jpg"
}, {
Name = "II - At Death's Doorstep 3",
URL = "https://i.ibb.co/ZJfYZ1w/Circle-Undone-2-At-Death-039-s-Doorstep-Majid-Azim.jpg"
}, {
Name = "III - The Secret Name 1",
URL = "https://i.ibb.co/hsBw4JQ/Circle-Undone-3-Secret-Name-Jeff-Jumper.jpg"
}, {
Name = "III - The Secret Name 2",
URL = "https://i.ibb.co/MpcPXR5/Circle-Undone-3-Secret-Name-Pierre-Santamaria.jpg"
}, {
Name = "III - The Secret Name 3",
URL = "https://i.ibb.co/LQ8rdKs/Circle-Undone-3-The-Secret-Name-Greg-Bobrowski.jpg"
}, {
Name = "III - The Secret Name 4",
URL = "https://i.ibb.co/0D7LzxV/Circle-Undone-3-The-Secret-Name-Robert-Laskey.jpg"
}, {
Name = "IV - Wages of Sin 1",
URL = "https://i.ibb.co/fDMqH1C/Circle-Undone-4-Wages-of-Sin-Emilio-Rodriguez.jpg"
}, {
Name = "IV - Wages of Sin 2",
URL = "https://i.ibb.co/HDrKkZF/Circle-Undone-4-Wages-of-Sin-Emilio-Rodriguez-2.jpg"
}, {
Name = "IV - Wages of Sin 3",
URL = "https://i.ibb.co/vkpG8cM/Circle-Undone-4-Wages-of-Sin-Greg-Bobrowski.jpg"
}, {
Name = "IV - Wages of Sin 4",
URL = "https://i.ibb.co/CMj007q/Circle-Undone-4-Wages-of-Sin-Mateusz-Michalski.jpg"
}, {
Name = "IV - Wages of Sin 5",
URL = "https://i.ibb.co/sj1bS5x/Circle-Undone-4-Wages-of-Sin-Serge-Da-Silva-Dias.jpg"
}, {
Name = "V - For the Greater Good 1",
URL = "https://i.ibb.co/LDyqjbj/Circle-Undone-5-For-the-Greater-Good.jpg"
}, {
Name = "V - For the Greater Good 2",
URL = "https://i.ibb.co/pPzXNd1/Circle-Undone-5-For-the-Greater-Good-2.jpg"
}, {
Name = "V - For the Greater Good 3",
URL = "https://i.ibb.co/8rMLvJH/Circle-Undone-5-For-the-Greater-Good-Greg-Bobrowski.jpg"
}, {
Name = "V - For the Greater Good 4",
URL = "https://i.ibb.co/vj1q4Cm/Circle-Undone-5-For-the-Greater-Good-Robert-Laskey.jpg"
}, {
Name = "VI - Union and Disillusioned",
URL = "https://i.ibb.co/n7SD1tB/Circle-Undone-6-Union-amp-Disillusioned-Andreas-Rocha.jpg"
}, {
Name = "VII - In the Clutches of Chaos 1",
URL = "https://i.ibb.co/bFXBNh7/Circle-Undone-7-In-the-Clutches-of-Chaos.jpg"
}, {
Name = "VII - In the Clutches of Chaos 2",
URL = "https://i.ibb.co/m6DshNg/Circle-Undone-7-In-the-Clutches-of-Chaos-Alexandr-Elichev.jpg"
}, {
Name = "VII - In the Clutches of Chaos 3",
URL = "https://i.ibb.co/k2p4yfG/Circle-Undone-7-In-the-Clutches-of-Chaos-Jokubas-Uogintas.jpg"
}, {
Name = "VIII - Before the Black Throne 1",
URL = "https://i.ibb.co/9TPwvP6/Circle-Undone-8-Before-the-Black-Throne-Aaron-Luke-Wilson.jpg"
}, {
Name = "VIII - Before the Black Throne 2",
URL = "https://i.ibb.co/VNtgH4v/Circle-Undone-8-Before-the-Black-Throne-Greg-Bobrowski.jpg"
} },
["Side Scenarios (FM)"] = { {
Name = "Consternation on the Constellation",
URL = "https://i.ibb.co/Tw2xBP1/Consternation-Constellation.jpg"
}, {
Name = "Symphony of Erich Zann",
URL = "https://i.ibb.co/SNr8tqN/Symphony-of-Erich-Zann-Hazel-Yingling.jpg"
} },
["Cyclopean Foundations (FM)"] = { {
Name = "I - Lost Moorings 1",
URL = "https://i.ibb.co/DQ76z3c/Cyclopean-1-Lost-Moorings-Care-Line-Art.png"
}, {
Name = "I - Lost Moorings 2",
URL = "https://i.ibb.co/c6LJNfr/Cyclopean-1-Lost-Moorings-Jake-Murray.png"
}, {
Name = "II - Going Twice",
URL = "https://i.ibb.co/P6h3vbm/Cyclopean-2-Going-Twice-Quentin-Bouilloud.png"
}, {
Name = "III - Private Lives",
URL = "https://i.ibb.co/9qK9Fzd/Cyclopean-3-Private-Lives-Christian-Bravery.png"
}, {
Name = "IV - Crumbling Masonry 1",
URL = "https://i.ibb.co/pdrGK6p/Cyclopean-4-Crumbling-Masonry-Pete-Amachree.png"
}, {
Name = "IV - Crumbling Masonry 2",
URL = "https://i.ibb.co/5RFcGyP/Cyclopean-4-Crumbling-Masonry-Simon-Craghead.png"
}, {
Name = "V - Across Dreadful Waters",
URL = "https://i.ibb.co/3mYfFNB/Cyclopean-5-Across-Dreadful-Waters-Ev-Shipard.png"
}, {
Name = "VI - Blood From Stones",
URL = "https://i.ibb.co/ynmQNSB/Cyclopean-6-Blood-From-Stones-Marc-Simonetti.png"
}, {
Name = "VII - Pyroclastic Flow 1",
URL = "https://i.ibb.co/s1JDkFv/Cyclopean-7-Pyroclastic-Flow-Bastien-Grivet.png"
}, {
Name = "VII - Pyroclastic Flow 2",
URL = "https://i.ibb.co/qs8Sk2N/Cyclopean-7-Pyroclastic-Flow-Rachid-Lotf.png"
}, {
Name = "VIII - Tomb of Dead Dreams 1",
URL = "https://i.ibb.co/0MwX460/Cyclopean-8-Tomb-of-Dead-Dreams-Guillem-H-Pongiluppi.png"
}, {
Name = "VIII - Tomb of Dead Dreams 2",
URL = "https://i.ibb.co/mGnKNcy/Cyclopean-8-Tomb-of-Dead-Dreams-Richard-Benning.png"
}, {
Name = "VIII - Tomb of Dead Dreams 3",
URL = "https://i.ibb.co/vmBM8x2/Cyclopean-8-Tomb-of-Dead-Dreams-Walter-Brocca.png"
} },
["Dark Matter (FM)"] = { {
Name = "I - Tatterdemalion 1",
URL = "https://i.ibb.co/DRMPGVt/Dark-Matter-1-Tatterdemalion-Andrey-Vozny.jpg"
}, {
Name = "I - Tatterdemalion 2",
URL = "https://i.ibb.co/1JzrrX2/Dark-Matter-1-Tatterdemalion-Brian-Taylor.jpg"
}, {
Name = "I - Tatterdemalion 3",
URL = "https://i.ibb.co/DzvvgGf/Dark-Matter-1-Tatterdemalion-John-Wallin-Liberto.jpg"
}, {
Name = "I - Tatterdemalion 4",
URL = "https://i.ibb.co/sQf85b8/Dark-Matter-1-Tatterdemalion-Paul-Pepera.jpg"
}, {
Name = "II - Electric Nightmares 1",
URL = "https://i.ibb.co/hLGVBt7/Dark-Matter-2-Electric-Nightmares-Dean-Lawrence.jpg"
}, {
Name = "II - Electric Nightmares 2",
URL = "https://i.ibb.co/cTKZQ61/Dark-Matter-2-Electric-Nightmares-Robert-Thoma.jpg"
}, {
Name = "IIIa - Lost Quantum",
URL = "https://i.ibb.co/6vyXv90/Dark-Matter-3-Lost-Quantum-Michael-Rajecki.jpg"
}, {
Name = "IIIb - In the Shadow of Earth 1",
URL = "https://i.ibb.co/DfbTKHP/Dark-Matter-4-In-the-Shadow-of-Earth-Jihoo-Kim.jpg"
}, {
Name = "IIIb - In the Shadow of Earth 2",
URL = "https://i.ibb.co/MCvPmCb/Dark-Matter-4-In-the-Shadow-of-Earth-N5-Luckybuuncle.jpg"
}, {
Name = "IIIc - Strange Moons",
URL = "https://i.ibb.co/b2d8qvg/Dark-Matter-5-Strange-Moons-Hongyu-Yin.jpg"
}, {
Name = "V - Fragment of Carcosa 1",
URL = "https://i.ibb.co/7WnTyYT/Dark-Matter-7-Fragment-of-Carcosa-Colin-Moore.jpg"
}, {
Name = "V - Fragment of Carcosa 2",
URL = "https://i.ibb.co/mG2Brrd/Dark-Matter-7-Fragments-of-Carcosa-Matthieu-Rebuffat.jpg"
}, {
Name = "VI - Starfall 1",
URL = "https://i.ibb.co/CJ3LKL7/Dark-Matter-8-Starfall-Vadim-Sadovski.jpg"
}, {
Name = "VI - Starfall 2",
URL = "https://i.ibb.co/Njd1FcB/Dark-Matter-8-Starfall-Vadim-Sadovski-2.jpg"
}, {
Name = "VI - Starfall 3",
URL = "https://i.ibb.co/W0Cx7bb/Dark-Matter-8-Starfall-Vadim-Sadovski-3.jpg"
} },
["The Dream-Eaters"] = { {
Name = "I-A - Beyond the Gates of Sleep 1",
URL = "https://i.ibb.co/S6sCy7G/Dream-Eaters-1-A-Beyond-the-Gates-of-Sleep-Phoebe-Herring.jpg"
}, {
Name = "I-A - Beyond the Gates of Sleep 2",
URL = "https://i.ibb.co/kBfW9SC/Dream-Eaters-1-A-Beyond-the-Gates-of-Sleep-Regina-Kurnya.jpg"
}, {
Name = "I-A - Beyond the Gates of Sleep 3",
URL = "https://i.ibb.co/HGvnxdX/Dream-Eaters-1-A-Beyond-the-Gates-of-Sleep-Jason-Scheier.jpg"
}, {
Name = "I-B - Waking Nightmare",
URL = "https://i.ibb.co/sWsZCv8/Dream-Eaters-1-B-Waking-Nightmare-Josh-Gould-jpg.jpg"
}, {
Name = "II-A - Search for Kadath 1",
URL = "https://i.ibb.co/4SwzCD8/Dream-Eaters-2-A-Search-for-Kadath-Andrei-Khrutskii.jpg"
}, {
Name = "II-A - Search for Kadath 2",
URL = "https://i.ibb.co/WpZ4fMc/Dream-Eaters-2-A-Search-for-Kadath-Dan-Iorgulescu.jpg"
}, {
Name = "II-A - Search for Kadath 3",
URL = "https://i.ibb.co/jwsn0jf/Dream-Eaters-2-A-Search-for-Kadath-Diana-Tsareva.jpg"
}, {
Name = "II-A - Search for Kadath 4",
URL = "https://i.ibb.co/pd9vxmL/Dream-Eaters-2-A-Search-for-Kadath-Helen-Ilnytska.jpg"
}, {
Name = "II-A - Search for Kadath 5",
URL = "https://i.ibb.co/MZ7Qtcc/Dream-Eaters-2-A-Search-for-Kadath-Nele-Diel.jpg"
}, {
Name = "II-B - Thousand Shapes of Horror 1",
URL = "https://i.ibb.co/9s7M0PP/Dream-Eaters-2-B-Thousand-Shapes-of-Horror-Nele-Diel-2.jpg"
}, {
Name = "II-B - Thousand Shapes of Horror 2",
URL = "https://i.ibb.co/T4Pqx0H/Dream-Eaters-2-B-Thousand-Shapes-of-Horror-Nele-Diel.jpg"
}, {
Name = "II-B - Thousand Shapes of Horror 3",
URL = "https://i.ibb.co/VJFQVYd/Dream-Eaters-2-B-Thousand-Shapes-of-Horror-Greg-Bobrowski.jpg"
}, {
Name = "III-A - Dark Side of the Moon 1",
URL = "https://i.ibb.co/B2DfXLZ/Dream-Eaters-3-A-Dark-Side-of-the-Moon-Dabanli.jpg"
}, {
Name = "III-A - Dark Side of the Moon 2",
URL = "https://i.ibb.co/c27JRvv/Dream-Eaters-3-A-Dark-Side-of-the-Moon-Frej-Agelii.jpg"
}, {
Name = "III-B - Point of No Return 1",
URL = "https://i.ibb.co/dMGNB9Y/Dream-Eaters-3-B-Point-of-No-Return-Daria-Khlebnikova.jpg"
}, {
Name = "III-B - Point of No Return 2",
URL = "https://i.ibb.co/dpXxPmz/Dream-Eaters-3-B-Point-of-No-Return-Karine-Villette.jpg"
}, {
Name = "IV-A - Where the Gods Dwell",
URL = "https://i.ibb.co/v4nqw6G/Dream-Eaters-4-A-Where-the-Gods-Dwell-Samantha-Franco.jpg"
}, {
Name = "IV-B - Weaver of the Cosmos 1",
URL = "https://i.ibb.co/7btNBS1/Dream-Eaters-4-B-Weaver-of-the-Cosmos-Diana-Franco.jpg"
}, {
Name = "IV-B - Weaver of the Cosmos 2",
URL = "https://i.ibb.co/RY7y22b/Dream-Eaters-4-B-Weaver-of-the-Cosmos-Leanna-Crossan.jpg"
}, {
Name = "IV-B - Weaver of the Cosmos 3",
URL = "https://i.ibb.co/f8LBbFW/Dream-Eaters-4-B-Weaver-of-the-Cosmos-Nele-Diel.jpg"
} },
["The Dunwich Legacy"] = { {
Name = "I-A - Extracurricular Activity 1",
URL = "https://i.ibb.co/tDxX8KS/Dunwich-1-Extracurricular-Activity-Igor-Kirdeika.jpg"
}, {
Name = "I-A - Extracurricular Activity 2",
URL = "https://i.ibb.co/RQ6z0pj/Dunwich-1-Extracurricular-Activity-Joseph-Diaz.jpg"
}, {
Name = "I-A - Extracurricular Activity 3",
URL = "https://i.ibb.co/nnJdwL2/Dunwich-1-Extracurricular-Activity-Tomasz-Jedruszek.jpg"
}, {
Name = "I-B - House Always Wins 1",
URL = "https://i.ibb.co/8XPLdr9/Dunwich-2-House-Always-Wins-Jonny-Klein.jpg"
}, {
Name = "I-B - House Always Wins 2",
URL = "https://i.ibb.co/HtX95GK/Dunwich-2-House-Always-Wins-Robert-Laskey.jpg"
}, {
Name = "I-B - House Always Wins 3",
URL = "https://i.ibb.co/MCLP3Sz/Dunwich-2-House-Always-Wins-XX-l.jpg"
}, {
Name = "I-B - House Always Wins 4",
URL = "https://i.ibb.co/w7Pf5sd/Dunwich-2-House-Always-Wins-XX-l-2.jpg"
}, {
Name = "II - Miskatonic Museum 1",
URL = "https://i.ibb.co/x1Kf7qG/Dunwich-3-Miskatonic-Museum-Emre-Aktuna.jpg"
}, {
Name = "II - Miskatonic Museum 2",
URL = "https://i.ibb.co/yWXVPcN/Dunwich-3-Miskatonic-Museum-Richard-Wright.jpg"
}, {
Name = "III - Essex County Express",
URL = "https://i.ibb.co/602CMZb/Dunwich-4-Essex-County-Express-David-Alvarez.jpg"
}, {
Name = "IV - Blood on the Altar 1",
URL = "https://i.ibb.co/3CYHDhf/Dunwich-5-Blood-on-the-Altar.jpg"
}, {
Name = "IV - Blood on the Altar 2",
URL = "https://i.ibb.co/FbxcCY2/Dunwich-5-Blood-on-the-Altar-Chris-Ostrowski.jpg"
}, {
Name = "IV - Blood on the Altar 3",
URL = "https://i.ibb.co/sJf6YsZ/Dunwich-5-Blood-on-the-Altar-Lucas-Staniec.jpg"
}, {
Name = "IV - Blood on the Altar 4",
URL = "https://i.ibb.co/kBPNGBd/Dunwich-5-Blood-on-the-Altar-Mark-Molnar.jpg"
}, {
Name = "V - Undimensioned and Unseen 1",
URL = "https://i.ibb.co/QvfhjDv/Dunwich-6-Undimensioned-and-Unseen-Frej-Agelii.jpg"
}, {
Name = "V - Undimensioned and Unseen 2",
URL = "https://i.ibb.co/4VL9gSK/Dunwich-6-Undimensioned-and-Unseen-Lucas-Staniec.jpg"
}, {
Name = "V - Undimensioned and Unseen 3",
URL = "https://i.ibb.co/wBFsS8P/Dunwich-6-Undimensioned-and-Unseen-Michal-Teliga-jpg.jpg"
}, {
Name = "V - Undimensioned and Unseen 4",
URL = "https://i.ibb.co/wwGDcq6/Dunwich-6-Undimensioned-and-Unseen-Tomasz-Jedruszek.jpg"
}, {
Name = "VI - Where Doom Awaits 1",
URL = "https://i.ibb.co/TvMwqj4/Dunwich-7-Where-Doom-Awaits.jpg"
}, {
Name = "VI - Where Doom Awaits 2",
URL = "https://i.ibb.co/S6cSLH9/Dunwich-7-Where-Doom-Awaits-3.jpg"
}, {
Name = "VI - Where Doom Awaits 3",
URL = "https://i.ibb.co/khBX32g/Dunwich-7-Where-Doom-Awaits-4.jpg"
}, {
Name = "VI - Where Doom Awaits 4",
URL = "https://i.ibb.co/S0hcwN8/Dunwich-7-Where-Doom-Awaits-5.jpg"
}, {
Name = "VI - Where Doom Awaits 5",
URL = "https://i.ibb.co/Lxv1Bjp/Dunwich-7-Where-Doom-Awaits-Luca-Trentin.jpg"
}, {
Name = "VII - Lost in Time and Space 1",
URL = "https://i.ibb.co/rtTpbDx/Dunwich-8-Lost-in-Time-amp-Space.jpg"
}, {
Name = "VII - Lost in Time and Space 2",
URL = "https://i.ibb.co/dBXP0GL/Dunwich-8-Lost-in-Time-amp-Space-Chris-Ostrowski.jpg"
}, {
Name = "VII - Lost in Time and Space 3",
URL = "https://i.ibb.co/0XcnxFD/Dunwich-8-Lost-in-Time-amp-Space-Lino-Drieghe.jpg"
} },
["Edge of the Earth"] = { {
Name = "I - Ice and Death 1",
URL = "https://i.ibb.co/FWZMWtW/Edge-1-Ice-and-Death-David-Frasheski.png"
}, {
Name = "I - Ice and Death 2",
URL = "https://i.ibb.co/QDGV0jQ/Edge-1-Ice-and-Death-Felix-Riano.png"
}, {
Name = "I - Ice and Death 3",
URL = "https://i.ibb.co/hFJQM8v/Edge-1-Ice-and-Death-Mike-Gizienski.png"
}, {
Name = "??? - Fatal Mirage",
URL = "https://i.ibb.co/KzwvjJN/Edge-2-Fatal-Mirage-David-Frasheski.png"
}, {
Name = "II - Forbidden Peaks 1",
URL = "https://i.ibb.co/C2SLByt/Edge-2-Forbidden-Peaks-David-Frasheski-2.png"
}, {
Name = "II - Forbidden Peaks 2",
URL = "https://i.ibb.co/0cGkkBL/Edge-3-Forbidden-Peaks-David-Frasheski.png"
}, {
Name = "III - City of Elder Things 1",
URL = "https://i.ibb.co/FbpgBD3/Edge-4-City-Francois-Baranger.png"
}, {
Name = "III - City of Elder Things 2",
URL = "https://i.ibb.co/ncRvHr3/Edge-4-City-Francois-Baranger-2.png"
}, {
Name = "IV - Heart of Madness 1",
URL = "https://i.ibb.co/rk0qR4z/Edge-5-Heart-of-Madness-Karol-Sollich.png"
}, {
Name = "IV - Heart of Madness 2",
URL = "https://i.ibb.co/NVFjx6N/Edge-5-Heart-of-Madness-Miguel-Coimbra.png"
} },
["The Forgotten Age"] = { {
Name = "I - Untamed Wilds 1",
URL = "https://i.ibb.co/BLhwCG1/Forgotten-Age-1-Untamed-Wilds-David-Frasheski.jpg"
}, {
Name = "I - Untamed Wilds 2",
URL = "https://i.ibb.co/SnJfsNy/Forgotten-Age-1-Untamed-Wilds-David-Frasheski-2.jpg"
}, {
Name = "I - Untamed Wilds 3",
URL = "https://i.ibb.co/kcx1tvp/Forgotten-Age-1-Untamed-Wilds-Ethan-Patrick-Harris.jpg"
}, {
Name = "I - Untamed Wilds 4",
URL = "https://i.ibb.co/HPbJwXk/Forgotten-Age-1-Untamed-Wilds-Lucas-Staniec.jpg"
}, {
Name = "I - Untamed Wilds 5",
URL = "https://i.ibb.co/bbq1ZrK/Forgotten-Age-1-Untamed-Wilds-Nele-Diel.jpg"
}, {
Name = "II - Doom of Etzli 1",
URL = "https://i.ibb.co/Pw4by4q/Forgotten-Age-2-Doom-of-Eztli-Cristi-Balanescu.jpg"
}, {
Name = "II - Doom of Etzli 2",
URL = "https://i.ibb.co/xqW6cXR/Forgotten-Age-2-Doom-of-Eztli-Greg-Bobrowski.jpg"
}, {
Name = "II - Doom of Etzli 3",
URL = "https://i.ibb.co/kgsC3pb/Forgotten-Age-2-Doom-of-Eztli-Nele-Diel.jpg"
}, {
Name = "III - Threads of Fate",
URL = "https://i.ibb.co/Bn0Pjng/Forgotten-Age-3-Threads-of-Fate-Jokubas-Uogintas.jpg"
}, {
Name = "IV - Boundary Beyond 1",
URL = "https://i.ibb.co/yPZ9v2X/Forgotten-Age-4-Boundary-Beyond-Greg-Bobrowski-2-jpg.jpg"
}, {
Name = "IV - Boundary Beyond 2",
URL = "https://i.ibb.co/vm0JgFs/Forgotten-Age-4-Boundary-Beyond-Greg-Bobrowski-jpg.jpg"
}, {
Name = "IV - Boundary Beyond 3",
URL = "https://i.ibb.co/D1rh9Ry/Forgotten-Age-4-Boundary-Beyond-Nele-Diel.jpg"
}, {
Name = "V - Heart of the Elders I-1",
URL = "https://i.ibb.co/jzKvv6P/Forgotten-Age-5-Heart-of-the-Elders-I-Lucas-Staniec.jpg"
}, {
Name = "V - Heart of the Elders I-2",
URL = "https://i.ibb.co/mR79MX4/Forgotten-Age-5-Heart-of-the-Elders-I-Lucas-Staniec-2.jpg"
}, {
Name = "V - Heart of the Elders II",
URL = "https://i.ibb.co/pQSbL0t/Forgotten-Age-5-Heart-of-the-Elders-II-Nele-Diel.jpg"
}, {
Name = "VI - City of Archives 1",
URL = "https://i.ibb.co/f04DSPb/Forgotten-Age-6-City-of-Archives.jpg"
}, {
Name = "VI - City of Archives 2",
URL = "https://i.ibb.co/WsSBrYj/Forgotten-Age-6-City-of-Archives-2.jpg"
}, {
Name = "VI - City of Archives 3",
URL = "https://i.ibb.co/qdPbSZ8/Forgotten-Age-6-City-of-Archives-Chris-Ostrowski.jpg"
}, {
Name = "VII - Depths of Yoth 1",
URL = "https://i.ibb.co/dbLKgGv/Forgotten-Age-7-Depths-of-Yoth-Diego-Arbetta.jpg"
}, {
Name = "VII - Depths of Yoth 2",
URL = "https://i.ibb.co/NW7Wp98/Forgotten-Age-7-Depths-of-Yoth-Greg-Bobrowski.jpg"
}, {
Name = "VII - Depths of Yoth 3",
URL = "https://i.ibb.co/257zr7c/Forgotten-Age-7-Depths-of-Yoth-Greg-Bobrowski-2-jpg.jpg"
}, {
Name = "VIII - Shattered Aeons 1",
URL = "https://i.ibb.co/KwnWTGR/Forgotten-Age-8-Shattered-Aeons.jpg"
}, {
Name = "VIII - Shattered Aeons 2",
URL = "https://i.ibb.co/b7kVd4F/Forgotten-Age-8-Shattered-Aeons-Alexandr-Elichev.jpg"
} },
["The Innsmouth Conspiracy"] = { {
Name = "I - Pit of Despair 1",
URL = "https://i.ibb.co/2sc0F61/Innsmouth-1-Pit-of-Despair-Amanda-Castrillo.jpg"
}, {
Name = "I - Pit of Despair 2",
URL = "https://i.ibb.co/Nj9JLBQ/Innsmouth-1-Pit-of-Despair-J-Mill.jpg"
}, {
Name = "II - Vanishing of Elina Harper 1",
URL = "https://i.ibb.co/2j74cVn/Innsmouth-2-Vanishing-of-Elina-Harper-Konstantin-Vohwinkel.jpg"
}, {
Name = "II - Vanishing of Elina Harper 2",
URL = "https://i.ibb.co/r2VqHSn/Innsmouth-2-Vanishing-of-Elina-Harper-Mihail-Bila.jpg"
}, {
Name = "II - Vanishing of Elina Harper 3",
URL = "https://i.ibb.co/hFQMm7N/Innsmouth-2-Vanishing-of-Elina-Harper-Richard-Wright.jpg"
}, {
Name = "II - Vanishing of Elina Harper 4",
URL = "https://i.ibb.co/2nZKGN6/Innsmouth-2-Vanishing-of-Elina-Harper-Tomasz-Jedruszek-1.jpg"
}, {
Name = "II - Vanishing of Elina Harper 5",
URL = "https://i.ibb.co/WxLpKrM/Innsmouth-2-Vanishing-of-Elina-Harper-Tomasz-Jedruszek-2.jpg"
}, {
Name = "III - In Too Deep 1",
URL = "https://i.ibb.co/SsQ3my4/Innsmouth-3-In-Too-Deep-David-Frasheski.jpg"
}, {
Name = "III - In Too Deep 2",
URL = "https://i.ibb.co/jgQ8zQN/Innsmouth-3-In-Too-Deep-Klaudia-Bezak.jpg"
}, {
Name = "III - In Too Deep 3",
URL = "https://i.ibb.co/VVgtNM1/Innsmouth-3-In-Too-Deep-Patrik-Antonescu.jpg"
}, {
Name = "IV - Devil Reef 1",
URL = "https://i.ibb.co/Jrf6CJ0/Innsmouth-4-Devil-Reef-Ludovic-Sanson.jpg"
}, {
Name = "IV - Devil Reef 2",
URL = "https://i.ibb.co/4jfwDZR/Innsmouth-4-Devil-Reef-Marc-Stewart.jpg"
}, {
Name = "V - Horror in High Gear 1",
URL = "https://i.ibb.co/vqYJjYJ/Innsmouth-5-Horror-in-High-Gear-Greg-Bobrowski.jpg"
}, {
Name = "V - Horror in High Gear 2",
URL = "https://i.ibb.co/yYrzbYS/Innsmouth-5-Horror-in-High-Gear-Greg-Bobrowski-2.jpg"
}, {
Name = "V - Horror in High Gear 3",
URL = "https://i.ibb.co/fpKWhGY/Innsmouth-5-Horror-in-High-Gear-Guillem-H-Pongiluppi.jpg"
}, {
Name = "V - Horror in High Gear 4",
URL = "https://i.ibb.co/YkLFy7y/Innsmouth-5-Horror-in-High-Gear-Rostyslav-Zagornov.jpg"
}, {
Name = "VI - Light in the Fog 1",
URL = "https://i.ibb.co/v1rhgqJ/Innsmouth-6-Light-in-the-Fog-Florian-Aupetit.jpg"
}, {
Name = "VI - Light in the Fog 2",
URL = "https://i.ibb.co/Db2pRd6/Innsmouth-6-Light-in-the-Fog-JB-Caillet.jpg"
}, {
Name = "VII - Lair of Dagon 1",
URL = "https://i.ibb.co/QPwzQL5/Innsmouth-7-Lair-of-Dagon-Daria-Khlebnikova.jpg"
}, {
Name = "VII - Lair of Dagon 2",
URL = "https://i.ibb.co/MZBpCbs/Innsmouth-7-Lair-of-Dagon-Guillem-H-Pongiluppi.jpg"
}, {
Name = "VIII - Into the Maelstrom 1",
URL = "https://i.ibb.co/fkSXDgs/Innsmouth-8-Into-the-Maelstrom-Dimitri-Bielak.jpg"
}, {
Name = "VIII - Into the Maelstrom 2",
URL = "https://i.ibb.co/k56Dn9q/Innsmouth-8-Into-the-Maelstrom-Mateusz-Michalski.jpg"
} },
["Night of the Zealot"] = { {
Name = "I - The Gathering 1",
URL = "https://i.ibb.co/6NWqg1K/Zealot-Gathering.jpg"
}, {
Name = "III - Devourer Below 1",
URL = "https://i.ibb.co/x5QFzrx/Zealot-3-Devourer-Below-Helen-Castelow.png"
}, {
Name = "III - Devourer Below 2",
URL = "https://i.ibb.co/6r6LFGz/Zealot-3-Devourer-Below-Sarah-Miller.png"
} },
["The Ghosts of Onigawa (FM)"] = { {
Name = "I - The Ghosts of Onigawa",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-01.png?raw=true"
}, {
Name = "II - In The Shadow Of Mount Kokoro",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-02.png?raw=true"
}, {
Name = "III - The Onigawa River",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-03.png?raw=true"
}, {
Name = "IV - The Crimson Butterfly",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-04.png?raw=true"
}, {
Name = "V - The Koi Conspiracy",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-05.png?raw=true"
} },
["The Scarlet Keys"] = { {
Name = "5-A Riddles and Rain",
URL = "http://cloud-3.steamusercontent.com/ugc/2037357792057358580/E9E5FE4028C08B3D4883406821221B73C8B5B2C7/"
}, {
Name = "11-B Dead Heat",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566443853/CAD7771D90141EA6D5FFAFE1EC5E7AD9647C82DB/"
}, {
Name = "16-D Sanguine Shadows",
URL = "http://cloud-3.steamusercontent.com/ugc/2037357792057358704/4A7261EB31511467CBC46E876476DD205F528A4B/"
}, {
Name = "21-F Dealings in the Dark",
URL = "http://cloud-3.steamusercontent.com/ugc/2037357792057358816/7C9FE4C34CD0A7AE87EF054742D878F310C71AA7/"
}, {
Name = "28-I Dancing Mad",
URL = "http://cloud-3.steamusercontent.com/ugc/2037357792056955518/EAB857DD5629EC6A3078FB0A3A703B85B5F514B9/"
}, {
Name = "23-K On Thin Ice",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444026/EB5628E254AE25DA89A9C999EAAD995ECF67068E/"
}, {
Name = "38-N Dogs of War",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444199/194FD9A713907197471A55411AE300B62C5F5278/"
}, {
Name = "46-Q Shades of Suffering",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444330/3ED2CCE95DE933546E1B5CBBF445D773E6D65465/"
}, {
Name = "56-Y ???",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444450/FE4C335B0F72E83900A4EED0FD1A1D304D70D6B7/"
}, {
Name = "59-Z Congress of Keys I",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444576/5BB32469ED412D59BB0A46E57D226500B1D0568B/"
}, {
Name = "59-Z Congress of Keys II",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444690/B01A1FEAB57473D9B6DF11B92D62C214AA1C2C02/"
} }
}
local verticalOffset = 0.5
local buttonParameters = {}
buttonParameters.function_owner = self
buttonParameters.width = 1200
buttonParameters.height = 300
buttonParameters.position = { x = -0.2, y = 0.06, z = -verticalOffset }
local CycleIndex = 1
local CycleList = {
"Arkham Locations",
"Night of the Zealot",
"The Dunwich Legacy",
"The Path to Carcosa",
"The Forgotten Age",
"The Circle Undone",
"The Dream-Eaters",
"The Innsmouth Conspiracy",
"Edge of the Earth",
"The Scarlet Keys",
"Side Scenarios",
"Cyclopean Foundations (FM)",
"Dark Matter (FM)",
"The Ghosts of Onigawa (FM)",
"Side Scenarios (FM)"
}
-- save the index of selected cycle and table with spawnData
function onSave() return JSON.encode({ CycleIndex, spawnData }) end
function onLoad(savedData)
if savedData == nil then
print("Error: Saved Data was not found.")
else
local loadedData = JSON.decode(savedData)
CycleIndex = loadedData[1]
spawnData = loadedData[2]
end
--spawnData = getObjectFromGUID("f4a462").getData()
-- index 0: cycle selection button
buttonParameters.click_function = "selectCycle"
buttonParameters.tooltip = "Select a cycle"
buttonParameters.label = CycleList[CycleIndex]
buttonParameters.font_size = 90
self.createButton(buttonParameters)
-- index 1: display button
buttonParameters.click_function = "showImages"
buttonParameters.tooltip = "Right-Click to remove displayed tiles"
buttonParameters.label = "Display available images"
buttonParameters.position.z = buttonParameters.position.z + 2 * verticalOffset
self.createButton(buttonParameters)
end
-- open option dialog to select cycle
function selectCycle(_, color)
Player[color].showOptionsDialog("Select cycle:", CycleList, CycleIndex, optionCallback)
end
-- update CycleIndex based on selection in the option dialog
function optionCallback(_, optionIndex)
CycleIndex = optionIndex
self.editButton({
index = 0,
label = CycleList[CycleIndex]
})
showImages()
end
-- triggered by clicking the "display" button
function showImages(_, _, isRightClick)
removeImages()
-- don't display new tiles when right-clicked
if isRightClick then return end
local pos = self.getPosition()
local rot = self.getRotation()
local offset = 3.7
pos.z = pos.z - 1 - offset
-- loop over respective entries in DATA
for i, entry in ipairs(DATA[CycleList[CycleIndex]]) do
spawnData.CustomImage.ImageURL = entry.URL
spawnData.Nickname = entry.Name
spawnObjectData({
data = spawnData,
position = pos,
rotation = rot,
scale = { 0.9, 1, 0.9 }
})
-- display 20 tiles in a row, move then to next row
if i % 20 == 0 then
pos.x = pos.x - offset
pos.z = self.getPosition().z - 1 - offset
else
pos.z = pos.z - offset
end
end
end
-- remove already laid out image tiles by tag
function removeImages()
for _, tile in ipairs(getObjectsWithTag("ImageSwapperTile")) do
tile.destruct()
end
end

View File

@ -48,6 +48,7 @@ local currentListItem = 1
local xmlVisibility = { local xmlVisibility = {
downloadWindow = false, downloadWindow = false,
optionPanel = false, optionPanel = false,
playareaGallery = false,
updateNotification = false updateNotification = false
} }
local tabIdTable = { local tabIdTable = {
@ -846,6 +847,12 @@ function onClick_toggleUi(player, title)
if title == "Navigation Overlay" then if title == "Navigation Overlay" then
navigationOverlayApi.cycleVisibility(player.color) navigationOverlayApi.cycleVisibility(player.color)
return return
-- hide the playareaGallery if visible
elseif title == "downloadWindow" and xmlVisibility.playareaGallery then
onClick_toggleUi(_, "playareaGallery")
-- hide the downloadWindow if visible
elseif title == "playareaGallery" and xmlVisibility.downloadWindow then
onClick_toggleUi(_, "downloadWindow")
end end
if xmlVisibility[title] then if xmlVisibility[title] then
@ -857,6 +864,11 @@ function onClick_toggleUi(player, title)
xmlVisibility[title] = not xmlVisibility[title] xmlVisibility[title] = not xmlVisibility[title]
end end
-- forwards the call to the onClick function
function togglePlayareaGallery()
onClick_toggleUi(_, "playareaGallery")
end
-- updates the preview window -- updates the preview window
function updatePreviewWindow() function updatePreviewWindow()
local item = library[contentToShow][currentListItem] local item = library[contentToShow][currentListItem]
@ -1165,10 +1177,6 @@ function applyOptionPanelChange(id, state)
elseif id == "showCYOA" then elseif id == "showCYOA" then
optionPanel[id] = spawnOrRemoveHelper(state, "CYOA Campaign Guides", {39, 1.3, -20}) optionPanel[id] = spawnOrRemoveHelper(state, "CYOA Campaign Guides", {39, 1.3, -20})
-- option: Show custom playmat images
elseif id == "showCustomPlaymatImages" then
optionPanel[id] = spawnOrRemoveHelper(state, "Custom Playmat Images", {67.5, 1.6, 37})
-- option: Show displacement tool -- option: Show displacement tool
elseif id == "showDisplacementTool" then elseif id == "showDisplacementTool" then
optionPanel[id] = spawnOrRemoveHelper(state, "Displacement Tool", {-57, 1.6, 46}) optionPanel[id] = spawnOrRemoveHelper(state, "Displacement Tool", {-57, 1.6, 46})
@ -1232,7 +1240,6 @@ function removeHelperObject(name)
["Hand Helper"] = "showHandHelper", ["Hand Helper"] = "showHandHelper",
["Search Assistant"] = "showSearchAssistant", ["Search Assistant"] = "showSearchAssistant",
["Displacement Tool"] = "showDisplacementTool", ["Displacement Tool"] = "showDisplacementTool",
["Custom Playmat Images"] = "showCustomPlaymatImages",
["Attachment Helper"] = "showAttachmentHelper", ["Attachment Helper"] = "showAttachmentHelper",
["CYOA Campaign Guides"] = "showCYOA" ["CYOA Campaign Guides"] = "showCYOA"
} }
@ -1279,7 +1286,6 @@ function onClick_defaultSettings()
playAreaSnapTags = true, playAreaSnapTags = true,
showAttachmentHelper = false, showAttachmentHelper = false,
showCleanUpHelper = false, showCleanUpHelper = false,
showCustomPlaymatImages = false,
showCYOA = false, showCYOA = false,
showDisplacementTool = false, showDisplacementTool = false,
showDrawButton = false, showDrawButton = false,

View File

@ -0,0 +1,982 @@
PLAYAREA_IMAGE_DATA = {
["Official Campaigns"] = {
["Night of the Zealot"] = {
{
Name = "I - The Gathering 1",
URL = "https://i.ibb.co/6NWqg1K/Zealot-Gathering.jpg"
},
{
Name = "III - Devourer Below 1",
URL = "https://i.ibb.co/x5QFzrx/Zealot-3-Devourer-Below-Helen-Castelow.png"
},
{
Name = "III - Devourer Below 2",
URL = "https://i.ibb.co/6r6LFGz/Zealot-3-Devourer-Below-Sarah-Miller.png"
}
},
["The Dunwich Legacy"] = {
{
Name = "I-A - Extracurricular Activity 1",
URL = "https://i.ibb.co/tDxX8KS/Dunwich-1-Extracurricular-Activity-Igor-Kirdeika.jpg"
},
{
Name = "I-A - Extracurricular Activity 2",
URL = "https://i.ibb.co/RQ6z0pj/Dunwich-1-Extracurricular-Activity-Joseph-Diaz.jpg"
},
{
Name = "I-A - Extracurricular Activity 3",
URL = "https://i.ibb.co/nnJdwL2/Dunwich-1-Extracurricular-Activity-Tomasz-Jedruszek.jpg"
},
{
Name = "I-B - House Always Wins 1",
URL = "https://i.ibb.co/8XPLdr9/Dunwich-2-House-Always-Wins-Jonny-Klein.jpg"
},
{
Name = "I-B - House Always Wins 2",
URL = "https://i.ibb.co/HtX95GK/Dunwich-2-House-Always-Wins-Robert-Laskey.jpg"
},
{
Name = "I-B - House Always Wins 3",
URL = "https://i.ibb.co/MCLP3Sz/Dunwich-2-House-Always-Wins-XX-l.jpg"
},
{
Name = "I-B - House Always Wins 4",
URL = "https://i.ibb.co/w7Pf5sd/Dunwich-2-House-Always-Wins-XX-l-2.jpg"
},
{
Name = "II - Miskatonic Museum 1",
URL = "https://i.ibb.co/x1Kf7qG/Dunwich-3-Miskatonic-Museum-Emre-Aktuna.jpg"
},
{
Name = "II - Miskatonic Museum 2",
URL = "https://i.ibb.co/yWXVPcN/Dunwich-3-Miskatonic-Museum-Richard-Wright.jpg"
},
{
Name = "III - Essex County Express",
URL = "https://i.ibb.co/602CMZb/Dunwich-4-Essex-County-Express-David-Alvarez.jpg"
},
{
Name = "IV - Blood on the Altar 1",
URL = "https://i.ibb.co/3CYHDhf/Dunwich-5-Blood-on-the-Altar.jpg"
},
{
Name = "IV - Blood on the Altar 2",
URL = "https://i.ibb.co/FbxcCY2/Dunwich-5-Blood-on-the-Altar-Chris-Ostrowski.jpg"
},
{
Name = "IV - Blood on the Altar 3",
URL = "https://i.ibb.co/sJf6YsZ/Dunwich-5-Blood-on-the-Altar-Lucas-Staniec.jpg"
},
{
Name = "IV - Blood on the Altar 4",
URL = "https://i.ibb.co/kBPNGBd/Dunwich-5-Blood-on-the-Altar-Mark-Molnar.jpg"
},
{
Name = "V - Undimensioned and Unseen 1",
URL = "https://i.ibb.co/QvfhjDv/Dunwich-6-Undimensioned-and-Unseen-Frej-Agelii.jpg"
},
{
Name = "V - Undimensioned and Unseen 2",
URL = "https://i.ibb.co/4VL9gSK/Dunwich-6-Undimensioned-and-Unseen-Lucas-Staniec.jpg"
},
{
Name = "V - Undimensioned and Unseen 3",
URL = "https://i.ibb.co/wBFsS8P/Dunwich-6-Undimensioned-and-Unseen-Michal-Teliga-jpg.jpg"
},
{
Name = "V - Undimensioned and Unseen 4",
URL = "https://i.ibb.co/wwGDcq6/Dunwich-6-Undimensioned-and-Unseen-Tomasz-Jedruszek.jpg"
},
{
Name = "VI - Where Doom Awaits 1",
URL = "https://i.ibb.co/TvMwqj4/Dunwich-7-Where-Doom-Awaits.jpg"
},
{
Name = "VI - Where Doom Awaits 2",
URL = "https://i.ibb.co/S6cSLH9/Dunwich-7-Where-Doom-Awaits-3.jpg"
},
{
Name = "VI - Where Doom Awaits 3",
URL = "https://i.ibb.co/khBX32g/Dunwich-7-Where-Doom-Awaits-4.jpg"
},
{
Name = "VI - Where Doom Awaits 4",
URL = "https://i.ibb.co/S0hcwN8/Dunwich-7-Where-Doom-Awaits-5.jpg"
},
{
Name = "VI - Where Doom Awaits 5",
URL = "https://i.ibb.co/Lxv1Bjp/Dunwich-7-Where-Doom-Awaits-Luca-Trentin.jpg"
},
{
Name = "VII - Lost in Time and Space 1",
URL = "https://i.ibb.co/rtTpbDx/Dunwich-8-Lost-in-Time-amp-Space.jpg"
},
{
Name = "VII - Lost in Time and Space 2",
URL = "https://i.ibb.co/dBXP0GL/Dunwich-8-Lost-in-Time-amp-Space-Chris-Ostrowski.jpg"
},
{
Name = "VII - Lost in Time and Space 3",
URL = "https://i.ibb.co/0XcnxFD/Dunwich-8-Lost-in-Time-amp-Space-Lino-Drieghe.jpg"
}
},
["The Path to Carcosa"] = {
{
Name = "I - Curtain Call",
URL = "https://i.ibb.co/TcnKXJD/Carcosa-1-Curtain-Call-Mark-Molnar.jpg"
},
{
Name = "II - Last King 1",
URL = "https://i.ibb.co/JRQJKR8/Carcosa-2-Last-King-Cristi-Balanescu.jpg"
},
{
Name = "II - Last King 2",
URL = "https://i.ibb.co/NZzBwgv/Carcosa-2-Last-King-Cristi-Balanescu-2.jpg"
},
{
Name = "II - Last King 3",
URL = "https://i.ibb.co/x56ZHt7/Carcosa-2-Last-King-Wu-Mengjia.jpg"
},
{
Name = "III - Echoes of the Past",
URL = "https://i.ibb.co/R6gSm0D/Carcosa-3-Echoes-of-the-Past-Heather-Savage.jpg"
},
{
Name = "IV - Unspeakable Oath 1",
URL = "https://i.ibb.co/DzzDQQQ/Carcosa-4-Unspeakable-Oath.jpg"
},
{
Name = "IV - Unspeakable Oath 2",
URL = "https://i.ibb.co/9gqBzXr/Carcosa-4-Unspeakable-Oath-2-Mark-Molnar.jpg"
},
{
Name = "IV - Unspeakable Oath 3",
URL = "https://i.ibb.co/wWL73c9/Carcosa-4-Unspeakable-Oath-Paul-Fairbairn.jpg"
},
{
Name = "V - Phantom of Truth 1",
URL = "https://i.ibb.co/mzpz1Dd/Carcosa-5-Phantom-of-Truth-Lucas-Staniec.jpg"
},
{
Name = "V - Phantom of Truth 2",
URL = "https://i.ibb.co/Vp1wNbT/Carcosa-5-Phantom-of-Truth-Tomasz-Jedruszek.jpg"
},
{
Name = "VI - Pallid Mask 1",
URL = "https://i.ibb.co/Bf5LByY/Carcosa-6-Pallid-Mask-Greg-Bobrowski.jpg"
},
{
Name = "VI - Pallid Mask 2",
URL = "https://i.ibb.co/1v1J9Xx/Carcosa-6-Pallid-Mask-Rafal-Pyra.jpg"
},
{
Name = "VII - Black Star Rises 1",
URL = "https://i.ibb.co/TB451t7/Carcosa-7-Black-Star-Rises-Audric-Gatoux.jpg"
},
{
Name = "VII - Black Star Rises 2",
URL = "https://i.ibb.co/nC8Ncxx/Carcosa-7-Black-Star-Rises-Chris-Kintner.jpg"
},
{
Name = "VIII - Dim Carcosa 1",
URL = "https://i.ibb.co/QvS4y3D/Carcosa-8-Dim-Carcosa-Alexandr-Elichev.jpg"
},
{
Name = "VIII - Dim Carcosa 2",
URL = "https://i.ibb.co/hR95x7k/Carcosa-8-Dim-Carcosa-Yuri-Shepherd.jpg"
}
},
["The Forgotten Age"] = {
{
Name = "I - Untamed Wilds 1",
URL = "https://i.ibb.co/BLhwCG1/Forgotten-Age-1-Untamed-Wilds-David-Frasheski.jpg"
},
{
Name = "I - Untamed Wilds 2",
URL = "https://i.ibb.co/SnJfsNy/Forgotten-Age-1-Untamed-Wilds-David-Frasheski-2.jpg"
},
{
Name = "I - Untamed Wilds 3",
URL = "https://i.ibb.co/kcx1tvp/Forgotten-Age-1-Untamed-Wilds-Ethan-Patrick-Harris.jpg"
},
{
Name = "I - Untamed Wilds 4",
URL = "https://i.ibb.co/HPbJwXk/Forgotten-Age-1-Untamed-Wilds-Lucas-Staniec.jpg"
},
{
Name = "I - Untamed Wilds 5",
URL = "https://i.ibb.co/bbq1ZrK/Forgotten-Age-1-Untamed-Wilds-Nele-Diel.jpg"
},
{
Name = "II - Doom of Etzli 1",
URL = "https://i.ibb.co/Pw4by4q/Forgotten-Age-2-Doom-of-Eztli-Cristi-Balanescu.jpg"
},
{
Name = "II - Doom of Etzli 2",
URL = "https://i.ibb.co/xqW6cXR/Forgotten-Age-2-Doom-of-Eztli-Greg-Bobrowski.jpg"
},
{
Name = "II - Doom of Etzli 3",
URL = "https://i.ibb.co/kgsC3pb/Forgotten-Age-2-Doom-of-Eztli-Nele-Diel.jpg"
},
{
Name = "III - Threads of Fate",
URL = "https://i.ibb.co/Bn0Pjng/Forgotten-Age-3-Threads-of-Fate-Jokubas-Uogintas.jpg"
},
{
Name = "IV - Boundary Beyond 1",
URL = "https://i.ibb.co/yPZ9v2X/Forgotten-Age-4-Boundary-Beyond-Greg-Bobrowski-2-jpg.jpg"
},
{
Name = "IV - Boundary Beyond 2",
URL = "https://i.ibb.co/vm0JgFs/Forgotten-Age-4-Boundary-Beyond-Greg-Bobrowski-jpg.jpg"
},
{
Name = "IV - Boundary Beyond 3",
URL = "https://i.ibb.co/D1rh9Ry/Forgotten-Age-4-Boundary-Beyond-Nele-Diel.jpg"
},
{
Name = "V - Heart of the Elders I-1",
URL = "https://i.ibb.co/jzKvv6P/Forgotten-Age-5-Heart-of-the-Elders-I-Lucas-Staniec.jpg"
},
{
Name = "V - Heart of the Elders I-2",
URL = "https://i.ibb.co/mR79MX4/Forgotten-Age-5-Heart-of-the-Elders-I-Lucas-Staniec-2.jpg"
},
{
Name = "V - Heart of the Elders II",
URL = "https://i.ibb.co/pQSbL0t/Forgotten-Age-5-Heart-of-the-Elders-II-Nele-Diel.jpg"
},
{
Name = "VI - City of Archives 1",
URL = "https://i.ibb.co/f04DSPb/Forgotten-Age-6-City-of-Archives.jpg"
},
{
Name = "VI - City of Archives 2",
URL = "https://i.ibb.co/WsSBrYj/Forgotten-Age-6-City-of-Archives-2.jpg"
},
{
Name = "VI - City of Archives 3",
URL = "https://i.ibb.co/qdPbSZ8/Forgotten-Age-6-City-of-Archives-Chris-Ostrowski.jpg"
},
{
Name = "VII - Depths of Yoth 1",
URL = "https://i.ibb.co/dbLKgGv/Forgotten-Age-7-Depths-of-Yoth-Diego-Arbetta.jpg"
},
{
Name = "VII - Depths of Yoth 2",
URL = "https://i.ibb.co/NW7Wp98/Forgotten-Age-7-Depths-of-Yoth-Greg-Bobrowski.jpg"
},
{
Name = "VII - Depths of Yoth 3",
URL = "https://i.ibb.co/257zr7c/Forgotten-Age-7-Depths-of-Yoth-Greg-Bobrowski-2-jpg.jpg"
},
{
Name = "VIII - Shattered Aeons 1",
URL = "https://i.ibb.co/KwnWTGR/Forgotten-Age-8-Shattered-Aeons.jpg"
},
{
Name = "VIII - Shattered Aeons 2",
URL = "https://i.ibb.co/b7kVd4F/Forgotten-Age-8-Shattered-Aeons-Alexandr-Elichev.jpg"
}
},
["The Circle Undone"] = {
{
Name = "0 - Prologue",
URL = "https://i.ibb.co/gm4C6yy/Circle-Undone-0-Prologue-Ted-Galaday.jpg"
},
{
Name = "I - Witching Hour",
URL = "https://i.ibb.co/kgJ34WS/Circle-Undone-1-Witching-Hour-Nele-Diel.jpg"
},
{
Name = "II - At Death's Doorstep 1",
URL = "https://i.ibb.co/qNWzH0Y/Circle-Undone-2-At-Death-039-s-Doorstep-Emilio-Rodriguez.jpg"
},
{
Name = "II - At Death's Doorstep 2",
URL = "https://i.ibb.co/T1zp1QN/Circle-Undone-2-At-Death-039-s-Doorstep-Emilio-Rodriguez-2.jpg"
},
{
Name = "II - At Death's Doorstep 3",
URL = "https://i.ibb.co/ZJfYZ1w/Circle-Undone-2-At-Death-039-s-Doorstep-Majid-Azim.jpg"
},
{
Name = "III - The Secret Name 1",
URL = "https://i.ibb.co/hsBw4JQ/Circle-Undone-3-Secret-Name-Jeff-Jumper.jpg"
},
{
Name = "III - The Secret Name 2",
URL = "https://i.ibb.co/MpcPXR5/Circle-Undone-3-Secret-Name-Pierre-Santamaria.jpg"
},
{
Name = "III - The Secret Name 3",
URL = "https://i.ibb.co/LQ8rdKs/Circle-Undone-3-The-Secret-Name-Greg-Bobrowski.jpg"
},
{
Name = "III - The Secret Name 4",
URL = "https://i.ibb.co/0D7LzxV/Circle-Undone-3-The-Secret-Name-Robert-Laskey.jpg"
},
{
Name = "IV - Wages of Sin 1",
URL = "https://i.ibb.co/fDMqH1C/Circle-Undone-4-Wages-of-Sin-Emilio-Rodriguez.jpg"
},
{
Name = "IV - Wages of Sin 2",
URL = "https://i.ibb.co/HDrKkZF/Circle-Undone-4-Wages-of-Sin-Emilio-Rodriguez-2.jpg"
},
{
Name = "IV - Wages of Sin 3",
URL = "https://i.ibb.co/vkpG8cM/Circle-Undone-4-Wages-of-Sin-Greg-Bobrowski.jpg"
},
{
Name = "IV - Wages of Sin 4",
URL = "https://i.ibb.co/CMj007q/Circle-Undone-4-Wages-of-Sin-Mateusz-Michalski.jpg"
},
{
Name = "IV - Wages of Sin 5",
URL = "https://i.ibb.co/sj1bS5x/Circle-Undone-4-Wages-of-Sin-Serge-Da-Silva-Dias.jpg"
},
{
Name = "V - For the Greater Good 1",
URL = "https://i.ibb.co/LDyqjbj/Circle-Undone-5-For-the-Greater-Good.jpg"
},
{
Name = "V - For the Greater Good 2",
URL = "https://i.ibb.co/pPzXNd1/Circle-Undone-5-For-the-Greater-Good-2.jpg"
},
{
Name = "V - For the Greater Good 3",
URL = "https://i.ibb.co/8rMLvJH/Circle-Undone-5-For-the-Greater-Good-Greg-Bobrowski.jpg"
},
{
Name = "V - For the Greater Good 4",
URL = "https://i.ibb.co/vj1q4Cm/Circle-Undone-5-For-the-Greater-Good-Robert-Laskey.jpg"
},
{
Name = "VI - Union and Disillusioned",
URL = "https://i.ibb.co/n7SD1tB/Circle-Undone-6-Union-amp-Disillusioned-Andreas-Rocha.jpg"
},
{
Name = "VII - In the Clutches of Chaos 1",
URL = "https://i.ibb.co/bFXBNh7/Circle-Undone-7-In-the-Clutches-of-Chaos.jpg"
},
{
Name = "VII - In the Clutches of Chaos 2",
URL = "https://i.ibb.co/m6DshNg/Circle-Undone-7-In-the-Clutches-of-Chaos-Alexandr-Elichev.jpg"
},
{
Name = "VII - In the Clutches of Chaos 3",
URL = "https://i.ibb.co/k2p4yfG/Circle-Undone-7-In-the-Clutches-of-Chaos-Jokubas-Uogintas.jpg"
},
{
Name = "VIII - Before the Black Throne 1",
URL = "https://i.ibb.co/9TPwvP6/Circle-Undone-8-Before-the-Black-Throne-Aaron-Luke-Wilson.jpg"
},
{
Name = "VIII - Before the Black Throne 2",
URL = "https://i.ibb.co/VNtgH4v/Circle-Undone-8-Before-the-Black-Throne-Greg-Bobrowski.jpg"
}
},
["The Dream-Eaters"] = {
{
Name = "I-A - Beyond the Gates of Sleep 1",
URL = "https://i.ibb.co/S6sCy7G/Dream-Eaters-1-A-Beyond-the-Gates-of-Sleep-Phoebe-Herring.jpg"
},
{
Name = "I-A - Beyond the Gates of Sleep 2",
URL = "https://i.ibb.co/kBfW9SC/Dream-Eaters-1-A-Beyond-the-Gates-of-Sleep-Regina-Kurnya.jpg"
},
{
Name = "I-A - Beyond the Gates of Sleep 3",
URL = "https://i.ibb.co/HGvnxdX/Dream-Eaters-1-A-Beyond-the-Gates-of-Sleep-Jason-Scheier.jpg"
},
{
Name = "I-B - Waking Nightmare",
URL = "https://i.ibb.co/sWsZCv8/Dream-Eaters-1-B-Waking-Nightmare-Josh-Gould-jpg.jpg"
},
{
Name = "II-A - Search for Kadath 1",
URL = "https://i.ibb.co/4SwzCD8/Dream-Eaters-2-A-Search-for-Kadath-Andrei-Khrutskii.jpg"
},
{
Name = "II-A - Search for Kadath 2",
URL = "https://i.ibb.co/WpZ4fMc/Dream-Eaters-2-A-Search-for-Kadath-Dan-Iorgulescu.jpg"
},
{
Name = "II-A - Search for Kadath 3",
URL = "https://i.ibb.co/jwsn0jf/Dream-Eaters-2-A-Search-for-Kadath-Diana-Tsareva.jpg"
},
{
Name = "II-A - Search for Kadath 4",
URL = "https://i.ibb.co/pd9vxmL/Dream-Eaters-2-A-Search-for-Kadath-Helen-Ilnytska.jpg"
},
{
Name = "II-A - Search for Kadath 5",
URL = "https://i.ibb.co/MZ7Qtcc/Dream-Eaters-2-A-Search-for-Kadath-Nele-Diel.jpg"
},
{
Name = "II-B - Thousand Shapes of Horror 1",
URL = "https://i.ibb.co/9s7M0PP/Dream-Eaters-2-B-Thousand-Shapes-of-Horror-Nele-Diel-2.jpg"
},
{
Name = "II-B - Thousand Shapes of Horror 2",
URL = "https://i.ibb.co/T4Pqx0H/Dream-Eaters-2-B-Thousand-Shapes-of-Horror-Nele-Diel.jpg"
},
{
Name = "II-B - Thousand Shapes of Horror 3",
URL = "https://i.ibb.co/VJFQVYd/Dream-Eaters-2-B-Thousand-Shapes-of-Horror-Greg-Bobrowski.jpg"
},
{
Name = "III-A - Dark Side of the Moon 1",
URL = "https://i.ibb.co/B2DfXLZ/Dream-Eaters-3-A-Dark-Side-of-the-Moon-Dabanli.jpg"
},
{
Name = "III-A - Dark Side of the Moon 2",
URL = "https://i.ibb.co/c27JRvv/Dream-Eaters-3-A-Dark-Side-of-the-Moon-Frej-Agelii.jpg"
},
{
Name = "III-B - Point of No Return 1",
URL = "https://i.ibb.co/dMGNB9Y/Dream-Eaters-3-B-Point-of-No-Return-Daria-Khlebnikova.jpg"
},
{
Name = "III-B - Point of No Return 2",
URL = "https://i.ibb.co/dpXxPmz/Dream-Eaters-3-B-Point-of-No-Return-Karine-Villette.jpg"
},
{
Name = "IV-A - Where the Gods Dwell",
URL = "https://i.ibb.co/v4nqw6G/Dream-Eaters-4-A-Where-the-Gods-Dwell-Samantha-Franco.jpg"
},
{
Name = "IV-B - Weaver of the Cosmos 1",
URL = "https://i.ibb.co/7btNBS1/Dream-Eaters-4-B-Weaver-of-the-Cosmos-Diana-Franco.jpg"
},
{
Name = "IV-B - Weaver of the Cosmos 2",
URL = "https://i.ibb.co/RY7y22b/Dream-Eaters-4-B-Weaver-of-the-Cosmos-Leanna-Crossan.jpg"
},
{
Name = "IV-B - Weaver of the Cosmos 3",
URL = "https://i.ibb.co/f8LBbFW/Dream-Eaters-4-B-Weaver-of-the-Cosmos-Nele-Diel.jpg"
}
},
["The Innsmouth Conspiracy"] = {
{
Name = "I - Pit of Despair 1",
URL = "https://i.ibb.co/2sc0F61/Innsmouth-1-Pit-of-Despair-Amanda-Castrillo.jpg"
},
{
Name = "I - Pit of Despair 2",
URL = "https://i.ibb.co/Nj9JLBQ/Innsmouth-1-Pit-of-Despair-J-Mill.jpg"
},
{
Name = "II - Vanishing of Elina Harper 1",
URL = "https://i.ibb.co/2j74cVn/Innsmouth-2-Vanishing-of-Elina-Harper-Konstantin-Vohwinkel.jpg"
},
{
Name = "II - Vanishing of Elina Harper 2",
URL = "https://i.ibb.co/r2VqHSn/Innsmouth-2-Vanishing-of-Elina-Harper-Mihail-Bila.jpg"
},
{
Name = "II - Vanishing of Elina Harper 3",
URL = "https://i.ibb.co/hFQMm7N/Innsmouth-2-Vanishing-of-Elina-Harper-Richard-Wright.jpg"
},
{
Name = "II - Vanishing of Elina Harper 4",
URL = "https://i.ibb.co/2nZKGN6/Innsmouth-2-Vanishing-of-Elina-Harper-Tomasz-Jedruszek-1.jpg"
},
{
Name = "II - Vanishing of Elina Harper 5",
URL = "https://i.ibb.co/WxLpKrM/Innsmouth-2-Vanishing-of-Elina-Harper-Tomasz-Jedruszek-2.jpg"
},
{
Name = "III - In Too Deep 1",
URL = "https://i.ibb.co/SsQ3my4/Innsmouth-3-In-Too-Deep-David-Frasheski.jpg"
},
{
Name = "III - In Too Deep 2",
URL = "https://i.ibb.co/jgQ8zQN/Innsmouth-3-In-Too-Deep-Klaudia-Bezak.jpg"
},
{
Name = "III - In Too Deep 3",
URL = "https://i.ibb.co/VVgtNM1/Innsmouth-3-In-Too-Deep-Patrik-Antonescu.jpg"
},
{
Name = "IV - Devil Reef 1",
URL = "https://i.ibb.co/Jrf6CJ0/Innsmouth-4-Devil-Reef-Ludovic-Sanson.jpg"
},
{
Name = "IV - Devil Reef 2",
URL = "https://i.ibb.co/4jfwDZR/Innsmouth-4-Devil-Reef-Marc-Stewart.jpg"
},
{
Name = "V - Horror in High Gear 1",
URL = "https://i.ibb.co/vqYJjYJ/Innsmouth-5-Horror-in-High-Gear-Greg-Bobrowski.jpg"
},
{
Name = "V - Horror in High Gear 2",
URL = "https://i.ibb.co/yYrzbYS/Innsmouth-5-Horror-in-High-Gear-Greg-Bobrowski-2.jpg"
},
{
Name = "V - Horror in High Gear 3",
URL = "https://i.ibb.co/fpKWhGY/Innsmouth-5-Horror-in-High-Gear-Guillem-H-Pongiluppi.jpg"
},
{
Name = "V - Horror in High Gear 4",
URL = "https://i.ibb.co/YkLFy7y/Innsmouth-5-Horror-in-High-Gear-Rostyslav-Zagornov.jpg"
},
{
Name = "VI - Light in the Fog 1",
URL = "https://i.ibb.co/v1rhgqJ/Innsmouth-6-Light-in-the-Fog-Florian-Aupetit.jpg"
},
{
Name = "VI - Light in the Fog 2",
URL = "https://i.ibb.co/Db2pRd6/Innsmouth-6-Light-in-the-Fog-JB-Caillet.jpg"
},
{
Name = "VII - Lair of Dagon 1",
URL = "https://i.ibb.co/QPwzQL5/Innsmouth-7-Lair-of-Dagon-Daria-Khlebnikova.jpg"
},
{
Name = "VII - Lair of Dagon 2",
URL = "https://i.ibb.co/MZBpCbs/Innsmouth-7-Lair-of-Dagon-Guillem-H-Pongiluppi.jpg"
},
{
Name = "VIII - Into the Maelstrom 1",
URL = "https://i.ibb.co/fkSXDgs/Innsmouth-8-Into-the-Maelstrom-Dimitri-Bielak.jpg"
},
{
Name = "VIII - Into the Maelstrom 2",
URL = "https://i.ibb.co/k56Dn9q/Innsmouth-8-Into-the-Maelstrom-Mateusz-Michalski.jpg"
}
},
["Edge of the Earth"] = {
{
Name = "I - Ice and Death 1",
URL = "https://i.ibb.co/FWZMWtW/Edge-1-Ice-and-Death-David-Frasheski.png"
},
{
Name = "I - Ice and Death 2",
URL = "https://i.ibb.co/QDGV0jQ/Edge-1-Ice-and-Death-Felix-Riano.png"
},
{
Name = "I - Ice and Death 3",
URL = "https://i.ibb.co/hFJQM8v/Edge-1-Ice-and-Death-Mike-Gizienski.png"
},
{
Name = "??? - Fatal Mirage",
URL = "https://i.ibb.co/KzwvjJN/Edge-2-Fatal-Mirage-David-Frasheski.png"
},
{
Name = "II - Forbidden Peaks 1",
URL = "https://i.ibb.co/C2SLByt/Edge-2-Forbidden-Peaks-David-Frasheski-2.png"
},
{
Name = "II - Forbidden Peaks 2",
URL = "https://i.ibb.co/0cGkkBL/Edge-3-Forbidden-Peaks-David-Frasheski.png"
},
{
Name = "III - City of Elder Things 1",
URL = "https://i.ibb.co/FbpgBD3/Edge-4-City-Francois-Baranger.png"
},
{
Name = "III - City of Elder Things 2",
URL = "https://i.ibb.co/ncRvHr3/Edge-4-City-Francois-Baranger-2.png"
},
{
Name = "IV - Heart of Madness 1",
URL = "https://i.ibb.co/rk0qR4z/Edge-5-Heart-of-Madness-Karol-Sollich.png"
},
{
Name = "IV - Heart of Madness 2",
URL = "https://i.ibb.co/NVFjx6N/Edge-5-Heart-of-Madness-Miguel-Coimbra.png"
}
},
["The Scarlet Keys"] = {
{
Name = "5-A Riddles and Rain",
URL = "http://cloud-3.steamusercontent.com/ugc/2037357792057358580/E9E5FE4028C08B3D4883406821221B73C8B5B2C7/"
},
{
Name = "11-B Dead Heat",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566443853/CAD7771D90141EA6D5FFAFE1EC5E7AD9647C82DB/"
},
{
Name = "16-D Sanguine Shadows",
URL = "http://cloud-3.steamusercontent.com/ugc/2037357792057358704/4A7261EB31511467CBC46E876476DD205F528A4B/"
},
{
Name = "21-F Dealings in the Dark",
URL = "http://cloud-3.steamusercontent.com/ugc/2037357792057358816/7C9FE4C34CD0A7AE87EF054742D878F310C71AA7/"
},
{
Name = "28-I Dancing Mad",
URL = "http://cloud-3.steamusercontent.com/ugc/2037357792056955518/EAB857DD5629EC6A3078FB0A3A703B85B5F514B9/"
},
{
Name = "23-K On Thin Ice",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444026/EB5628E254AE25DA89A9C999EAAD995ECF67068E/"
},
{
Name = "38-N Dogs of War",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444199/194FD9A713907197471A55411AE300B62C5F5278/"
},
{
Name = "46-Q Shades of Suffering",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444330/3ED2CCE95DE933546E1B5CBBF445D773E6D65465/"
},
{
Name = "56-Y ???",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444450/FE4C335B0F72E83900A4EED0FD1A1D304D70D6B7/"
},
{
Name = "59-Z Congress of Keys I",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444576/5BB32469ED412D59BB0A46E57D226500B1D0568B/"
},
{
Name = "59-Z Congress of Keys II",
URL = "http://cloud-3.steamusercontent.com/ugc/2038485431566444690/B01A1FEAB57473D9B6DF11B92D62C214AA1C2C02/"
}
}
},
["Official Scenarios"] = {
["The Blob That Ate Everything"] = {
{
Name = "The Blob That Ate Everything 1",
URL = "https://i.ibb.co/JxFV4ZN/Blob-That-Ate-Everything-Emilio-Rodriguez.jpg"
},
{
Name = "The Blob That Ate Everything 2",
URL = "https://i.ibb.co/qJzstWF/Blob-That-Ate-Everything-Emilio-Rodriguez.jpg"
}
},
["Carnevale of Horrors"] = {
{
Name = "Carnevale of Horrors 1",
URL = "https://i.ibb.co/ZchJBpz/Carnevale-of-Horrors.jpg"
},
},
["Curse of the Rougarou"] = {
{
Name = "Curse of the Rougarou 1",
URL = "https://i.ibb.co/Qf7Sr7P/Curse-of-the-Rougarou.jpg"
},
{
Name = "Curse of the Rougarou 2",
URL = "https://i.ibb.co/hs1Qjp0/Curse-of-the-Rougarou-Ann-Kovaleva.jpg"
},
{
Name = "Curse of the Rougarou 3",
URL = "https://i.ibb.co/BK7rmJ9/Curse-of-the-Rougarou-Karine-Villette.jpg"
},
{
Name = "Curse of the Rougarou 4",
URL = "https://i.ibb.co/ZxGTC1w/Curse-of-the-Rougarou-Lachlan-Page.jpg"
},
{
Name = "Curse of the Rougarou 5",
URL = "https://i.ibb.co/HgNXJhW/Curse-of-the-Rougarou-Vladimir-Manyukhin.jpg"
}
},
["Guardians of the Abyss"] = {
{
Name = "Guardians of the Abyss 1",
URL = "https://i.ibb.co/gD3R6cw/Guardians-of-the-Abyss-Jake-Murray.jpg"
},
{
Name = "Guardians of the Abyss 2",
URL = "https://i.ibb.co/jMHPcvz/Guardians-of-the-Abyss-Jose-Vega.jpg"
},
{
Name = "Guardians of the Abyss 3",
URL = "https://i.ibb.co/99pqXQP/Guardians-of-the-Abyss-Koke-Nunez.jpg"
},
{
Name = "Guardians of the Abyss 4",
URL = "https://i.ibb.co/QbMvjbx/Guardians-of-the-Abyss-Mike-Szabados.jpg"
},
{
Name = "Guardians of the Abyss 5",
URL = "https://i.ibb.co/zFDt9Q8/Guardians-of-the-Abyss-Nele-Diel.jpg"
},
{
Name = "Guardians of the Abyss 6",
URL = "https://i.ibb.co/Vpzptmt/Guardians-of-the-Abyss-Yujin-Choo.jpg"
}
},
["Labyrinths of Lunacy"] = {
{
Name = "Labyrinths of Lunacy 1",
URL = "https://i.ibb.co/f17PMCC/Labyrinths-of-Lunacy-Cordelia-Wolf.jpg"
},
{
Name = "Labyrinths of Lunacy 2",
URL = "https://i.ibb.co/44DXfWw/Labyrinths-of-Lunacy-Richard-Wright.jpg"
},
{
Name = "Labyrinths of Lunacy 3",
URL = "https://i.ibb.co/jMQhs68/Labyrinths-of-Lunacy-Robert-Berg.jpg"
}
},
["Murder at Excelsior Hotel"] = {
{
Name = "Murder at Excelsior Hotel 1",
URL = "https://i.ibb.co/5cQ6LvN/Murder-at-Excelsior-Hotel-Alistair-Mitchell.jpg"
},
{
Name = "Murder at Excelsior Hotel 2",
URL = "https://i.ibb.co/vBQRHNS/Murder-at-Excelsior-Hotel-Romain-Bayle.jpg"
}
},
["War of the Outer Gods"] = {
{
Name = "War of the Outer Gods",
URL = "https://i.ibb.co/wLNGFTG/War-of-the-Outer-Gods-Joshua-Cairos.jpg"
}
}
},
["Fan-Made Campaigns"] = {
["Cyclopean Foundations"] = {
{
Name = "I - Lost Moorings 1",
URL = "https://i.ibb.co/DQ76z3c/Cyclopean-1-Lost-Moorings-Care-Line-Art.png"
},
{
Name = "I - Lost Moorings 2",
URL = "https://i.ibb.co/c6LJNfr/Cyclopean-1-Lost-Moorings-Jake-Murray.png"
},
{
Name = "II - Going Twice",
URL = "https://i.ibb.co/P6h3vbm/Cyclopean-2-Going-Twice-Quentin-Bouilloud.png"
},
{
Name = "III - Private Lives",
URL = "https://i.ibb.co/9qK9Fzd/Cyclopean-3-Private-Lives-Christian-Bravery.png"
},
{
Name = "IV - Crumbling Masonry 1",
URL = "https://i.ibb.co/pdrGK6p/Cyclopean-4-Crumbling-Masonry-Pete-Amachree.png"
},
{
Name = "IV - Crumbling Masonry 2",
URL = "https://i.ibb.co/5RFcGyP/Cyclopean-4-Crumbling-Masonry-Simon-Craghead.png"
},
{
Name = "V - Across Dreadful Waters",
URL = "https://i.ibb.co/3mYfFNB/Cyclopean-5-Across-Dreadful-Waters-Ev-Shipard.png"
},
{
Name = "VI - Blood From Stones",
URL = "https://i.ibb.co/ynmQNSB/Cyclopean-6-Blood-From-Stones-Marc-Simonetti.png"
},
{
Name = "VII - Pyroclastic Flow 1",
URL = "https://i.ibb.co/s1JDkFv/Cyclopean-7-Pyroclastic-Flow-Bastien-Grivet.png"
},
{
Name = "VII - Pyroclastic Flow 2",
URL = "https://i.ibb.co/qs8Sk2N/Cyclopean-7-Pyroclastic-Flow-Rachid-Lotf.png"
},
{
Name = "VIII - Tomb of Dead Dreams 1",
URL = "https://i.ibb.co/0MwX460/Cyclopean-8-Tomb-of-Dead-Dreams-Guillem-H-Pongiluppi.png"
},
{
Name = "VIII - Tomb of Dead Dreams 2",
URL = "https://i.ibb.co/mGnKNcy/Cyclopean-8-Tomb-of-Dead-Dreams-Richard-Benning.png"
},
{
Name = "VIII - Tomb of Dead Dreams 3",
URL = "https://i.ibb.co/vmBM8x2/Cyclopean-8-Tomb-of-Dead-Dreams-Walter-Brocca.png"
}
},
["Dark Matter"] = {
{
Name = "I - Tatterdemalion 1",
URL = "https://i.ibb.co/DRMPGVt/Dark-Matter-1-Tatterdemalion-Andrey-Vozny.jpg"
},
{
Name = "I - Tatterdemalion 2",
URL = "https://i.ibb.co/1JzrrX2/Dark-Matter-1-Tatterdemalion-Brian-Taylor.jpg"
},
{
Name = "I - Tatterdemalion 3",
URL = "https://i.ibb.co/DzvvgGf/Dark-Matter-1-Tatterdemalion-John-Wallin-Liberto.jpg"
},
{
Name = "I - Tatterdemalion 4",
URL = "https://i.ibb.co/sQf85b8/Dark-Matter-1-Tatterdemalion-Paul-Pepera.jpg"
},
{
Name = "II - Electric Nightmares 1",
URL = "https://i.ibb.co/hLGVBt7/Dark-Matter-2-Electric-Nightmares-Dean-Lawrence.jpg"
},
{
Name = "II - Electric Nightmares 2",
URL = "https://i.ibb.co/cTKZQ61/Dark-Matter-2-Electric-Nightmares-Robert-Thoma.jpg"
},
{
Name = "IIIa - Lost Quantum",
URL = "https://i.ibb.co/6vyXv90/Dark-Matter-3-Lost-Quantum-Michael-Rajecki.jpg"
},
{
Name = "IIIb - In the Shadow of Earth 1",
URL = "https://i.ibb.co/DfbTKHP/Dark-Matter-4-In-the-Shadow-of-Earth-Jihoo-Kim.jpg"
},
{
Name = "IIIb - In the Shadow of Earth 2",
URL = "https://i.ibb.co/MCvPmCb/Dark-Matter-4-In-the-Shadow-of-Earth-N5-Luckybuuncle.jpg"
},
{
Name = "IIIc - Strange Moons",
URL = "https://i.ibb.co/b2d8qvg/Dark-Matter-5-Strange-Moons-Hongyu-Yin.jpg"
},
{
Name = "V - Fragment of Carcosa 1",
URL = "https://i.ibb.co/7WnTyYT/Dark-Matter-7-Fragment-of-Carcosa-Colin-Moore.jpg"
},
{
Name = "V - Fragment of Carcosa 2",
URL = "https://i.ibb.co/mG2Brrd/Dark-Matter-7-Fragments-of-Carcosa-Matthieu-Rebuffat.jpg"
},
{
Name = "VI - Starfall 1",
URL = "https://i.ibb.co/CJ3LKL7/Dark-Matter-8-Starfall-Vadim-Sadovski.jpg"
},
{
Name = "VI - Starfall 2",
URL = "https://i.ibb.co/Njd1FcB/Dark-Matter-8-Starfall-Vadim-Sadovski-2.jpg"
},
{
Name = "VI - Starfall 3",
URL = "https://i.ibb.co/W0Cx7bb/Dark-Matter-8-Starfall-Vadim-Sadovski-3.jpg"
}
},
["The Ghosts of Onigawa"] = {
{
Name = "I - The Ghosts of Onigawa",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-01.png?raw=true"
},
{
Name = "II - In The Shadow Of Mount Kokoro",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-02.png?raw=true"
},
{
Name = "III - The Onigawa River",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-03.png?raw=true"
},
{
Name = "IV - The Crimson Butterfly",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-04.png?raw=true"
},
{
Name = "V - The Koi Conspiracy",
URL = "https://github.com/ArkhamDotCards/theghostsofonigawa/blob/main/product/onigawa-playmat-05.png?raw=true"
}
}
},
["Fan-Made Scenarios"] = {
["Side Scenarios (FM)"] = {
{
Name = "Consternation on the Constellation",
URL = "https://i.ibb.co/Tw2xBP1/Consternation-Constellation.jpg"
},
{
Name = "Symphony of Erich Zann",
URL = "https://i.ibb.co/SNr8tqN/Symphony-of-Erich-Zann-Hazel-Yingling.jpg"
}
}
},
["Other Images"] = {
["Arkham Locations"] = {
{
Name = "Downtown 1",
URL = "https://i.ibb.co/FzRk98n/Arkham-Downtown-Cristi-Balanescu.jpg"
},
{
Name = "Downtown 2",
URL = "https://i.ibb.co/W2yJ5QZ/Arkham-Downtown-Jokubas-Uogintas.jpg"
},
{
Name = "Eastside 1",
URL = "https://i.ibb.co/W3QvdZW/Arkham-Eastside-Cristi-Balanescu.jpg"
},
{
Name = "Eastside 2",
URL = "https://i.ibb.co/xfn1Fp8/Arkham-Eastside-Jokubas-Uogintas.jpg"
},
{
Name = "French Hill",
URL = "https://i.ibb.co/N7Lk7jc/Arkham-French-Hill-Cristi-Balanescu.jpg"
},
{
Name = "Merchant District",
URL = "https://i.ibb.co/HTNCCq4/Arkham-Merchant-District-Jokubas-Uogintas.jpg"
},
{
Name = "Generic 1",
URL = "https://i.ibb.co/hswfZD6/Arkham-Guillem-H-Pongiluppi.jpg"
},
{
Name = "Generic 2",
URL = "https://i.ibb.co/5h5cMyF/Arkham-Guillem-H-Pongiluppi-2.jpg"
},
{
Name = "Generic 3",
URL = "https://i.ibb.co/ZBdVsWt/Arkham-Guillem-H-Pongiluppi-3.jpg"
},
{
Name = "Generic 4",
URL = "https://i.ibb.co/6NwbM59/Arkham-Michele-Botticelli.jpg"
},
{
Name = "Generic 5",
URL = "https://i.ibb.co/N6sxyq5/Arkham-Mihail-Bila.jpg"
},
{
Name = "Generic 6",
URL = "https://i.ibb.co/B393zxv/Arkham-Tomasz-Jedruszek.jpg"
},
{
Name = "Generic 7",
URL = "https://i.ibb.co/2WQ2Vt6/Arkham-Tomasz-Jedruszek-2.jpg"
},
{
Name = "Generic 8",
URL = "https://i.ibb.co/R7pQ9Y7/Arkham-Tomasz-Jedruszek-3.jpg"
},
{
Name = "Miskatonic University",
URL = "https://i.ibb.co/ncz9xjP/Arkham-Miskatonic-University-Jokubas-Uogintas.jpg"
},
{
Name = "Northside",
URL = "https://i.ibb.co/sVWx1R3/Arkham-Northside-Jokubas-Uogintas.jpg"
},
{
Name = "Rivertown",
URL = "https://i.ibb.co/RyJnHmz/Arkham-Rivertown-Jokubas-Uogintas.jpg"
},
{
Name = "Southside",
URL = "https://i.ibb.co/5GW5jg5/Arkham-Southside-Jokubas-Uogintas.jpg"
},
{
Name = "Uptown",
URL = "https://i.ibb.co/YXjvkMn/Arkham-Uptown-Jokubas-Uogintas.jpg"
}
},
["Default Image"] = {
{
Name = "Default Image",
URL = "http://cloud-3.steamusercontent.com/ugc/998015670465071049/FFAE162920D67CF38045EFBD3B85AD0F916147B2/"
}
},
["Unsorted"] = {
{
Name = "Kingsport",
URL = "https://i.ibb.co/rbkk7ys/Kingsport-Tomasz-Jedruszek.jpg"
}
}
}
}

View File

@ -1,80 +1,148 @@
require("core/PlayAreaImageData") -- this fills the variable "PLAYAREA_IMAGE_DATA"
local playAreaApi = require("core/PlayAreaApi") local playAreaApi = require("core/PlayAreaApi")
local typeIndex, selectionIndex
local controlActive = false function onSave() return JSON.encode({typeIndex = typeIndex, selectionIndex = selectionIndex}) end
-- parameters for open/close button for reusing function onLoad(savedData)
local buttonParameters = {} self.createButton({
buttonParameters.function_owner = self function_owner = self,
buttonParameters.click_function = "click_toggleControl" click_function = "onClick_toggleGallery",
buttonParameters.height = 1500 tooltip = "Show Image Gallery",
buttonParameters.width = 1500 height = 1500,
buttonParameters.color = { 1, 1, 1, 0 } width = 1500,
color = { 1, 1, 1, 0 }
})
function onLoad() local loadedData = JSON.decode(savedData) or {}
createOpenCloseButton() typeIndex = loadedData.typeIndex or 1
selectionIndex = loadedData.selectionIndex or 1
Wait.time(updatePlayareaGallery, 0.5)
end end
-- click function for main button -- click function for main button
function click_toggleControl() function onClick_toggleGallery()
self.clearButtons() Global.call("togglePlayareaGallery")
self.clearInputs()
controlActive = not controlActive
createOpenCloseButton()
if not controlActive then return end
-- creates the label, input box and apply button
self.createButton({
function_owner = self,
label = "Playmat Image Swapper",
tooltip = "",
click_function = "none",
position = { 0, 0.15, 2.2 },
height = 0,
width = 0,
font_size = 300,
font_color = { 1, 1, 1 }
})
self.createInput({
function_owner = self,
label = "URL",
tooltip = "Enter URL for playmat image",
input_function = "none",
alignment = 3,
position = { 0, 0.15, 3 },
height = 323,
width = 4000,
font_size = 300
})
self.createButton({
function_owner = self,
label = "Apply Image\nTo Playmat",
tooltip = "Left-Click: Apply URL\nRight-Click: Reset to default image",
click_function = "click_applySurface",
position = { 0, 0.15, 4.1 },
height = 460,
width = 1400,
font_size = 200
})
end end
-- click function for apply button function onClick_defaultImage()
function click_applySurface(_, _, isRightClick) playAreaApi.updateSurface()
playAreaApi.updateSurface(isRightClick and "" or self.getInputs()[1].value) Global.call("togglePlayareaGallery")
end end
function updateSurface(newURL) function getDataSubTableByIndex(dataTable, index)
local loopId = 1
for i, v in pairs(dataTable) do
if index == loopId then return v end
loopId = loopId + 1
end
return {}
end
function updatePlayareaGallery()
-- get subtables
local dataForType = getDataSubTableByIndex(PLAYAREA_IMAGE_DATA, typeIndex)
local dataForSelection = getDataSubTableByIndex(dataForType, selectionIndex)
-- get global xml to insert elements
local globalXml = UI.getXmlTable()
-- selectable items
local itemSelection = getXmlTableElementById(globalXml, 'itemSelection')
itemSelection.children = {}
local i = 0
for itemName, _ in pairs(dataForType) do
i = i + 1
table.insert(itemSelection.children,
{
tag = "Panel",
attributes = { class = "itemPanel", id = "typePanel" .. i },
children = {
tag = "Text",
value = itemName,
attributes = { class = "itemText", id = "typeListText" .. i }
}
})
end
-- selectable images for that item
local playareaList = getXmlTableElementById(globalXml, 'playareaList')
playareaList.children = {}
for i, v in ipairs(dataForSelection) do
table.insert(playareaList.children,
{
tag = "VerticalLayout",
attributes = { class = "imageBox", id = "image" .. i },
children = {
{
tag = 'Image',
attributes = { class = "playareaImage", image = v.URL }
},
{
tag = 'Text',
value = v.Name,
attributes = { class = "imageName" }
}
}
})
end
playareaList.attributes.height = round(#playareaList.children / 2, 0) * 380
UI.setXmlTable(globalXml)
Wait.time(highlightTabAndItem, 0.1)
end
function onClick_imageTab(_, _, tabId)
typeIndex = tonumber(tabId:sub(9))
selectionIndex = 1
updatePlayareaGallery()
end
function onClick_listItem(_, _, listId)
selectionIndex = tonumber(listId:sub(10))
updatePlayareaGallery()
end
function onClick_image(_, _, id)
local imageIndex = tonumber(id:sub(6))
local dataForType = getDataSubTableByIndex(PLAYAREA_IMAGE_DATA, typeIndex)
local dataForSelection = getDataSubTableByIndex(dataForType, selectionIndex)
local newURL = dataForSelection[imageIndex].URL
playAreaApi.updateSurface(newURL) playAreaApi.updateSurface(newURL)
Global.call("togglePlayareaGallery")
end end
-- input function for the input box function highlightTabAndItem()
function none() end -- highlight active tab
for i = 1, 5 do
local color = "#888888"
if i == typeIndex then color = "#ffffff" end
UI.setAttribute("imageTab" .. i, "color", color)
end
-- creates the main button -- highlight item
function createOpenCloseButton() UI.setAttribute("typePanel" .. selectionIndex, "color", "grey")
buttonParameters.tooltip = (controlActive and "Close" or "Open") .. " Playmat Panel" UI.setAttribute("typeListText" .. selectionIndex, "color", "black")
self.createButton(buttonParameters) end
-- loops through an XML table and returns the specified object
---@param ui Table XmlTable (get this via getXmlTable)
---@param id String Id of the object to return
function getXmlTableElementById(ui, id)
for _, obj in ipairs(ui) do
if obj.attributes and obj.attributes.id and obj.attributes.id == id then return obj end
if obj.children then
local result = getXmlTableElementById(obj.children, id)
if result then return result end
end
end
return nil
end
-- utility function
function round(num, numDecimalPlaces)
local mult = 10 ^ (numDecimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end end

View File

@ -6,6 +6,7 @@
<Include src="Global/BottomBar.xml"/> <Include src="Global/BottomBar.xml"/>
<Include src="Global/DownloadWindow.xml"/> <Include src="Global/DownloadWindow.xml"/>
<Include src="Global/PlayareaGallery.xml"/>
<Include src="Global/TitleSplash.xml"/> <Include src="Global/TitleSplash.xml"/>
<Include src="Global/NavigationOverlay.xml"/> <Include src="Global/NavigationOverlay.xml"/>
<Include src="Global/OptionPanel.xml"/> <Include src="Global/OptionPanel.xml"/>

View File

@ -275,20 +275,6 @@
</Cell> </Cell>
</Row> </Row>
<!-- Option: show custom playmat images -->
<Row class="option-text"
tooltip="Places a tool that displays custom playmat images&#xA;for all cycles in a gallery-like fashion.">
<Cell class="option-text">
<Panel class="option-wrapper">
<Text class="option-header">Custom Playmat Images</Text>
</Panel>
</Cell>
<Cell class="option-button">
<Toggle id="showCustomPlaymatImages"
onValueChanged="onClick_toggleOption(showCustomPlaymatImages)"/>
</Cell>
</Row>
<!-- Option: show CYOA campaign guides --> <!-- Option: show CYOA campaign guides -->
<Row class="option-text" <Row class="option-text"
tooltip="Displays in a 'Choose Your Own Adventure'&#xA;style redesigned campaign guides."> tooltip="Displays in a 'Choose Your Own Adventure'&#xA;style redesigned campaign guides.">

View File

@ -0,0 +1,122 @@
<Defaults>
<!-- type selection at the top -->
<Button class="imageTab"
hoverClass="bGrey"
pressClass="bWhite"
onClick="b7b45b/onClick_imageTab"
color="#888888"
fontSize="24"
font="font_teutonic-arkham"/>
<Button class="bGrey"
color="grey"/>
<Button class="bWhite"
color="white"/>
<!-- image boxes in the grid -->
<VerticalLayout class="imageBox"
color="black"
outline="#303030"
outlineSize="2 2"
onClick="b7b45b/onClick_image"/>
<Image class="playareaImage"
preferredHeight="330"/>
<Text class="imageName"
preferredHeight="40"
resizeTextForBestFit="true"
resizeTextMinSize="10"
resizeTextMaxSize="18"/>
<!-- item selection on the left -->
<Text class="itemText"
alignment="MiddleLeft"/>
<Panel class="itemPanel"
preferredHeight="45"
onClick="b7b45b/onClick_listItem"/>
<!-- other -->
<Text class="headerText"
fontSize="35"/>
<VerticalLayout childForceExpandHeight="false"/>
</Defaults>
<VerticalLayout id="playareaGallery"
active="false"
color="black"
height="880"
width="900"
outlineSize="2 2"
outline="#303030">
<!-- window header -->
<Panel preferredHeight="60"
padding="10 10 5 5"
spacing="10"
outlineSize="2 2"
outline="#303030"
color="black">
<Text fontSize="32"
font="font_teutonic-arkham"
preferredWidth="600"
alignment="MiddleLeft">Playarea Image Gallery</Text>
<Panel preferredWidth="50">
<Button rectAlignment="MiddleRight"
width="50"
color="clear"
icon="close"
tooltip="Close"
tooltipPosition="Right"
tooltipBackgroundColor="rgba(0,0,0,1)"
onClick="onClick_toggleUi(playareaGallery)"/>
</Panel>
</Panel>
<!-- tab selection -->
<HorizontalLayout preferredHeight="60"
padding="5"
spacing="5">
<Button class="imageTab"
id="imageTab1">Official Campaigns</Button>
<Button class="imageTab"
id="imageTab2">Official Scenarios</Button>
<Button class="imageTab"
id="imageTab3">Fan-Made Campaigns</Button>
<Button class="imageTab"
id="imageTab4">Fan-Made Scenarios</Button>
<Button class="imageTab"
id="imageTab5">Other Images</Button>
</HorizontalLayout>
<HorizontalLayout preferredHeight="760">
<!-- left column: navigation bar -->
<VerticalLayout id="itemSelection"
preferredWidth="180"
padding="10 15 0 0">
<!-- this will be filled via scripting -->
<!-- <Panel class="itemPanel">
<Text class="itemText">Item</Text>
</Panel> -->
</VerticalLayout>
<!-- right column: image gallery -->
<VerticalScrollView color="transparent"
minHeight="100"
flexibleHeight="100"
preferredWidth="720"
scrollSensitivity="380"
scrollbarColors="grey|grey|#C8C8C8|rgba(0.78,0.78,0.78,0.5)"
horizontalScrollbarVisibility="AutohideAndExpandViewport"
raycastTarget="true">
<GridLayout id="playareaList"
preferredWidth="700"
padding="25 25 5 5"
spacing="10"
cellSize="330 370">
<!-- this will be filled via scripting -->
<!-- <VerticalLayout class="imageBox">
<Image class="playareaImage" image=""/>
<Text class="imageName">Image Name</Text>
</VerticalLayout> -->
</GridLayout>
</VerticalScrollView>
</HorizontalLayout>
</VerticalLayout>