Added Featured Content
Added featured content section containing featured fan campaigns. also updated date on release notes. Note that this commit has many files added as part of the two fan campaigns, as they have been "pre-downloaded"
This commit is contained in:
parent
ecfd765806
commit
9614ebcb37
@ -192,7 +192,10 @@
|
||||
"OptionPanelSource.830bd0",
|
||||
"SoundCube.3c988f",
|
||||
"GameKeyHandler.fce69c",
|
||||
"ArkhamSCE310-4172023-Page1.e1b8df"
|
||||
"ArkhamSCE310-4202023-Page1.e1b8df",
|
||||
"3DText.d628cc",
|
||||
"TheColourOutofOz.be7d21",
|
||||
"Bloodborne-CityoftheUnseen0175.81651b"
|
||||
],
|
||||
"PlayArea": 1,
|
||||
"PlayerCounts": [
|
||||
|
@ -331,13 +331,6 @@
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"x": -27,
|
||||
"y": 1.481,
|
||||
"z": -71
|
||||
}
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"x": -56.245,
|
||||
@ -356,5 +349,12 @@
|
||||
"y": 1.481,
|
||||
"z": -87
|
||||
}
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"x": -27,
|
||||
"y": 1.481,
|
||||
"z": -56.165
|
||||
}
|
||||
}
|
||||
]
|
||||
|
54
objects/3DText.d628cc.json
Normal file
54
objects/3DText.d628cc.json
Normal file
@ -0,0 +1,54 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "d628cc",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": true,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "3DText",
|
||||
"Nickname": "",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Text": {
|
||||
"Text": "Featured Fan Content",
|
||||
"colorstate": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"fontSize": 84
|
||||
},
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -19.567,
|
||||
"posY": 1.697,
|
||||
"posZ": -83.387,
|
||||
"rotX": 90,
|
||||
"rotY": 90,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
272
objects/ArkhamSCE310-4202023-Page1.e1b8df.json
Normal file
272
objects/ArkhamSCE310-4202023-Page1.e1b8df.json
Normal file
@ -0,0 +1,272 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"Description": "- Thanks for downloading Arkham SCE 3.1.0! This update didn't coincide with any particular official release, but contains a variety of quality of life additions and feature updates.\n\n- Additionally, many fan-created scenarios have been added or updated since the previous release, though they are also available in version 3.0 via the download menu.",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "e1b8df",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Notecard",
|
||||
"Nickname": "Arkham SCE 3.1.0 - 4/20/2023 - Page 1",
|
||||
"Snap": true,
|
||||
"States": {
|
||||
"2": {
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"Description": "- Added \"The Color Out of Oz\" campaign by The Beard!\n- Added \"Bloodborne - City of the Unseen\" campaign by aughhh!\n- Updated the following fan campaigns: Jumanji, Cyclopean Foundations, Alice in Wonderland, War of the Worlds, The Ghosts of Onigawa",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "8c87c5",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Notecard",
|
||||
"Nickname": "Arkham SCE 3.1.0 - 4/20/2023 - Page 2",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -26.999,
|
||||
"posY": 1.55149889,
|
||||
"posZ": -71,
|
||||
"rotX": 1.00740074e-8,
|
||||
"rotY": 90.00001,
|
||||
"rotZ": 2.83212813e-8,
|
||||
"scaleX": 3,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 3
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
},
|
||||
"3": {
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"Description": "- Updated the following fan scenarios: The Fall of the House of Usher, Arkham Incidents, The Legend of Sleepy Hollow, The Symphony of Erich Zann, The Strange Case of Dr. Jekyll and Mr. Hyde\n- The token remover has been cloned and repositioned for easier convenience.\n- The Threat Area discard buttons should now be easier to click.",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "179ecc",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Notecard",
|
||||
"Nickname": "Arkham SCE 3.1.0 - 4/20/2023 - Page 3",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -26.999,
|
||||
"posY": 1.55149889,
|
||||
"posZ": -71,
|
||||
"rotX": 1.5388661e-8,
|
||||
"rotY": 90.00001,
|
||||
"rotZ": 3.046174e-8,
|
||||
"scaleX": 3,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 3
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
},
|
||||
"4": {
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"Description": "- Updated Victory Display (now with automatic counting!)\n- Added metadata to Chaos Tokens.\n- Added right-click menu options to Family Inheritance.\n-Action Tokens are now colorblind-friendly!\n- Right-clicking the Token Arranger now shows new options related to percentages, odds, and the like.\n",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "5f2454",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Notecard",
|
||||
"Nickname": "Arkham SCE 3.1.0 - 4/20/2023 - Page 4",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -26.999,
|
||||
"posY": 1.55149889,
|
||||
"posZ": -71,
|
||||
"rotX": 2.18157421e-8,
|
||||
"rotY": 90.00001,
|
||||
"rotZ": 3.849087e-8,
|
||||
"scaleX": 3,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 3
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
},
|
||||
"5": {
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"Description": "- Added support for player color customization. Right-click the upkeep button to change a mat's color.\n- Scenario splash screen and cleanup helper now play a short sound when activated!\n- Discarding a card with tokens on it now automatically moves those tokens to the trash can.\n- Misc. bug/load time fixes.\n",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "e34bd9",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Notecard",
|
||||
"Nickname": "Arkham SCE 3.1.0 - 4/20/2023 - Page 5",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -26.999,
|
||||
"posY": 1.55149889,
|
||||
"posZ": -71,
|
||||
"rotX": 1.48446917e-8,
|
||||
"rotY": 90.00001,
|
||||
"rotZ": 2.35103439e-8,
|
||||
"scaleX": 3,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 3
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
},
|
||||
"6": {
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"Description": "- Added FFG's buyers guide to campaign area to make choosing a campaign easier for new players.\n- Added more Hotkeys! Click Options \u003e Game Keys to find them.\n- Thank you to everyone for not only using the mod but continuing to provide both custom content and your own personal touches for everyone to enjoy!",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "2fc1cd",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Notecard",
|
||||
"Nickname": "Arkham SCE 3.1.0 - 4/20/2023 - Page 6",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -26.999,
|
||||
"posY": 1.55149889,
|
||||
"posZ": -71,
|
||||
"rotX": 2.34638939e-8,
|
||||
"rotY": 90.00001,
|
||||
"rotZ": 3.195196e-8,
|
||||
"scaleX": 3,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 3
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
||||
},
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -27,
|
||||
"posY": 1.551,
|
||||
"posZ": -56.165,
|
||||
"rotX": 0,
|
||||
"rotY": 90,
|
||||
"rotZ": 0,
|
||||
"scaleX": 3,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 3
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
84
objects/Bloodborne-CityoftheUnseen0175.81651b.json
Normal file
84
objects/Bloodborne-CityoftheUnseen0175.81651b.json
Normal file
@ -0,0 +1,84 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"Bag": {
|
||||
"Order": 0
|
||||
},
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"2FeartheOldBlood.022ddf",
|
||||
"BloodborneCustomDataHelper.3e1dd7",
|
||||
"4TheFrailtyofMen.4117f5",
|
||||
"3NightUnending.5c4cb0",
|
||||
"5TheAltarofDespair.9b4b47",
|
||||
"6ACallBeyond.c09838",
|
||||
"1TheHuntBegins.dc507f",
|
||||
"7Communion.ddd5dd",
|
||||
"8ArkhamSunrise.e5283d",
|
||||
"GenericCampaignLog.eda22b",
|
||||
"Custom_PDF.ee98ef"
|
||||
],
|
||||
"ContainedObjects_path": "Bloodborne-CityoftheUnseen0175.81651b",
|
||||
"CustomMesh": {
|
||||
"CastShadows": true,
|
||||
"ColliderURL": "https://raw.githubusercontent.com/RobMayer/TTSLibrary/master/advboxes/core_h_COL.obj",
|
||||
"Convex": true,
|
||||
"CustomShader": {
|
||||
"FresnelStrength": 0,
|
||||
"SpecularColor": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"SpecularIntensity": 0,
|
||||
"SpecularSharpness": 2
|
||||
},
|
||||
"DiffuseURL": "https://i.imgur.com/WtioCq1.jpg",
|
||||
"MaterialIndex": 3,
|
||||
"MeshURL": "https://raw.githubusercontent.com/RobMayer/TTSLibrary/master/advboxes/core_h_MSH.obj",
|
||||
"NormalURL": "",
|
||||
"TypeIndex": 6
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "81651b",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScriptState_path": "Bloodborne-CityoftheUnseen0175.81651b.luascriptstate",
|
||||
"LuaScript_path": "Bloodborne-CityoftheUnseen0175.81651b.ttslua",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
"MeshIndex": -1,
|
||||
"Name": "Custom_Model_Bag",
|
||||
"Nickname": "Bloodborne - City of the Unseen 0.175",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -27,
|
||||
"posY": 1.485,
|
||||
"posZ": -87.876,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.89,
|
||||
"scaleY": 0.12,
|
||||
"scaleZ": 0.89
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"ml":{"022ddf":{"lock":false,"pos":{"x":15.7169742584229,"y":1.48149907588959,"z":21.2904376983643},"rot":{"x":-5.2979416409471E-08,"y":270,"z":-3.22966599242136E-07}},"3e1dd7":{"lock":false,"pos":{"x":-2.91630053520203,"y":1.63292264938354,"z":-15.1114053726196},"rot":{"x":-2.96886923933926E-07,"y":269.995788574219,"z":1.26109523534979E-06}},"4117f5":{"lock":false,"pos":{"x":15.7379760742188,"y":1.48149907588959,"z":4.49971151351929},"rot":{"x":1.48999617977097E-07,"y":269.998046875,"z":-2.72232512088522E-07}},"5c4cb0":{"lock":false,"pos":{"x":15.6802940368652,"y":1.48149919509888,"z":12.7662420272827},"rot":{"x":-8.87630093870939E-08,"y":269.998413085938,"z":-1.19237753892776E-07}},"8f6217":{"lock":false,"pos":{"x":-3.33288478851318,"y":1.63292276859283,"z":-14.3457317352295},"rot":{"x":-6.63845048620715E-06,"y":269.995880126953,"z":-4.41622978542E-06}},"9b4b47":{"lock":false,"pos":{"x":15.6301212310791,"y":1.48149907588959,"z":-3.92243099212646},"rot":{"x":-8.54166088970487E-08,"y":270.00390625,"z":-1.37598135552253E-07}},"b25aaf":{"lock":false,"pos":{"x":5.4363,"y":1.2647,"z":53.8483},"rot":{"x":0.0315,"y":270.0007,"z":0.0168}},"c09838":{"lock":false,"pos":{"x":15.5783252716064,"y":1.4814989566803,"z":-11.751425743103},"rot":{"x":3.31483448690051E-07,"y":270.015075683594,"z":2.14096615991366E-08}},"dc507f":{"lock":false,"pos":{"x":15.6832981109619,"y":1.48149919509888,"z":29.4188995361328},"rot":{"x":-4.61894416048381E-08,"y":270.000030517578,"z":-5.33786419509852E-07}},"ddd5dd":{"lock":false,"pos":{"x":15.6398334503174,"y":1.48149907588959,"z":-19.8568859100342},"rot":{"x":1.44437620974713E-07,"y":270.00830078125,"z":9.74452404989279E-07}},"e5283d":{"lock":false,"pos":{"x":15.70823097229,"y":1.48149919509888,"z":-28.1495018005371},"rot":{"x":1.33962146264821E-07,"y":270.018798828125,"z":-8.9481960685589E-07}},"eda22b":{"lock":false,"pos":{"x":35.2372741699219,"y":1.58149898052216,"z":-14.4016141891479},"rot":{"x":3.23336344365543E-08,"y":269.984985351563,"z":2.46333769382545E-07}},"ee98ef":{"lock":false,"pos":{"x":36.8274078369141,"y":1.48149931430817,"z":13.9191246032715},"rot":{"x":-9.27476762058177E-09,"y":269.972564697266,"z":2.38507293914836E-08}}}}
|
503
objects/Bloodborne-CityoftheUnseen0175.81651b.ttslua
Normal file
503
objects/Bloodborne-CityoftheUnseen0175.81651b.ttslua
Normal file
@ -0,0 +1,503 @@
|
||||
-- Utility memory bag by Directsun
|
||||
-- Version 2.5.2
|
||||
-- Fork of Memory Bag 2.0 by MrStump
|
||||
|
||||
function updateSave()
|
||||
local data_to_save = {["ml"]=memoryList}
|
||||
saved_data = JSON.encode(data_to_save)
|
||||
self.script_state = saved_data
|
||||
end
|
||||
|
||||
function combineMemoryFromBagsWithin()
|
||||
local bagObjList = self.getObjects()
|
||||
for _, bagObj in ipairs(bagObjList) do
|
||||
local data = bagObj.lua_script_state
|
||||
if data ~= nil then
|
||||
local j = JSON.decode(data)
|
||||
if j ~= nil and j.ml ~= nil then
|
||||
for guid, entry in pairs(j.ml) do
|
||||
memoryList[guid] = entry
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function updateMemoryWithMoves()
|
||||
memoryList = memoryListBackup
|
||||
--get the first transposed object's coordinates
|
||||
local obj = getObjectFromGUID(moveGuid)
|
||||
|
||||
-- p1 is where needs to go, p2 is where it was
|
||||
local refObjPos = memoryList[moveGuid].pos
|
||||
local deltaPos = findOffsetDistance(obj.getPosition(), refObjPos, nil)
|
||||
local movedRotation = obj.getRotation()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
memoryList[guid].pos.x = entry.pos.x - deltaPos.x
|
||||
memoryList[guid].pos.y = entry.pos.y - deltaPos.y
|
||||
memoryList[guid].pos.z = entry.pos.z - deltaPos.z
|
||||
-- memoryList[guid].rot.x = movedRotation.x
|
||||
-- memoryList[guid].rot.y = movedRotation.y
|
||||
-- memoryList[guid].rot.z = movedRotation.z
|
||||
end
|
||||
|
||||
--theList[obj.getGUID()] = {
|
||||
-- pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
-- rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
-- lock=obj.getLock()
|
||||
--}
|
||||
moveList = {}
|
||||
end
|
||||
|
||||
function onload(saved_data)
|
||||
fresh = true
|
||||
if saved_data ~= "" then
|
||||
local loaded_data = JSON.decode(saved_data)
|
||||
--Set up information off of loaded_data
|
||||
memoryList = loaded_data.ml
|
||||
else
|
||||
--Set up information for if there is no saved saved data
|
||||
memoryList = {}
|
||||
end
|
||||
|
||||
moveList = {}
|
||||
moveGuid = nil
|
||||
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
fresh = false
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--Beginning Setup
|
||||
|
||||
|
||||
--Make setup button
|
||||
function createSetupButton()
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={0,0.1,-6}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Triggered by Transpose button
|
||||
function buttonClick_transpose()
|
||||
moveGuid = nil
|
||||
broadcastToAll("Select one object and move it- all objects will move relative to the new location", {0.75, 0.75, 1})
|
||||
memoryListBackup = duplicateTable(memoryList)
|
||||
memoryList = {}
|
||||
moveList = {}
|
||||
self.clearButtons()
|
||||
createButtonsOnAllObjects(true)
|
||||
createSetupActionButtons(true)
|
||||
end
|
||||
|
||||
--Triggered by setup button,
|
||||
function buttonClick_setup()
|
||||
memoryListBackup = duplicateTable(memoryList)
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createButtonsOnAllObjects(false)
|
||||
createSetupActionButtons(false)
|
||||
end
|
||||
|
||||
function getAllObjectsInMemory()
|
||||
local objTable = {}
|
||||
local curObj = {}
|
||||
|
||||
for guid in pairs(memoryListBackup) do
|
||||
curObj = getObjectFromGUID(guid)
|
||||
table.insert(objTable, curObj)
|
||||
end
|
||||
|
||||
return objTable
|
||||
-- return getAllObjects()
|
||||
end
|
||||
|
||||
--Creates selection buttons on objects
|
||||
function createButtonsOnAllObjects(move)
|
||||
local howManyButtons = 0
|
||||
|
||||
local objsToHaveButtons = {}
|
||||
if move == true then
|
||||
objsToHaveButtons = getAllObjectsInMemory()
|
||||
else
|
||||
objsToHaveButtons = getAllObjects()
|
||||
end
|
||||
|
||||
for _, obj in ipairs(objsToHaveButtons) do
|
||||
if obj ~= self then
|
||||
local dummyIndex = howManyButtons
|
||||
--On a normal bag, the button positions aren't the same size as the bag.
|
||||
globalScaleFactor = 1 * 1/self.getScale().x
|
||||
--Super sweet math to set button positions
|
||||
local selfPos = self.getPosition()
|
||||
local objPos = obj.getPosition()
|
||||
local deltaPos = findOffsetDistance(selfPos, objPos, obj)
|
||||
local objPos = rotateLocalCoordinates(deltaPos, self)
|
||||
objPos.x = -objPos.x * globalScaleFactor
|
||||
objPos.y = objPos.y * globalScaleFactor + 4
|
||||
objPos.z = objPos.z * globalScaleFactor
|
||||
--Offset rotation of bag
|
||||
local rot = self.getRotation()
|
||||
rot.y = -rot.y + 180
|
||||
--Create function
|
||||
local funcName = "selectButton_" .. howManyButtons
|
||||
local func = function() buttonClick_selection(dummyIndex, obj, move) end
|
||||
local color = {0.75,0.25,0.25,0.6}
|
||||
local colorMove = {0,0,1,0.6}
|
||||
if move == true then
|
||||
color = colorMove
|
||||
end
|
||||
self.setVar(funcName, func)
|
||||
self.createButton({
|
||||
click_function=funcName, function_owner=self,
|
||||
position=objPos, rotation=rot, height=1000, width=1000,
|
||||
color=color,
|
||||
})
|
||||
howManyButtons = howManyButtons + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Creates submit and cancel buttons
|
||||
function createSetupActionButtons(move)
|
||||
self.createButton({
|
||||
label="Cancel", click_function="buttonClick_cancel", function_owner=self,
|
||||
position={-1.25,0.1,-6}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
|
||||
self.createButton({
|
||||
label="Submit", click_function="buttonClick_submit", function_owner=self,
|
||||
position={-1.25,0.3,-7}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
|
||||
if move == false then
|
||||
self.createButton({
|
||||
label="Add", click_function="buttonClick_add", function_owner=self,
|
||||
position={1.25,0.3,-6}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={0.25,1,0.25}
|
||||
})
|
||||
|
||||
if fresh == false then
|
||||
self.createButton({
|
||||
label="Set New", click_function="buttonClick_setNew", function_owner=self,
|
||||
position={1.25,0.3,-8}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={0.75,0.75,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Remove", click_function="buttonClick_remove", function_owner=self,
|
||||
position={1.25,0.3,-7}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={1,0.25,0.25}
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
self.createButton({
|
||||
label="Reset", click_function="buttonClick_reset", function_owner=self,
|
||||
position={-1.25,0.3,-8}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--During Setup
|
||||
|
||||
|
||||
--Checks or unchecks buttons
|
||||
function buttonClick_selection(index, obj, move)
|
||||
local colorMove = {0,0,1,0.6}
|
||||
local color = {0,1,0,0.6}
|
||||
|
||||
previousGuid = selectedGuid
|
||||
selectedGuid = obj.getGUID()
|
||||
|
||||
theList = memoryList
|
||||
if move == true then
|
||||
theList = moveList
|
||||
if previousGuid ~= nil and previousGuid ~= selectedGuid then
|
||||
local prevObj = getObjectFromGUID(previousGuid)
|
||||
prevObj.highlightOff()
|
||||
self.editButton({index=previousIndex, color=colorMove})
|
||||
theList[previousGuid] = nil
|
||||
end
|
||||
previousIndex = index
|
||||
end
|
||||
|
||||
if theList[selectedGuid] == nil then
|
||||
self.editButton({index=index, color=color})
|
||||
--Adding pos/rot to memory table
|
||||
local pos, rot = obj.getPosition(), obj.getRotation()
|
||||
--I need to add it like this or it won't save due to indexing issue
|
||||
theList[obj.getGUID()] = {
|
||||
pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
lock=obj.getLock()
|
||||
}
|
||||
obj.highlightOn({0,1,0})
|
||||
else
|
||||
color = {0.75,0.25,0.25,0.6}
|
||||
if move == true then
|
||||
color = colorMove
|
||||
end
|
||||
self.editButton({index=index, color=color})
|
||||
theList[obj.getGUID()] = nil
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Cancels selection process
|
||||
function buttonClick_cancel()
|
||||
memoryList = memoryListBackup
|
||||
moveList = {}
|
||||
self.clearButtons()
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Selection Canceled", {1,1,1})
|
||||
moveGuid = nil
|
||||
end
|
||||
|
||||
--Saves selections
|
||||
function buttonClick_submit()
|
||||
fresh = false
|
||||
if next(moveList) ~= nil then
|
||||
for guid in pairs(moveList) do
|
||||
moveGuid = guid
|
||||
end
|
||||
if memoryListBackup[moveGuid] == nil then
|
||||
broadcastToAll("Item selected for moving is not already in memory", {1, 0.25, 0.25})
|
||||
else
|
||||
broadcastToAll("Moving all items in memory relative to new objects position!", {0.75, 0.75, 1})
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(moveList) do
|
||||
moveGuid = guid
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
updateMemoryWithMoves()
|
||||
updateSave()
|
||||
buttonClick_place()
|
||||
end
|
||||
elseif next(memoryList) == nil and moveGuid == nil then
|
||||
memoryList = memoryListBackup
|
||||
broadcastToAll("No selections made.", {0.75, 0.25, 0.25})
|
||||
end
|
||||
combineMemoryFromBagsWithin()
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
updateSave()
|
||||
moveGuid = nil
|
||||
end
|
||||
|
||||
function combineTables(first_table, second_table)
|
||||
for k,v in pairs(second_table) do first_table[k] = v end
|
||||
end
|
||||
|
||||
function buttonClick_add()
|
||||
fresh = false
|
||||
combineTables(memoryList, memoryListBackup)
|
||||
broadcastToAll("Adding internal bags and selections to existing memory", {0.25, 0.75, 0.25})
|
||||
combineMemoryFromBagsWithin()
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
|
||||
function buttonClick_remove()
|
||||
broadcastToAll("Removing Selected Entries From Memory", {1.0, 0.25, 0.25})
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
memoryListBackup[guid] = nil
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Removed", {1,1,1})
|
||||
memoryList = memoryListBackup
|
||||
updateSave()
|
||||
end
|
||||
|
||||
function buttonClick_setNew()
|
||||
broadcastToAll("Setting new position relative to items in memory", {0.75, 0.75, 1})
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
guid = obj.guid
|
||||
if memoryListBackup[guid] ~= nil then
|
||||
count = count + 1
|
||||
memoryListBackup[guid].pos = obj.getPosition()
|
||||
memoryListBackup[guid].rot = obj.getRotation()
|
||||
memoryListBackup[guid].lock = obj.getLock()
|
||||
end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
memoryList = memoryListBackup
|
||||
updateSave()
|
||||
end
|
||||
|
||||
--Resets bag to starting status
|
||||
function buttonClick_reset()
|
||||
fresh = true
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createSetupButton()
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Tool Reset", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
|
||||
|
||||
--After Setup
|
||||
|
||||
|
||||
--Creates recall and place buttons
|
||||
function createMemoryActionButtons()
|
||||
self.createButton({
|
||||
label="Place", click_function="buttonClick_place", function_owner=self,
|
||||
position={1.35,1,6}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Recall", click_function="buttonClick_recall", function_owner=self,
|
||||
position={-1.25,1,6}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={0,0.1,-6}, rotation={0,0,0}, height=500, width=1200,
|
||||
font_size=350, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
--- self.createButton({
|
||||
--- label="Move", click_function="buttonClick_transpose", function_owner=self,
|
||||
--- position={-2.8,0.3,0}, rotation={0,0,0}, height=350, width=800,
|
||||
--- font_size=250, color={0,0,0}, font_color={0.75,0.75,1}
|
||||
--- })
|
||||
end
|
||||
|
||||
--Sends objects from bag/table to their saved position/rotation
|
||||
function buttonClick_place()
|
||||
local bagObjList = self.getObjects()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
--If obj is out on the table, move it to the saved pos/rot
|
||||
if obj ~= nil then
|
||||
obj.setPositionSmooth(entry.pos)
|
||||
obj.setRotationSmooth(entry.rot)
|
||||
obj.setLock(entry.lock)
|
||||
else
|
||||
--If obj is inside of the bag
|
||||
for _, bagObj in ipairs(bagObjList) do
|
||||
if bagObj.guid == guid then
|
||||
local item = self.takeObject({
|
||||
guid=guid, position=entry.pos, rotation=entry.rot, smooth=false
|
||||
})
|
||||
item.setLock(entry.lock)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
broadcastToAll("Objects Placed", {1,1,1})
|
||||
end
|
||||
|
||||
--Recalls objects to bag from table
|
||||
function buttonClick_recall()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then self.putObject(obj) end
|
||||
end
|
||||
broadcastToAll("Objects Recalled", {1,1,1})
|
||||
end
|
||||
|
||||
|
||||
--Utility functions
|
||||
|
||||
|
||||
--Find delta (difference) between 2 x/y/z coordinates
|
||||
function findOffsetDistance(p1, p2, obj)
|
||||
local yOffset = 0
|
||||
if obj ~= nil then
|
||||
local bounds = obj.getBounds()
|
||||
yOffset = (bounds.size.y - bounds.offset.y)
|
||||
end
|
||||
local deltaPos = {}
|
||||
deltaPos.x = (p2.x-p1.x)
|
||||
deltaPos.y = (p2.y-p1.y) + yOffset
|
||||
deltaPos.z = (p2.z-p1.z)
|
||||
return deltaPos
|
||||
end
|
||||
|
||||
--Used to rotate a set of coordinates by an angle
|
||||
function rotateLocalCoordinates(desiredPos, obj)
|
||||
local objPos, objRot = obj.getPosition(), obj.getRotation()
|
||||
local angle = math.rad(objRot.y)
|
||||
local x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)
|
||||
local z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)
|
||||
--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}
|
||||
return {x=x, y=desiredPos.y, z=z}
|
||||
end
|
||||
|
||||
function rotateMyCoordinates(desiredPos, obj)
|
||||
local angle = math.rad(obj.getRotation().y)
|
||||
local x = desiredPos.x * math.sin(angle)
|
||||
local z = desiredPos.z * math.cos(angle)
|
||||
return {x=x, y=desiredPos.y, z=z}
|
||||
end
|
||||
|
||||
--Coroutine delay, in seconds
|
||||
function wait(time)
|
||||
local start = os.time()
|
||||
repeat coroutine.yield(0) until os.time() > start + time
|
||||
end
|
||||
|
||||
--Duplicates a table (needed to prevent it making reference to the same objects)
|
||||
function duplicateTable(oldTable)
|
||||
local newTable = {}
|
||||
for k, v in pairs(oldTable) do
|
||||
newTable[k] = v
|
||||
end
|
||||
return newTable
|
||||
end
|
||||
|
||||
--Moves scripted highlight from all objects
|
||||
function removeAllHighlights()
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Round number (num) to the Nth decimal (dec)
|
||||
function round(num, dec)
|
||||
local mult = 10^(dec or 0)
|
||||
return math.floor(num * mult + 0.5) / mult
|
||||
end
|
@ -0,0 +1,115 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"AttachedDecals": [
|
||||
{
|
||||
"CustomDecal": {
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/959719855119695911/931B9829687A20F4DEADB36DA57B7E6D76792231/",
|
||||
"Name": "dunwich_back",
|
||||
"Size": 7.4
|
||||
},
|
||||
"Transform": {
|
||||
"posX": -0.0021877822,
|
||||
"posY": -0.08963572,
|
||||
"posZ": -0.00288731651,
|
||||
"rotX": 270,
|
||||
"rotY": 359.869568,
|
||||
"rotZ": 0,
|
||||
"scaleX": 2.00000215,
|
||||
"scaleY": 2.00000238,
|
||||
"scaleZ": 2.00000262
|
||||
}
|
||||
}
|
||||
],
|
||||
"Autoraise": true,
|
||||
"Bag": {
|
||||
"Order": 0
|
||||
},
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"Custom_Token.00d19a",
|
||||
"Act4Locations.0f2322",
|
||||
"Act2Locations.1536ba",
|
||||
"EncounterDeck.34612f",
|
||||
"1stFloorExaminationRoom.46e21c",
|
||||
"StandardChaosBag.692b4c",
|
||||
"HardChaosBag.753dc1",
|
||||
"ActInstructions.756370",
|
||||
"TheHuntBegins.75776f",
|
||||
"Deck.87cb2b",
|
||||
"BloodborneCustomDataHelper.8f6217",
|
||||
"Act3Locations.948eb7",
|
||||
"Custom_Token.9743de",
|
||||
"Set-aside.d53ea1",
|
||||
"2RandomizedActDecks.dde0e5",
|
||||
"ScourgeBeast.e00002",
|
||||
"1stFloorSickroom.e00003",
|
||||
"GuidanceTheHuntersWorkshop.e00007",
|
||||
"HospitalCourtyard.e00008",
|
||||
"1stFloorExaminationRoom.e1ae2e",
|
||||
"EasyChaosBag.f4ca98",
|
||||
"ExpertChaosBag.fb475c"
|
||||
],
|
||||
"ContainedObjects_path": "1TheHuntBegins.dc507f",
|
||||
"CustomMesh": {
|
||||
"CastShadows": true,
|
||||
"ColliderURL": "",
|
||||
"Convex": true,
|
||||
"CustomShader": {
|
||||
"FresnelStrength": 0,
|
||||
"SpecularColor": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"SpecularIntensity": 0,
|
||||
"SpecularSharpness": 2
|
||||
},
|
||||
"DiffuseURL": "https://i.imgur.com/k8xq6L9.jpghttps://i.imgur.com/k8xq6L9.jpg",
|
||||
"MaterialIndex": 3,
|
||||
"MeshURL": "https://raw.githubusercontent.com/RobMayer/TTSLibrary/master/advboxes/tuckbox_h_MSH.obj",
|
||||
"NormalURL": "",
|
||||
"TypeIndex": 6
|
||||
},
|
||||
"Description": "Bloodborne: City of the Unseen",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "dc507f",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScriptState_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f.luascriptstate",
|
||||
"LuaScript_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f.ttslua",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
"MeshIndex": -1,
|
||||
"Name": "Custom_Model_Bag",
|
||||
"Nickname": "1: The Hunt Begins",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 15.683,
|
||||
"posY": 1.481,
|
||||
"posZ": 29.419,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 2.21,
|
||||
"scaleY": 0.46,
|
||||
"scaleZ": 2.42
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"ml":{"00d19a":{"lock":false,"pos":{"x":-39.7672,"y":1.67,"z":7.9618},"rot":{"x":0.0002,"y":269.9788,"z":0}},"0f2322":{"lock":false,"pos":{"x":8.7321,"y":1.2965,"z":0.1816},"rot":{"x":0,"y":89.9991,"z":0}},"1536ba":{"lock":false,"pos":{"x":8.6312,"y":1.2965,"z":8.8675},"rot":{"x":0,"y":89.9994,"z":0}},"34612f":{"lock":false,"pos":{"x":-3.9279,"y":1.6858,"z":5.7575},"rot":{"x":0,"y":270.0131,"z":180}},"46e21c":{"lock":false,"pos":{"x":-43.4051,"y":1.5542,"z":9.0918},"rot":{"x":0,"y":270.001,"z":178.9224}},"692b4c":{"lock":false,"pos":{"x":1.9417,"y":1.4851,"z":-30.657},"rot":{"x":0,"y":270.0031,"z":0}},"753dc1":{"lock":false,"pos":{"x":-6.6711,"y":1.4851,"z":-23.4221},"rot":{"x":0,"y":269.9731,"z":0}},"756370":{"lock":false,"pos":{"x":-11.5784,"y":1.59,"z":-10.099},"rot":{"x":0,"y":90,"z":0}},"75776f":{"lock":false,"pos":{"x":-3.9561,"y":1.5966,"z":-10.4416},"rot":{"x":0,"y":270.0182,"z":0}},"87cb2b":{"lock":false,"pos":{"x":-2.725,"y":1.6184,"z":0.373},"rot":{"x":0,"y":270,"z":0}},"8f6217":{"lock":false,"pos":{"x":-3.3329,"y":1.6329,"z":-14.3457},"rot":{"x":0,"y":269.9959,"z":0}},"948eb7":{"lock":false,"pos":{"x":8.6252,"y":1.2965,"z":4.2394},"rot":{"x":0,"y":89.999,"z":0}},"9743de":{"lock":false,"pos":{"x":-40.0127,"y":1.67,"z":4.1909},"rot":{"x":0,"y":315.0388,"z":0}},"d53ea1":{"lock":false,"pos":{"x":1.6962,"y":1.558,"z":14.279},"rot":{"x":0,"y":225.0085,"z":0}},"dde0e5":{"lock":false,"pos":{"x":0.9642,"y":1.398,"z":-5.0598},"rot":{"x":0,"y":89.9987,"z":0}},"e00002":{"lock":false,"pos":{"x":-43.3706,"y":1.5336,"z":3.8602},"rot":{"x":0,"y":269.9991,"z":0}},"e00003":{"lock":false,"pos":{"x":-36.84,"y":1.5336,"z":7.6495},"rot":{"x":0,"y":269.9999,"z":180}},"e00007":{"lock":false,"pos":{"x":-11.6925,"y":1.5698,"z":8.9233},"rot":{"x":0,"y":269.9993,"z":0}},"e00008":{"lock":false,"pos":{"x":-36.84,"y":1.5336,"z":0},"rot":{"x":0,"y":270.0002,"z":180}},"e1ae2e":{"lock":false,"pos":{"x":-43.4401,"y":1.5336,"z":7.6501},"rot":{"x":0.0002,"y":270.0018,"z":180.0013}},"f4ca98":{"lock":false,"pos":{"x":2.0196,"y":1.4851,"z":-23.9265},"rot":{"x":0,"y":270,"z":0}},"fb475c":{"lock":false,"pos":{"x":-6.5732,"y":1.4851,"z":-30.3557},"rot":{"x":0,"y":270,"z":0}}}}
|
@ -0,0 +1,504 @@
|
||||
-- Utility memory bag by Directsun
|
||||
-- Version 2.5.2
|
||||
-- Fork of Memory Bag 2.0 by MrStump
|
||||
|
||||
function updateSave()
|
||||
local data_to_save = {["ml"]=memoryList}
|
||||
saved_data = JSON.encode(data_to_save)
|
||||
self.script_state = saved_data
|
||||
end
|
||||
|
||||
function combineMemoryFromBagsWithin()
|
||||
local bagObjList = self.getObjects()
|
||||
for _, bagObj in ipairs(bagObjList) do
|
||||
local data = bagObj.lua_script_state
|
||||
if data ~= nil then
|
||||
local j = JSON.decode(data)
|
||||
if j ~= nil and j.ml ~= nil then
|
||||
for guid, entry in pairs(j.ml) do
|
||||
memoryList[guid] = entry
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function updateMemoryWithMoves()
|
||||
memoryList = memoryListBackup
|
||||
--get the first transposed object's coordinates
|
||||
local obj = getObjectFromGUID(moveGuid)
|
||||
|
||||
-- p1 is where needs to go, p2 is where it was
|
||||
local refObjPos = memoryList[moveGuid].pos
|
||||
local deltaPos = findOffsetDistance(obj.getPosition(), refObjPos, nil)
|
||||
local movedRotation = obj.getRotation()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
memoryList[guid].pos.x = entry.pos.x - deltaPos.x
|
||||
memoryList[guid].pos.y = entry.pos.y - deltaPos.y
|
||||
memoryList[guid].pos.z = entry.pos.z - deltaPos.z
|
||||
-- memoryList[guid].rot.x = movedRotation.x
|
||||
-- memoryList[guid].rot.y = movedRotation.y
|
||||
-- memoryList[guid].rot.z = movedRotation.z
|
||||
end
|
||||
|
||||
--theList[obj.getGUID()] = {
|
||||
-- pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
-- rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
-- lock=obj.getLock()
|
||||
--}
|
||||
moveList = {}
|
||||
end
|
||||
|
||||
function onload(saved_data)
|
||||
fresh = true
|
||||
if saved_data ~= "" then
|
||||
local loaded_data = JSON.decode(saved_data)
|
||||
--Set up information off of loaded_data
|
||||
memoryList = loaded_data.ml
|
||||
else
|
||||
--Set up information for if there is no saved saved data
|
||||
memoryList = {}
|
||||
end
|
||||
|
||||
moveList = {}
|
||||
moveGuid = nil
|
||||
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
fresh = false
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--Beginning Setup
|
||||
|
||||
|
||||
--Make setup button
|
||||
function createSetupButton()
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={0,0.1,-2.1}, rotation={0,0,0}, height=220, width=500,
|
||||
font_size=130, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Triggered by Transpose button
|
||||
function buttonClick_transpose()
|
||||
moveGuid = nil
|
||||
broadcastToAll("Select one object and move it- all objects will move relative to the new location", {0.75, 0.75, 1})
|
||||
memoryListBackup = duplicateTable(memoryList)
|
||||
memoryList = {}
|
||||
moveList = {}
|
||||
self.clearButtons()
|
||||
createButtonsOnAllObjects(true)
|
||||
createSetupActionButtons(true)
|
||||
end
|
||||
|
||||
--Triggered by setup button,
|
||||
function buttonClick_setup()
|
||||
memoryListBackup = duplicateTable(memoryList)
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createButtonsOnAllObjects(false)
|
||||
createSetupActionButtons(false)
|
||||
end
|
||||
|
||||
function getAllObjectsInMemory()
|
||||
local objTable = {}
|
||||
local curObj = {}
|
||||
|
||||
for guid in pairs(memoryListBackup) do
|
||||
curObj = getObjectFromGUID(guid)
|
||||
table.insert(objTable, curObj)
|
||||
end
|
||||
|
||||
return objTable
|
||||
-- return getAllObjects()
|
||||
end
|
||||
|
||||
--Creates selection buttons on objects
|
||||
function createButtonsOnAllObjects(move)
|
||||
local howManyButtons = 0
|
||||
|
||||
local objsToHaveButtons = {}
|
||||
if move == true then
|
||||
objsToHaveButtons = getAllObjectsInMemory()
|
||||
else
|
||||
objsToHaveButtons = getAllObjects()
|
||||
end
|
||||
|
||||
for _, obj in ipairs(objsToHaveButtons) do
|
||||
if obj ~= self then
|
||||
local dummyIndex = howManyButtons
|
||||
--On a normal bag, the button positions aren't the same size as the bag.
|
||||
globalScaleFactor = 1 * 1/self.getScale().x
|
||||
--Super sweet math to set button positions
|
||||
local selfPos = self.getPosition()
|
||||
local objPos = obj.getPosition()
|
||||
local deltaPos = findOffsetDistance(selfPos, objPos, obj)
|
||||
local objPos = rotateLocalCoordinates(deltaPos, self)
|
||||
objPos.x = -objPos.x * globalScaleFactor
|
||||
objPos.y = objPos.y * globalScaleFactor + 2
|
||||
objPos.z = objPos.z * globalScaleFactor * 0.9
|
||||
--Offset rotation of bag
|
||||
local rot = self.getRotation()
|
||||
rot.y = -rot.y + 180
|
||||
--Create function
|
||||
local funcName = "selectButton_" .. howManyButtons
|
||||
local func = function() buttonClick_selection(dummyIndex, obj, move) end
|
||||
local color = {0.75,0.25,0.25,0.6}
|
||||
local colorMove = {0,0,1,0.6}
|
||||
if move == true then
|
||||
color = colorMove
|
||||
end
|
||||
self.setVar(funcName, func)
|
||||
self.createButton({
|
||||
click_function=funcName, function_owner=self,
|
||||
position=objPos, rotation=rot, height=500, width=500,
|
||||
color=color,
|
||||
})
|
||||
howManyButtons = howManyButtons + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Creates submit and cancel buttons
|
||||
function createSetupActionButtons(move)
|
||||
self.createButton({
|
||||
label="Cancel", click_function="buttonClick_cancel", function_owner=self,
|
||||
position={-0.6,0.1,-2.1}, rotation={0,0,0}, height=220, width=550,
|
||||
font_size=130, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
|
||||
self.createButton({
|
||||
label="Submit", click_function="buttonClick_submit", function_owner=self,
|
||||
position={-0.6,0.3,-2.5}, rotation={0,0,0}, height=220, width=550,
|
||||
font_size=130, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
|
||||
if move == false then
|
||||
self.createButton({
|
||||
label="Add", click_function="buttonClick_add", function_owner=self,
|
||||
position={0.6,0.3,-2.1}, rotation={0,0,0}, height=220, width=550,
|
||||
font_size=130, color={0,0,0}, font_color={0.25,1,0.25}
|
||||
})
|
||||
|
||||
if fresh == false then
|
||||
self.createButton({
|
||||
label="Set New", click_function="buttonClick_setNew", function_owner=self,
|
||||
position={0.6,0.3,-2.9}, rotation={0,0,0}, height=220, width=550,
|
||||
font_size=130, color={0,0,0}, font_color={0.75,0.75,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Remove", click_function="buttonClick_remove", function_owner=self,
|
||||
position={0.6,0.3,-2.5}, rotation={0,0,0}, height=220, width=550,
|
||||
font_size=130, color={0,0,0}, font_color={1,0.25,0.25}
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
self.createButton({
|
||||
label="Reset", click_function="buttonClick_reset", function_owner=self,
|
||||
position={-0.6,0.3,-2.9}, rotation={0,0,0}, height=220, width=550,
|
||||
font_size=130, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--During Setup
|
||||
|
||||
|
||||
--Checks or unchecks buttons
|
||||
function buttonClick_selection(index, obj, move)
|
||||
local colorMove = {0,0,1,0.6}
|
||||
local color = {0,1,0,0.6}
|
||||
|
||||
previousGuid = selectedGuid
|
||||
selectedGuid = obj.getGUID()
|
||||
|
||||
theList = memoryList
|
||||
if move == true then
|
||||
theList = moveList
|
||||
if previousGuid ~= nil and previousGuid ~= selectedGuid then
|
||||
local prevObj = getObjectFromGUID(previousGuid)
|
||||
prevObj.highlightOff()
|
||||
self.editButton({index=previousIndex, color=colorMove})
|
||||
theList[previousGuid] = nil
|
||||
end
|
||||
previousIndex = index
|
||||
end
|
||||
|
||||
if theList[selectedGuid] == nil then
|
||||
self.editButton({index=index, color=color})
|
||||
--Adding pos/rot to memory table
|
||||
local pos, rot = obj.getPosition(), obj.getRotation()
|
||||
--I need to add it like this or it won't save due to indexing issue
|
||||
theList[obj.getGUID()] = {
|
||||
pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
lock=obj.getLock()
|
||||
}
|
||||
obj.highlightOn({0,1,0})
|
||||
else
|
||||
color = {0.75,0.25,0.25,0.6}
|
||||
if move == true then
|
||||
color = colorMove
|
||||
end
|
||||
self.editButton({index=index, color=color})
|
||||
theList[obj.getGUID()] = nil
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Cancels selection process
|
||||
function buttonClick_cancel()
|
||||
memoryList = memoryListBackup
|
||||
moveList = {}
|
||||
self.clearButtons()
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Selection Canceled", {1,1,1})
|
||||
moveGuid = nil
|
||||
end
|
||||
|
||||
--Saves selections
|
||||
function buttonClick_submit()
|
||||
fresh = false
|
||||
if next(moveList) ~= nil then
|
||||
for guid in pairs(moveList) do
|
||||
moveGuid = guid
|
||||
end
|
||||
if memoryListBackup[moveGuid] == nil then
|
||||
broadcastToAll("Item selected for moving is not already in memory", {1, 0.25, 0.25})
|
||||
else
|
||||
broadcastToAll("Moving all items in memory relative to new objects position!", {0.75, 0.75, 1})
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(moveList) do
|
||||
moveGuid = guid
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
updateMemoryWithMoves()
|
||||
updateSave()
|
||||
buttonClick_place()
|
||||
end
|
||||
elseif next(memoryList) == nil and moveGuid == nil then
|
||||
memoryList = memoryListBackup
|
||||
broadcastToAll("No selections made.", {0.75, 0.25, 0.25})
|
||||
end
|
||||
combineMemoryFromBagsWithin()
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
updateSave()
|
||||
moveGuid = nil
|
||||
end
|
||||
|
||||
function combineTables(first_table, second_table)
|
||||
for k,v in pairs(second_table) do first_table[k] = v end
|
||||
end
|
||||
|
||||
function buttonClick_add()
|
||||
fresh = false
|
||||
combineTables(memoryList, memoryListBackup)
|
||||
broadcastToAll("Adding internal bags and selections to existing memory", {0.25, 0.75, 0.25})
|
||||
combineMemoryFromBagsWithin()
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
|
||||
function buttonClick_remove()
|
||||
broadcastToAll("Removing Selected Entries From Memory", {1.0, 0.25, 0.25})
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
memoryListBackup[guid] = nil
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Removed", {1,1,1})
|
||||
memoryList = memoryListBackup
|
||||
updateSave()
|
||||
end
|
||||
|
||||
function buttonClick_setNew()
|
||||
broadcastToAll("Setting new position relative to items in memory", {0.75, 0.75, 1})
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
guid = obj.guid
|
||||
if memoryListBackup[guid] ~= nil then
|
||||
count = count + 1
|
||||
memoryListBackup[guid].pos = obj.getPosition()
|
||||
memoryListBackup[guid].rot = obj.getRotation()
|
||||
memoryListBackup[guid].lock = obj.getLock()
|
||||
end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
memoryList = memoryListBackup
|
||||
updateSave()
|
||||
end
|
||||
|
||||
--Resets bag to starting status
|
||||
function buttonClick_reset()
|
||||
fresh = true
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createSetupButton()
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Tool Reset", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
|
||||
|
||||
--After Setup
|
||||
|
||||
|
||||
--Creates recall and place buttons
|
||||
function createMemoryActionButtons()
|
||||
self.createButton({
|
||||
label="Place", click_function="buttonClick_place", function_owner=self,
|
||||
position={0.6,0.1,2.1}, rotation={0,0,0}, height=220, width=500,
|
||||
font_size=130, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Recall", click_function="buttonClick_recall", function_owner=self,
|
||||
position={-0.6,0.1,2.1}, rotation={0,0,0}, height=220, width=500,
|
||||
font_size=130, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={0,0.1,-2.1}, rotation={0,0,0}, height=220, width=500,
|
||||
font_size=130, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
--- self.createButton({
|
||||
--- label="Move", click_function="buttonClick_transpose", function_owner=self,
|
||||
--- position={-2.8,0.3,0}, rotation={0,0,0}, height=350, width=800,
|
||||
--- font_size=250, color={0,0,0}, font_color={0.75,0.75,1}
|
||||
--- })
|
||||
end
|
||||
|
||||
--Sends objects from bag/table to their saved position/rotation
|
||||
function buttonClick_place()
|
||||
local bagObjList = self.getObjects()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
--If obj is out on the table, move it to the saved pos/rot
|
||||
if obj ~= nil then
|
||||
obj.setPositionSmooth(entry.pos)
|
||||
obj.setRotationSmooth(entry.rot)
|
||||
obj.setLock(entry.lock)
|
||||
else
|
||||
--If obj is inside of the bag
|
||||
for _, bagObj in ipairs(bagObjList) do
|
||||
if bagObj.guid == guid then
|
||||
local item = self.takeObject({
|
||||
guid=guid, position=entry.pos, rotation=entry.rot, smooth=false
|
||||
})
|
||||
item.setLock(entry.lock)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
broadcastToAll("Objects Placed", {1,1,1})
|
||||
end
|
||||
|
||||
--Recalls objects to bag from table
|
||||
function buttonClick_recall()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then self.putObject(obj) end
|
||||
end
|
||||
broadcastToAll("Objects Recalled", {1,1,1})
|
||||
end
|
||||
|
||||
|
||||
--Utility functions
|
||||
|
||||
|
||||
--Find delta (difference) between 2 x/y/z coordinates
|
||||
function findOffsetDistance(p1, p2, obj)
|
||||
local yOffset = 0
|
||||
if obj ~= nil then
|
||||
local bounds = obj.getBounds()
|
||||
yOffset = (bounds.size.y - bounds.offset.y)
|
||||
end
|
||||
local deltaPos = {}
|
||||
deltaPos.x = (p2.x-p1.x)
|
||||
deltaPos.y = (p2.y-p1.y) + yOffset
|
||||
deltaPos.z = (p2.z-p1.z)
|
||||
return deltaPos
|
||||
end
|
||||
|
||||
--Used to rotate a set of coordinates by an angle
|
||||
function rotateLocalCoordinates(desiredPos, obj)
|
||||
local objPos, objRot = obj.getPosition(), obj.getRotation()
|
||||
local angle = math.rad(objRot.y)
|
||||
local x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)
|
||||
local z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)
|
||||
--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}
|
||||
return {x=x, y=desiredPos.y, z=z}
|
||||
end
|
||||
|
||||
function rotateMyCoordinates(desiredPos, obj)
|
||||
local angle = math.rad(obj.getRotation().y)
|
||||
local x = desiredPos.x * math.sin(angle)
|
||||
local z = desiredPos.z * math.cos(angle)
|
||||
return {x=x, y=desiredPos.y, z=z}
|
||||
end
|
||||
|
||||
--Coroutine delay, in seconds
|
||||
function wait(time)
|
||||
local start = os.time()
|
||||
repeat coroutine.yield(0) until os.time() > start + time
|
||||
end
|
||||
|
||||
--Duplicates a table (needed to prevent it making reference to the same objects)
|
||||
function duplicateTable(oldTable)
|
||||
local newTable = {}
|
||||
for k, v in pairs(oldTable) do
|
||||
newTable[k] = v
|
||||
end
|
||||
return newTable
|
||||
end
|
||||
|
||||
--Moves scripted highlight from all objects
|
||||
function removeAllHighlights()
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Round number (num) to the Nth decimal (dec)
|
||||
function round(num, dec)
|
||||
local mult = 10^(dec or 0)
|
||||
return math.floor(num * mult + 0.5) / mult
|
||||
end
|
||||
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"ad7f6e89-57fb-4b87-a642-1e8d97190292","type":"Location","class":"Mythos","traits":"Clinic","locationFront":{"icons":"Triangle","connections":"Circle|Square","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}],"victory":1},"locationBack":{"icons":"Triangle","connections":"Circle|Square"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100100,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1001": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/6exonLu.jpg",
|
||||
"FaceURL": "https://i.imgur.com/luQ5i4S.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "Diagnosis: Terminal",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/1stFloorExaminationRoom.46e21c.gmnotes",
|
||||
"GUID": "46e21c",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "1st Floor Examination Room",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -43.405,
|
||||
"posY": 1.554,
|
||||
"posZ": 9.092,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 179,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"3a052131-e718-47fd-a43c-6fb7d982f200","type":"Location","class":"Mythos","traits":"Clinic","locationFront":{"icons":"Triangle","connections":"Circle|Square","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}],"victory":1},"locationBack":{"icons":"Triangle","connections":"Circle|Square"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100000,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1000": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/aJqcDAR.jpg",
|
||||
"FaceURL": "https://i.imgur.com/i8JMwkS.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "Diagnosis: Disastrous",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/1stFloorExaminationRoom.e1ae2e.gmnotes",
|
||||
"GUID": "e1ae2e",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "1st Floor Examination Room",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -43.44,
|
||||
"posY": 1.534,
|
||||
"posZ": 7.65,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"e008f9a1-c63e-4b8a-8ba1-5e8b2bf90eb9","type":"Location","class":"Mythos","traits":"Clinic","locationFront":{"icons":"Circle","connections":"Triangle|Square","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}]},"locationBack":{"icons":"Circle","connections":"Triangle|Square"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100200,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1002": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.ibb.co/KDQTGtw/5f537d852c6a.jpg",
|
||||
"FaceURL": "https://i.ibb.co/dsYv1G8/91c68c31f40c.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/1stFloorSickroom.e00003.gmnotes",
|
||||
"GUID": "e00003",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "1st Floor Sickroom",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -36.84,
|
||||
"posY": 1.534,
|
||||
"posZ": 7.65,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"Bag": {
|
||||
"Order": 0
|
||||
},
|
||||
"ColorDiffuse": {
|
||||
"b": 0,
|
||||
"g": 0.36652,
|
||||
"r": 0.70588
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"Deck.6d2f9f",
|
||||
"Deck.ff5b4f"
|
||||
],
|
||||
"ContainedObjects_path": "2RandomizedActDecks.dde0e5",
|
||||
"Description": "Shuffle and choose 1",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "dde0e5",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScriptState": "{\"ml\":[]}",
|
||||
"LuaScript_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/2RandomizedActDecks.dde0e5.ttslua",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
"MeshIndex": -1,
|
||||
"Name": "Bag",
|
||||
"Nickname": "2 Randomized Act Decks",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 0.964,
|
||||
"posY": 1.398,
|
||||
"posZ": -5.06,
|
||||
"rotX": 0,
|
||||
"rotY": 90,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,274 @@
|
||||
function updateSave()
|
||||
local data_to_save = {["ml"]=memoryList}
|
||||
saved_data = JSON.encode(data_to_save)
|
||||
self.script_state = saved_data
|
||||
end
|
||||
|
||||
function onload(saved_data)
|
||||
if saved_data ~= "" then
|
||||
local loaded_data = JSON.decode(saved_data)
|
||||
--Set up information off of loaded_data
|
||||
memoryList = loaded_data.ml
|
||||
else
|
||||
--Set up information for if there is no saved saved data
|
||||
memoryList = {}
|
||||
end
|
||||
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--Beginning Setup
|
||||
|
||||
|
||||
--Make setup button
|
||||
function createSetupButton()
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Triggered by setup button,
|
||||
function buttonClick_setup()
|
||||
memoryListBackup = duplicateTable(memoryList)
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createButtonsOnAllObjects()
|
||||
createSetupActionButtons()
|
||||
end
|
||||
|
||||
--Creates selection buttons on objects
|
||||
function createButtonsOnAllObjects()
|
||||
local howManyButtons = 0
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
if obj ~= self then
|
||||
local dummyIndex = howManyButtons
|
||||
--On a normal bag, the button positions aren't the same size as the bag.
|
||||
globalScaleFactor = 1.25 * 1/self.getScale().x
|
||||
--Super sweet math to set button positions
|
||||
local selfPos = self.getPosition()
|
||||
local objPos = obj.getPosition()
|
||||
local deltaPos = findOffsetDistance(selfPos, objPos, obj)
|
||||
local objPos = rotateLocalCoordinates(deltaPos, self)
|
||||
objPos.x = -objPos.x * globalScaleFactor
|
||||
objPos.y = objPos.y * globalScaleFactor
|
||||
objPos.z = objPos.z * globalScaleFactor
|
||||
--Offset rotation of bag
|
||||
local rot = self.getRotation()
|
||||
rot.y = -rot.y + 180
|
||||
--Create function
|
||||
local funcName = "selectButton_" .. howManyButtons
|
||||
local func = function() buttonClick_selection(dummyIndex, obj) end
|
||||
self.setVar(funcName, func)
|
||||
self.createButton({
|
||||
click_function=funcName, function_owner=self,
|
||||
position=objPos, rotation=rot, height=1000, width=1000,
|
||||
color={0.75,0.25,0.25,0.6},
|
||||
})
|
||||
howManyButtons = howManyButtons + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Creates submit and cancel buttons
|
||||
function createSetupActionButtons()
|
||||
self.createButton({
|
||||
label="Cancel", click_function="buttonClick_cancel", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Submit", click_function="buttonClick_submit", function_owner=self,
|
||||
position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Reset", click_function="buttonClick_reset", function_owner=self,
|
||||
position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--During Setup
|
||||
|
||||
|
||||
--Checks or unchecks buttons
|
||||
function buttonClick_selection(index, obj)
|
||||
local color = {0,1,0,0.6}
|
||||
if memoryList[obj.getGUID()] == nil then
|
||||
self.editButton({index=index, color=color})
|
||||
--Adding pos/rot to memory table
|
||||
local pos, rot = obj.getPosition(), obj.getRotation()
|
||||
--I need to add it like this or it won't save due to indexing issue
|
||||
memoryList[obj.getGUID()] = {
|
||||
pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
lock=obj.getLock()
|
||||
}
|
||||
obj.highlightOn({0,1,0})
|
||||
else
|
||||
color = {0.75,0.25,0.25,0.6}
|
||||
self.editButton({index=index, color=color})
|
||||
memoryList[obj.getGUID()] = nil
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Cancels selection process
|
||||
function buttonClick_cancel()
|
||||
memoryList = memoryListBackup
|
||||
self.clearButtons()
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Selection Canceled", {1,1,1})
|
||||
end
|
||||
|
||||
--Saves selections
|
||||
function buttonClick_submit()
|
||||
if next(memoryList) == nil then
|
||||
broadcastToAll("You cannot submit without any selections.", {0.75, 0.25, 0.25})
|
||||
else
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
end
|
||||
|
||||
--Resets bag to starting status
|
||||
function buttonClick_reset()
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createSetupButton()
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Tool Reset", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
|
||||
|
||||
--After Setup
|
||||
|
||||
|
||||
--Creates recall and place buttons
|
||||
function createMemoryActionButtons()
|
||||
self.createButton({
|
||||
label="Place", click_function="buttonClick_place", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Recall", click_function="buttonClick_recall", function_owner=self,
|
||||
position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Sends objects from bag/table to their saved position/rotation
|
||||
function buttonClick_place()
|
||||
local bagObjList = self.getObjects()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
--If obj is out on the table, move it to the saved pos/rot
|
||||
if obj ~= nil then
|
||||
obj.setPositionSmooth(entry.pos)
|
||||
obj.setRotationSmooth(entry.rot)
|
||||
obj.setLock(entry.lock)
|
||||
else
|
||||
--If obj is inside of the bag
|
||||
for _, bagObj in ipairs(bagObjList) do
|
||||
if bagObj.guid == guid then
|
||||
local item = self.takeObject({
|
||||
guid=guid, position=entry.pos, rotation=entry.rot,
|
||||
})
|
||||
item.setLock(entry.lock)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
broadcastToAll("Objects Placed", {1,1,1})
|
||||
end
|
||||
|
||||
--Recalls objects to bag from table
|
||||
function buttonClick_recall()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then self.putObject(obj) end
|
||||
end
|
||||
broadcastToAll("Objects Recalled", {1,1,1})
|
||||
end
|
||||
|
||||
|
||||
--Utility functions
|
||||
|
||||
|
||||
--Find delta (difference) between 2 x/y/z coordinates
|
||||
function findOffsetDistance(p1, p2, obj)
|
||||
local deltaPos = {}
|
||||
local bounds = obj.getBounds()
|
||||
deltaPos.x = (p2.x-p1.x)
|
||||
deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)
|
||||
deltaPos.z = (p2.z-p1.z)
|
||||
return deltaPos
|
||||
end
|
||||
|
||||
--Used to rotate a set of coordinates by an angle
|
||||
function rotateLocalCoordinates(desiredPos, obj)
|
||||
local objPos, objRot = obj.getPosition(), obj.getRotation()
|
||||
local angle = math.rad(objRot.y)
|
||||
local x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)
|
||||
local z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)
|
||||
--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}
|
||||
return {x=x, y=desiredPos.y, z=z}
|
||||
end
|
||||
|
||||
--Coroutine delay, in seconds
|
||||
function wait(time)
|
||||
local start = os.time()
|
||||
repeat coroutine.yield(0) until os.time() > start + time
|
||||
end
|
||||
|
||||
--Duplicates a table (needed to prevent it making reference to the same objects)
|
||||
function duplicateTable(oldTable)
|
||||
local newTable = {}
|
||||
for k, v in pairs(oldTable) do
|
||||
newTable[k] = v
|
||||
end
|
||||
return newTable
|
||||
end
|
||||
|
||||
--Moves scripted highlight from all objects
|
||||
function removeAllHighlights()
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Round number (num) to the Nth decimal (dec)
|
||||
function round(num, dec)
|
||||
local mult = 10^(dec or 0)
|
||||
return math.floor(num * mult + 0.5) / mult
|
||||
end
|
||||
|
@ -0,0 +1,100 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"TheBeastandtheCrow.9565f5",
|
||||
"ViolasWish.e00001",
|
||||
"TheCityoftheUnseen.e00006",
|
||||
"MoonlitRevival.f8d218"
|
||||
],
|
||||
"ContainedObjects_path": "Deck.6d2f9f",
|
||||
"CustomDeck": {
|
||||
"1002": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/3vXhKtC.jpg",
|
||||
"FaceURL": "https://i.imgur.com/6RYzw7k.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
},
|
||||
"1005": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/LYEA9t5.jpg",
|
||||
"FaceURL": "https://i.imgur.com/8rVX43C.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
},
|
||||
"2947": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/G82PtRN.jpg",
|
||||
"FaceURL": "https://i.imgur.com/HjjMria.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
},
|
||||
"2948": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/RG4A0Vx.jpg",
|
||||
"FaceURL": "https://i.imgur.com/fd8eJPo.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"DeckIDs": [
|
||||
100200,
|
||||
294800,
|
||||
100500,
|
||||
294700
|
||||
],
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "6d2f9f",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Deck",
|
||||
"Nickname": "",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -7.867,
|
||||
"posY": 2.633,
|
||||
"posZ": -2.993,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"37ef9de9-cfd7-4497-a497-95bba42b229c","type":"Act","class":"Mythos","clueThresholdPerInvestigator":2}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 294700,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"2947": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/G82PtRN.jpg",
|
||||
"FaceURL": "https://i.imgur.com/HjjMria.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/2RandomizedActDecks.dde0e5/Deck.6d2f9f/MoonlitRevival.f8d218.gmnotes",
|
||||
"GUID": "f8d218",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Moonlit Revival",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -9.608,
|
||||
"posY": 1.565,
|
||||
"posZ": 21.68,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 1,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"2eba5389-3bec-4731-ae86-a3cccf5befc4","type":"Act","class":"Mythos"}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100200,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1002": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/3vXhKtC.jpg",
|
||||
"FaceURL": "https://i.imgur.com/6RYzw7k.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/2RandomizedActDecks.dde0e5/Deck.6d2f9f/TheBeastandtheCrow.9565f5.gmnotes",
|
||||
"GUID": "9565f5",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "The Beast and the Crow",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -9.264,
|
||||
"posY": 1.515,
|
||||
"posZ": 20.588,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 359,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"92df66ca-42f8-4a56-a76e-fa1f533b6412","type":"Act","class":"Mythos","clueThresholdPerInvestigator":3}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100500,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1005": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/LYEA9t5.jpg",
|
||||
"FaceURL": "https://i.imgur.com/8rVX43C.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/2RandomizedActDecks.dde0e5/Deck.6d2f9f/TheCityoftheUnseen.e00006.gmnotes",
|
||||
"GUID": "e00006",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "The City of the Unseen",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -9.792,
|
||||
"posY": 1.495,
|
||||
"posZ": 21.428,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"44ab088b-b5cf-4bf2-8978-f77d46621fe2","type":"Act","class":"Mythos"}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 294800,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"2948": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/RG4A0Vx.jpg",
|
||||
"FaceURL": "https://i.imgur.com/fd8eJPo.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/2RandomizedActDecks.dde0e5/Deck.6d2f9f/ViolasWish.e00001.gmnotes",
|
||||
"GUID": "e00001",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Viola's Wish",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -9.728,
|
||||
"posY": 1.537,
|
||||
"posZ": 25.832,
|
||||
"rotX": 2,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"TheBeastandtheCrow.e00003",
|
||||
"AFellowOutsider.d6d915",
|
||||
"TheCityoftheUnseen.e00005",
|
||||
"MoonlitRevival.db5045"
|
||||
],
|
||||
"ContainedObjects_path": "Deck.ff5b4f",
|
||||
"CustomDeck": {
|
||||
"1001": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/hP9ZFAL.jpg",
|
||||
"FaceURL": "https://i.imgur.com/0ExgYIE.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
},
|
||||
"1002": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/3vXhKtC.jpg",
|
||||
"FaceURL": "https://i.imgur.com/6RYzw7k.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
},
|
||||
"2946": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/tgSoJU9.jpg",
|
||||
"FaceURL": "https://i.imgur.com/m0uoYSB.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
},
|
||||
"2947": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/G82PtRN.jpg",
|
||||
"FaceURL": "https://i.imgur.com/HjjMria.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"DeckIDs": [
|
||||
100200,
|
||||
100100,
|
||||
294600,
|
||||
294700
|
||||
],
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "ff5b4f",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Deck",
|
||||
"Nickname": "",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -6.805,
|
||||
"posY": 2.739,
|
||||
"posZ": -0.183,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"8cd501dd-28d3-4777-b074-c4b7ea67c2ac","type":"Act","class":"Mythos"}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100100,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1001": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/hP9ZFAL.jpg",
|
||||
"FaceURL": "https://i.imgur.com/0ExgYIE.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/2RandomizedActDecks.dde0e5/Deck.ff5b4f/AFellowOutsider.d6d915.gmnotes",
|
||||
"GUID": "d6d915",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "A Fellow Outsider",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -7.26,
|
||||
"posY": 1.522,
|
||||
"posZ": 26.276,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"37ef9de9-cfd7-4497-a497-95bba42b229c","type":"Act","class":"Mythos","clueThresholdPerInvestigator":2}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 294700,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"2947": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/G82PtRN.jpg",
|
||||
"FaceURL": "https://i.imgur.com/HjjMria.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/2RandomizedActDecks.dde0e5/Deck.ff5b4f/MoonlitRevival.db5045.gmnotes",
|
||||
"GUID": "db5045",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Moonlit Revival",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -7.894,
|
||||
"posY": 1.586,
|
||||
"posZ": 26.424,
|
||||
"rotX": 1,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"2eba5389-3bec-4731-ae86-a3cccf5befc4","type":"Act","class":"Mythos"}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100200,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1002": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/3vXhKtC.jpg",
|
||||
"FaceURL": "https://i.imgur.com/6RYzw7k.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/2RandomizedActDecks.dde0e5/Deck.ff5b4f/TheBeastandtheCrow.e00003.gmnotes",
|
||||
"GUID": "e00003",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "The Beast and the Crow",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -9.552,
|
||||
"posY": 1.581,
|
||||
"posZ": 30.585,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"6e87aec9-d1dc-4f7e-a02d-d57763187fb2","type":"Act","class":"Mythos","clueThresholdPerInvestigator":3}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 294600,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"2946": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/tgSoJU9.jpg",
|
||||
"FaceURL": "https://i.imgur.com/m0uoYSB.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/2RandomizedActDecks.dde0e5/Deck.ff5b4f/TheCityoftheUnseen.e00005.gmnotes",
|
||||
"GUID": "e00005",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "The City of the Unseen",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -10.007,
|
||||
"posY": 1.509,
|
||||
"posZ": 25.39,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"Bag": {
|
||||
"Order": 0
|
||||
},
|
||||
"ColorDiffuse": {
|
||||
"b": 0,
|
||||
"g": 0.36652,
|
||||
"r": 0.70588
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"CityCenterPlaza.e00005",
|
||||
"MoonlitBackstreet.e0000a",
|
||||
"MoonlitBackstreet.e0000b",
|
||||
"CentralYharnamPromenade.e00009",
|
||||
"Custom_Token.623f5d",
|
||||
"Custom_Token.7607f6",
|
||||
"Custom_Token.c586ae",
|
||||
"OminousPyre.e0000d",
|
||||
"OminousPyre.e0000e",
|
||||
"Custom_Token.edc175",
|
||||
"UndertheGreatBridge.e00010"
|
||||
],
|
||||
"ContainedObjects_path": "Act2Locations.1536ba",
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "1536ba",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScriptState_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act2Locations.1536ba.luascriptstate",
|
||||
"LuaScript_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act2Locations.1536ba.ttslua",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
"MeshIndex": -1,
|
||||
"Name": "Bag",
|
||||
"Nickname": "Act 2 Locations",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 8.631,
|
||||
"posY": 1.296,
|
||||
"posZ": 8.868,
|
||||
"rotX": 0,
|
||||
"rotY": 90,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"ml":{"623f5d":{"lock":false,"pos":{"x":-29.0608,"y":1.67,"z":-3.6068},"rot":{"x":0,"y":270.0327,"z":0}},"7607f6":{"lock":false,"pos":{"x":-31.4295,"y":1.67,"z":-3.5486},"rot":{"x":0.0001,"y":265.377,"z":0}},"c586ae":{"lock":false,"pos":{"x":-26.8369,"y":1.67,"z":-7.4542},"rot":{"x":0,"y":269.9879,"z":0}},"e00005":{"lock":false,"pos":{"x":-30.24,"y":1.5336,"z":0},"rot":{"x":0,"y":270.0001,"z":180}},"e00009":{"lock":false,"pos":{"x":-30.2243,"y":1.5336,"z":-7.7},"rot":{"x":0,"y":270.0002,"z":180}},"e0000a":{"lock":false,"pos":{"x":-36.7733,"y":1.5336,"z":-7.7},"rot":{"x":0,"y":269.9998,"z":180}},"e0000b":{"lock":false,"pos":{"x":-36.8727,"y":1.5336,"z":-9.9431},"rot":{"x":0,"y":270.0001,"z":180}},"e0000d":{"lock":false,"pos":{"x":-23.9161,"y":1.5512,"z":-6.2658},"rot":{"x":359.9058,"y":269.9944,"z":179.2075}},"e0000e":{"lock":false,"pos":{"x":-23.677,"y":1.5324,"z":-7.7002},"rot":{"x":0.0121,"y":269.9983,"z":180.0795}},"e00010":{"lock":false,"pos":{"x":-23.677,"y":1.5336,"z":-0.0301},"rot":{"x":0,"y":270.0001,"z":180}},"edc175":{"lock":false,"pos":{"x":-22.6636,"y":1.67,"z":-3.4805},"rot":{"x":0,"y":265.3784,"z":-0.0001}}}}
|
@ -0,0 +1,274 @@
|
||||
function updateSave()
|
||||
local data_to_save = {["ml"]=memoryList}
|
||||
saved_data = JSON.encode(data_to_save)
|
||||
self.script_state = saved_data
|
||||
end
|
||||
|
||||
function onload(saved_data)
|
||||
if saved_data ~= "" then
|
||||
local loaded_data = JSON.decode(saved_data)
|
||||
--Set up information off of loaded_data
|
||||
memoryList = loaded_data.ml
|
||||
else
|
||||
--Set up information for if there is no saved saved data
|
||||
memoryList = {}
|
||||
end
|
||||
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--Beginning Setup
|
||||
|
||||
|
||||
--Make setup button
|
||||
function createSetupButton()
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Triggered by setup button,
|
||||
function buttonClick_setup()
|
||||
memoryListBackup = duplicateTable(memoryList)
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createButtonsOnAllObjects()
|
||||
createSetupActionButtons()
|
||||
end
|
||||
|
||||
--Creates selection buttons on objects
|
||||
function createButtonsOnAllObjects()
|
||||
local howManyButtons = 0
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
if obj ~= self then
|
||||
local dummyIndex = howManyButtons
|
||||
--On a normal bag, the button positions aren't the same size as the bag.
|
||||
globalScaleFactor = 1.25 * 1/self.getScale().x
|
||||
--Super sweet math to set button positions
|
||||
local selfPos = self.getPosition()
|
||||
local objPos = obj.getPosition()
|
||||
local deltaPos = findOffsetDistance(selfPos, objPos, obj)
|
||||
local objPos = rotateLocalCoordinates(deltaPos, self)
|
||||
objPos.x = -objPos.x * globalScaleFactor
|
||||
objPos.y = objPos.y * globalScaleFactor
|
||||
objPos.z = objPos.z * globalScaleFactor
|
||||
--Offset rotation of bag
|
||||
local rot = self.getRotation()
|
||||
rot.y = -rot.y + 180
|
||||
--Create function
|
||||
local funcName = "selectButton_" .. howManyButtons
|
||||
local func = function() buttonClick_selection(dummyIndex, obj) end
|
||||
self.setVar(funcName, func)
|
||||
self.createButton({
|
||||
click_function=funcName, function_owner=self,
|
||||
position=objPos, rotation=rot, height=1000, width=1000,
|
||||
color={0.75,0.25,0.25,0.6},
|
||||
})
|
||||
howManyButtons = howManyButtons + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Creates submit and cancel buttons
|
||||
function createSetupActionButtons()
|
||||
self.createButton({
|
||||
label="Cancel", click_function="buttonClick_cancel", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Submit", click_function="buttonClick_submit", function_owner=self,
|
||||
position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Reset", click_function="buttonClick_reset", function_owner=self,
|
||||
position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--During Setup
|
||||
|
||||
|
||||
--Checks or unchecks buttons
|
||||
function buttonClick_selection(index, obj)
|
||||
local color = {0,1,0,0.6}
|
||||
if memoryList[obj.getGUID()] == nil then
|
||||
self.editButton({index=index, color=color})
|
||||
--Adding pos/rot to memory table
|
||||
local pos, rot = obj.getPosition(), obj.getRotation()
|
||||
--I need to add it like this or it won't save due to indexing issue
|
||||
memoryList[obj.getGUID()] = {
|
||||
pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
lock=obj.getLock()
|
||||
}
|
||||
obj.highlightOn({0,1,0})
|
||||
else
|
||||
color = {0.75,0.25,0.25,0.6}
|
||||
self.editButton({index=index, color=color})
|
||||
memoryList[obj.getGUID()] = nil
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Cancels selection process
|
||||
function buttonClick_cancel()
|
||||
memoryList = memoryListBackup
|
||||
self.clearButtons()
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Selection Canceled", {1,1,1})
|
||||
end
|
||||
|
||||
--Saves selections
|
||||
function buttonClick_submit()
|
||||
if next(memoryList) == nil then
|
||||
broadcastToAll("You cannot submit without any selections.", {0.75, 0.25, 0.25})
|
||||
else
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
end
|
||||
|
||||
--Resets bag to starting status
|
||||
function buttonClick_reset()
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createSetupButton()
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Tool Reset", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
|
||||
|
||||
--After Setup
|
||||
|
||||
|
||||
--Creates recall and place buttons
|
||||
function createMemoryActionButtons()
|
||||
self.createButton({
|
||||
label="Place", click_function="buttonClick_place", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Recall", click_function="buttonClick_recall", function_owner=self,
|
||||
position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Sends objects from bag/table to their saved position/rotation
|
||||
function buttonClick_place()
|
||||
local bagObjList = self.getObjects()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
--If obj is out on the table, move it to the saved pos/rot
|
||||
if obj ~= nil then
|
||||
obj.setPositionSmooth(entry.pos)
|
||||
obj.setRotationSmooth(entry.rot)
|
||||
obj.setLock(entry.lock)
|
||||
else
|
||||
--If obj is inside of the bag
|
||||
for _, bagObj in ipairs(bagObjList) do
|
||||
if bagObj.guid == guid then
|
||||
local item = self.takeObject({
|
||||
guid=guid, position=entry.pos, rotation=entry.rot,
|
||||
})
|
||||
item.setLock(entry.lock)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
broadcastToAll("Objects Placed", {1,1,1})
|
||||
end
|
||||
|
||||
--Recalls objects to bag from table
|
||||
function buttonClick_recall()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then self.putObject(obj) end
|
||||
end
|
||||
broadcastToAll("Objects Recalled", {1,1,1})
|
||||
end
|
||||
|
||||
|
||||
--Utility functions
|
||||
|
||||
|
||||
--Find delta (difference) between 2 x/y/z coordinates
|
||||
function findOffsetDistance(p1, p2, obj)
|
||||
local deltaPos = {}
|
||||
local bounds = obj.getBounds()
|
||||
deltaPos.x = (p2.x-p1.x)
|
||||
deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)
|
||||
deltaPos.z = (p2.z-p1.z)
|
||||
return deltaPos
|
||||
end
|
||||
|
||||
--Used to rotate a set of coordinates by an angle
|
||||
function rotateLocalCoordinates(desiredPos, obj)
|
||||
local objPos, objRot = obj.getPosition(), obj.getRotation()
|
||||
local angle = math.rad(objRot.y)
|
||||
local x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)
|
||||
local z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)
|
||||
--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}
|
||||
return {x=x, y=desiredPos.y, z=z}
|
||||
end
|
||||
|
||||
--Coroutine delay, in seconds
|
||||
function wait(time)
|
||||
local start = os.time()
|
||||
repeat coroutine.yield(0) until os.time() > start + time
|
||||
end
|
||||
|
||||
--Duplicates a table (needed to prevent it making reference to the same objects)
|
||||
function duplicateTable(oldTable)
|
||||
local newTable = {}
|
||||
for k, v in pairs(oldTable) do
|
||||
newTable[k] = v
|
||||
end
|
||||
return newTable
|
||||
end
|
||||
|
||||
--Moves scripted highlight from all objects
|
||||
function removeAllHighlights()
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Round number (num) to the Nth decimal (dec)
|
||||
function round(num, dec)
|
||||
local mult = 10^(dec or 0)
|
||||
return math.floor(num * mult + 0.5) / mult
|
||||
end
|
||||
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"98568c7c-8247-4fdb-b5c4-fec9befd55bb","type":"Location","class":"Mythos","traits":"Yharnam","locationFront":{"icons":"Slash","connections":"Cross|Diamond|Hourglass","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}],"victory":1},"locationBack":{"icons":"Slash","connections":"Cross|Diamond|Hourglass"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100800,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1008": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/QHSZ7Xy.jpg",
|
||||
"FaceURL": "https://i.imgur.com/Ojfrv7q.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act2Locations.1536ba/CentralYharnamPromenade.e00009.gmnotes",
|
||||
"GUID": "e00009",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Central Yharnam Promenade",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -30.224,
|
||||
"posY": 1.534,
|
||||
"posZ": -7.7,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"0bd6be78-4c1c-40ff-bf3d-71474253cfdf","type":"Location","class":"Mythos","traits":"Yharnam. Central","locationFront":{"icons":"Cross","connections":"Square|Slash|T","uses":[{"token":"clue","type":"Clue","countPerInvestigator":1}]},"locationBack":{"icons":"Cross","connections":"Slash|T|Empty"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100400,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1004": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/tXlV227.jpg",
|
||||
"FaceURL": "https://i.imgur.com/RFaL2Pr.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act2Locations.1536ba/CityCenterPlaza.e00005.gmnotes",
|
||||
"GUID": "e00005",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "City Center Plaza",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -30.24,
|
||||
"posY": 1.534,
|
||||
"posZ": 0,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomToken": {
|
||||
"MergeDistancePixels": 5,
|
||||
"Stackable": true,
|
||||
"StandUp": false,
|
||||
"Thickness": 0.3
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "623f5d",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Token",
|
||||
"Nickname": "",
|
||||
"Snap": false,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -29.061,
|
||||
"posY": 1.67,
|
||||
"posZ": -3.607,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.33,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.33
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomToken": {
|
||||
"MergeDistancePixels": 5,
|
||||
"Stackable": true,
|
||||
"StandUp": false,
|
||||
"Thickness": 0.3
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "7607f6",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Token",
|
||||
"Nickname": "",
|
||||
"Snap": false,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -31.43,
|
||||
"posY": 1.67,
|
||||
"posZ": -3.549,
|
||||
"rotX": 0,
|
||||
"rotY": 265,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.33,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.33
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomToken": {
|
||||
"MergeDistancePixels": 5,
|
||||
"Stackable": true,
|
||||
"StandUp": false,
|
||||
"Thickness": 0.3
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "c586ae",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Token",
|
||||
"Nickname": "",
|
||||
"Snap": false,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -26.837,
|
||||
"posY": 1.67,
|
||||
"posZ": -7.454,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.33,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.33
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomToken": {
|
||||
"MergeDistancePixels": 5,
|
||||
"Stackable": true,
|
||||
"StandUp": false,
|
||||
"Thickness": 0.3
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "edc175",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Token",
|
||||
"Nickname": "",
|
||||
"Snap": false,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -22.664,
|
||||
"posY": 1.67,
|
||||
"posZ": -3.481,
|
||||
"rotX": 0,
|
||||
"rotY": 265,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.33,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.33
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"3471a5be-0839-4c62-ac85-cc21ea66e4d5","type":"Location","class":"Mythos","traits":"Yharnam","locationFront":{"icons":"Diamond","connections":"Square|Slash","uses":[{"token":"clue","type":"Clue","countPerInvestigator":1}],"victory":1},"locationBack":{"icons":"Diamond","connections":"Square|Slash"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100900,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1009": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.ibb.co/0MR8BWW/31cb680c157a.jpg",
|
||||
"FaceURL": "https://i.ibb.co/Q8wJXKx/80b9d4583b87.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act2Locations.1536ba/MoonlitBackstreet.e0000a.gmnotes",
|
||||
"GUID": "e0000a",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Moonlit Backstreet",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -36.773,
|
||||
"posY": 1.534,
|
||||
"posZ": -7.7,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"7e35b0cd-55a1-4bb2-b777-a2400b23f1f0","type":"Location","class":"Mythos","traits":"Yharnam","locationFront":{"icons":"Diamond","connections":"Square|Slash","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}],"victory":1},"locationBack":{"icons":"Diamond","connections":"Square|Slash"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 101000,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1010": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.ibb.co/z4fZJrb/9454b954fff7.jpg",
|
||||
"FaceURL": "https://i.ibb.co/rHP7C3k/3d14fee7c37a.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act2Locations.1536ba/MoonlitBackstreet.e0000b.gmnotes",
|
||||
"GUID": "e0000b",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Moonlit Backstreet",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -36.873,
|
||||
"posY": 1.534,
|
||||
"posZ": -9.943,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"fb592cbf-2ff5-4552-834b-f902d19e929f","type":"Location","class":"Mythos","traits":"Yharnam","locationFront":{"icons":"Hourglass","connections":"Slash|T","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}],"victory":1},"locationBack":{"icons":"Hourglass","connections":"Slash|T"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 101200,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1012": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.ibb.co/HdJ3gv7/ec3f2de44b1d.jpg",
|
||||
"FaceURL": "https://i.ibb.co/Y7J9Cky/8df16f462681.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "Frenzied Flames",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act2Locations.1536ba/OminousPyre.e0000d.gmnotes",
|
||||
"GUID": "e0000d",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Ominous Pyre",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -23.916,
|
||||
"posY": 1.551,
|
||||
"posZ": -6.266,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 179,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"ff6a92f6-5dc0-4683-b0d9-82e76b2c0315","type":"Location","class":"Mythos","traits":"Yharnam","locationFront":{"icons":"Hourglass","connections":"Slash|T","uses":[{"token":"clue","type":"Clue","countPerInvestigator":1}],"victory":1},"locationBack":{"icons":"Hourglass","connections":"Slash|T"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 101300,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1013": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/utwdmG9.jpg",
|
||||
"FaceURL": "https://i.imgur.com/ly4fYM3.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "Burning Embers",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act2Locations.1536ba/OminousPyre.e0000e.gmnotes",
|
||||
"GUID": "e0000e",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Ominous Pyre",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -23.677,
|
||||
"posY": 1.532,
|
||||
"posZ": -7.7,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"d703ce98-666b-4618-adb8-09a3e20de708","type":"Location","class":"Mythos","traits":"Yharnam","locationFront":{"icons":"T","connections":"Cross|Moon|DoubleSlash|Hourglass|Heart","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}]},"locationBack":{"icons":"T","connections":"Cross|Moon|DoubleSlash|Hourglass|Heart"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 101500,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1015": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/Zsd3X2A.jpg",
|
||||
"FaceURL": "https://i.imgur.com/VBjPMXl.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act2Locations.1536ba/UndertheGreatBridge.e00010.gmnotes",
|
||||
"GUID": "e00010",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Under the Great Bridge",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -23.677,
|
||||
"posY": 1.534,
|
||||
"posZ": -0.03,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"Bag": {
|
||||
"Order": 0
|
||||
},
|
||||
"ColorDiffuse": {
|
||||
"b": 0,
|
||||
"g": 0.36652,
|
||||
"r": 0.70588
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"DesertedManor.e27a6f",
|
||||
"DesertedManor.e00006"
|
||||
],
|
||||
"ContainedObjects_path": "Act3Locations.948eb7",
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "948eb7",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScriptState_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act3Locations.948eb7.luascriptstate",
|
||||
"LuaScript_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act3Locations.948eb7.ttslua",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
"MeshIndex": -1,
|
||||
"Name": "Bag",
|
||||
"Nickname": "Act 3 Locations",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 8.625,
|
||||
"posY": 1.296,
|
||||
"posZ": 4.239,
|
||||
"rotX": 0,
|
||||
"rotY": 90,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"ml":{"e00006":{"lock":false,"pos":{"x":-17.04,"y":1.5336,"z":-7.65},"rot":{"x":0.0007,"y":269.9999,"z":180.0035}},"e27a6f":{"lock":false,"pos":{"x":-17.04,"y":1.5332,"z":0},"rot":{"x":0.0046,"y":269.9999,"z":180.0283}}}}
|
@ -0,0 +1,274 @@
|
||||
function updateSave()
|
||||
local data_to_save = {["ml"]=memoryList}
|
||||
saved_data = JSON.encode(data_to_save)
|
||||
self.script_state = saved_data
|
||||
end
|
||||
|
||||
function onload(saved_data)
|
||||
if saved_data ~= "" then
|
||||
local loaded_data = JSON.decode(saved_data)
|
||||
--Set up information off of loaded_data
|
||||
memoryList = loaded_data.ml
|
||||
else
|
||||
--Set up information for if there is no saved saved data
|
||||
memoryList = {}
|
||||
end
|
||||
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--Beginning Setup
|
||||
|
||||
|
||||
--Make setup button
|
||||
function createSetupButton()
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Triggered by setup button,
|
||||
function buttonClick_setup()
|
||||
memoryListBackup = duplicateTable(memoryList)
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createButtonsOnAllObjects()
|
||||
createSetupActionButtons()
|
||||
end
|
||||
|
||||
--Creates selection buttons on objects
|
||||
function createButtonsOnAllObjects()
|
||||
local howManyButtons = 0
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
if obj ~= self then
|
||||
local dummyIndex = howManyButtons
|
||||
--On a normal bag, the button positions aren't the same size as the bag.
|
||||
globalScaleFactor = 1.25 * 1/self.getScale().x
|
||||
--Super sweet math to set button positions
|
||||
local selfPos = self.getPosition()
|
||||
local objPos = obj.getPosition()
|
||||
local deltaPos = findOffsetDistance(selfPos, objPos, obj)
|
||||
local objPos = rotateLocalCoordinates(deltaPos, self)
|
||||
objPos.x = -objPos.x * globalScaleFactor
|
||||
objPos.y = objPos.y * globalScaleFactor
|
||||
objPos.z = objPos.z * globalScaleFactor
|
||||
--Offset rotation of bag
|
||||
local rot = self.getRotation()
|
||||
rot.y = -rot.y + 180
|
||||
--Create function
|
||||
local funcName = "selectButton_" .. howManyButtons
|
||||
local func = function() buttonClick_selection(dummyIndex, obj) end
|
||||
self.setVar(funcName, func)
|
||||
self.createButton({
|
||||
click_function=funcName, function_owner=self,
|
||||
position=objPos, rotation=rot, height=1000, width=1000,
|
||||
color={0.75,0.25,0.25,0.6},
|
||||
})
|
||||
howManyButtons = howManyButtons + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Creates submit and cancel buttons
|
||||
function createSetupActionButtons()
|
||||
self.createButton({
|
||||
label="Cancel", click_function="buttonClick_cancel", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Submit", click_function="buttonClick_submit", function_owner=self,
|
||||
position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Reset", click_function="buttonClick_reset", function_owner=self,
|
||||
position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--During Setup
|
||||
|
||||
|
||||
--Checks or unchecks buttons
|
||||
function buttonClick_selection(index, obj)
|
||||
local color = {0,1,0,0.6}
|
||||
if memoryList[obj.getGUID()] == nil then
|
||||
self.editButton({index=index, color=color})
|
||||
--Adding pos/rot to memory table
|
||||
local pos, rot = obj.getPosition(), obj.getRotation()
|
||||
--I need to add it like this or it won't save due to indexing issue
|
||||
memoryList[obj.getGUID()] = {
|
||||
pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
lock=obj.getLock()
|
||||
}
|
||||
obj.highlightOn({0,1,0})
|
||||
else
|
||||
color = {0.75,0.25,0.25,0.6}
|
||||
self.editButton({index=index, color=color})
|
||||
memoryList[obj.getGUID()] = nil
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Cancels selection process
|
||||
function buttonClick_cancel()
|
||||
memoryList = memoryListBackup
|
||||
self.clearButtons()
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Selection Canceled", {1,1,1})
|
||||
end
|
||||
|
||||
--Saves selections
|
||||
function buttonClick_submit()
|
||||
if next(memoryList) == nil then
|
||||
broadcastToAll("You cannot submit without any selections.", {0.75, 0.25, 0.25})
|
||||
else
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
end
|
||||
|
||||
--Resets bag to starting status
|
||||
function buttonClick_reset()
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createSetupButton()
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Tool Reset", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
|
||||
|
||||
--After Setup
|
||||
|
||||
|
||||
--Creates recall and place buttons
|
||||
function createMemoryActionButtons()
|
||||
self.createButton({
|
||||
label="Place", click_function="buttonClick_place", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Recall", click_function="buttonClick_recall", function_owner=self,
|
||||
position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Sends objects from bag/table to their saved position/rotation
|
||||
function buttonClick_place()
|
||||
local bagObjList = self.getObjects()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
--If obj is out on the table, move it to the saved pos/rot
|
||||
if obj ~= nil then
|
||||
obj.setPositionSmooth(entry.pos)
|
||||
obj.setRotationSmooth(entry.rot)
|
||||
obj.setLock(entry.lock)
|
||||
else
|
||||
--If obj is inside of the bag
|
||||
for _, bagObj in ipairs(bagObjList) do
|
||||
if bagObj.guid == guid then
|
||||
local item = self.takeObject({
|
||||
guid=guid, position=entry.pos, rotation=entry.rot,
|
||||
})
|
||||
item.setLock(entry.lock)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
broadcastToAll("Objects Placed", {1,1,1})
|
||||
end
|
||||
|
||||
--Recalls objects to bag from table
|
||||
function buttonClick_recall()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then self.putObject(obj) end
|
||||
end
|
||||
broadcastToAll("Objects Recalled", {1,1,1})
|
||||
end
|
||||
|
||||
|
||||
--Utility functions
|
||||
|
||||
|
||||
--Find delta (difference) between 2 x/y/z coordinates
|
||||
function findOffsetDistance(p1, p2, obj)
|
||||
local deltaPos = {}
|
||||
local bounds = obj.getBounds()
|
||||
deltaPos.x = (p2.x-p1.x)
|
||||
deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)
|
||||
deltaPos.z = (p2.z-p1.z)
|
||||
return deltaPos
|
||||
end
|
||||
|
||||
--Used to rotate a set of coordinates by an angle
|
||||
function rotateLocalCoordinates(desiredPos, obj)
|
||||
local objPos, objRot = obj.getPosition(), obj.getRotation()
|
||||
local angle = math.rad(objRot.y)
|
||||
local x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)
|
||||
local z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)
|
||||
--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}
|
||||
return {x=x, y=desiredPos.y, z=z}
|
||||
end
|
||||
|
||||
--Coroutine delay, in seconds
|
||||
function wait(time)
|
||||
local start = os.time()
|
||||
repeat coroutine.yield(0) until os.time() > start + time
|
||||
end
|
||||
|
||||
--Duplicates a table (needed to prevent it making reference to the same objects)
|
||||
function duplicateTable(oldTable)
|
||||
local newTable = {}
|
||||
for k, v in pairs(oldTable) do
|
||||
newTable[k] = v
|
||||
end
|
||||
return newTable
|
||||
end
|
||||
|
||||
--Moves scripted highlight from all objects
|
||||
function removeAllHighlights()
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Round number (num) to the Nth decimal (dec)
|
||||
function round(num, dec)
|
||||
local mult = 10^(dec or 0)
|
||||
return math.floor(num * mult + 0.5) / mult
|
||||
end
|
||||
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"2cd52429-1553-4ae9-b66a-d157e381b619","type":"Location","class":"Mythos","traits":"Yharnam. Estate. ","locationFront":{"icons":"Heart","connections":"T","uses":[{"token":"clue","type":"Clue","countPerInvestigator":1}],"victory":1},"locationBack":{"icons":"Heart","connections":"T"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100500,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1005": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/3xqFKJm.jpg",
|
||||
"FaceURL": "https://i.imgur.com/88kyQhV.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "Bloodsoaked Boudoir",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act3Locations.948eb7/DesertedManor.e00006.gmnotes",
|
||||
"GUID": "e00006",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Deserted Manor",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -17.04,
|
||||
"posY": 1.534,
|
||||
"posZ": -7.65,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"e85af8a8-2561-4105-8138-5c1e639f5d3f","type":"Location","class":"Mythos","traits":"Yharnam. Estate. ","locationFront":{"icons":"Heart","connections":"T","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}],"victory":1},"locationBack":{"icons":"Heart","connections":"T"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 100600,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1006": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/YF3S6nJ.jpg",
|
||||
"FaceURL": "https://i.imgur.com/YkWBSRW.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "Barren Bedchambers",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act3Locations.948eb7/DesertedManor.e27a6f.gmnotes",
|
||||
"GUID": "e27a6f",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Deserted Manor",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -17.04,
|
||||
"posY": 1.533,
|
||||
"posZ": 0,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"Bag": {
|
||||
"Order": 0
|
||||
},
|
||||
"ColorDiffuse": {
|
||||
"b": 0,
|
||||
"g": 0.36652,
|
||||
"r": 0.70588
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"Custom_Token.54b03c",
|
||||
"Custom_Token.73d971",
|
||||
"Custom_Token.de99ab",
|
||||
"NarrowAlleyway.e0000c",
|
||||
"SomberMemorial.e0000f"
|
||||
],
|
||||
"ContainedObjects_path": "Act4Locations.0f2322",
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "0f2322",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScriptState_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act4Locations.0f2322.luascriptstate",
|
||||
"LuaScript_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act4Locations.0f2322.ttslua",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
"MeshIndex": -1,
|
||||
"Name": "Bag",
|
||||
"Nickname": "Act 4 Locations",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 8.732,
|
||||
"posY": 1.296,
|
||||
"posZ": 0.182,
|
||||
"rotX": 0,
|
||||
"rotY": 90,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"ml":{"54b03c":{"lock":false,"pos":{"x":-15.7501,"y":1.67,"z":11.8159},"rot":{"x":0,"y":265.3762,"z":0}},"73d971":{"lock":false,"pos":{"x":-19.6243,"y":1.67,"z":5.0555},"rot":{"x":0,"y":265.3765,"z":0}},"de99ab":{"lock":false,"pos":{"x":-18.9515,"y":1.67,"z":11.7701},"rot":{"x":-0.0001,"y":270.0188,"z":0}},"e0000c":{"lock":false,"pos":{"x":-17.1199,"y":1.5336,"z":7.57},"rot":{"x":0,"y":270.0004,"z":180}},"e0000f":{"lock":false,"pos":{"x":-17.1201,"y":1.5336,"z":15.19},"rot":{"x":0,"y":269.9722,"z":180}}}}
|
@ -0,0 +1,274 @@
|
||||
function updateSave()
|
||||
local data_to_save = {["ml"]=memoryList}
|
||||
saved_data = JSON.encode(data_to_save)
|
||||
self.script_state = saved_data
|
||||
end
|
||||
|
||||
function onload(saved_data)
|
||||
if saved_data ~= "" then
|
||||
local loaded_data = JSON.decode(saved_data)
|
||||
--Set up information off of loaded_data
|
||||
memoryList = loaded_data.ml
|
||||
else
|
||||
--Set up information for if there is no saved saved data
|
||||
memoryList = {}
|
||||
end
|
||||
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--Beginning Setup
|
||||
|
||||
|
||||
--Make setup button
|
||||
function createSetupButton()
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Triggered by setup button,
|
||||
function buttonClick_setup()
|
||||
memoryListBackup = duplicateTable(memoryList)
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createButtonsOnAllObjects()
|
||||
createSetupActionButtons()
|
||||
end
|
||||
|
||||
--Creates selection buttons on objects
|
||||
function createButtonsOnAllObjects()
|
||||
local howManyButtons = 0
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
if obj ~= self then
|
||||
local dummyIndex = howManyButtons
|
||||
--On a normal bag, the button positions aren't the same size as the bag.
|
||||
globalScaleFactor = 1.25 * 1/self.getScale().x
|
||||
--Super sweet math to set button positions
|
||||
local selfPos = self.getPosition()
|
||||
local objPos = obj.getPosition()
|
||||
local deltaPos = findOffsetDistance(selfPos, objPos, obj)
|
||||
local objPos = rotateLocalCoordinates(deltaPos, self)
|
||||
objPos.x = -objPos.x * globalScaleFactor
|
||||
objPos.y = objPos.y * globalScaleFactor
|
||||
objPos.z = objPos.z * globalScaleFactor
|
||||
--Offset rotation of bag
|
||||
local rot = self.getRotation()
|
||||
rot.y = -rot.y + 180
|
||||
--Create function
|
||||
local funcName = "selectButton_" .. howManyButtons
|
||||
local func = function() buttonClick_selection(dummyIndex, obj) end
|
||||
self.setVar(funcName, func)
|
||||
self.createButton({
|
||||
click_function=funcName, function_owner=self,
|
||||
position=objPos, rotation=rot, height=1000, width=1000,
|
||||
color={0.75,0.25,0.25,0.6},
|
||||
})
|
||||
howManyButtons = howManyButtons + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Creates submit and cancel buttons
|
||||
function createSetupActionButtons()
|
||||
self.createButton({
|
||||
label="Cancel", click_function="buttonClick_cancel", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Submit", click_function="buttonClick_submit", function_owner=self,
|
||||
position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Reset", click_function="buttonClick_reset", function_owner=self,
|
||||
position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--During Setup
|
||||
|
||||
|
||||
--Checks or unchecks buttons
|
||||
function buttonClick_selection(index, obj)
|
||||
local color = {0,1,0,0.6}
|
||||
if memoryList[obj.getGUID()] == nil then
|
||||
self.editButton({index=index, color=color})
|
||||
--Adding pos/rot to memory table
|
||||
local pos, rot = obj.getPosition(), obj.getRotation()
|
||||
--I need to add it like this or it won't save due to indexing issue
|
||||
memoryList[obj.getGUID()] = {
|
||||
pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},
|
||||
rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},
|
||||
lock=obj.getLock()
|
||||
}
|
||||
obj.highlightOn({0,1,0})
|
||||
else
|
||||
color = {0.75,0.25,0.25,0.6}
|
||||
self.editButton({index=index, color=color})
|
||||
memoryList[obj.getGUID()] = nil
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Cancels selection process
|
||||
function buttonClick_cancel()
|
||||
memoryList = memoryListBackup
|
||||
self.clearButtons()
|
||||
if next(memoryList) == nil then
|
||||
createSetupButton()
|
||||
else
|
||||
createMemoryActionButtons()
|
||||
end
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Selection Canceled", {1,1,1})
|
||||
end
|
||||
|
||||
--Saves selections
|
||||
function buttonClick_submit()
|
||||
if next(memoryList) == nil then
|
||||
broadcastToAll("You cannot submit without any selections.", {0.75, 0.25, 0.25})
|
||||
else
|
||||
self.clearButtons()
|
||||
createMemoryActionButtons()
|
||||
local count = 0
|
||||
for guid in pairs(memoryList) do
|
||||
count = count + 1
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then obj.highlightOff() end
|
||||
end
|
||||
broadcastToAll(count.." Objects Saved", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
end
|
||||
|
||||
--Resets bag to starting status
|
||||
function buttonClick_reset()
|
||||
memoryList = {}
|
||||
self.clearButtons()
|
||||
createSetupButton()
|
||||
removeAllHighlights()
|
||||
broadcastToAll("Tool Reset", {1,1,1})
|
||||
updateSave()
|
||||
end
|
||||
|
||||
|
||||
--After Setup
|
||||
|
||||
|
||||
--Creates recall and place buttons
|
||||
function createMemoryActionButtons()
|
||||
self.createButton({
|
||||
label="Place", click_function="buttonClick_place", function_owner=self,
|
||||
position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Recall", click_function="buttonClick_recall", function_owner=self,
|
||||
position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
self.createButton({
|
||||
label="Setup", click_function="buttonClick_setup", function_owner=self,
|
||||
position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,
|
||||
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||||
})
|
||||
end
|
||||
|
||||
--Sends objects from bag/table to their saved position/rotation
|
||||
function buttonClick_place()
|
||||
local bagObjList = self.getObjects()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
--If obj is out on the table, move it to the saved pos/rot
|
||||
if obj ~= nil then
|
||||
obj.setPositionSmooth(entry.pos)
|
||||
obj.setRotationSmooth(entry.rot)
|
||||
obj.setLock(entry.lock)
|
||||
else
|
||||
--If obj is inside of the bag
|
||||
for _, bagObj in ipairs(bagObjList) do
|
||||
if bagObj.guid == guid then
|
||||
local item = self.takeObject({
|
||||
guid=guid, position=entry.pos, rotation=entry.rot,
|
||||
})
|
||||
item.setLock(entry.lock)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
broadcastToAll("Objects Placed", {1,1,1})
|
||||
end
|
||||
|
||||
--Recalls objects to bag from table
|
||||
function buttonClick_recall()
|
||||
for guid, entry in pairs(memoryList) do
|
||||
local obj = getObjectFromGUID(guid)
|
||||
if obj ~= nil then self.putObject(obj) end
|
||||
end
|
||||
broadcastToAll("Objects Recalled", {1,1,1})
|
||||
end
|
||||
|
||||
|
||||
--Utility functions
|
||||
|
||||
|
||||
--Find delta (difference) between 2 x/y/z coordinates
|
||||
function findOffsetDistance(p1, p2, obj)
|
||||
local deltaPos = {}
|
||||
local bounds = obj.getBounds()
|
||||
deltaPos.x = (p2.x-p1.x)
|
||||
deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)
|
||||
deltaPos.z = (p2.z-p1.z)
|
||||
return deltaPos
|
||||
end
|
||||
|
||||
--Used to rotate a set of coordinates by an angle
|
||||
function rotateLocalCoordinates(desiredPos, obj)
|
||||
local objPos, objRot = obj.getPosition(), obj.getRotation()
|
||||
local angle = math.rad(objRot.y)
|
||||
local x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)
|
||||
local z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)
|
||||
--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}
|
||||
return {x=x, y=desiredPos.y, z=z}
|
||||
end
|
||||
|
||||
--Coroutine delay, in seconds
|
||||
function wait(time)
|
||||
local start = os.time()
|
||||
repeat coroutine.yield(0) until os.time() > start + time
|
||||
end
|
||||
|
||||
--Duplicates a table (needed to prevent it making reference to the same objects)
|
||||
function duplicateTable(oldTable)
|
||||
local newTable = {}
|
||||
for k, v in pairs(oldTable) do
|
||||
newTable[k] = v
|
||||
end
|
||||
return newTable
|
||||
end
|
||||
|
||||
--Moves scripted highlight from all objects
|
||||
function removeAllHighlights()
|
||||
for _, obj in ipairs(getAllObjects()) do
|
||||
obj.highlightOff()
|
||||
end
|
||||
end
|
||||
|
||||
--Round number (num) to the Nth decimal (dec)
|
||||
function round(num, dec)
|
||||
local mult = 10^(dec or 0)
|
||||
return math.floor(num * mult + 0.5) / mult
|
||||
end
|
||||
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomToken": {
|
||||
"MergeDistancePixels": 5,
|
||||
"Stackable": true,
|
||||
"StandUp": false,
|
||||
"Thickness": 0.3
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "54b03c",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Token",
|
||||
"Nickname": "",
|
||||
"Snap": false,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -15.75,
|
||||
"posY": 1.67,
|
||||
"posZ": 11.816,
|
||||
"rotX": 0,
|
||||
"rotY": 265,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.33,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.33
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomToken": {
|
||||
"MergeDistancePixels": 5,
|
||||
"Stackable": true,
|
||||
"StandUp": false,
|
||||
"Thickness": 0.3
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "73d971",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Token",
|
||||
"Nickname": "",
|
||||
"Snap": false,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -19.624,
|
||||
"posY": 1.67,
|
||||
"posZ": 5.056,
|
||||
"rotX": 0,
|
||||
"rotY": 265,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.33,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.33
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomToken": {
|
||||
"MergeDistancePixels": 5,
|
||||
"Stackable": true,
|
||||
"StandUp": false,
|
||||
"Thickness": 0.3
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "de99ab",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Token",
|
||||
"Nickname": "",
|
||||
"Snap": false,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -18.951,
|
||||
"posY": 1.67,
|
||||
"posZ": 11.77,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.33,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.33
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"0a8b9e24-1f35-4141-a852-c8a7dc445d6e","type":"Location","class":"Mythos","traits":"Yharnam","locationFront":{"icons":"DoubleSlash","connections":"T|Star","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}],"victory":1},"locationBack":{"icons":"DoubleSlash","connections":"T|Star"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 101100,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1011": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.ibb.co/V24XMqz/9dcf3f346cec.jpg",
|
||||
"FaceURL": "https://i.ibb.co/3SV6tRw/663e0cef0466.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act4Locations.0f2322/NarrowAlleyway.e0000c.gmnotes",
|
||||
"GUID": "e0000c",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Narrow Alleyway",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -17.12,
|
||||
"posY": 1.534,
|
||||
"posZ": 7.57,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"ae881d0d-bf2e-4379-98db-ff040aa2018e","type":"Location","class":"Mythos","traits":"Yharnam. Graveyard","locationFront":{"icons":"Star","connections":"DoubleSlash","uses":[{"token":"clue","type":"Clue","countPerInvestigator":2}],"victory":2},"locationBack":{"icons":"Star","connections":"DoubleSlash"}}
|
@ -0,0 +1,62 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 101400,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1014": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/v9gzPxK.jpg",
|
||||
"FaceURL": "https://i.imgur.com/tshU524.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "Tomb of Oedon",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Act4Locations.0f2322/SomberMemorial.e0000f.gmnotes",
|
||||
"GUID": "e0000f",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "Somber Memorial",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"Location",
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -17.12,
|
||||
"posY": 1.534,
|
||||
"posZ": 15.19,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"Description": "Choose 1 random act deck",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "756370",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Notecard",
|
||||
"Nickname": "Act Instructions",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -11.578,
|
||||
"posY": 1.59,
|
||||
"posZ": -10.099,
|
||||
"rotX": 0,
|
||||
"rotY": 90,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomMesh": {
|
||||
"CastShadows": true,
|
||||
"ColliderURL": "http://cloud-3.steamusercontent.com/ugc/943949966265929204/A38BB5D72419E6298385556D931877C0A1A55C17/",
|
||||
"Convex": true,
|
||||
"CustomShader": {
|
||||
"FresnelStrength": 0,
|
||||
"SpecularColor": {
|
||||
"b": 0.339915335,
|
||||
"g": 0.507659256,
|
||||
"r": 0.7222887
|
||||
},
|
||||
"SpecularIntensity": 0.4,
|
||||
"SpecularSharpness": 7
|
||||
},
|
||||
"DiffuseURL": "http://cloud-3.steamusercontent.com/ugc/254843371583187306/6844B833AD55B9A34095067B201B311E1348325F/",
|
||||
"MaterialIndex": 2,
|
||||
"MeshURL": "http://cloud-3.steamusercontent.com/ugc/943949966265929204/A38BB5D72419E6298385556D931877C0A1A55C17/",
|
||||
"NormalURL": "",
|
||||
"TypeIndex": 0
|
||||
},
|
||||
"Description": "Include this in custom content for clue spawning!",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "8f6217",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScriptState": "",
|
||||
"LuaScript_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/BloodborneCustomDataHelper.8f6217.ttslua",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Model",
|
||||
"Nickname": "Bloodborne Custom Data Helper",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -3.333,
|
||||
"posY": 1.633,
|
||||
"posZ": -14.346,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.5,
|
||||
"scaleY": 0.5,
|
||||
"scaleZ": 0.5
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,402 @@
|
||||
-- set true to enable debug logging
|
||||
DEBUG = false
|
||||
|
||||
function log(message)
|
||||
if DEBUG then
|
||||
print(message)
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
Known locations and clues. We check this to determine if we should
|
||||
atttempt to spawn clues, first we look for <LOCATION_NAME>_<GUID> and if
|
||||
we find nothing we look for <LOCATION_NAME>
|
||||
format is [location_guid -> clueCount]
|
||||
]]
|
||||
LOCATIONS_DATA_JSON = [[
|
||||
{
|
||||
"San Francisco": {"type": "fixed", "value": 1, "clueSide": "back"},
|
||||
" Arkham": {"type": "perPlayer", "value": 1, "clueSide": "back"},
|
||||
"Buenos Aires": {"type": "fixed", "value": 2, "clueSide": "back"},
|
||||
" London": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Rome": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Istanbul": {"type": "perPlayer", "value": 4, "clueSide": "front"},
|
||||
"Tokyo_123abc": {"type": "perPlayer", "value": 0, "clueSide": "back"},
|
||||
"Tokyo_456efg": {"type": "perPlayer", "value": 4, "clueSide": "back"},
|
||||
"Tokyo": {"type": "fixed", "value": 2, "clueSide": "back"},
|
||||
"Shanghai_123": {"type": "fixed", "value": 12, "clueSide": "front"},
|
||||
"Sydney": {"type": "fixed", "value": 0, "clueSide": "front"},
|
||||
"Under the Great Bridge": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Somber Memorial": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Ominous Pyre": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Ominous Pyre ": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Narrow Alleyway": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Moonlit Backstreet": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Moonlit Backstreet ": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Central Yharnam Promenade": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Hospital Courtyard": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Deserted Manor_adcfac": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"City Center Plaza": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Atop the Great Bridge": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Deserted Manor_e00007": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"1st Floor Sickroom": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"1st Floor Examination Room": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Chapel Transept": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chapel Sanctuary": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chapel Rectory": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chapel Nave": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Chapel Attic_0e64f5": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Untended Graves": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Tomb of the Queen": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Shadowed Woods": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Rotting Thicket": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Oedon Chapel Subterrane": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Moonlit Clearing": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Misty Weald": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Hemwick Charnel Lane": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Gibbeting Path": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Gates of Byrgenwerth": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Deserted Trapping Village": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Derelict Coachhouse": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Burial Grove": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Abandoned Mill": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Private Library": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Research Hall": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Faculty Offices": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Rooftops_e00008": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Annex": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Astronomy Hall": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Lecture Hall": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"University Foyer": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"*The Portrait of the First Vicar": {"type": "perPlayer", "value": 2, "clueSide": "back"},
|
||||
"*The Portrait of the Holy Blade": {"type": "perPlayer", "value": 2, "clueSide": "back"},
|
||||
"*The Portrait of the Holy Blade": {"type": "perPlayer", "value": 1, "clueSide": "back"},
|
||||
"*The Portrait of the Headmaster": {"type": "perPlayer", "value": 1, "clueSide": "back"},
|
||||
"*The Portrait of the Governess": {"type": "perPlayer", "value": 2, "clueSide": "back"},
|
||||
"Audience Chamber": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Cathedral Steps": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Cathedral Ward Cemetery": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Grand Cathedral of Yharnam": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Surgery Altar": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"The Bridge of Saints": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Grand Cathedral Sanctuary": {"type": "perPlayer", "value": 0, "clueSide": "front"},
|
||||
"The Lumenflower Garden": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Steps of Penance": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Mirror Chamber": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber ": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber ": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber ": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Branching Corridors": {"type": "fixed", "value": 1, "clueSide": "front"},
|
||||
"Yale University": {"type": "fixed", "value": 1, "clueSide": "front"},
|
||||
"The Cimmerian Descent": {"type": "fixed", "value": 1, "clueSide": "front"},
|
||||
"The College of Mensis": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Ritual Cloister": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Mensis Refectory": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Lair of the Brain": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"The Hypogean Gaol": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Spires of the Loft": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Featured Exhibit": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Depths of the Loft": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Dangling Cells": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Byrgenwerth": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Apostle's Gallery": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Wet Nurse's Lunarium": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Spire of Mensis": {"type": "perPlayer", "value": 1, "clueSide": "back"},
|
||||
"Aeonian Sickbeds": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Decaying Fishing Hamlet": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Lumenwood Garden": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Forgotten Coast": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Advent Plaza": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Sacrificial Pits": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Yahar'gul Chapel": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Yahar'gul Commons": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Defiled Pthumerian Shrine": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Pthumeru Ihyll Labyrinth": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Tomb of Oedon": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Moonside Lake": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Ailing Loran Frontier": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Bloodstained Gate": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"The Eastern Cathedral": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mergo's Loft": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Sanguine River": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Underground Corpse Pile": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Western Cathedral": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chalice Headstones": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Gates of the Dream": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chalice Headstones": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Grave-Marked Trail": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Misty Garden Path": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Moon-Kissed Meadow": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Burning Workshop": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"The Dream Aflame": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Messengers' Bath": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Deserted Manor_1566a5": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Moonlit Clearing_e00008": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Research Hall_e00007": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Rooftops_e0008": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Lecture Hall_e00004": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Surgery Altar_e00007": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"The Lumenflower Gardens_1a433f": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Blood Healing Laboratory_998d8c": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Contact Chamber_10edc3": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Contact Chamber_31e857": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Audience Chamber_e00001": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Mirror Chamber _e00003": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber _e00001": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber_e00004": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber _e00002": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Dangling Cells_49d503": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Depths of the Loft_e00007": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Lair of the Brain_e0000b": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Ritual Cloister_e00013": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Mensis Refectory_e0000e": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Spires of the Loft_e00009": {"type": "perPlayer", "value": 2, "clueSide": "front"}
|
||||
|
||||
}
|
||||
]]
|
||||
|
||||
|
||||
PLAYER_CARD_DATA_JSON = [[
|
||||
{
|
||||
"Tool Belt (0)": {
|
||||
"tokenType": "resource",
|
||||
"tokenCount": 2
|
||||
},
|
||||
"Tool Belt (3)": {
|
||||
"tokenType": "resource",
|
||||
"tokenCount": 4
|
||||
},
|
||||
"Yithian Rifle": {
|
||||
"tokenType": "resource",
|
||||
"tokenCount": 3
|
||||
},
|
||||
"xxx": {
|
||||
"tokenType": "resource",
|
||||
"tokenCount": 3
|
||||
}
|
||||
}
|
||||
]]
|
||||
|
||||
HIDDEN_CARD_DATA = {
|
||||
"Unpleasant Card (Doom)",
|
||||
"Unpleasant Card (Gloom)",
|
||||
"The Case of the Scarlet DOOOOOM!"
|
||||
}
|
||||
|
||||
LOCATIONS_DATA = JSON.decode(LOCATIONS_DATA_JSON)
|
||||
PLAYER_CARD_DATA = JSON.decode(PLAYER_CARD_DATA_JSON)
|
||||
|
||||
function onload(save_state)
|
||||
local playArea = getObjectFromGUID('721ba2')
|
||||
playArea.call("updateLocations", {self.getGUID()})
|
||||
local playerMatWhite = getObjectFromGUID('8b081b')
|
||||
playerMatWhite.call("updatePlayerCards", {self.getGUID()})
|
||||
local playerMatOrange = getObjectFromGUID('bd0ff4')
|
||||
playerMatOrange.call("updatePlayerCards", {self.getGUID()})
|
||||
local playerMatGreen = getObjectFromGUID('383d8b')
|
||||
playerMatGreen.call("updatePlayerCards", {self.getGUID()})
|
||||
local playerMatRed = getObjectFromGUID('0840d5')
|
||||
playerMatRed.call("updatePlayerCards", {self.getGUID()})
|
||||
local dataHelper = getObjectFromGUID('708279')
|
||||
dataHelper.call("updateHiddenCards", {self.getGUID()})
|
||||
end-- set true to enable debug logging
|
||||
DEBUG = false
|
||||
|
||||
function log(message)
|
||||
if DEBUG then
|
||||
print(message)
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
Known locations and clues. We check this to determine if we should
|
||||
atttempt to spawn clues, first we look for <LOCATION_NAME>_<GUID> and if
|
||||
we find nothing we look for <LOCATION_NAME>
|
||||
format is [location_guid -> clueCount]
|
||||
]]
|
||||
LOCATIONS_DATA_JSON = [[
|
||||
{
|
||||
"San Francisco": {"type": "fixed", "value": 1, "clueSide": "back"},
|
||||
" Arkham": {"type": "perPlayer", "value": 1, "clueSide": "back"},
|
||||
"Buenos Aires": {"type": "fixed", "value": 2, "clueSide": "back"},
|
||||
" London": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Rome": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Istanbul": {"type": "perPlayer", "value": 4, "clueSide": "front"},
|
||||
"Tokyo_123abc": {"type": "perPlayer", "value": 0, "clueSide": "back"},
|
||||
"Tokyo_456efg": {"type": "perPlayer", "value": 4, "clueSide": "back"},
|
||||
"Tokyo": {"type": "fixed", "value": 2, "clueSide": "back"},
|
||||
"Shanghai_123": {"type": "fixed", "value": 12, "clueSide": "front"},
|
||||
"Sydney": {"type": "fixed", "value": 0, "clueSide": "front"},
|
||||
"Under the Great Bridge": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Somber Memorial": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Ominous Pyre": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Ominous Pyre ": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Narrow Alleyway": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Moonlit Backstreet": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Moonlit Backstreet ": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Central Yharnam Promenade": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Hospital Courtyard": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Deserted Manor_adcfac": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"City Center Plaza": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Atop the Great Bridge": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Deserted Manor_e00007": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"1st Floor Sickroom": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"1st Floor Examination Room": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Chapel Transept": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chapel Sanctuary": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chapel Rectory": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chapel Nave": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Chapel Attic_0e64f5": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Untended Graves": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Tomb of the Queen": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Shadowed Woods": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Rotting Thicket": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Oedon Chapel Subterrane": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Moonlit Clearing": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Misty Weald": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Hemwick Charnel Lane": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Gibbeting Path": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Gates of Byrgenwerth": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Deserted Trapping Village": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Derelict Coachhouse": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Burial Grove": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Abandoned Mill": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Private Library": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Research Hall": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Faculty Offices": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Rooftops_e00008": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Annex": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Astronomy Hall": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Lecture Hall": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"University Foyer": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"*The Portrait of the First Vicar": {"type": "perPlayer", "value": 2, "clueSide": "back"},
|
||||
"*The Portrait of the Holy Blade": {"type": "perPlayer", "value": 2, "clueSide": "back"},
|
||||
"*The Portrait of the Holy Blade": {"type": "perPlayer", "value": 1, "clueSide": "back"},
|
||||
"*The Portrait of the Headmaster": {"type": "perPlayer", "value": 1, "clueSide": "back"},
|
||||
"*The Portrait of the Governess": {"type": "perPlayer", "value": 2, "clueSide": "back"},
|
||||
"Audience Chamber": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Cathedral Steps": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Cathedral Ward Cemetery": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Grand Cathedral of Yharnam": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Surgery Altar": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"The Bridge of Saints": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Grand Cathedral Sanctuary": {"type": "perPlayer", "value": 0, "clueSide": "front"},
|
||||
"The Lumenflower Garden": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Steps of Penance": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Mirror Chamber": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber ": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber ": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber ": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Branching Corridors": {"type": "fixed", "value": 1, "clueSide": "front"},
|
||||
"Yale University": {"type": "fixed", "value": 1, "clueSide": "front"},
|
||||
"The Cimmerian Descent": {"type": "fixed", "value": 1, "clueSide": "front"},
|
||||
"The College of Mensis": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Ritual Cloister": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Mensis Refectory": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Lair of the Brain": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"The Hypogean Gaol": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Spires of the Loft": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Featured Exhibit": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Depths of the Loft": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Dangling Cells": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Byrgenwerth": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Apostle's Gallery": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Wet Nurse's Lunarium": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Spire of Mensis": {"type": "perPlayer", "value": 1, "clueSide": "back"},
|
||||
"Aeonian Sickbeds": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Decaying Fishing Hamlet": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Lumenwood Garden": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Forgotten Coast": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Advent Plaza": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Sacrificial Pits": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Yahar'gul Chapel": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Yahar'gul Commons": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Defiled Pthumerian Shrine": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Pthumeru Ihyll Labyrinth": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Tomb of Oedon": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Moonside Lake": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Ailing Loran Frontier": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Bloodstained Gate": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"The Eastern Cathedral": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mergo's Loft": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Sanguine River": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Underground Corpse Pile": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Western Cathedral": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chalice Headstones": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Gates of the Dream": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Chalice Headstones": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Grave-Marked Trail": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Misty Garden Path": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Moon-Kissed Meadow": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Burning Workshop": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"The Dream Aflame": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Messengers' Bath": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Deserted Manor_1566a5": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Moonlit Clearing_e00008": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Research Hall_e00007": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Rooftops_e0008": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Lecture Hall_e00004": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"The Surgery Altar_e00007": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"The Lumenflower Gardens_1a433f": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Blood Healing Laboratory_998d8c": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Contact Chamber_10edc3": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Contact Chamber_31e857": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Audience Chamber_e00001": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Mirror Chamber _e00003": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber _e00001": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber_e00004": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Mirror Chamber _e00002": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Dangling Cells_49d503": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Depths of the Loft_e00007": {"type": "perPlayer", "value": 1, "clueSide": "front"},
|
||||
"Lair of the Brain_e0000b": {"type": "perPlayer", "value": 3, "clueSide": "front"},
|
||||
"Ritual Cloister_e00013": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Mensis Refectory_e0000e": {"type": "perPlayer", "value": 2, "clueSide": "front"},
|
||||
"Spires of the Loft_e00009": {"type": "perPlayer", "value": 2, "clueSide": "front"}
|
||||
}
|
||||
]]
|
||||
|
||||
|
||||
PLAYER_CARD_DATA_JSON = [[
|
||||
{
|
||||
"Tool Belt (0)": {
|
||||
"tokenType": "resource",
|
||||
"tokenCount": 2
|
||||
},
|
||||
"Tool Belt (3)": {
|
||||
"tokenType": "resource",
|
||||
"tokenCount": 4
|
||||
},
|
||||
"Yithian Rifle": {
|
||||
"tokenType": "resource",
|
||||
"tokenCount": 3
|
||||
},
|
||||
"xxx": {
|
||||
"tokenType": "resource",
|
||||
"tokenCount": 3
|
||||
}
|
||||
}
|
||||
]]
|
||||
|
||||
HIDDEN_CARD_DATA = {
|
||||
"Unpleasant Card (Doom)",
|
||||
"Unpleasant Card (Gloom)",
|
||||
"The Case of the Scarlet DOOOOOM!"
|
||||
}
|
||||
|
||||
LOCATIONS_DATA = JSON.decode(LOCATIONS_DATA_JSON)
|
||||
PLAYER_CARD_DATA = JSON.decode(PLAYER_CARD_DATA_JSON)
|
||||
|
||||
function onload(save_state)
|
||||
local playArea = getObjectFromGUID('721ba2')
|
||||
playArea.call("updateLocations", {self.getGUID()})
|
||||
local playerMatWhite = getObjectFromGUID('8b081b')
|
||||
playerMatWhite.call("updatePlayerCards", {self.getGUID()})
|
||||
local playerMatOrange = getObjectFromGUID('bd0ff4')
|
||||
playerMatOrange.call("updatePlayerCards", {self.getGUID()})
|
||||
local playerMatGreen = getObjectFromGUID('383d8b')
|
||||
playerMatGreen.call("updatePlayerCards", {self.getGUID()})
|
||||
local playerMatRed = getObjectFromGUID('0840d5')
|
||||
playerMatRed.call("updatePlayerCards", {self.getGUID()})
|
||||
local dataHelper = getObjectFromGUID('708279')
|
||||
dataHelper.call("updateHiddenCards", {self.getGUID()})
|
||||
end
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomToken": {
|
||||
"MergeDistancePixels": 5,
|
||||
"Stackable": true,
|
||||
"StandUp": false,
|
||||
"Thickness": 0.3
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "00d19a",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Token",
|
||||
"Nickname": "",
|
||||
"Snap": false,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -39.767,
|
||||
"posY": 1.67,
|
||||
"posZ": 7.962,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.33,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.33
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomToken": {
|
||||
"MergeDistancePixels": 5,
|
||||
"Stackable": true,
|
||||
"StandUp": false,
|
||||
"Thickness": 0.3
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "9743de",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Token",
|
||||
"Nickname": "",
|
||||
"Snap": false,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -40.013,
|
||||
"posY": 1.67,
|
||||
"posZ": 4.191,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.33,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.33
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"AMereBadDream.e169b6",
|
||||
"ANightofCurses.7b63a6",
|
||||
"TheHuntBegins.c7c1af"
|
||||
],
|
||||
"ContainedObjects_path": "Deck.87cb2b",
|
||||
"CustomDeck": {
|
||||
"2942": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/OYNKAAA.jpg",
|
||||
"FaceURL": "https://i.imgur.com/QfbNrah.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
},
|
||||
"2943": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/w6jIO0U.jpg",
|
||||
"FaceURL": "https://i.imgur.com/mZzW74R.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
},
|
||||
"3192": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/0vDZSaH.jpg",
|
||||
"FaceURL": "https://i.imgur.com/HeXPn0b.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"DeckIDs": [
|
||||
294200,
|
||||
294300,
|
||||
319200
|
||||
],
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "87cb2b",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Deck",
|
||||
"Nickname": "",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -2.725,
|
||||
"posY": 1.618,
|
||||
"posZ": 0.373,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"d9e7c422-98c9-4120-aa45-ed70141e94ed","type":"Agenda","class":"Mythos","doomThreshold":5}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 294200,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"2942": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/OYNKAAA.jpg",
|
||||
"FaceURL": "https://i.imgur.com/QfbNrah.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Deck.87cb2b/AMereBadDream.e169b6.gmnotes",
|
||||
"GUID": "e169b6",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "A Mere Bad Dream",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -2.725,
|
||||
"posY": 1.597,
|
||||
"posZ": 0.373,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"052f3eac-989f-4e8d-aeb3-edd5e20aa5a5","type":"Agenda","class":"Mythos","doomThreshold":6}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 294300,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"2943": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/w6jIO0U.jpg",
|
||||
"FaceURL": "https://i.imgur.com/mZzW74R.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Deck.87cb2b/ANightofCurses.7b63a6.gmnotes",
|
||||
"GUID": "7b63a6",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "A Night of Curses",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -2.725,
|
||||
"posY": 1.642,
|
||||
"posZ": 0.373,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1 @@
|
||||
{"TtsZoopGuid":"78649ed4-67a4-4a8c-98e5-fa2932950b95","type":"Agenda","class":"Mythos","doomThreshold":8}
|
@ -0,0 +1,61 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"CardID": 319200,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.71324,
|
||||
"g": 0.71324,
|
||||
"r": 0.71324
|
||||
},
|
||||
"CustomDeck": {
|
||||
"1000": {
|
||||
"BackIsHidden": true,
|
||||
"BackURL": "https://i.imgur.com/0vDZSaH.jpg",
|
||||
"FaceURL": "https://i.imgur.com/HeXPn0b.jpg",
|
||||
"NumHeight": 1,
|
||||
"NumWidth": 1,
|
||||
"Type": 0,
|
||||
"UniqueBack": true
|
||||
}
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/Deck.87cb2b/TheHuntBegins.c7c1af.gmnotes",
|
||||
"GUID": "c7c1af",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": true,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Card",
|
||||
"Nickname": "The Hunt Begins",
|
||||
"SidewaysCard": false,
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"ScenarioCard"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -2.725,
|
||||
"posY": 1.676,
|
||||
"posZ": 0.373,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 1
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"Bag": {
|
||||
"Order": 0
|
||||
},
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"ContainedObjects_order": [
|
||||
"-1.611dee",
|
||||
"0.9ce4ab",
|
||||
"0.bf610b",
|
||||
"-3.06b1ba",
|
||||
"-1.fb1afd",
|
||||
"Tablet.4c0d07",
|
||||
"Custom_Tile.079c53",
|
||||
"Custom_Tile.429a2f",
|
||||
"Auto-fail.233aa2",
|
||||
"Cultist.0d2196",
|
||||
"1.20b7fc",
|
||||
"Skull.c2b8a0",
|
||||
"ElderSign.e04757",
|
||||
"-2.6cda68",
|
||||
"Skull.ddd462",
|
||||
"Custom_Tile.afaab0",
|
||||
"-2.8463a5",
|
||||
"-1.9e41ec"
|
||||
],
|
||||
"ContainedObjects_path": "EasyChaosBag.f4ca98",
|
||||
"CustomMesh": {
|
||||
"CastShadows": true,
|
||||
"ColliderURL": "",
|
||||
"Convex": true,
|
||||
"CustomShader": {
|
||||
"FresnelStrength": 0,
|
||||
"SpecularColor": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"SpecularIntensity": 0,
|
||||
"SpecularSharpness": 2
|
||||
},
|
||||
"DiffuseURL": "http://cloud-3.steamusercontent.com/ugc/959719855127933035/B199A5F515A8F3ED7E06780D3723285C02ADE085/",
|
||||
"MaterialIndex": 3,
|
||||
"MeshURL": "http://cloud-3.steamusercontent.com/ugc/87098596225685535/6C95EB6308A0A9E89367DD67D5C65D09EB3C06A0/",
|
||||
"NormalURL": "",
|
||||
"TypeIndex": 6
|
||||
},
|
||||
"Description": "Chaos Bag",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "f4ca98",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScriptState": "",
|
||||
"LuaScript_path": "Bloodborne-CityoftheUnseen0175.81651b/1TheHuntBegins.dc507f/EasyChaosBag.f4ca98.ttslua",
|
||||
"MaterialIndex": -1,
|
||||
"MeasureMovement": false,
|
||||
"MeshIndex": -1,
|
||||
"Name": "Custom_Model_Bag",
|
||||
"Nickname": "Easy Chaos Bag",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tags": [
|
||||
"chaos_bag"
|
||||
],
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 2.02,
|
||||
"posY": 1.485,
|
||||
"posZ": -23.927,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 3,
|
||||
"scaleY": 3,
|
||||
"scaleZ": 3
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
function filterObjectEnter(obj)
|
||||
local props = obj.getCustomObject()
|
||||
if props ~= nil and props.image ~= nil then
|
||||
obj.setName(Global.call("getTokenName", { url=props.image }))
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function onCollisionEnter(collision_info)
|
||||
self.shuffle()
|
||||
self.shuffle()
|
||||
self.shuffle()
|
||||
end
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/w3XbrCC.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "611dee",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "-1",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 4.481,
|
||||
"posY": 2.325,
|
||||
"posZ": -47.023,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/w3XbrCC.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "9e41ec",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "-1",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 14.593,
|
||||
"posY": 2.512,
|
||||
"posZ": -42.215,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/w3XbrCC.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "fb1afd",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "-1",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 0,
|
||||
"posY": 8.712,
|
||||
"posZ": 0,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/bfTg2hb.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "6cda68",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "-2",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -0.536,
|
||||
"posY": 2.319,
|
||||
"posZ": -60.509,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/bfTg2hb.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "8463a5",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "-2",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 2.096,
|
||||
"posY": 2.318,
|
||||
"posZ": -68.845,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/yfs8gHq.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "06b1ba",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "-3",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": -51.858,
|
||||
"posY": 2.036,
|
||||
"posZ": 5.742,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/btEtVfd.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "9ce4ab",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "0",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 0,
|
||||
"posY": 8.712,
|
||||
"posZ": 0,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/btEtVfd.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "bf610b",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "0",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 0,
|
||||
"posY": 8.712,
|
||||
"posZ": 0,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/uIx8jbY.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "20b7fc",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": true,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "+1",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 11.222,
|
||||
"posY": 2.263,
|
||||
"posZ": -12.59,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/lns4fhz.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "233aa2",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "Auto-fail",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 0,
|
||||
"posY": 8.712,
|
||||
"posZ": 0,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
"r": 1
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/VzhJJaH.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "0d2196",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "Cultist",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 0,
|
||||
"posY": 8.712,
|
||||
"posZ": 0,
|
||||
"rotX": 0,
|
||||
"rotY": 315,
|
||||
"rotZ": 0,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"AltLookAngle": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"Autoraise": true,
|
||||
"ColorDiffuse": {
|
||||
"b": 0.04894,
|
||||
"g": 0.32859,
|
||||
"r": 0.37456
|
||||
},
|
||||
"CustomImage": {
|
||||
"CustomTile": {
|
||||
"Stackable": false,
|
||||
"Stretch": true,
|
||||
"Thickness": 0.1,
|
||||
"Type": 2
|
||||
},
|
||||
"ImageScalar": 1,
|
||||
"ImageSecondaryURL": "",
|
||||
"ImageURL": "https://i.imgur.com/lKV3fGU.png",
|
||||
"WidthScale": 0
|
||||
},
|
||||
"Description": "",
|
||||
"DragSelectable": true,
|
||||
"GMNotes": "",
|
||||
"GUID": "079c53",
|
||||
"Grid": true,
|
||||
"GridProjection": false,
|
||||
"Hands": false,
|
||||
"HideWhenFaceDown": false,
|
||||
"IgnoreFoW": false,
|
||||
"LayoutGroupSortIndex": 0,
|
||||
"Locked": false,
|
||||
"LuaScript": "",
|
||||
"LuaScriptState": "",
|
||||
"MeasureMovement": false,
|
||||
"Name": "Custom_Tile",
|
||||
"Nickname": "",
|
||||
"Snap": true,
|
||||
"Sticky": true,
|
||||
"Tooltip": true,
|
||||
"Transform": {
|
||||
"posX": 10.869,
|
||||
"posY": 2.361,
|
||||
"posZ": 34.558,
|
||||
"rotX": 0,
|
||||
"rotY": 270,
|
||||
"rotZ": 180,
|
||||
"scaleX": 0.81,
|
||||
"scaleY": 1,
|
||||
"scaleZ": 0.81
|
||||
},
|
||||
"Value": 0,
|
||||
"XmlUI": ""
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user